2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Freqüentemente, quando as pessoas desejam controlar sua faixa de LED RGB com um Arduino, três potenciômetros são usados para misturar as cores vermelha, verde e azul. Isso funciona e pode ser perfeitamente adequado às suas necessidades, mas eu queria fazer algo mais intuitivo, algo como uma roda de cores.
Este projeto parece ser uma aplicação perfeita para um codificador rotativo. Este é um dispositivo que converte o movimento de seu eixo em uma saída digital. Quando o eixo é girado, o codificador envia um sinal (pulso) que pode ser medido por um Arduino. Para obter mais informações sobre codificadores rotativos, você pode assistir a este vídeo que explica isso com mais detalhes.
Neste Instructable, mostrarei como fazer um controlador de faixa de LED Arduino RGB usando um codificador rotativo. Este Instructable cobre a construção do circuito em uma placa de ensaio. Você pode, entretanto, produzir seu próprio PCB para criar um escudo Arduino!
Etapa 1: Peças
Para o controlador de faixa de LED RGB, você precisará dos seguintes materiais:
- 1x Arduino Nano
- 3x IRLB8721PBF, qualquer MOSFET de nível lógico de canal N servirá, contanto que seja classificado em um mínimo de 12 V e a corrente que sua faixa de LED consome.
- 1x codificador rotativo
- Fonte de alimentação 1x 12V 2A, a corrente que a fonte de alimentação deve fornecer pode depender do comprimento da faixa de LED usada.
- 16x fios de jumper macho para macho
- 1 placa de ensaio sem solda, qualquer placa de ensaio servirá, desde que seja suficientemente grande.
Etapa 2: Circuito
Conecte o Arduino ao trilho 12V e GND da placa de ensaio. Em seguida, conecte as outras partes da seguinte maneira:
Codificador rotativo
Pino A - D4
Pino B - D3
GND - GND
MOSFET Vermelho
Portão - GND
Dreno - tira de LED fio vermelho
Fonte - D11
MOSFET GreenGate - GND
Dreno - tira de LED fio verde
Fonte - D9
MOSFET BlueGate - GND
Dreno - fio LED tira azul
Fonte - D6
Etapa 3: Código
// Pinos PWM do Arduino
redPin int = 11; int greenPin = 6; int bluePin = 9; // Pinos do codificador do Arduino int encoderPinA = 3; int encoderPinB = 4; // Variáveis de cor int colorVal; int redVal; int greenVal; int blueVal; // Variáveis do codificador int encoderPos; int encoderPinACurrent; int encoderPinALast = HIGH; // Outro contador interno; void setup () {pinMode (encoderPinA, INPUT_PULLUP); pinMode (encoderPinB, INPUT_PULLUP); } void loop () {readEncoder (); encoder2rgb (contador); analogWrite (redPin, redVal); analogWrite (greenPin, greenVal); analogWrite (bluePin, blueVal); } int readEncoder () {encoderPinACurrent = digitalRead (encoderPinA); if ((encoderPinALast == LOW) && (encoderPinACurrent == HIGH)) {if (digitalRead (encoderPinB) == LOW) {encoderPos = encoderPos - 1; } else {encoderPos = encoderPos + 1; }} encoderPinALast = encoderPinACurrent; contador = encoderPos * 8; if (contador 1535) {contador = 0; } contador de retorno; } int encoder2rgb (int counterVal) {// Vermelho para amarelo if (counterVal <= 255) {colorVal = counterVal; redVal = 255; greenVal = colorVal; blueVal = 0; } // Amarelo para verde else if (counterVal <= 511) {colorVal = counterVal - 256; redVal = 255 - colorVal; greenVal = 255; blueVal = 0; } // Verde para ciano else if (counterVal <= 767) {colorVal = counterVal - 512; redVal = 0; greenVal = 255; blueVal = colorVal; } // Ciano para azul else if (counterVal <= 1023) {colorVal = counterVal - 768; redVal = 0; greenVal = 255 - colorVal; blueVal = 255; } // Azul para magenta else if (counterVal <= 1279) {colorVal = counterVal - 1024; redVal = colorVal; greenVal = 0; blueVal = 255; } // Magenta para vermelho else {colorVal = counterVal - 1280; redVal = 255; greenVal = 0; blueVal = 255 - colorVal; } return redVal, greenVal, blueVal; }