Está en la página 1de 7

Cómo Utilizar LDR con Arduino – Fotorresistencia

por Enrique | Oct 20, 2014 | Componentes

En este post te voy a enseñar cómo utilizar LDR con Arduino. Un circuito simple
con este componente te puede resultar muy útil en tus proyectos domóticos (basta
con utilizar tu LDR junto con Arduino y un relé para crear sistemas autónomos),
aunque puedes utilizarlo en cualquier proyecto en el que desees regular actuadores
(motores, relés, etc.) en función de la luz.

Contenidos de este post [ocultar]

 1 Cómo Utilizar LDR con Arduino – Fotorresistencia


o 1.1 Fotorresistenias LDR con Arduino
 1.1.1 Cómo Utilizar LDR con Arduino
 1.1.1.1 Divisor de Tensión
 1.1.1.2 A Mayor Luz, Mayor Voltaje
 1.1.1.3 A Mayor Luz, Menor Voltaje
 1.1.1.4 Divisor de Tensión + Potenciómetro
 1.1.2 Calibrar la Fotorresistencia LDR
 1.1.3 Información Extra
 2 33 Comentarios
Fotorresistenias LDR con Arduino

Las LDR (Light-Dependent Resistor) son resistencias cuyo valor resistivo (Ohmios)
varía en función de la luz que incide sobre ellas. Esto las hace especialmente útiles
cuando deseas realizar un proyecto que depende de la luz ambiente. Sin embargo,
esta no es la única utilidad que le puedes dar a tus LDR con Arduino. Las LDR no
solo se ven afectadas por la luz visible. Su valor resistivo también varía con la
luz infrarroja y ultravioleta.

Las LDR están compuestas generalmente por sulfuro de cadmio (CdS). El cadmio
que contienen reacciona ante la luz, dejando que sus electrones se muevan
libremente, lo que permite el paso de la corriente. Gracias a esto, una
fotorresistencia puede pasar de varios MΩ en ausencia total de luz, a unos pocos
de Ohmios (típicamente 100Ω) cuando recibe luz directa, en décimas de segundo.
Puedes pensar en el comportamiento de las LDR como en el de un potenciómetro
que varía en función de la luz. La variación de la resistividad de este componente
electrónico permite utilizar LDR con Arduino de forma simple ya que, al variar la
resistividad en un circuito, se producen cambios en el voltaje y la corriente que
circulan por él, que no te será difícil gestionar con Arduino.

Cómo Utilizar LDR con Arduino


Para utilizar LDR con Arduino, la opción más simple es crear un divisor de tensión
y analizar con tu microcontrolador las variaciones de voltaje que se producen en tu
circuito.

Divisor de Tensión
Un divisor de tensión es un circuito muy utilizado cuando se quiere regular el voltaje
que le llega a un componente, circuito, etc. Está compuesto generalmente por dos
resistencias en serie, conectadas entre una fuente de tensión (batería, pila…) y
tierra. Cuando conectas entre ambas resistencias el elemento sobre el que deseas
obtener un voltaje específico, basta con que encuentres los valores de ambas
resistencias que te proporcionan dicha tensión.
Nota: En este post tienes un ejemplo clásico del uso de divisores de tensión.
La idea en este caso es que una de esas resistencias sea tu LDR. Como ves, utilizar
LDR con Arduino es realmente simple. Sin embargo, en función de dónde coloques
tu LDR (cuál de las dos resistencias de tu divisor de tensión sea la fotorresistencia)
y del valor de la otra resistencia, tus resultados variarán.

Un factor que mucha gente no tiene en cuenta cuando realiza un divisor de


tensión es la corriente. No te preocupes, lo verás más adelante. Al ser un tema
que la mayoría de la gente descuida, quería recordártelo para que a ti no te pase.
Como te he comentado antes, a la hora de realizar tu divisor de tensión, tienes
varias opciones:

A Mayor Luz, Mayor Voltaje


Si conectas tu LDR con la fuente de voltaje, cuanta más luz incida sobre tu
fotorresistencia, menor será la diferencia de potencial (caída de voltaje) que tendrás
entre la fuente y tu Arduino, con lo que placa de Arduino leerá un valor mayor.

De la misma forma, cuanto mayor sea la otra resistencia (que en este caso va
conectada a tierra) mayor será la caída de voltaje que tendrás entre tu Arduino y
tierra. Como en tierra (GND) tienes 0V y eso no varía, cuanto mayor sea la
resistencia, mayor será el valor de tensión que llegará a tu placa.

