LDR es un sensor que lee la intensidad de la luz y ofrece una lectura analógica. Cuando se conecta a los Pins analógicos de Arduino, su valor oscila entre 0 y 1023 dependiendo de la cantidad de luz recibida por él.
Materiales
- 1 LDR TinkerKit
- 1 cable TinkerKit
o también puedes…
- 1 placa Arduino Uno
- 1 shield Básica Educativa
- 1 sensor LDR
- 1 resistencia 10KOhm
- 3 cables
Instrucciones
- Conecta el LDR al cable TinkerKit LDR.
- Conecta el otro extremo del cable al puerto analógico TinkerKit A1 en el shield.
o también puedes conectar una LDR normal:
- Conecta la resistencia de 10KOhm entre GND y un Pin analógico (A1 en este ejemplo) de la breadboard.
- Conecta el LDR entre el Pin analógico y 5V.
Leer los valores
Para probar LDR, abre Archivo -> Ejemplos -> 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); }
Carga el programa y abre el monitor serial, deberías poder ver las lecturas del sensor LDR. Si cubres el LDR, el valor de lectura debería ser menor. Si proyectas luz sobre el LDR, la lectura debería ser mayor.
¿No funciona?
- Primero, asegúrate de que las conexiones entre los cables, sensores y la placa son correctas.
- Asegúrate de que el sensor está conectado al mismo Pin analógico que has indicado en tu código.
- Si no se enciende el LED de la parte trasera del TinkerKit LDR, es porque o bien el componente está roto, o a Arduino no le llega alimentación.
Nota: Recuerda no utilizar A4 ni A5.
Interruptor
Debido a que la lectura del LDR está fuertemente influenciada por el entorno, deberías calibrarla antes de usarla. Si quieres usar el LDR como botón, lo podrás hacer con la función GetState()
.
Para esto necesitas obtener dos lecturas del LDR: baseValue
o la lectura cuando nada cubre el sensor; y el umbral. Para obtener el umbral, primero debes poner el objeto deseado / luz sobre el LDR, que te dará el topValue
(que significa valor máximo en inglés). Y el umbral es uno que escojas entre baseValue
y topValue
.
Cuanto más cerca que esté el umbral de baseValue
, más sensible será tu interruptor LDR pero también es más probable obtener más clicks falsos.
Abre Archivo -> Ejemplos -> 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 este ejemplo el LDR se utiliza como un botón. Así que reemplaza los argumentos en sensor.config (700.900)
mediante la variable baseValue
y el umbral medido previamente. Carga el programa y abre el monitor Serial. Si proyectas luz sobre el sensor, deberías ver que el programa lo entiende como “presionado”.