sábado, 6 de agosto de 2011

Brincando com LED RGB

     Como já vimos já usamos o LED normal, agora podemos brincar com o LED RGB. Mas o que seria esse LED RGB é praticamente 3 LEDs com único encapsulamento que possui as cores: Vermelho (R), Verde (G) e Azul (B).
     
     Com esse LED podemos gerar até 16.581.375 cores diferentes usando porta PWM do arduino. Mas lembrando que precisa colocar uma resistência em cada terminal, eu usei 470ohm. O circuito fica mais ou menos isso:

     A programação também não tem nada de mais praticamente é idêntica ao LED normal (Blink) sendo que em vez de programar 1 LED, programei 3 LEDs. Nessa programação a seguir usei a sequência de cores como a Tabela Verdade com 3 Variáveis, tanto na programação Básica de liga e desliga o LED e na programação for para ligar e desligar lentamente.

Programação:
int r = 11;
int g = 10;
int b = 9;
void setup()
{
  pinMode(r, OUTPUT);
  pinMode(g, OUTPUT);
  pinMode(b, OUTPUT);
}
void loop()
{
  // Programação Liga e Desliga os LED's
  int M = 255;
  int m = 0;
  int t = 15;
  // Tudo apagado
  analogWrite(r, m);
  analogWrite(g, m);
  analogWrite(b, m);
  delay(1000);
  // Vermelho acesso
  analogWrite(r, M);
  analogWrite(g, m);
  analogWrite(b, m);
  delay(1000);
  // Verde acesso
  analogWrite(r, m);
  analogWrite(g, M);
  analogWrite(b, m);
  delay(1000);
  // Vermelho e Verde acesso
  analogWrite(r, M);
  analogWrite(g, M);
  analogWrite(b, m);
  delay(1000);
  // Azul acesso
  analogWrite(r, m);
  analogWrite(g, m);
  analogWrite(b, M);
  delay(1000);
  // Azul e Vermelho acesso
  analogWrite(r, M);
  analogWrite(g, m);
  analogWrite(b, M);
  delay(1000);
  // Azul e Verde acesso
  analogWrite(r, m);
  analogWrite(g, M);
  analogWrite(b, M);
  delay(1000);
  //Todos acessos
  analogWrite(r, M);
  analogWrite(g, M);
  analogWrite(b, M);
  delay(1000);
  //Programação Acende e Apaga os LED's lentamente
  // Vermelho
  for(int i=0; i<255; i++)
  {
    analogWrite(r, i);
    analogWrite(g, m);
    analogWrite(b, m);
    delay(t);
  }
  for(int i=255; i>0; i--)
  {
    analogWrite(r, i);
    analogWrite(g, m);
    analogWrite(b, m);
    delay(t);
  }
  // Verde
  for(int i=0; i<255; i++)
  {
    analogWrite(r, m);
    analogWrite(g, i);
    analogWrite(b, m);
    delay(t);
  }
  for(int i=255; i>0; i--)
  {
    analogWrite(r, m);
    analogWrite(g, i);
    analogWrite(b, m);
    delay(t);
  }
  //Vermelho e Verde
  for(int i=0; i<255; i++)
  {
    analogWrite(r, i);
    analogWrite(g, i);
    analogWrite(b, m);
    delay(t);
  }
  for(int i=255; i>0; i--)
  {
    analogWrite(r, i);
    analogWrite(g, i);
    analogWrite(b, m);
    delay(t);
  }
  //Azul
  for(int i=0; i<255; i++)
  {
    analogWrite(r, m);
    analogWrite(g, m);
    analogWrite(b, i);
    delay(t);
  }
  for(int i=255; i>0; i--)
  {
    analogWrite(r, m);
    analogWrite(g, m);
    analogWrite(b, i);
    delay(t);
  }
  //Azul e Vermelho
  for(int i=0; i<255; i++)
  {
    analogWrite(r, i);
    analogWrite(g, m);
    analogWrite(b, i);
    delay(t);
  }
  for(int i=255; i>0; i--)
  {
    analogWrite(r, i);
    analogWrite(g, m);
    analogWrite(b, i);
    delay(t);
  }
  //Azul e Verde
  for(int i=0; i<255; i++)
  {
    analogWrite(r, m);
    analogWrite(g, i);
    analogWrite(b, i);
    delay(t);
  }
  for(int i=255; i>0; i--)
  {
    analogWrite(r, m);
    analogWrite(g, i);
    analogWrite(b, i);
    delay(t);
  }
  //Todos
  for(int i=0; i<255; i++)
  {
    analogWrite(r, i);
    analogWrite(g, i);
    analogWrite(b, i);
    delay(t);
  }
  for(int i=255; i>0; i--)
  {
    analogWrite(r, i);
    analogWrite(g, i);
    analogWrite(b, i);
    delay(t);
  }
}


     Para começar a explicar essa programação, primeiramente logo no inicio do loop, declarei 3 variáveis, M que seria o valor máximo (255) para as portas pwm, m que seria o valor mínimo (0) e t que seria o tempo que usei no delay na programação dor for.
     A pequena diferença da programação liga e desliga o LED, seria que geralmente usamos digitalWrite(pin, HIGH ou LOW) usei o analogWrite(pin, 0-255), apesar que, poderia ter usado o primeiro, mas para fazer a programação do LED acender e apagar lentamente precisamos usar portas pwm para controlar a corrente que iria passar no terminal do componente.
     Na programação for para cada LED usei 2 programações, 1 para acender e outra para acender lentamente, e claro fazendo as combinações como citei fazendo por Tabela Verdade.


     Mas também podemos brincar com esse LED usando um LDR, a cada valor que o LDR detectar pode acender uma cor diferente, só para começar (sem mistura de cores),  ai quem gosta de dificuldade a cada valor seria uma cor diferente mas já misturando todas as cores (ai usaria map na programação, futuramente explicarei).


     Na filmagem a seguir, a câmera não mostra muito a cores quando se misturam, por isso na segunda filmagem coloquei uma folha de papel oficio porque dava para ver melhor as mistura de cores.


Vídeo:

Espero que tenham entendido, qualquer coisa já sabe só comentar. Até mais...

5 comentários:

disse...

PROJETO SEMELHANTE DESENVOLVIDO COM SanUSB (PIC 18F2550)

http://www.youtube.com/watch?v=C_sP-Cfr8yg

Unknown disse...

parabéns!!!!

Unknown disse...

Fiz tudo certinho. mas a Cor Vermelha fica Fraca, o que devo fazer?

Unknown disse...

Diminui a resistencia da cor vermelha

SilvioCadete_"DSilva" disse...

Como faria no caso para obter a cor amarela no lugar do azul?

Postar um comentário

 
Blogger Templates