MAKER.

Aprende a hacerlo tú mismo paso a paso y automatízalo.

Jugando con el LED RGB y Arduino.

Hola usuarios. ¿Alguna vez habeís querido hacer un sistema que cambie el color de un dispositivo de manera automática, tal como lo hacen las luces de un teclado o un ratón de ordenador? Pues en esta entrada vamos a ver como conseguir con Arduino y el diodo RGB que se cambie el color del diodo de manera automática con un poquito de programación.

En esta entrada ya vistes como funcionaba el diodo RGB de manera eléctrica y cómo conseguir varios colores dependiendo de la polarización del diodo.

Diodo RGB.

Para este tutorial necesitarás conocer el diodo y su polarización. Además tendrás que disponer de una placa Arduino y tener conocimientos del lenguaje de Arduino (visita la página principal del mirpas formación).

Variación de colores de manera automática.

Sin duda uno de las primeras prácticas que hay que hacer es variar los colores del RGB de manera automática. Para ello utilizaremos un tiempo específico. Así que abre un nuevo sketch y prepara los materiales que vamos a utilizar en la práctica.

MAteriales que usaras en esta práctica

Sabes que si alimentas el diodo de forma que cada patilla se conecte a una resistencia y el cátodo se conecte a masa directamente, obtendremos una luz violeta - blanco. Si conectamos el potenciómetro entre el colector y masa, podremos variar la intensidad que pasará por el cátodo y eso variará sobre el violeta la luz del diodo.

Circuito LED RGB básico

Como puedes ver el color del diodo está superitado a la corriente que pasa por su cátodo, mientras que mantiene la misma corriente por sus patillas. Eso obliga a que solo se muestre un único color y variación de tono de acuerdo al valor de la intensidad. Y encima tienes que mover el potenciómetro para conseguir la variación de color.

El siguiente circuito muestra como hacer que el LED RGB cambie su color de manera automática.

conectar el rgb a la placa Arduino UNO

Los pines que utilizaremos en nuestro scketch son los 13, 12 y 11 y a GND se conectará el cátodo del diodo. Y no necesitarás nada más ya que lo que vamos a hacer con Arduino UNO será activar el diodo rojo, mientras los otros dos se quedan a nivel bajo. después activaremos el diodo azul mientras los otros dos se quedarán a nivel bajo. Por último activaremos el led verde mientras que los otrs se quedan a nivel bajo.


// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int ledRojo = 13;
int ledAzul = 12;
int ledVerde = 11;
int pausa = 1000;

