Início
/
Projetos Arduino
/
Squids Hub
/
Básico
/
Hub 014 - Misturador de cores RGB usando potenciômetros e Arduino
Hub 014 - Misturador de cores RGB usando potenciômetros e Arduino
Angelo Luis Ferreira | 22/07/2022
Acessos: 3.476
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 |
 |
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 |
 |
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