Control de colores y de tira de leds

Constantes

El control de colores, tanto de la iluminación superior como inferior se basa en las dos salidas PWM de arduino.

Lo primero que hay que hacer es identificar tanto la entrada analógica que sirve para controlar el valor a emplear de color como las dos salidas de control RGB.

//Constant definitions
//RGB PWM for lateral pair of RGB leds
#define RED_LATERAL   3
#define GREEN_LATERAL 5
#define BLUE_LATERAL  6

//RGB PWM for central illumination pair of RGB leds
#define RED_CENTRAL    9
#define GREEN_CENTRAL 10
#define BLUE_CENTRAL  11

//RGB RGB potentiometers for controling the color
#define RED_INPUT   A0
#define GREEN_INPUT A1
#define BLUE_INPUT  A3

//For changing from 10 to 8 bits and perform a rounding, not truncating
#define ROUNDING 2

#define MAX_POWER 256

//Variables
//Input in 10 bits resolution
int PreviousRed, PreviousGreen, PreviousBlue;

La entrada analógica es de 10 bits y la salida PWM es de 8, por lo tanto, el valor de 10 bits hay que escalarlo sobre el de 8.

Típicamente el redondeo se realiza añadiendo 0.5 unidades al valor a redondear de 10 bits y truncando el valor obtenido. El valor 0.5 en 8 bits cuando se proyecta sobre un valor de 10 es 2. Esta es la razón por la que aparece la constante ROUNDING anterior.

Inicialización

El siguiente paso es indicar a arduino cual es la configuración de pines que se va a utilizar el resto de la ejecución del programa. Para ello, se realiza el siguiente código:

void setup() {
  //RGB PWM for central pair of RGB leds are outputs
  pinMode(RED_LATERAL,   OUTPUT);
  pinMode(GREEN_LATERAL, OUTPUT);
  pinMode(BLUE_LATERAL,  OUTPUT);

  //RGB PWM for lateral illumination pair of RGB leds are outputs
  pinMode(RED_CENTRAL,   OUTPUT);
  pinMode(GREEN_CENTRAL, OUTPUT);
  pinMode(BLUE_CENTRAL,  OUTPUT);

  //RGB potentiometers for controling the RGB leds are inputs
  pinMode(RED_INPUT,   INPUT);
  pinMode(GREEN_INPUT, INPUT);
  pinMode(BLUE_INPUT,  INPUT);

  //Input in 10 bits resolution
  PreviousRed = PreviousGreen = PreviousBlue = 0;
}

Bucle principal de ejecución

En cada iteración, arduino leerá el valor que ha indicado el usuario en los potenciómetros de control y si ha cambiado, modificará los registros de salida. Si no hay variaciones, todo se dejará igual. Este es el programa que lee el valor de cada potenciómetro, lo redondea antes de convertirlo en un valor de 8 bits y finalmente, si se ha producido un cambio en el valor leído, modifica la iluminación a realizar tanto de los leds laterales como centrales.

void loop() {
  // put your main code here, to run repeatedly:

  //Input in 10 bits resolution
  int Red   = analogRead(RED_INPUT);
  int Green = analogRead(GREEN_INPUT);
  int Blue  = analogRead(BLUE_INPUT);

  //Change resolution from 10 bits to 8
  //First add rounding
  Red   += ROUNDING;
  Green += ROUNDING;
  Blue  += ROUNDING;
 
  //Second shift two bits to the right
  Red   = Red   >> 2;
  Green = Green >> 2;
  Blue  = Blue  >> 2;

  if (PreviousRed   != Red)
  {
     analogWrite(RED_LATERAL,   Red);
     analogWrite(RED_CENTRAL,   Red);
     PreviousRed = Red;
  }
 
  if (PreviousGreen != Green)
  {
     analogWrite(RED_LATERAL,   Green);
     analogWrite(RED_CENTRAL,   Green);
     PreviousGreen = Green;
  }
 
  if (PreviousBlue  != Blue)
  {
     analogWrite(RED_LATERAL,   Blue);
     analogWrite(RED_CENTRAL,   Blue);
     PreviousBlue = Blue;
  }
}

 Aquí os dejo el programa completo de arduino que recoge el control de las luces del teclado.

Iluminación inferior

La iluminación inferior simplemente consiste en encender una batería de relés de estado sólido que toma como referencia el valor entregado en las salidas de las luces laterales y modula estos relés para cambiar el color de la cinta de leds. Por lo tanto, esta iluminación no cambia la programación del arduino sino que sólo se activa cuando se alimenta a la batería de relés de estado sólido. Si el interruptor correspondiente está apagado, la iluminación inferior, desaparece.



Comentarios

Entradas populares de este blog

Galería de fotos