// the setup routine runs once when you press reset:
void setup() {
  // initialize the digital pin as an output.
  pinMode(ledRojo, OUTPUT);
  pinMode(ledAzul, OUTPUT);
  pinMode(ledVerde, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(ledRojo, HIGH);   // Enciende el rojo
  digitalWrite(ledAzul, LOW);	//Apaga el azul
  digitalWrite(ledVerde, LOW);	//Apaga el verde
  delay(pausa);               // wait for 0,2 second
  digitalWrite(ledRojo, LOW);   // Apaga el rojo
  digitalWrite(ledAzul, HIGH);	//Enciende el azul
  digitalWrite(ledVerde, LOW);	//Apaga el verde
  delay(pausa);
    digitalWrite(ledRojo, LOW);   // Apaga el rojo
  digitalWrite(ledAzul, LOW);	//Apaga el azul
  digitalWrite(ledVerde, HIGH);	//Enciende el verde
  delay(pausa);
  delay(pausa);
  }

			

El funcionamiento lo puedes ver a continuación.

funcionamiento de forma automática del led RGB

Funciones de color.

El anterior programa te muestra los colores básicos del RGB, pero sin duda queda mucho por hacer ya que queremos que nos muestre otras opciones de colores. Y para eso se realiza la mezcla de colores variando la intensidad de las patillas de cada diodo. Eso generará una variación de colores según la intensidad que circule por cada una de sus patillas.

Y ten en cuenta que puedes hacer que la variación de corriente en cada patilla del RGB sea por un potenciómetro, por un sensor de luz, una foto resistencia, etc., etc., y en este caso usaremos un sensor fotoeléctrico por cada rama del RGB, como se ve en el circuito siguiente.

circuito RGB con control de luz mediante luz ambiental

Conecta tu Arduino de manera que tenga corriente y toma de tierra a ambos lados de la placa. Las fotoresistencias las colocaremos dentro de la placa en el centro para poder actuar sobre ellas. A un extremo de la placa board las conectaremos a positivo y al otro extremo a través de la resistencia de 100KΩ, a masa. Es importante que entre la patilla del sensor y la resistencia saquemos un cable que será el que irá al puerto analógico A0, A1 y A2 respectivamente.

El led RGB debe de estar conectado a resistencia limitadoras. Además cada terminal del RGB irá conectado al puerto digital 9, 10 y 11 respectivamente. Asegurate de que el cátodo del RGB se conecte a masa.

circuito RGB con control de luz mediante luz ambiental

El siguiente sketch te permitirá ajustar la iluminación del RGB de acuerdo a la variación de luz externa.


/*** LED RGB VARIA CON LA LUZ AMBIENTAL ***/
/* MIRPAS.com */
const int greenLEDPin = 9;
const int redLEDPin = 11;
const int blueLEDPin = 10;
const int redSensorPin = A0;
const int greenSensorPin = A1;
const int blueSensorPin = A2;
int redValue = 0;
int greenValue = 0;
int blueValue = 0;
int redSensorValue = 0;
int greenSensorValue = 0;
int blueSensorValue = 0;

void setup() {
  Serial.begin(9600);
  pinMode (greenLEDPin, OUTPUT);
  pinMode (redLEDPin, OUTPUT);
  pinMode (blueLEDPin, OUTPUT);

}

void loop() {
  redSensorValue = analogRead(redSensorPin);
  delay(5);
  greenSensorValue = analogRead(greenSensorPin);
  delay(5);
  blueSensorValue = analogRead(blueSensorPin);
  Serial.print("Valor del sensor \n\t Rojo: ");
  Serial.print(redSensorValue);
  Serial.print("\n\t Verde: ");
  Serial.print(greenSensorValue);
  Serial.print("\n\t Azul: ");
  Serial.print(blueSensorValue);

  redValue = redSensorValue/4;
  greenValue= greenSensorValue/4;
  blueValue = blueSensorValue/4;

  Serial.print("Valor del sensor \n\t Rojo: ");
  Serial.print(redValue);
  Serial.print("\n\t Verde: ");
  Serial.print(greenValue);
  Serial.print("\n\t Azul: ");
  Serial.print(blueValue);

  analogWrite(redLEDPin, redValue);
  analogWrite(greenLEDPin, greenValue);
  analogWrite(blueLEDPin, blueValue);
}	
		

La función para cambiar el brillo del RGB a través del PWM de ancho de pulso se llama analogWrite(). Este método necesita de dos argumentos: el pin sobre el que escribir y un valor de entre 0 y 255. Para el segundo valor por defecto un valor de 255, llevará al pin a HIGH todo el tiempo. Mientras que un valor de 127, llevará al pin a la mitad de intensidad. Un valor de 0 llevaría al pin a LOW apagando el RGB.

Pero como utilizamos foto resistencias, tenemos que dividir el valor de 0 a 1023 entre 4 para poder obtener valores de 0 a 255 en los pines analógicos.

Cuando ejecutes el scketch seguramente tengas un color blanquecino, dependiendo del color predominante en tu habitación. Vete tapondo los sensores y verás como el led cambia su intensidad e incluso su color. Otro indicador es el monitor serie que te mostrará los colores que va cogiendo en cada situación según la luz que reciben los sensores. También puedes ver como bajando las persionas y quedandote a oscuras el led llegará a apagarse.