Un LDR, cuyas siglas se originan de su nombre en inglés light-dependent resistor, es un componente electrónico cuya resistencia disminuye con el aumento de intensidad de luz incidente y viceversa, que también es comúnmente conocido como fotorresistor.
El valor de resistencia eléctrica de un LDR es bajo cuando hay luz incidiendo en él (del orden de 50-100Ω) y muy alto cuando está a oscuras (1 MΩ aproximadamente).
Con este post vamos a ser capaces de controlar el brillo de un LED dependiendo de la cantidad de luz que incide sobre el LDR, es decir, cuando la luz sea máxima el LED permanece apagado, y a medida que la luz ambiente vaya disminuyendo, el LED irá brillando con mayor intensidad, hasta que en ausencia de luz el brillo del LED sea máximo.
Hay que tener en cuenta que debemos de ajustar el valor máximo que el LDR nos va a ofrecer en su salida (conectada al pin analógico A0) cada vez que ejecutamos el programa, puesto que es directamente proporcional a la cantidad de luz máxima que hay en la habitación donde se encuentre y esta no es la misma en todos los casos. Para ello, a través del monitor serie del IDE de Arduino, vamos a poder comprobar en cada momento el valor que tiene la salida del LDR y así poder ajustar sus valores propios (máximo y mínimo) mediante programación. Siempre pondremos un valor por debajo del valor máximo que el LDR nos ofrece en su salida.
El valor mínimo que el LDR ofrece en su salida, que se obtiene tapando la célula del LDR y este valor solo es necesario ajustarlo una vez para cada LDR diferente que vayamos a utilizar, puesto que ninguno es igual a otro al 100%.
Lista de Materiales
- Arduino UNO Rev.3
- Cable USB tipo A-B
- LED 5mm (de cualquier color)
- LDR (fotorresistor)
- Resistencias de 10KΩ y 220Ω
- Protoboard
- Cables de conexión
Código del programa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
/* TITULO: Control del brillo de un LED a través de un LDR. AUTOR: MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia - TWITTER: https://twitter.com/MarianoCampoGa - CORREO: [email protected] DESCRIPCIÓN DEL PROGRAMA Con este programa controlamos el brillo de un LED a través de un LDR (fotorresistor). Con luz máxima, el LED permanece apagado y a medida que la luz disminuye, el brillo del LED aumenta, para que a oscuras el brillo del LED sea máximo. ESQUEMA DE CONEXION +-----+ +----[PWR]-------------------| USB |--+ | +-----+ | | GND/RST2 [ ][ ] | | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | | 5V/MISO2 [ ][ ] A4/SDA[ ] | | AREF[ ] | | GND[ ] | | [ ]N/C SCK/13[ ] | | [ ]IOREF MISO/12[ ] | | [ ]RST MOSI/11[ ]~| LED(+) | [ ]3V3 +---+ 10[ ]~| | [ ]5v -| A |- 9[ ]~| | [ ]GND -| R |- 8[ ] | | [ ]GND -| D |- | | [ ]Vin -| U |- 7[ ] | | -| I |- 6[ ]~| LDR(B) | [ ]A0 -| N |- 5[ ]~| | [ ]A1 -| O |- 4[ ] | | [ ]A2 +---+ INT1/3[ ]~| | [ ]A3 INT0/2[ ] | | [ ]A4/SDA RST SCK MISO TX>1[ ] | | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] | | [ ] [ ] [ ] | | UNO_R3 GND MOSI 5V ____________/ \_______________________/ NOTAS: - Cátodo(-) del LED (pata más corta) a GND a través de una R=220 omhs. - Los LDR tienen dos terminales (intercambiables entre sí), que vamos a denominar LDR(A) y LDR(B). - Conexión de los terminales del LDR: - LDR(A) conectado a +5V (VCC). - LDR(B) conectado a GND a través de una R=10K omhs. */ int LDR = 0; // PIN analógico A0 para la foto resistencia (LDR) int LED = 11; // PIN digital para el LED int valor; // Variable que acumula el valor de la entrada analógica A0 // Ajuste de los valores propios, máximo y mínimo, del LDR. int maximo = 600; // Valor máximo que da la foto-resistencia en A0 (con plena luz) int minimo = 470; // Valor mínimo que da la foto-resistencia en A0 (sin luz) void setup() { Serial.begin(9600); // Inicializa la comunicación serie pinMode(LED, OUTPUT); // PIN digital 11 como salida } void loop() { // Leemos el valor del LDR valor = analogRead(LDR); // Limitamos el valor entre el máximo y el mínimo valor = constrain(valor, minimo, maximo); // Mostramos a través del monitor serie el valor para ajustar máx y min. Serial.println(valor); // Acomodamos el valor leído y ajustado, a un valor proporcional entre 0 y 255 // - Cuando hay plena luz (máximo) --> Valor = 0 // - Cuando no hay luz (mínimo) --> Valor = 255 valor = map(valor, maximo, minimo, 0, 255); // Aplicamos el valor obtenido a un LED mediante PWM analogWrite(LED, valor); } |