En este tutorial vamos a ver cómo encender un LED con una fotorresistencia.
En un artículo anterior vimos qué es una fotorresistencia y como conectarla con Arduino. Si no has leído el artículo, es este: Fotorresistencias
Lo que vamos a hacer ahora es conectar un LED al circuito que vimos en ese articulo y encenderlo cuando la intensidad de la luz ambiental sea muy baja y apagarlo cuando la luz tenga mayor intensidad.
Materiales
Estos con todos los componentes que necesitamos para realizar este tutorial:
Una placa Arduino (Yo usaré Arduino UNO) | ||
Un led de 5 mm | ||
Una fotorresistencia (LDR) | ||
Una resistencia de 330Ω | ||
Una resistencia de 10KΩ | ||
Cables | ||
Una protoboard | ||
Un ordenador con el IDE de Arduino instalado |
Conexiones
El circuito que utilizaremos para encender el LED con la fotorresistencia es el siguiente:
Es el mismo circuito que usamos en el tutorial anterior, pero he añadido un LED. De todos modos vamos a comentar las conexioens.
Por un lado tenemos un LED. Su ánodo (pata larga, positivo) va conectado al pin digital 2. Su cátodo (pata corta, negativo) va conectado, con una resistencia de 330Ω, a GND. Si tienes dudas sobre cómo conectar un LED con Arduino echa un ojo a este tutoral: Cómo conectar un LED con Arduino.
El otro elemento que tenemos conectado a nuestro Arduino es la fotorresistencia. Va conectada en serie con una resistencia de 10kΩ para formar un divisor de tensión. Si no sabes cómo conectar una fotorresistencia con Arduino echa un ojo a este tutorial: Cómo conectar una fotorresistencia con Arduino.
El punto en el que se conectan ambas resistencias (la fotorresistencia y la resistencia de valor fijo) es la salida del divisor de tensión:
El valor generado en esta salida se envía como entrada al Arduino a través del pin analógico 3 (A3). Si prefieres usar otro pin analógico, adelante, no hay ningún problema.
La fotorresistencia (R1) es la que va conectada a 5V y la resistencia de valor fijo (R2) va conectada a GND.
El circuito no tiene mucho más, vamos con el sketch.
Sketch
Vamos a hacer dos versiones del sketch. En la primera ignoraremos el LED. Simplemente mediremos los valores que recibe el Arduino a través del pin analógico 3. De esta forma conoceremos los valores umbrales que usaremos de referencia para identificar la intensidad de la luz.
En la segunda versión del sketch interpretaremos los valores leídos para encender o apagar el LED.
Bueno, pues vamos a por la primera versión:
//declaraciones
const int FR = A3;
int entrada = 0;
//configuración
void setup() {
Serial.begin(9600);
}
//función loop
void loop() {
entrada = analogRead(FR);
Serial.println(entrada);
delay(500);
}
Es literalmente el mismo sketch que vimos en el tutorial anterior. Vamos a repasarlo rápidamente para tener la idea base clara.
Declaraciones
En las declaraciones tenemos una constante llamada FR que representa el pin analógico 3, por eso le asigno A3. Recuerda que en este pin está conectada la fotorresistencia.
Por otro lado, tenemos una variable entera llamada entrada con valor inicial 0. Esta variable nos servirá para almacenar el valor que entre por el pin A3.
Configuración
En cuanto a la configuración, tenemos que inicializar el puerto serie dentro de la función setup: Serial.begin(9600). Lo necesitaremos para ver en el monitor serie los valores recibidos en el pin A3 e identificar los valores que entrarán en el Arduino en función de la intensidad de la luz.
Función loop
Por último, tenemos la función loop. En ella, simplemente tenemos que leer el valor del pin A3 utilizando analogRead(FR). El resultado lo almacenamos en la variable entrada para poder mostrarlo en el monitor serie justo a continuación con la instrucción Serial.println(entrada).
Como la función loop se repite de forma infinita, la instrucción delay(500) hará que se haga una lectura del pin A3 cada medio segundo (500ms).
Ahora ejecuta el sketch en tu Arduino con el circuito anterior conectado y abre el monitor serie para ver los resultados.
Primero deja la fotorresistencia descubierta para que incida sobre ella la luz ambiental. En mi caso el resultado que veo en el monitor serie es este:
Como puedes apreciar, los valores registrados están comprendidos entre 430 y 450. Para simplificar, diremos que están por encima de 400.
En tu caso esto puede variar, depende de la fotorresistencia que estés utilizando y de la cantidad de luz que haya en la estancia. Indistintamente verás que los valores que obtienes están dentro de un rango que se puede identificar.
Ahora tapa la fotorresistencia para reducir la luz que incide sobre ella lo máximo posible. Yo he utilizado un trozo de tela bastante grueso. Simplemente lo he colocado encima sin hacer ningún tipo de presión.
Ahora en el monitor serie veo esto:
Los valores son mucho menores porque el valor de la resistencia ha aumentado y entra en el Arduino menor voltaje.
Analizando mis resultados veo que todos están por debajo de 50. En tu caso esto puede cambiar, pero tendrá que ser un valor menor al que mediste antes de tapar la fotorresistencia.
Bien, ya tenemos dos valores de referencia: el 50 y el 400. Podríamos decir que por debajo de 50 estamos en total oscuridad, y por encima de 400 la iluminación es la máxima.
Si pensamos en un escenario real, querremos que el LED se encienda antes de alcanzar la máxima oscuridad, por lo que elegiremos un valor comprendido entre 50 y 400 como referencia. Cuando entre un valor inferior al elegido encenderemos el LED y cuando entre un valor superior lo apagaremos. Por ejemplo, el 100. Si prefieres probar con otro, adelante.
El sketch quedaría de la siguiente forma:
//declaraciones
const int FR = A3;
int entrada = 0;
const int LED = 2;
//configuración
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
}
//función principal
void loop() {
entrada = analogRead(FR);
Serial.println(entrada);
if (entrada < 100){
digitalWrite(LED, HIGH);
}else{
digitalWrite(LED, LOW);
}
delay(500);
}
He añadido, en las declaraciones, una constante a la que he llamado LED para identificar el pin digital en el que está conectado el LED. En este caso, el pin 2.
Dentro de la función setup he incluido la instrucción pinMode(LED, OUTPUT) para configurar el pin 2 digital como salida.
Y por ultimo, he modificado un poco la función loop. Basicamente he incluido la lógica que he descrito antes. Cuando el valor guardado en la variable entrada esté por debajo de 100 se enciende el LED. De esta comprobación se encarga la instrucción if (entrada<100). Si es true se ejecuta digitalWrite(LED, HIGH).
Si la instrucción if es false, significa que el valor recibido a través del pin A3 (FR) es superior o igual a 100. En este caso se ejecuta el bloque else y se apaga el LED: digitalWrite(LED, LOW).
Igual que antes, se realiza una nueva comprobación cada medio segundo gracias a la instrucción delay (500).
Ahora ejecuta de nuevo el sketch y repite las pruebas anteriores. Primero deja la fotorresistencia descubierta. En este caso el LED permanecerá apagado.
Ahora tapa la fotorresistencia igual que antes y verás como el LED se ilumina.
Espero que te haya funcionado. Para seguir practicando haz diferentes pruebas con diferentes intensidades de luz.
¡Suscríbete a la newsletter y no te pierdas nada!
Te avisaré cuando publique nuevo contenido en paraarduino.com y en mi canal de YouTube (@ParaArduino).