Fotocelda LDR como sensor de luz con Arduino

En este proyecto, se aprenderá a usar una fotocelda LDR como sensor de luz y con ello modificaremos el brillo de un LED de acuerdo a la intensidad lumínica del entorno.

Teoría acerca de la fotocelda: Una fotocelda o fotorresistor es un dispositivo cuya resistencia varía de acuerdo a la luz del entorno. Su valor de resistencia es muy baja cuando incide luz sobre su superficie y en la oscuridad su resistencia es alta.



Como la resistencia varía de acuerdo a la intensidad de luz, la fotocelda se considera como un sensor de luz análogo, por lo tanto se debe conectar a un pin para lectura análoga de la tarjeta Arduino.

Materiales
  • 1 fotocelda LDR
  • 1 resistencia de 10K ohm
  • 1 resistencia de 220 ohm
  • 1 LED de cualquier color
  • Cables
  • Protoboard o breadboard
  • Arduino



La conexión es sencilla: Una pata de la fotocelda va a fuente, que en este caso son 5V y la otra va a negativo a través de una resistencia de 10K. En esa misma pata del negativo, se conecta el cable hacia el pin de lectura del Arduino, así:


En este caso, la lectura análoga va desde 0V hasta 5V. La tarjeta Arduino lo interpreta como un rango entre 0 y 1023. Esto es con la configuración de la resistencia de 10K, pero se puede usar de otro valor, por ejemplo, de 1K.

Se va a usar un LED cuyo brillo aumentará conforme la fotocelda detecte que hay poca luz, y viceversa. Para eso se conecta a un pin PWM del Arduino.



En este proyecto es necesario el uso de la función map(), la cual mapea o acota los valores leídos (desde 0 hasta 1023) y los convierte en un rango entre 0 y 255, ya que estos últimos son los valores mínimos y máximos que se pueden aplicar vía PWM.

La función map() lleva estos parámetros en el siguiente orden:
  • El valor de lectura que se va a mapear o acotar
  • Valor mínimo que se puede leer (en este caso es 0)
  • Valor máximo que se puede leer (en este caso 1023)
  • El valor mínimo del nuevo rango (en este caso 0)
  • El valor máximo del nuevo rango (en este caso 255)
Como en este proyecto la intensidad de brillo del led es inversamente proporcional a la luz que incide sobre la fotocelda, el mapeo de valores no se hace desde 0 hasta 1023 sino desde 1023 hasta 0, es decir, se invierte.

Dicho esto, las conexiones quedan de la siguiente manera:



En este video se puede ver este proyecto en funcionamiento, el cual se recomienda probar en un lugar oscuro o con poca luminosidad:


El código del programa se puede descargar desde aquí: https://drive.google.com/open?id=0Bxr9tDhyoU1ZVXhPYndrbXEzQ3c

Comentarios

  1. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  2. int sensor_luz = A0;
    int led_rojo = 9;
    int valor_luz;
    int brillo_led;

    void setup() {
    pinMode(sensor_luz,INPUT);
    pinMode(led_rojo,OUTPUT);
    }

    void loop() {

    valor_luz = 1023 - analogRead(A0);
    brillo_led = map(valor_luz, 0, 1023, 0, 255);
    analogWrite(led_rojo, brillo_led);
    }


    Este es el codigo

    ResponderBorrar

Publicar un comentario