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;
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