En el caso de la corriente el planteamiento es similar. Si incide una gran cantidad


de luz sobre tu LDR, su resistencia se reducirá y la corriente que llegará a tu
microcontrolador será mayor. Si la otra resistencia (la que está a tierra) es grande,
dificultará el paso de la corriente a través de ella, y esta pasará por tu placa
Arduino.Si esto que te acabo de contar te parece un poco lioso, échale un ojo a
la ley de Ohm. Apúntala en un papel y empieza a jugar con los términos, verás
como te aclaras enseguida (si no, recuerda que puedes preguntar lo que quieras al
final de este artículo).
A Mayor Luz, Menor Voltaje
Si la explicación anterior te ha quedado clara, entenderás rápidamente el
funcionamiento de este circuito (en caso contrario, y a riesgo de que me llames
pesado, pregunta tus dudas en la sección de comentarios al final del post). Es
justo el comportamiento opuesto al anterior, así que no creo que haga falta que
entre en detalles.

Tanto si te decides por utilizar la primera opción como la segunda, puedes modificar
el comportamiento de tu circuito mediante código, es decir, puedes conectar tu LDR
a la fuente de voltaje y conseguir que tu sistema se comporte como si la hubieses
conectado a tierra. Esto hace mucho más flexible el tipo de circuito que puedes
montar al utilizar LDR con Arduino.

Divisor de Tensión + Potenciómetro


Una mejora simple a cualquiera de las dos configuraciones anteriores es la
incorporación de un potenciómetro. De nuevo, tienes varias opciones:
 Puedes sustituir tu resistencia (la resistencia normal, no la LDR) por un
potenciómetro, con lo que podrías fácilmente modificar tu sistema si vas a cambiarlo
de sitio a otro en el que la cantidad de luz sea diferente. Así evitarías tener que
modificar el código de tu Arduino.
 Si la fuente con la que alimentas tu divisor de tensión tiene un voltaje elevado, es
posible que a tu Arduino le lleguen demasiados voltios (con lo que podrías
destruirlo). Poniendo un potenciómetro entre tu divisor de tensión y tu placa Arduino
puedes regular de forma más precisa la tensión que le llega al
microcontrolador. Esto también puedes hacerlo con una resistencia estándar.
Sin embargo, puede ser útil utilizar un potenciómetro si tu fuente se gasta, es decir,
si tienes una pila o batería que, con el transcurso del tiempo, va reduciendo el voltaje
que le proporciona a tu circuito. A medida que la batería se va gastando, tú vas
reduciendo la resistividad de tu potenciómetro.

Calibrar la Fotorresistencia LDR


Cuando utilizas LDR con Arduino (de la misma forma que cuando utilizas cualquier
componente o sensor analógico), lo que haces es medir el voltaje que llega a tu
placa y convertirlo en un valor digital.

La mayor parte de las placas Arduino trabajan con un rango de voltaje de entre 0V
y 5V (de ahí que te tengas que asegurar que en tu circuito el máximo voltaje que
puede llegar desde tu divisor de tensión a tu microcontrolador es 5V) y convierten
el valor analógico que les llega a un valor digital entre 0 y 1024.

