InicioTarjetas de DesarrolloArduinoRealiza un modulador de luz RGB con el Sensor Foto Resistor KY-018

Realiza un modulador de luz RGB con el Sensor Foto Resistor KY-018

En este tutorial trabajaremos con el Sensor Foto Resistor KY-018, que depende de la intensidad de luz exterior para aumentar o disminuir su resistencia. Esta funcionalidad la usaremos para poder modificar el comportamiento del LED RGB KY-009.

Primero comprobaremos que el módulo KY-018 funcione adecuadamente y visualizar que valores despliega, posteriormente usemos este rango de valores para poder realizar la modulación de luz que será emitida por el Led RGB.

Para realizar este proyecto necesitamos los siguientes materiales:

Diagrama de Conexión

Como lo mencionamos, primero realizaremos la conexión simple entre nuestra placa UNO R3 y el sensor de foto resistor para tener lectura de los valores y ver su funcionamiento.

Código en Arduino IDE con el KY-018

En el siguiente código realizaremos la declaración de variables y usaremos el Monitor Serial para visualizar los valores del foto resistor en formato decimal.

int ky18 = 2;                        //Define Pin2 Analógico para la entrada de datos analógicos del KY-018
int valor;                       //La variable valor, almacenará los datos de KY018 

void setup() {
Serial.begin(9600);                 //Iniciamos puerto serial a 9600 baud
pinMode (ky18, INPUT);             //Declaramos a ky18 como pin de entrada
}

void loop()
{
  valor = analogRead(ky18) ;     //Se guarda en la variable valor , los datos de la foto resistencia
  Serial.println(valor,DEC);     // Intensidad de Luz,en formato decimal (opcional)
                                 // Valores Altos=Obscuridad Valores Bajos==Iluminación Alta
  delay(1000);                   // Duración de la instrucción 1 segundo
} 

Como se puede observar el KY-018 adecuadamente, obteniendo valores altos cuando cubrimos el sensor (simulación de ausencia de luz) y valores pequeños cuando detecta luz.

Ahora con la información que se tiene procederemos a realizar el siguiente circuito en donde incluiremos el sensor LED RGB KY-009.

Diagrama de Conexión del KY-018 y KY-009

Realizaremos la conexión del LED RGB, a la que debemos incluir 3 resistencias de 220 ohm en los pines R,G y B para proteger nuestro sensor, estos serán de salida PWM e irán conectados a los pines 11, 10 y 9 de la tarjeta UNO R3 respectivamente.

Código en Arduino IDE para proyecto con KY-018 y KY-009

En nuestro programa usaremos la función map que nos ayuda a establecer un rango de valores, independientemente de los valores de entrada; es decir, se realiza un mapeo entre los valores de entrada y los requeridos, se conforman por 5 elementos, en nuestro caso esta conformado por los siguientes valores:

  • valor: el número a mapear
  • 4: el límite inferior del rango actual del valor
  • 1018: el límite superior del rango actual del valor
  • 0: el límite inferior del rango objetivo del valor
  • 255: el límite superior del rango objetivo del valor
  • int ky18 = 2;             //Define Pin2 Analógico para la entrada de datos analógicos del KY-018
    int LedR = 11;            //Define PWM P11 para Led Rojo (R)
    int LedV = 10;            //Define PWM P10 para Led Verde (G)
    int LedA = 9;             //Define PWM P9 para Led Azul (B)
    int valor ;               //La variable VALOR, almacenará los datos de KY018 
    int luz ;                 //La variable LUZ, almacenará los valores que tendrán los led (0-255)
    
    void setup() {
    Serial.begin(9600);        //Iniciamos puerto serial a 9600 baud
    pinMode(ky18, INPUT);      //Declaramos a ky18 como pin de entrada
    pinMode(LedR, OUTPUT);     //Declaramos a Led Rojo como pin de salida
    pinMode(LedA, OUTPUT);     //Declaramos a Led Azul como pin de salida
    pinMode(LedV, OUTPUT);     //Declaramos a Led Verde como pin de salida
    }
    
    void loop()
    {
    analogWrite (LedR, 0 );             //Siempre al iniciar la rutina los valores del Led RGB se reiniciaran
    analogWrite (LedV, 0);              //Recordando que los valores para cada Led va desde 0 a 255, 0 MENOR intensidad
    analogWrite (LedA, 0);              //255 MAYOR intensidad de luz en el led correspondiente
    valor = analogRead(ky18);             //Se guarda en la variable valor , los datos de la foto resistencia
    Serial.println(valor, DEC);           // Intensidad de Luz, Valores Altos=Obscuridad Valores Bajos==Iluminación Alta
    
    luz = map(valor, 4, 1018, 0, 255);   //Se usara la función map para que asigne valores a LUZ dependiendo el barrido de datos
                                         //que arroje el foto resistor.
    Serial.print("luz");                 //Se imprime mensaje de LUZ y 
    Serial.println(luz);                 //..el valor registrado por la función map
    analogWrite (LedR, luz );           //Los valores que tendrá el LED Rojo serán variables a la información que se obtenga de LUZ
    analogWrite (LedV, luz);            //Lo mismo para el Led Verde y Azul, lo cual puede ser configurable a tener una mezcla del RGB
    analogWrite (LedA, luz);
    
    delay(500);                          // El proceso durara medio segundo
      
    } 
    

    Dependiendo de la variación de estos valores mapeados, se asignada un valor directamente proporcional al necesario para que encienda o apague el LED RGB, es decir, si tenemos valores altos en la entrada el LED RGB tendrá valores altos y por lo cual será mayor la intensidad de luz y viceversa. A continuación un video con la visualización de este sistema:

    Como se puede observar, si hay poca resistividad habrá mejor iluminación del LED y si existe mayor resistividad la iluminación será menor.

    Si requieres de más tutoriales referente al uso de sensores RGB, te recomendamos el tutorial de como Crea un sistema con el Sensor de Impacto y luces de sirena con los módulos KY-031 y KY-016.

    TUTORIALES RELACIONADOS