sexta-feira, 12 de abril de 2019

Controlando LED RGB com Arduino


     Neste projeto vamos aprender a controlar as cores de um LED RGB com o auxilio do Arduino.

LISTA DE COMPONENTES:


1 - Arduino Uno;
1 - LED RGB de 4 terminais
3 - Resistores de 220 ohms
1 - Potenciômetro de 2 K ohms
1 - Protobord;
Alguns jumpers;


Sobre o principais componentes:


     LED RGB com 4 terminais, anodo comum. Possui 4 terminais um para a cor vermelha, outro para a cor verde, outro para a cor azul e o quarto terminal é comum. Pode se dizer que são 3 LEDs em um, o consumo é de aproximadamente 20 mA para cada terminal.



     Potenciômetro, tem a característica de variar a resistência elétrica conforme a ação em seu eixo, no nosso caso, conforme se gira o eixo. Veja que os terminais A e B, da figura abaixo, são fixos e tem uma resistência fixa. O terminal W está ligado a um cursos que está em contato com a trilha e conforme desliza nesta trilha altera a resistência entre o terminal central e os laterais.




Circuito a ser montado:



     O pino digital 3 do Arduino é ligado ao “red Cathode” do diodo, o pino digital 5 é ligado ao “blue cathode”, o pino digital 6 é ligado ao “ green cathode” e o 5V é ligado ao “commonn anode”, lembrando deve ser colocado um resistor em série, para limitar a corrente, nos os pinos 3, 5 e 6.
    O controle fica por conta de um potenciômetro de 2K ohms ligado ao pino A2, 5V e GND do Arduino.    



Programando o Arduino:


     O código abaixo fará com que ao girar o potenciômetro, as tensões, nos pinos 3, 5 e 6 mudem, assim com tensões diferentes mos terminais do LED ele mudará de cor.

Código:


     Copie e cole o código abaixo na tela do Arduino IDE. Em seguida execute-o.

int pinPotenciometer = 2;
int pinRed = 3;
int pinBlue = 5;
int pinGreen = 6;
float h;                     // Hue range
int h_int;                 // Hue color
int r = 0, g = 0, b = 0;   // Default RGB values

int val = 0;               // Set POT value to default 0

// Instantiate h2rgb and it's variables  a.k.a  Hue to RGB
void h2rgb(float h, int& R, int& G, int& B);

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  val = analogRead(pinPotenciometer);    // Read the pin and display the value
  h = ((float)val) / 1024;               // Get the range. pot value / 1024
  h_int = (int) 360*h;                   // Get the color hue by multiplying by 360

  h2rgb(h,r,g,b);                        // Call the h2rgb function passing it the hue value

  Serial.print("POT value: ");
  Serial.print(val);           // Pot value
  Serial.print(" = Hue of ");
  Serial.print(h_int);         // Color Hue value
  Serial.print(" degrees. RGB values: ");
  Serial.print(r);             // Red value
  Serial.print(" ");
  Serial.print(g);             // Green value
  Serial.print(" ");
  Serial.println(b);           // Blue value

  analogWrite(pinRed, r);        // Changes red led
  analogWrite(pinGreen, g);        // Changes green led
  analogWrite(pinBlue, b);        // Changes blue led

}

void h2rgb(float h, int& R, int& G, int& B) {
  // Used HSV --> RGB function
  // HSV - Hue, Saturation, Value
  // RGB - Red, Green, Blue - example (255,255,255)
  // Function below does a bunch of math to convert HSV values to RGB
  int var_i;
  float S=1, V=1, var_1, var_2, var_3, var_h, var_r, var_g, var_b;

  if ( S == 0 )                       //HSV values = 0 ÷ 1
  {
    R = V * 255;
    G = V * 255;
    B = V * 255;
  }
  else
  {
    var_h = h * 6;
    if ( var_h == 6 ) var_h = 0;      //H must be < 1
    var_i = int( var_h ) ;            //Or ... var_i = floor( var_h )
    var_1 = V * ( 1 - S );
    var_2 = V * ( 1 - S * ( var_h - var_i ) );
    var_3 = V * ( 1 - S * ( 1 - ( var_h - var_i ) ) );

    if      ( var_i == 0 ) {
      var_r = V     ;
      var_g = var_3 ;
      var_b = var_1 ;
    }
    else if ( var_i == 1 ) {
      var_r = var_2 ;
      var_g = V     ;
      var_b = var_1 ;
    }
    else if ( var_i == 2 ) {
      var_r = var_1 ;
      var_g = V     ;
      var_b = var_3 ;
    }
    else if ( var_i == 3 ) {
      var_r = var_1 ;
      var_g = var_2 ;
      var_b = V     ;
    }
    else if ( var_i == 4 ) {
      var_r = var_3 ;
      var_g = var_1 ;
      var_b = V     ;
    }
    else                   {
      var_r = V     ;
      var_g = var_1 ;
      var_b = var_2 ;
    }

    R = (1-var_r) * 255;                  //RGB results = 0 ÷ 255
    G = (1-var_g) * 255;
    B = (1-var_b) * 255;
  }
}


     Após carregar o código no Arduino, você pode girar o potenciômetro, as cores do LED deverão mudar.

Os componentes deste tutorial pode ser comprados AQUI!


Nenhum comentário:

Postar um comentário