Hub 014 - Misturador de cores RGB usando potenciômetros e Arduino

Básico - Hub 014

Controlando led RGB com potenciômetros (RGB Color Mixer)

 

Sugerido por: Ronaldo A Junior ENVIAR SUGESTÃO

Objetivo do misturador de cores

Controlar as cores de um led RGB mediante 3 potenciômetros. Cada potenciômetro irá controlar a intensidade de brilho de cada cor primária, ou seja, existirá um potenciômetro para a cor vermelha (Red), um para a cor verde (Green) e um para a azul (Blue) do led RGB. Ao girarmos o eixo de qualquer um dos potenciômetros, vamos alterar também, de acordo com o conceito PWM (Pulse Width Modulation), a intensidade de brilho de cada cor primária, resultando em várias possibilidades de cores associadas (16.777.216 cores). Os valores de cada cor primária lido no led RGB deverão ser exibidos em um display LCD.

Observações:

a) Este projeto é uma variação do Projeto 26 - Criando cores com Led RGB com 1 potenciômetro que utiliza 1 potenciômetro e três botões para a definição das cores.

b) Fazendo o controle do brilho de cada uma das cores de um Led RGB podemos obter diversas cores diferentes. Combinando os valores de cada cor podemos criar até 16,7 milhões de cores diferentes (256 X 256 X 256).

c) Foi acrescentado no projeto um botão (push button) para que quando acionado, altera a exibição dos valores das cores de RGB para Hexadecimal, e vice e versa.

d) É recomendável utilizar um led RGB difuso que permitirá cores mais uniformes.

LED RGB

O LED RGB nada mais é que três Leds em um só, ele é formado por um vermelho (R de red), um verde (G de green) e um azul (B de blue). Associando as cores dos três Leds é possível se obter várias possibilidades de cores. Veja o artigo:

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 830 pontos

Jumpers Kit cabos ligação macho / macho 1  
Led RGB

Led RGB difuso 5mm

1

Você poderá utilizar um LED RGB ânodo ou cátodo.

Você poderá utilizar também um LED RGB difuso (recomendável) ou de alto brilho.

Resistor

Resistor

3

3 Resistores de 150Ω

Se precisar usar outros valores, calcule o resistor apropriado para o led utilizado.

Potenciômetro

Potenciômetro 1K

3

Utilizar potenciômetro de 1K a 10K

O valor do potenciômetro aumenta quando giramos o eixo do componente na direção do polo negativo para o polo positivo.

Push Button

Push button 6X6X5mm

1    
Display LCD Display LCD 16X2 1

LCD que utilize o controlador HD44780 (veja na descrição ou datasheet do componente)

O display poderá ser de qualquer cor (fundo verde, azul ou vermelho)

Módulo I2C para display LCD

Módulo I2C com CI PCF8574

(opcional)

1 Módulo I2C display LCD Arduino

O módulo I2C poderá vir separado ou já soldado no display LCD

(datasheet)

Se você não possui um módulo I2C para display LCD, poderá adaptar o projeto para o display LCD sem o adaptador

Arduino UNO Arduino UNO R3 1

Você poderá utilizar uma placa Arduino UNO original ou similar

Obs.: Utilizar também Cabos de ligação e uma folha de papel A4 para criar um difusor.

Montagem do Circuito (led RGB ânodo comum)

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.

Obs.: O Led RGB poderá ser substituido por 3 leds comuns, sendo 1 vermelho, 1 verde e 1 azul.

 

Referências

Projeto 23 - Criando efeito de cores com um LED RGB

Projeto 14 - Led com efeito dimmer usando potenciômetro

Projeto 26 - Criando cores com Led RGB com 1 potenciômetro (simplificado)

Potenciômetro de eixo giratório

Como usar push button com Arduino (programação)

Projeto 48 - Como controlar um display LCD com o módulo I2C

Projeto 38 - Controlando um display LCD (instalação e comandos básicos) - Caso opte por usar o LCD sem o módulo I2C

Bibliotecas

Para controlarmos o display LCD com módulo I2C precisaremos da biblioteca NewliquidCrystal_1.3.4.zip (download).

Após fazer o download dos arquivos das bibliotecas com todos os arquivos compactados no formato zip, abra o IDE do Arduino e siga o tutorial: Como incluir uma biblioteca no IDE do Arduino.

Para conhecer outras bibliotecas veja a Tabela Biblioteca para Módulos e Tabela Bibliotecas para Sensores.

Código do Projeto (Sketch)

Faça o download e abra o arquivo hub014.ino no IDE do Arduino: DOWNLOAD - hb014.ino

Observações:

a) Se você estiver utilizando um led RGB cátodo comum mude a conexão de Vcc para GND e altere a variável ledType de 1 para 0 (linha 22 do  sketch).

b) Alternativamente, pode-se utilizar 3 LEDs comuns para substituir o led RGB, sendo um vermelho, um verde e um azul. Leia Projeto 20 - Criando cores RGB usando 3 leds (cores do arco-íris).

Se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************
*
*    Hub 14: Controlando led RGB com potenciômetros
*    Autor: Angelo Luis Ferreira
*    Data: 21/07/2022
*    
*             http://squids.com.br/arduino             
*
*******************************************************************************/
#include        // inclui a biblioteca LCD com I2C

// define os pinos digitais de entrada e saída do Arduino
const byte R = 9, G = 10, B = 11;   // pinos digitais usados para o led RGB (Red, Green, Blue)
const byte pinBut = 2;              // pino digital usado para o push button

