Com has après anteriorment, els senyals digitals només tenen dos estats oposats: 1 o 0. Si prems un botó, el seu estat canviarà de l’un a l’altre. Un LED està encès o apagat.
Ara bé: el món real no és digital. L’aigua, per exemple, no només pot estar calenta o freda; també pot estar tèbia. Per poder mesurar això i altres coses del món real, no podem utilitzar només senyals digitals. Enlloc d’això, farem servir senyals analògics.
En comptes de 2 estats oposats, els senyals analògics tenen nivells continus. D’aquesta manera, per exemple, si tens un sensor de llum pots obtenir molts valors diferents que expressin com està il·luminada una habitació i no només si està clara/fosca. Per posar un altre exemple: un termòmetre et diu la temperatura mitjançant un número, enlloc de dir-te només freda/calenta.
Amb l’Arduino pots obtenir els valors analògics amb els Pins analògics. Sobre la placa pots veure un grup de Pins marcats com a analog in, que porten el nom d’A0 a A5. Quan se’ls aplica tensió, reporten valors d’entre 0 i 1023; d’aquesta manera, quan no hi ha voltatge en un Pin, la lectura és 0. Si els apliques 5V, la lectura serà 1023. Amb una entrada de 2.5V, obtindràs 512. Per llegir aquests valors des d’un Pin analògic has d’utilitzar la funció analogRead()
, enlloc de digitalRead()
.
Per seguir explicant els senyals analògics, necessitem introduir el potenciòmetre. Un potenciòmetre és un control que funciona mitjançant el gir d’un braç. Per exemple, el regulador de volum d’un estèreo és un potenciòmetre. Amb dos Pins exteriors al potenciòmetre, connectats a GND i 5V respectivament, pots utilitzar el potenciòmetre per controlar la quantitat de tensió que vols que hi hagi al Pin central, sempre dins el rang de 0V a 5V.
Aquí experimentarem una mica utilitzant un potenciòmetre per controlar el parpelleig d’un LED. Connecta el Pin central del potenciòmetre al Pin analògic A5; els altres Pins connecta’ls a 5V i GND. Utilitzarem el LED on-board, inclòs a la placa, com a sortida.
int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); } void loop() { int val = analogRead(A5); digitalWrite(ledPin, HIGH); delay(val); digitalWrite(ledPin, LOW); delay(val); }
Pots trobar una nova ordre:
analogRead (pinNumber)
: Aquesta ordre agafa la lectura d’un Pin analògic especificat per la variablepinNumber
, que pot ser des d’A0 fins a A5. El valor llegit variarà entre 0 (0V) i 1023 (5V).- Els Pins analògics només es poden utilitzar com a entrades, per la qual cosa no és necessari declarar el Pin mode al
setup
.
La lectura del potenciòmetre connectat al Pin analògic A5 canviarà el temps de retard, delay, i, per tant, la velocitat amb la qual parpelleja el LED on-board del Pin 13. Quan giris el braç del potenciòmetre, podràs veure el canvi en la freqüència de parpelleig.
Continua experimentant!
- El valor d’
analogRead()
té 1024 nivells (entre 0 i 1023). Se t’acudeix alguna manera de processar un valor utilitzant menys nivells? Imagina’t que només necessitem 10 valors diferents, mantenint 0V com 0 però 5V com 10 enlloc de 1023. (SUGGERIMENT: Busca una funció anomenadamap()
a la referència de l’Arduino.) - Què passa si redueixes el nombre de nivells d’
analogRead
a només 2 (efectivament, 0 i 1)? Intenta-ho aplicar a l’exemple del botó digital. Creus que has entès la relació entre els senyals analògics i els digitals?