Para conseguir que esta conversión sea lo más eficiente posible (lo que te
proporcionará una mayor precisión), puedes delimitar mediante código los valores
máximos y mínimos de luz con los que va a trabajar tu sistema de modo que la
conversión Voltaje/Valor Digital mejore, es decir, que entre 0 y 1024 solo haya
valores probables de luz y no estés dedicando parte de esos valores a cantidades
de luz con las que realmente tu circuito no va a trabajar (por ejemplo, es absurdo
dedicar parte de los valores del rango entre 0 y 1024 a valores de luz que
corresponden a estar iluminando tu LDR con una linterna si en la práctica no va a
recibir más que la luz solar).
Aquí tienes un ejemplo de código que cumpliría esta función:
//Cómo Utilizar LDR con Arduino – Calibrando la LDR”>
// Variable que almacena temporalmente los valores del rango de funcionamiento
int ValorLDR;
// variable que almacena el valor mínimo del rango de valores 0-1024
int Valormin = 1023;
// variable que almacena el valor máximo del rango de valores 0-1024
int Valormax = 0;
//Nota: Es posible que sea necesario modificar los valores iniciales de Valormin y
Valormax
//en función de la configuración de divisor de tensión que se haya utilizado
//Variable que almacena el tiempo en milisegundo durante el que se desea que el
//sistema esté calibrando
int TCal=5000; // 5000 = 5segundos
//Se utiliza el LED del pin 13 para conseguir una visualización clara del tiempo
//durante el cual se está calibrando el circuito
const int LEDPin = 13;
void setup() {
//Se establece LEDPin como salida y se le da un valor lógico alto para que el LED
//brille
pinMode(LEDPin, OUTPUT);
digitalWrite(LEDPin, HIGH);
//Se utiliza un bucle con el tiempo que se desea que el sistema esté calibrando.
//La función millis() cuenta el tiempo que ha transcurrido desde que se enciende
//la placa Arduino
while (millis() < TCal) {
//Se almacena el valor actual del sensor
ValorLDR = analogRead(A0);
//Se supone que el divisor de tensión está conectado a A0. Puede cambiarse esta
//conexión a cualquier otra entrada analógica. Basta con modificar la variable
//leída en la función analogRead()
//Si el valor de la última comprobación es mayor que el que había guardado
//hasta el momento, se actualiza la variable
if (ValorLDR > Valormax) {
Valormax = ValorLDR;
}
//Si el valor de la última comprobación es menor que el que había guardado
//hasta el momento, se actualiza la variable
if (ValorLDR < Valormin) {
Valormin = ValorLDR;
}
}
//Se apaga el LED del pin 13 para que se aprecie la finalización del calibrado
digitalWrite(LEDPin, LOW);
}
Espero que no te cueste demasiado comprender el código (de nuevo, pregunta
cualquier duda). Está pensado para que puedas copiarlo fácilmente a tu sketch de
modo que, con unas pocas modificaciones, te sea simple utilizar LDR con Arduino
de forma eficiente. No he querido poner un código para un proyecto concreto para
que te resulte más cómodo adaptarlo a tu proyecto.
Seguro que son muchas las mejoras que se le pueden hacer a este código. Si
conoces alguna te animo a comentarla al final de este post.

Información Extra

Llegados a este punto, no deberías tener ningún problema a la hora de utilizar LDR
con Arduino. A partir de aquí (como me gusta decir) el límite es tu imaginación. Sin
embargo, hay algunos tips que pueden ayudarte:
 Si todavía no tienes tus Fotorresistencias, puedes hacerte con un pack de 10 por
menos de 1€ (1.28$) en este link.
 En función de la fuente con la que alimentes tu divisor de tensión, debes elegir unos
componentes u otros. No me refiero únicamente a los Ohmios de tus resistencias.
Tienes que asegurarte de que tus componentes pueden disipar la potencia a la que
los estás sometiendo y que la corriente que entra a tu Arduino es menor que 40mA
(puedes encontrar más información sobre esto a lo largo de este post).
 Si la fuente de alimentación que utilizas tiene un voltaje menor a los 5V con los que
trabaja tu microcontrolador, sucede algo similar a lo que viste acerca del proceso de
calibrado de la LDR. Como trabajas a menos de 5V pero el rango de valores digitales
(0-1024) sigue estando pensado para una entrada entre 0V y 5V, estás perdiendo
precisión. Puedes evitar esto conectando al pin de tu placa Aref tu voltaje de trabajo
(el de la fuente que estés utilizando), con esto y la función de
Arduino analogReference(EXTERNAL); (dentro del setup de tu código) puedes
conseguir que el rango de valores digitales (0-1024) se reparta entre 0V y la tensión
de tu fuente (Vcc).
 Durante todo este artículo te he estado hablando de conectar tu divisor de tensión
a una fuente externa. Esto se debe a que quería que esta entrada fuese lo más
genérica posible. Sin embargo, la fuente que alimenta tu divisor de tensión puede
ser tu propia placa de Arduino. Si este es tu caso, puedes despreocuparte de tener
tensiones o corrientes demasiado elevadas y bastaría con utilizar componentes que
disipen 0.25W (que es el valor comercial más común).
 Si la luz que va a incidir sobre tu circuito varía rápidamente y no quieres que tu
sistema se vea muy afectado por ello, puedes utilizar un condensador (puedes leer
más acerca de este componente en este artículo) cuyo tiempo de carga y descarga
ralentice el proceso.
 En el caso contrario al anterior, debes tener en cuenta que las LDR no responden
bien a los cambios bruscos de luz (suelen tardar entre 10ms y 20ms en
adaptarse). Si necesitas que tu circuito responda más rápidamente a los cambios,
puedes utilizar un fotodiodo.

También podría gustarte