LDR

Ahora vamos a aprender acerca de un sensor analógico real. El LDR, es una resistencia dependiente de la luz (sus siglas provienen del inglés Light Dependent Resistor), detecta la luminosidad y según la cantidad de luz que le llegue, el sensor devolverá un valor analógico diferente. Puedes hacer cosas muy interesantes con ella, como una lámpara que se enciende automáticamente cuando la habitación se oscurece o que un robot siga una linterna… pero vamos a empezar por lo básico.

Consigue un sensor LDR TinkerKit y un cable TinkerKit y conéctalos entre sí. Luego conecta el otro extremo del cable al puerto analógico de tres pins TinkerKit A1 en la shield Básica Educativa.

Ahora coge un LED y una resistencia de 220 ohm, conecta el LED al Pin 10 como se describió en ejercicios anteriores.

Sube el código que sigue, y experimenta un poco con el sensor LDR. Apúntalo a la luz o cúbrelo con tu mano. Observa cómo se comporta el LED.

int ledPin=10;
int ldrPin=A1;void setup() {
//nothing here
}void loop() {
int ldrValue=analogRead(ldrPin);
int ledValue=map(ldrValue,0,1023,0,255);

analogWrite(ledPin, ledValue);
delay(10);
}

Los comandos usados son:

  • map(valor, desdeBajo, desdeAlto, hastaBajo, hastaAlto): Reasigna un número de un rango a otro. valor es el valor que queremos reasignar.desdeBajo y desdeAlto son el valor mínimo y máximo que el  valor puede tomar. En este caso desde 0 a 1023. hastaBajo y hastaAlto son el mínimo y el máximo valor que queremos. En este caso, desde 0 hasta 255.

Utilizamos analogRead() para leer el valor del LDR, cuyo rango va de 0 a 1023. Entonces usamos la función map() para transformar dicho valor de forma que el nuevo sea proporcional a un valor entre 0 y 255. Si ldrValue es 1023, ledValue será 255, si ldrValue es 512 ledValue será 127. Una vez el valor haya sido reasignado, lo utilizamos para encender el LED. El LED se hará oscuro o luminoso dependiendo de la cantidad de luz que el LDR detecte.

¡Sigue experimentando!

  • Intenta hacer la lámpara automática que hemos mencionado anteriormente. Cuando la lectura del LDR es más baja que un valor concreto o umbral, la luz se enciende. De lo contrario, se apaga. Utiliza un LED para simular la lámpara.
  • ¿Recuerdas el ejemplo Beep de la semana pasada? ¡Haz que funcione con un LDR! Recuerda asignar los valores correctamente.

Calibración de Sensores

El LDR es un sensor fuertemente influenciado por configuraciones exteriores. Es decir, un proyecto con LDR funcionará de manera diferente en diferentes sitios porque la configuración lumínica es diferente. En ocasiones funcionará a la primera pero a veces tendremos que calibrarla para que funcione en lugares diferentes.

Coge la lámpara automática como ejemplo. Digamos que la queremos utilizar para otro propósito. Esta vez, se encenderá si le colocas un trozo de papel sobre la LDR.

Necesitarás experimentar un poco, intenta buscar el umbral para un trozo de papel. ¿Has conseguido que funcione? Muy bien, mueve el LDR por debajo de la mesa, ¿todavía funciona?

Si es que no, probablemente ya sabemos cuál es el problema. El papel no ha cambiado mucho la lectura de la LDR, mientras que la iluminación de tu habitación sí lo ha hecho (al mover el sensor bajo de la mesa). Por lo que necesitarás encontrar una manera mejor de cambiar el umbral dinamicamente.

Ahora busca un potenciómetro y conéctalo a la entrada analógica A5 como en ejercicios anteriores. Reasigna el valor del analogRead() del potenciómetro a 0~255 y utiliza esto como el umbral.

int ledPin=10;
int ldrPin=A1;
int potPin=A5;

void setup() {
  pinMode(ledPin,OUTPUT);
}

void loop() {
  int ldrValue=analogRead(ldrPin);
  int threshold=analogRead(potPin);

  if(ldrValue>threshold){
    digitalWrite(ledPin,LOW);
  }else{
    digitalWrite(ledPin,HIGH);
  }
  delay(10);
}

Ahora, en lugar de ajustar el umbral en el código, puedes hacerlo girando el potenciómetro hasta que el LDR detecte el papel. Prueba a ponerlo otra vez bajo de la mesa y verás cómo de simple y práctico puede ser un potenciómetro que reasigne los valores.

Acabas de aprender una manera de calibrar sensores analógicos, ¡utilízalo cuando construyas tus propios proyectos!