Medir nivel de luz con un LDR (GL55) y Arduino

Medir nivel de luz con un LDR (GL55) y Arduino

 

¿Que es una una fotoresistencia o LDR?

Un fotoresistor, o LDR (light-dependent resistor) es un dispositivo cuya resistencia varia en función de la luz recibida. (En realidad podemos considerarla como una Resistencia, cuya resistividad (valor óhmico) varia con la luz).
Dado a la alto rango de valores (mas de un estado de 0 y 1 como en las entradas digitales), es necesario conectarla a las entradas analógicas del Arduino. (Tal cual si fuera un potenciómetro).

Un fotoresistor está formado por un semiconductor, típicamente sulfuro de cadmio CdS. Al incidir la luz sobre él algunos de los fotones son absorbidos, provocando que electrones pasen a la banda de conducción y, por tanto, disminuyendo la resistencia del componente.

Por tanto, una LDR disminuye su resistencia a medida que aumenta la luz sobre él. Los valores típicos son de 1 Mohm en total oscuridad, a 50-100 Ohm bajo luz brillante.

Consideraciones:

  1. LENTITUD: Es importante tener en cuenta que la variación de la resistencia es relativamente lenta, de 20 a 100 ms en función del modelo. Esta lentitud hace que no sea posible registrar variaciones rápidas, como las producidas en fuentes de luz artificiales alimentadas por corriente alterna. Este comportamiento puede ser beneficioso, ya que dota al sensor de una gran estabilidad.
  2. PRECISION: Tampoco resultan adecuados para proporcionar una medición EXACTA de la iluminancia, es decir, para servir como luxómetro o medidor de intensidad de una luz. Esto es debido a su baja precisión, su fuerte dependencia con la temperatura y, especialmente, a que su distribución espectral no resulta adecuada para la medición de iluminancia.

Conexión:

El circuito de conexión, se basa en una configuración como DIVISOR DE VOLTAJE (o de tensión).
Como vemos, la entrada A0 del Arduino, está conectada a un extremo del LDR que del otro extremo recibe un voltaje de +5v. Pero hacia abajo vemos que existe una resistencia (10K en este caso) que está conectada a tierra (GND).
Podemos deducir entonces que considerando la LDR como una resistencia variable, el voltaje de A0, dependerá del valor óhmico de la LDR.

  • Si el valor óhmico del LDR > Rc, A0 recibirá menos voltaje, pues está mas conectada a GND que a +5v.
  • Si el valor óhmico del LDR < Rc, A0 recibirá mas voltaje, pues está mas conectada a +5V que a GND.

 

PROYECTO 1
Conexión en protoboard y Simulación del LDR

Es importante entender que si bien el pin A0 recibe un voltaje entre 0v y +5v, internamente y al ser una entrada analógica, se interpretará como una señal cuyos valores oscilan entre 0 y 1023. Si se desea averiguar el voltaje que corresponde (por ejemplo para mostrar el voltaje en vez del valor interpretado), se deberá mapear el rango de la señal interpretada.

Código en Arduino

const int LDRPin = A0;   //Pin del LDR
int V;
 
void setup() 
{   Serial.begin(9600);
}
 
void loop()
{  V = analogRead(LDRPin);         
   Serial.print("A0 = ");   
   Serial.println(V);   
   delay(1000);
}

 

 

PROYECTO 2:
Encender un LED según un LDR

 

const int LDRpin = A0;   //Pin del LDR
const int LEDpin = 11;   //Pin del LED
const int Vminimo = 900;  //Valor mínimo por el cual encendemos el LED

int V;
 
void setup() 
{   Serial.begin(9600);
}
 
void loop()
{  V = analogRead(LDRpin);         
   Serial.print("A0 = ");   
   Serial.println(V);  
   if (V > Vminimo) {
      digitalWrite(LEDpin, HIGH);
   }
   else {
      digitalWrite(LEDpin, LOW);
   } 
   delay(500);
}