Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Ofte når folk vil kontrollere sin RGB LED -stripe med en Arduino, brukes tre potensiometre for å blande de røde, grønne og blå fargene. Dette fungerer og kan være helt greit for dine behov, men jeg ønsket å gjøre noe mer intuitivt, noe som et fargehjul.
Dette prosjektet ser ut til å være et perfekt program for en roterende encoder. Dette er en enhet som konverterer bevegelsen til akselen til en digital utgang. Når akselen dreies, sender koderen ut et signal (puls) som kan måles av en Arduino. For mer om roterende kodere, kan du se denne videoen som forklarer den mer grundig.
I denne instruksjonsboken vil jeg vise deg hvordan du lager en Arduino RGB LED -stripekontroller ved hjelp av en roterende encoder. Denne instruksen dekker konstruksjonen av kretsen på et brødbrett. Du kan imidlertid produsere din egen PCB for å lage et Arduino -skjold!
Trinn 1: Deler
For RGB LED -stripekontrolleren trenger du følgende materialer:
- 1x Arduino Nano
- 3x IRLB8721PBF, vil ethvert N-kanalers logisk nivå MOSFET gjøre så lenge det er vurdert til minimum 12V og strømmen din LED-stripe bruker.
- 1x roterende encoder
- 1x 12V 2A strømforsyning, strømmen strømforsyningen må levere kan avhenge av lengden på den brukte LED -stripen.
- 16x stikkontakter fra mann til mann
- 1x Loddefritt brødbrett, et hvilket som helst brødbrett vil gjøre så lenge det er tilstrekkelig stort.
Trinn 2: Krets
Koble Arduino til 12V- og GND -skinnen på brødbrettet. Koble deretter de andre delene som følger:
Roterende encoder
Pin A - D4
Pin B - D3
GND - GND
MOSFET Rød
Gate - GND
Avløp - LED -stripe rød ledning
Kilde - D11
MOSFET GreenGate - GND
Avløp - LED -stripe grønn ledning
Kilde - D9
MOSFET BlueGate - GND
Avløp - LED -stripe blå ledning
Kilde - D6
Trinn 3: Kode
// Arduino PWM -pinner
int redPin = 11; int greenPin = 6; int bluePin = 9; // Arduino encoder pins int encoderPinA = 3; int encoderPinB = 4; // Fargevariabler int colorVal; int redVal; int greenVal; int blueVal; // Kodervariabler int encoderPos; int encoderPinACurrent; int encoderPinALast = HØY; // Andre inteller; ugyldig oppsett () {pinMode (encoderPinA, INPUT_PULLUP); pinMode (encoderPinB, INPUT_PULLUP); } void loop () {readEncoder (); encoder2rgb (teller); 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; } annet {encoderPos = encoderPos + 1; }} encoderPinALast = encoderPinACurrent; teller = encoderPos*8; hvis (teller 1535) {teller = 0; } returteller; } int encoder2rgb (int counterVal) {// Rød til gul hvis (counterVal <= 255) {colorVal = counterVal; redVal = 255; greenVal = colorVal; blueVal = 0; } // Gul til grønn ellers hvis (counterVal <= 511) {colorVal = counterVal - 256; redVal = 255 - colorVal; greenVal = 255; blueVal = 0; } // Grønn til cyan annet hvis (counterVal <= 767) {colorVal = counterVal - 512; redVal = 0; greenVal = 255; blueVal = colorVal; } // Cyan til blått annet hvis (counterVal <= 1023) {colorVal = counterVal - 768; redVal = 0; greenVal = 255 - colorVal; blueVal = 255; } // Blå til magenta ellers hvis (counterVal <= 1279) {colorVal = counterVal - 1024; redVal = colorVal; greenVal = 0; blueVal = 255; } // Magenta til rødt annet {colorVal = counterVal - 1280; redVal = 255; greenVal = 0; blueVal = 255 - colorVal; } returner redVal, greenVal, blueVal; }