Arduino: Sensor de luz
Esta vez, vamos a variar la luminosidad de un LED según la luz que detecte un pequeño sensor de luz. Si hay mucha luz, nuestra "lámpara" debería estar apagada y, cuando menos luz detecte, más brillo debo aplicarle.
Estas son las conexiones tal como las he hecho:
La resistencia que he usado para la LED es de 330Ω y la que he usado para el fotorresistor es de 10kΩ.
Estas son las conexiones tal como las he hecho:
Imagen realizada con Fritzing |
La resistencia que he usado para la LED es de 330Ω y la que he usado para el fotorresistor es de 10kΩ.
He aquí el vídeo del resultado:
Este es el código que he utilizado:
#define PIN_LED 9 // Conectamos una LED en el pin analógico 9
#define PIN_LUZ A0 // Conectamos el fotorresistor en el pin analógico A0
void setup()
{
pinMode(PIN_LED, OUTPUT); // establecemos PIN_LED como salida
pinMode(PIN_LUZ, INPUT); // establecemos PIN_LUZ como entrada
}
void loop()
{
int nivelDeLuz = analogRead(PIN_LUZ); // obtenemos el nivel de luz
nivelDeLuz = map(nivelDeLuz, 0, 900, 0, 255); // escalamos el valor obtenido
if(nivelDeLuz < 15){
nivelDeLuz = 0;
}
analogWrite(PIN_LED, nivelDeLuz); // aplicamos el brillo a la led
}
Al valor del fotorresistor varía entre 0 y 900, siendo 0 el valor de ninguna oscuridad (luz al máximo) y 900 el de oscuridad total. Teniendo en cuenta esto, extrapolamos el valor obtenido utilizando la función map, de tal forma que escalamos el valor recibido por el sensor para que se ajuste a los valores que podemos darle para el brillo de la LED. Es decir, tomamos un valor de 0 a 900 y lo escalamos para ajustarse a un valor de 0 a 255.
Con ello tendremos que, cuando hay mucha luz (valor 0 en el fotorresistor), el brillo de la LED será 0 y, cuando estamos a oscuras (valor 900 en el fotorresistor), la LED tendrá el brillo máximo.
Como la medición de luz máxima (aproximación a 0 del valor del fotorresistor) es complicado que nos de 0, utilizamos una condición para que, si el valor es menor de 15 (hay mucha luz), el brillo de la LED sea directamente 0.
Con ello tendremos que, cuando hay mucha luz (valor 0 en el fotorresistor), el brillo de la LED será 0 y, cuando estamos a oscuras (valor 900 en el fotorresistor), la LED tendrá el brillo máximo.
Como la medición de luz máxima (aproximación a 0 del valor del fotorresistor) es complicado que nos de 0, utilizamos una condición para que, si el valor es menor de 15 (hay mucha luz), el brillo de la LED sea directamente 0.
Si quisiéramos el efecto inverso (encender la luz cuando hay mucho brillo en el fotorresistor), sólo tendríamos que cambiar la línea siguiente:
nivelDeLuz = map(nivelDeLuz, 0, 900, 0, 255); // escalamos el valor obtenidoPor esta otra:
nivelDeLuz = map(nivelDeLuz, 0, 900, 255, 0); // escalamos el valor obtenido
Ahora debéis hacerle sombra al fotorresistor para lograr apagar la luz.
Espero que os haya resultado entretenido.
Un saludo: Roi
Comentarios
Publicar un comentario
En entradas antiguas, los comentarios quedarán pendientes de moderación. Si tu comentario tarda en aparecer, ten paciencia ;D