TUTORIAL ARDUINO - CONTROLAR UN LED RGB UTILIZANDO POTENCIÓMETROS

Hoy en Geeky Theory os traemos un proyecto muy fácil de hacer y con resultados muy coloridos.

Lo que pretendemos hacer con el siguiente montaje es no sólo encender un LED-RGB mediante Arduino (con la consecuente obligación de acudir al código cada vez que se desee un nuevo color) sino de cambiar también el color del LED utilizando los diferentes valores que nos da cada potenciómetro. Así pues, y una vez montado, sólo tendremos que girar en un sentido o en otro los distintos potenciómetros para obtener las diferentes mezclas de colores que nos ofrecen este tipo de LEDs. Empecemos pues:

Lo que vamos a necesitar:

-          Protoboard. -          x3 potenciómetros (en mi caso de 10K). -          LED-RGB -          x3 resistencias (en mi caso de 220Ω). -          Placa Arduino (en mi caso UNO). Una vez reunidos nuestros componentes deberemos crear el siguiente montaje en nuestra protoboard:

Como podréis comprobar más abajo los potenciómetros que yo utilicé no son exactamente los mismos que en el esquema, pero esto no afecta en absoluto al funcionamiento. Tan sólo debéis recordar que la patilla central de nuestros potenciómetros deberá conectarse en una entrada analógica (en este caso hemos elegido la A0, A1 y A2) así como conectar tanto a la tensión de 5V como a GND las patillas de los extremos, para que al girar el potenciómetro nos varíe la resistencia interna y por tanto se modifique el valor del mismo.

Una vez hecho esto procederemos a conectar nuestro LED-RGB a la protoboard (recordad que el cátodo corresponde a la parte más ancha de metal que hay dentro del capuchón transparente, esto nos servirá de guía a la hora de orientarnos en el montaje y evitar errores a la hora de seleccionar los colores). La primera patilla empezando por la izquierda es la equivalente al color rojo (si tenéis el cátodo también en el lado izquierdo claro), la segunda es la que usaremos para alimentar el LED conectándolo a los 5V, la tercera es la equivalente al color verde y la cuarta y última la que nos dará el color azul. Es muy importante no olvidar las resistencias ya que estas son las encargadas de crear la diferencia de potencial necesaria para que los diferentes colores se iluminen. Cada una de las patillas de color estarán conectadas a las salidas digitales 9, 10 y 11 (Rojo, Verde y Azul respectivamente). Si os habéis perdido a la hora de identificar los colores, os he indicado cada color y su respectiva conexión a la placa Arduino haciendo coincidir los colores de los cables con el color de cada patilla.

Ahora, para conseguir que todo funcione como debe, es importante cargarle a la placa el código correspondiente:

/* --------------------------------------------- LED RGB + Potenciómetro --------------------------------------------- Programa que varia el color del LED según el valor obtenido por unos potenciómetros. */ //-------------------------------------------------- //Declara puertos de entradas y salidas y variables //-------------------------------------------------- int ledRojo = 9; //Declara Pin LED Rojo int ledVerde=10; //Declara Pin LED Verde int ledAzul=11;  //Declara Pin LED Azul int pinPot0 = A0;  //Declara Pin Potenciometro Rojo int pinPot1 = A1;  //Declara Pin Potenciometro Verde int pinPot2 = A2;  //Declara Pin Potenciometro Azul int valorsensor0 = 0;  //Valores analogicos de la salida del potenciometro int valorsensor1 = 0;  //   ||        ||            ||            || int valorsensor2 = 0;  //   ||        ||            ||            || float divisionR; float divisionV; float divisionA; //------------------------------------ //Funcion principal //------------------------------------ void setup() // Se ejecuta cada vez que el Arduino se inicia { pinMode(ledRojo,OUTPUT);  //El LED Rojo como una salida pinMode(ledVerde,OUTPUT); //El LED Verde como una salida pinMode(ledAzul,OUTPUT);  //El LED Azul como una salida Serial.begin(9600); } //------------------------------------ //Funcion ciclicla //------------------------------------ void loop() { // Llamada a la función Color que recibe // 1er posicion: Intensidad Rojo // 2da posición: Intensidad Verde // 3ra posición: Intensidad Azul float Constante = (float) 255 / 1023;  //Divide el máximo valor de color entre el máximo valor del potenciómetro valorsensor0 = analogRead(pinPot0); valorsensor1 = analogRead(pinPot1); valorsensor2 = analogRead(pinPot2); divisionR = Constante * valorsensor0; divisionV = Constante * valorsensor1; divisionA = Constante * valorsensor2; color(divisionR,divisionV,divisionA);     // Carga un valor para (ROJO,VERDE,AZUL) //segun el valor de tres potenciómetros. } //------------------------------------ //Funcion color //------------------------------------ void color(int rojo, int verde, int azul){ //ROJO. Le resta al total (255) el valor obtenido de los potenciometros analogWrite(ledRojo, 255-rojo); //VERDE. Le resta al total (255) el valor obtenido de los potenciometros analogWrite(ledVerde, 255-verde); //AZUL. Le resta al total (255) el valor obtenido de los potenciometros analogWrite(ledAzul, 255-azul); }

Tan sólo una última aclaración para que nadie se sienta perdido. Los colores están comprendidos entre los valores 0 – 255 siendo 0 apagado y 255 el color a la máxima intensidad. Los valores 0 – 1032 hacen referencia a lo que Arduino lee de los potenciómetros. Esta señal siempre está comprendida entre 0 -1032 independientemente de la resistencia del potenciómetro.

Una vez hecho esto, y si las leyes de Murphy no nos molestan, el resultado debería ser el siguiente:

[youtube http://www.youtube.com/watch?v=gf7fFeWA4Hk&w=640&h=390] Y este es el mismo proyecto, pero un poquito más limpio: [youtube http://www.youtube.com/watch?v=QxcxXZJjzKs&w=640&h=390]

Espero que os haya resultado interesante y hayáis disfrutado construyéndolo tanto como yo. Si tenéis cualquier tipo de duda o sugerencia no os olvidéis de comentar.

¡¡Saludos!!