2025 Autore: John Day | [email protected]. Ultima modifica: 2025-01-13 06:57
Spesso quando le persone vogliono controllare la loro striscia LED RGB con un Arduino, vengono utilizzati tre potenziometri per mescolare i colori rosso, verde e blu. Funziona e potrebbe andare benissimo per le tue esigenze, ma volevo creare qualcosa di più intuitivo, qualcosa come una ruota dei colori.
Questo progetto sembra essere un'applicazione perfetta per un encoder rotativo. Questo è un dispositivo che converte il movimento del suo albero in un'uscita digitale. Quando l'albero viene ruotato, l'encoder invia un segnale (impulso) che può essere misurato da un Arduino. Per ulteriori informazioni sugli encoder rotativi, puoi guardare questo video che lo spiega in modo più approfondito.
In questo Instructable ti mostrerò come realizzare un controller per strisce LED RGB Arduino utilizzando un encoder rotativo. Questo Instructable copre la costruzione del circuito su una breadboard. Potresti comunque produrre il tuo PCB per creare uno shield Arduino!
Passaggio 1: parti
Per il controller della striscia LED RGB avrai bisogno dei seguenti materiali:
- 1x Arduino Nano
- 3x IRLB8721PBF, qualsiasi MOSFET a livello logico a canale N funzionerà purché sia valutato a un minimo di 12 V e la corrente consumata dalla striscia LED.
- 1x codificatore rotante
- 1x alimentatore 12V 2A, la corrente che l'alimentatore deve erogare può dipendere dalla lunghezza della striscia LED utilizzata.
- 16x cavi jumper maschio-maschio
- 1x breadboard senza saldatura, qualsiasi breadboard andrà bene purché sia sufficientemente grande.
Passaggio 2: circuito
Collega Arduino al binario 12V e GND della breadboard. Quindi collegare le altre parti come segue:
Encoder rotativo
Pin A - D4
Perno B - D3
GND - GND
MOSFET Rosso
Cancello - GND
Drain - filo rosso striscia LED
Sorgente - D11
MOSFET GreenGate - GND
Drain - filo verde striscia LED
Fonte - D9
MOSFET BlueGate - GND
Drain - filo blu striscia LED
Sorgente - RE6
Passaggio 3: codice
// pin Arduino PWM
int pin rosso = 11; int pin verde = 6; int bluePin = 9; // Pin encoder Arduino int encoderPinA = 3; int encoderPinB = 4; // Variabili colore int colorVal; int redVal; int greenVal; int bluVal; // Variabili dell'encoder int encoderPos; int encoderPinACCurrent; int encoderPinALast = ALTO; // Altro contatore int; void setup(){ pinMode(encoderPinA, INPUT_PULLUP); pinMode(codificatorePinB, INPUT_PULLUP); } void loop(){ readEncoder(); encoder2rgb(contatore); 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; contatore = encoderPos*8; if (contatore 1535){ contatore = 0; } contatore di ritorno; } int encoder2rgb(int counterVal){ // Da rosso a giallo if (counterVal <= 255){ colorVal = counterVal; redVal = 255; greenVal = colorVal; bluVal = 0; } // Da giallo a verde else if (counterVal <= 511){ colorVal = counterVal - 256; redVal = 255 - colorVal; greenVal = 255; bluVal = 0; } // Da verde a ciano else if (counterVal <= 767){ colorVal = counterVal - 512; redVal = 0; greenVal = 255; blueVal = colorVal; } // Da ciano a blu else if (counterVal <= 1023){ colorVal = counterVal - 768; redVal = 0; greenVal = 255 - colorVal; bluVal = 255; } // Da blu a magenta else if (counterVal <= 1279){ colorVal = counterVal - 1024; redVal = colorVal; greenVal = 0; bluVal = 255; } // Da magenta a rosso else{ colorVal = counterVal - 1280; redVal = 255; greenVal = 0; blueVal = 255 - colorVal; } return redVal, greenVal, blueVal; }