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:
- Tarjeta de Desarrollo UNO R3
- Cables Dupont
- Resistencias 220 ohm
- Módulo KY-018 Sensor Foto Resistor
- Sensor Led RGB Módulo KY-009
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:
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.