// define os pinos analógicos do Arduino
const byte potRed = A2;         //potenciômetro controle vermelho
const byte potGreen = A1;       //potenciômetro controle verde
const byte potBlue = A0;        //potenciômetro controle azul

// define se o led RGB é catodo comum(GND) = 0 ou anodo comum(Vcc) = 1
boolean ledType = 1; // ATENÇÃO: se o led for catodo comum, mude para 0

// variável que define decimal (0) ou hexadecimal (1)
boolean hex = 0; // inicial com valor decimal

// instancia objeto da biblioteca LCD
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);  // cria o objeto lcd

void setup() {
  // inicializa a comunicação Serial
  Serial.begin(9600);
  // inicializa o lcd 16X2 com I2C
  lcd.begin(16,2);
  // pin mode - definie entradas e saídas digitais do Arduino
  pinMode(pinBut, INPUT_PULLUP);    // modo entrada - pull up interno arduino
  pinMode(R, OUTPUT);               // define modo saída pino vermelho led RGB
  pinMode(G, OUTPUT);               // define modo saída pino verde led RGB
  pinMode(B, OUTPUT);               // define modo saída pino azul led RGB   
}

void loop() {
  // verifica se o botão foi acionado e altera a base (decimal ou hexadecimal)
  readPushButton();
  // pega os valores dos potenciômetros e define cores
  getPotValues();
  delay(150);
}

void readPushButton() {
    if (!digitalRead(pinBut)) { // verifica se o botão foi acionado
      hex = !hex; // muda o status de hex
      while (!digitalRead(pinBut)) {} // aguarda soltar o botão
      delay(150); // delay para reduzir o efeito bouncing
      lcd.clear();
  }
}

void getPotValues() {
  // pega valores dos potenciômetros (de 0 a 255)
  byte r = map(analogRead(potRed), 0, 1023, 0, 255);
  byte g = map(analogRead(potGreen), 0, 1023, 0, 255);
  byte b = map(analogRead(potBlue), 0, 1023, 0, 255);
  
  //Serial.println(analogRead(potRed)); // use para calibrar o potenciômetro
 
  setColor(r,g,b); // chama a função setColor() para exibir cor no led RGB  
  showDisplay(r,g,b); // chama a função showDisplay para exibir no display
}

// exibe cor no led RGB
void setColor(byte red, byte green, byte blue) {
  if (ledType == 1) { // se led RGB for anodo (conectado no Vcc)
    red = 255 - red, green = 255 - green, blue = 255 - blue;
  }
  // ativando led RGB com as cores setadas
  analogWrite(R, red);
  analogWrite(G, green);
  analogWrite(B, blue);
}

// exibe valores no display
void showDisplay(byte red, byte green, byte blue) {
  if (!hex) { // se base decimal (hex = 0)
      //menu
    lcd.setCursor(3,0);
    lcd.print("R");
    lcd.setCursor(8,0);
    lcd.print("G");
    lcd.setCursor(13,0);
    lcd.print("B");
    // valores
    lcd.setCursor(2,1);
    lcd.print(red);
    lcd.print("  ");
    lcd.setCursor(7,1);
    lcd.print(green);
    lcd.print("  ");
    lcd.setCursor(12,1);
    lcd.print(blue);
    lcd.print("  ");
  } else { // se base hexadecimal (hex = 1)
    // titulo
    lcd.setCursor(3,0);
    lcd.print("Hexadecimal");
    // 
    lcd.setCursor(5,1);
    lcd.write(B00100011);            // exibe o símbolo #
    (red<16) ? lcd.print(0) : red;   // exibe 0 se menor 16 (0 até F)
    lcd.print(red, HEX);             // em hexadecimal
    (green<16) ? lcd.print(0) : green;
    lcd.print(green, HEX); 
    (blue<16) ? lcd.print(0) : blue;
    lcd.print(blue, HEX);    
  } 
}

Vídeo

Como o projeto deve funcionar

1. Após iniciar o programa, a mistura das cores vermelho (R), verde (G) e azul (B) e a variação de luminosidade formada no LED RGB criará um efeito com diversas combinações de cores diferentes.

2. Esta mistura de cores se dá graças as alterações de intensidade de cada cor primária do LED RGB. Isto acontece em função do PWM (Pulse Width Modulation, em português, modulação por largura de pulso) que gera valores RGB diferentes, ou seja, cores diferentes. Este efeito funciona de forma similar a um monitor de computador que é formado de pequenos pontos vermelhos, verdes e azuis.

3. Girando o eixo dos potenciômetros, você vai alterar a intensidade de brilho para cada cor primária do led RGB. O sentido do eixo do potenciômetro será definido pela polaridade, ou seja, girando no sentido horário o brilho do led aumentará (do negativo para o positivo).

4. A mistura das cores primárias com as suas respectivas intensidades de brilho diferentes possibilita criar várias cores únicas no led RGB (até 16,7 milhões de cores diferentes). Teste as cores usando a tabela no link: Tabela de Cores HTML.

5. Os valores da intensidade de brilho de cada cor primária são exibidas no display lcd e alteradas quando você gira os eixos do potenciômetro.

Obs.: Em função das variações na tensão, histerese mecânica e elétrica nos potenciômetros, ruídos na transmissão dos sinais, entre outros, pode ocorrer variações nas leituras dos valores de R, G e B.

6. Ao clicar no botão (push button) você muda a exibição dos valores das cores de RGB para Hexadecimal, e vice e versa.

7. Utilize um difusor (cilindro de papel A4, por exemplo) para que a mistura de cores fique mais agradável, fazendo com que você visualize melhor a cor resultante.

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores