Ara treballarem amb un sensor analògic real. L’LDR és una resistència que depèn de la llum (les seves sigles provenen de l’anglès Light Dependent Resistor). Detecta la lluminositat i, segons la quantitat de llum que li arribi, retornarà un valor analògic diferent. Es poden fer coses molt interessants amb l’LDR, com ara una làmpada que s’encén automàticament quan una habitació s’enfosqueix o un robot que sigui una llanterna. Però comencem pel més bàsic.
Aconsegueix un sensor LDR TinkerKit i un cable TinkerKit i connecta’ls entre si. Després, connecta l’altre extrem del cable al port analògic de tres Pins TinkerKit A1 a la Shield Bàsica Educativa.
Ara agafa un LED i una resistència de 220 ohm. Connecta el LED al Pin 10 com hem descrit en exercicis anteriors.
Puja el codi que hi ha a continuació i experimenta una miqueta amb el sensor LDR. Enfoca’l a la llum o cobreix-lo amb la mà. Observa com es comporta el LED.
int ledPin=10; int ldrPin=A1;void setup() { //nothing here }void loop() { int ldrValue=analogRead(ldrPin); int ledValue=map(ldrValue,0,1023,0,255); analogWrite(ledPin, ledValue); delay(10); }
Les ordres utilitzades són:
map(valor, desdeSota, desdedalt, finsAbaix, finsAdalt)
: Reassigna un número d’un rang a un altre.valor
és el valor que volem reassignar.desdeBaix
idesdedAlt
són el valor mínim i màxim que pot tenir elvalor
. En aquest cas, de 0 a 1023.finsAbaix
ifinsAdalt
són el mínim i el màxim valor que vulguem. En aquest cas, de 0 fins a 255.
Utilitzem analogRead()
per llegir el valor de l’LDR, el rang del qual va de 0 a 1023. Llavors, utilitzem la funció map()
per transformar aquest valor de manera que el nou sigui proporcional a un valor entre 0 i 255. Si ldrValue
és 1023, ledValue
serà 255; si ldrValue
és 512, ledValue
serà 127. Un cop el valor hagi estat reassignat, l’utilitzem per encendre el LED. El LED s’enfosquirà o s’il·luminarà segons la quantitat de llum que detecti l’LDR.
Continua experimentant!
- Intenta fer la làmpada automàtica que hem mencionat anteriorment. Quan la lectura de l’LDR és més baixa que un valor concret o llindar, la llum s’encén. En cas contrari, s’apaga. Utilitza un LED per simular la làmpada.
- Recordes l’exemple Beep de la setmana passada? Fes que funcioni amb un LDR! Recorda assignar els valors correctament.
Calibrament de Sensors
L’LDR és un sensor fortament influït per configuracions exteriors. És a dir, un projecte amb LDR funcionarà de manera diferent en llocs diferents perquè la configuració llumínica serà diferent. En ocasions funcionarà d’entrada, però a vegades haurem de calibrar-la perquè funcioni en llocs diferents.
Agafa la làmpada automàtica com a exemple. Imaginem que la volem utilitzar per un altre propòsit. Aquesta vegada, s’encendrà si li col·loques un tros de paper sobre l’LDR.
Necessitaràs experimentar una mica: intenta buscar el llindar per un tros de paper. Has aconseguit que funcioni? Molt bé. Ara mou l’LDR per sota la taula, encara funciona?
Si no és així, probablement ja sabem quin és el problema. El paper no ha modificat gaire la lectura de l’LDR, mentre que la il·luminació de la teva habitació sí que ho ha fet (en moure el sensor sota la taula). Necessitaràs trobar una millor manera de canviar el llindar dinàmicament.
Ara busca un potenciòmetre i connecta’l a l’entrada analògica A5 com en exercicis anteriors. Reassigna el valor de l’analogRead()
del potenciòmetre a 0~255 i utilitza això com a llindar.
int ledPin=10; int ldrPin=A1; int potPin=A5; void setup() { pinMode(ledPin,OUTPUT); } void loop() { int ldrValue=analogRead(ldrPin); int threshold=analogRead(potPin); if(ldrValue>threshold){ digitalWrite(ledPin,LOW); }else{ digitalWrite(ledPin,HIGH); } delay(10); }
Ara, enlloc d’ajustar el llindar al codi, ho pots fer girant el potenciòmetre fins que l’LDR detecti el paper. Intenta posar-lo una altra vegada sota la taula i veuràs fins a quin punt un potenciòmetre que reassigni els valors pot ser simple i pràctic.
Acabes d’aprendre una manera de calibrar sensors analògics. Utilitza-la quan construeixis els teus propis projectes!