martes, 21 de enero de 2014

Tutorial - Sensor LDR

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.