En esta sesión vamos a trabajar con un sencillo sensor que nos va a permitir medir luz en el entorno donde tengamos realizado nuestro montaje, de tal forma que podamos decidir qué acciones a realizar en función de los umbrales de luz u oscuridad que estimemos oportuno.
Un ejemplo de este tipo de sensores es el LDR o fotoresistor, que es un componente cuya resistencia interna va a cambiar en función de la luz percibida. Su comportamiento es el siguiente:
- Mas luz = menor resistencia eléctrica
- Menos luz = mayor resistencia eléctrica
En primer lugar vamos a montar en nuestro Arduino el LDR en solitario para ver qué valores nos da y observar su funcionamiento. En segundo lugar junto con un grupo de leds que se irán apagando a medida que tengamos más luz sobre nuestro LDR.
El montaje es muy sencillo:
- Una pata del LDR a 5V
- La otra a una resistencia
- La otra pata de la resistencia a una entrada analógica en Arduino
El código para comprobar si funciona no tiene misterio. Sólo utilizamos dos instrucciones importantes:
- valorLDR = analogRead(pinLDR); para el valor del LDR en el pin analógico donde lo hemos conectado. Estos valores podrán ir de un rango de 0 a 1023 como máximo.
- Serial.println(valorLDR); para sacar su valor a través del monitor serie y que podamos comprobar visualmente como al acercar la mano al sensor, y por lo tanto el sensor detecta más oscuridad, los valores irán bajando a 0.
//Aquí almacenamos los datos recogidos del LDR:
int valorLDR = 0;
//Y que pin analógico conectarmos el LDR
int pinLDR = A0;
void setup()
{
//inicializamos monitor serie para visualizar valores de LDR
Serial.begin(9600);
}
void loop()
{
//Guardamos el valor leido en una variable
//IMPORTANTE UTILIZAR EL SERIAL PARA VER LOS VALORES Y COMPROBAR QUE RECIBE VALORES BUENOS
valorLDR = analogRead(pinLDR);
Serial.println(valorLDR);
}
Llegado a este punto sólo nos queda retaros para que montéis al menos 5 leds para que a medida que el LDR tenga menos luz se vayan encendiendo todos los leds, y al revés, cuando esté en condiciones lumínicas óptimas estén todos apagados. Un buen consejo que os podemos dar es que primero comprobéis cuales son los valores lumínicos en mejores condiciones. Por norma general es muy difícil que llegue a su tope de 1023, a no ser que uséis una luz muy intensa apuntando directamente al sensor. Con ese valor ya podéis empezar a jugar con los diferentes valores que tendréis que configurar para que se enciendan más o menos leds.
Os dejamos el código para que podáis probar:
//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 analógico conectarmos el LDR
int pinLDR = A0;
void setup()
{
//Establecemos como salida los pines para LED
pinMode(pinLed1, OUTPUT);
pinMode(pinLed2, OUTPUT);
pinMode(pinLed3, OUTPUT);
pinMode(pinLed4, OUTPUT);
pinMode(pinLed5, OUTPUT);
//inicializamos monitor serie para visualizar valores de LDR
Serial.begin(9600);
}
void loop()
{
//Guardamos el valor leido en una variable
//IMPORTANTE UTILIZAR EL SERIAL PARA VER LOS VALORES Y COMPROBAR QUE RECIBE VALORES BUENOS
valorLDR = analogRead(pinLDR);
Serial.println(valorLDR);
//Y comenzamos las comparaciones:
if(valorLDR >= 523)
{
digitalWrite(pinLed1, LOW);
digitalWrite(pinLed2, LOW);
digitalWrite(pinLed3, LOW);
digitalWrite(pinLed4, LOW);
digitalWrite(pinLed5, LOW);
}
else if((valorLDR >= 423) & (valorLDR < 523))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, LOW);
digitalWrite(pinLed3, LOW);
digitalWrite(pinLed4, LOW);
digitalWrite(pinLed5, LOW);
}
else if((valorLDR >= 323) & (valorLDR < 423))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, LOW);
digitalWrite(pinLed4, LOW);
digitalWrite(pinLed5, LOW);
}
else if((valorLDR >= 223) & (valorLDR < 323))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, HIGH);
digitalWrite(pinLed4, LOW);
digitalWrite(pinLed5, LOW);
}
else if((valorLDR >= 123) & (valorLDR < 223))
{
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, Xavi Pérez nos va a contar cómo realizar todos estos montajes así como la programación.
Hasta la siguiente práctica amig@s robóticos!!