LDR és un sensor que llegeix la intensitat de la llum i ofereix una lectura analògica. Quan es connecta als Pins analògics de l’Arduino, el seu valor oscil·la entre 0 i 1023 en funció de la quantitat de llum que rebi.
Materials
- 1 LDR TinkerKit
- 1 cable TinkerKit
O també…
- 1 placa Arduino U
- 1 Shield Bàsica Educativa
- 1 sensor LDR
- 1 resistència 10KOhm
- 3 cables
Instruccions
- Connecta l’LDR al cable TinkerKit LDR.
- Connecta l’altre extrem del cable al port analògic TinkerKit A1 de la Shield.
O també pots connectar una LDR normal:
- Connecta la resistència de 10KOhm entre GND i un Pin analògic (A0 en aquest exemple) de la breadboard.
- Connecta l’LDR entre el Pin analògic i 5V.
Llegir els valors
Per a provar LDR, obre Arxiu -> Exemples -> BasicEducationShield -> Help -> LDRTest.
/* LDR test */ #include <BasicEducationShield.h> //Tinkerkit LDR is connected to analog 1. LDR sensor = LDR(A1); void setup(){ Serial.begin(9600); } void loop(){ //test() prints data to Serial port. sensor.test(); delay(100); }
Puja el programa i obre el monitor serial. Hauries de poder veure les lectures del sensor LDR. Si cobreixes l’LDR, el valor de lectura hauria de ser menor. Si hi projectes llum, el valor hauria de ser major.
No funciona?
- Primer, comprova que les connexions entre els cables, el sensor i la placa són correctes.
- Assegura’t que el sensor està connectat al mateix Pin analògic que has indicat al teu codi.
- Si no s’encén el LED de la part posterior del TinkerKit LDR és perquè, o bé el component està trencat, o bé a l’Arduino no li arriba alimentació.
Nota: Recorda no utilitzar A4 ni A5.
Interruptor
Com que la lectura de l’LDR està fortament influenciada per l’entorn, hauries de calibrar-la abans d’usar-la. Si vols utilitzar l’LDR com a botó, ho podràs fer amb la funció GetState()
.
Per fer-ho, necessites obtenir dues lectures de l’LDR: baseValue
o la lectura de quan res cobreix el sensor, i el llindar. Per a obtenir el llindar, primer has de posar l’objecte desitjat / llum sobre l’LDR, que et donarà el topValue
(valor màxim, en anglès). El llindar és el que triïs entre baseValue
i topValue
.
Quant més a prop estigui el llindar de baseValue
, més sensible serà el teu interruptor LDR, però també és més probable aconseguir més clics falsos.
Obre Arxiu -> Exemples -> BasicEducationShield -> Help -> LDR.
/* LDR */ #include <BasicEducationShield.h> LDR sensor = LDR(A1); void setup(){ Serial.begin(9600); sensor.config(700,900); } void loop(){ Serial.println("Please press..."); //Wait until the LDR gets cover-uncovered. Serial.println(sensor.pressed()); Serial.println("Please press..."); //Wait until the LDR gets uncover-covered. Serial.println(sensor.pressed()); While(true){ //Continuously output whether the sensor has //passed threshold. Serial.println(sensor.getState()); delay(30); } }
En aquest exemple, l’LDR s’usa com un botó. Reemplaça els arguments a sensor.config (700.900)
mitjançant la variable baseValue
i el llindar mesurat prèviament. Carrega el programa i obre el monitor Serial. Si projectes llum sobre el sensor, hauries de veure que el programa ho entén com a “pressionat”.