Antes
de empezar con el tutorial, es necesario saber que un sensor LDR es un
componente electrónico pasivo cuyo valor de la resistencia varía en función de
la luz que recibe. Cuanta más luz reciba, el valor de su resistencia será
menor.
![]() |
Sensor LDR |
Material
que necesitaremos:
- Placa
breadboard - 5 Diodos
LED - 5
resistencias de 220 Ω - 1 LDR (resistencia
dependiente de luz) - 1
potenciómetro 50kΩ (uno de 10kΩ también
podría ser útil) - 1
resistencia de 1kΩ - Cables
Procedimiento a
realizar:
Se conectarán 5 LED
que irán encendiéndose dependiendo del dicho valor de resistencia, ligado
inversamente con la cantidad de luz, de forma que conforme vaya disminuyendo la
cantidad de luz, se irán encendiendo los LED de forma progresiva.
Un ejemplo típico podría ser la utilización en farolas urbanas que van
encendiéndose conforme va anocheciendo.
El circuito
distribuido en la breadboard podría tener esta forma:
Vayamos por partes.
Primero concretamos
los pines que vamos a utilizar para los LED. Por orden, utilizaremos el 12, 11,
10, 9 y 8. Unidos mediante un cable a la breadboard, colocamos las resistencias
de 220 Ω puesto que podríamos quemar los diodos por un exceso de calor.
El potenciómetro, por
otro lado, es una resistencia variable que dispone de tres patillas: entre las
dos de sus extremos existe siempre un valor fijo de resistencia, y entre
cualquiera de esos extremos y la patilla central tenemos una parte de ese valor
máximo. Es decir, la resistencia máxima que ofrece el potenciómetro entre sus
dos extremos no es más que la suma de las resistencias entre un extremo y la
patilla central, y entre la patilla central y el otro extremo.
Lo utilizamos para determinar el valor mínimo de la luz que es capaz de
detectar el sensor LDR, de forma que cuando vayamos a ponerlo en marcha debemos
regularlo para un correcto funcionamiento. Si ponemos el valor de la referencia
muy baja, empezarán a funcionar los LED con menos luz ambiente que si ponemos
una referencia elevada.
De forma práctica, conectaremos la patilla central al pin AREF (ofrece un voltaje de referencia externo para
poder aumentar la precisión de las entradas analógicas) que luego le diremos al
programa que lo vamos a usar como referencia externa (moverlo manualmente según
el valor mínimo de luz que queramos detectar). Mientras que cada patilla la
conectaremos al ánodo y al cátodo (la patilla de la izquierda al cátodo, y la
de la derecha al ánodo) de la breadboard para unirlo con el sensor y los LED.
Para el sensor, la
señal que recibe es una señal analógica que obtenemos del exterior para
transformarla en digital, por lo que colocaremos el cable de entrada en un pin
analógico, A0 en nuestro caso. Al colocar la resistencia de 1kΩ en la parte de
arriba del sensor, estamos creando un divisor de tensiones, de manera que
cuanta más luz haya, más tensión tendremos a la entrada de nuestra entrada
analógica.
Quedando finalmente
el montaje de la siguiente manera:
Nos queda escribir el código que le pasaremos al arduino (copiar y pegar):
//Aquí almacenamos los datos recogidos del LDR:
int valorLDR = 0;
//Decimos que pines vamos a utilizar para LED
int pinLed1 = 12;
int pinLed2 = 11;
int pinLed3 = 10;
int pinLed4 = 9;
int pinLed5 = 8;
//Y que pin para la LDR
int pinLDR = 0;
void setup()
{
//Establecemos como salida los pines para LED
pinMode(pinLed1, OUTPUT);
pinMode(pinLed2, OUTPUT);
pinMode(pinLed3, OUTPUT);
pinMode(pinLed4, OUTPUT);
pinMode(pinLed5, OUTPUT);
//Le decimos que vamos a usar una referencia externa
analogReference(EXTERNAL);
}
void loop()
{
//Guardamos el valor leido en una variable
valorLDR = analogRead(pinLDR);
//Y comenzamos las comparaciones:
if(valorLDR >= 1023)
{
digitalWrite(pinLed1, LOW);
digitalWrite(pinLed2, LOW);
digitalWrite(pinLed3, LOW);
digitalWrite(pinLed4, LOW);
digitalWrite(pinLed5, LOW);
}
else if((valorLDR >= 823) & (valorLDR < 1023))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, LOW);
digitalWrite(pinLed3, LOW);
digitalWrite(pinLed4, LOW);
digitalWrite(pinLed5, LOW);
}
else if((valorLDR >= 623) & (valorLDR < 823))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, LOW);
digitalWrite(pinLed4, LOW);
digitalWrite(pinLed5, LOW);
}
else if((valorLDR >= 423) & (valorLDR < 623))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, HIGH);
digitalWrite(pinLed4, LOW);
digitalWrite(pinLed5, LOW);
}
else if((valorLDR >= 223) & (valorLDR < 423))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, HIGH);
digitalWrite(pinLed4, HIGH);
digitalWrite(pinLed5, LOW);
}
else
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, HIGH);
digitalWrite(pinLed4, HIGH);
digitalWrite(pinLed5, HIGH);
}
}
Para finalizar,
mostramos un vídeo aclaratorio del correcto funcionamiento:
Y esto es todo. No dudéis en comentar y en preguntar cualquier duda.
Gracias por la atención.
I.