Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Ofta när människor vill styra sin RGB LED -remsa med en Arduino används tre potentiometrar för att blanda de röda, gröna och blå färgerna. Detta fungerar och kan vara perfekt för dina behov, men jag ville göra något mer intuitivt, något som ett färghjul.
Detta projekt verkar vara en perfekt applikation för en roterande kodare. Detta är en enhet som konverterar rörelsen från sin axel till en digital utgång. När axeln vrids skickar kodaren ut en signal (puls) som kan mätas av en Arduino. För mer information om roterande kodare kan du titta på den här videon som förklarar den mer ingående.
I den här instruktionsboken kommer jag att visa dig hur du gör en Arduino RGB LED -stripkontroll med hjälp av en roterande kodare. Denna instruktionsbok täcker konstruktionen av kretsen på en brödbräda. Du kan dock producera din egen PCB för att skapa en Arduino -sköld!
Steg 1: Delar
För RGB LED -stripkontrollen behöver du följande material:
- 1x Arduino Nano
- 3x IRLB8721PBF, alla N-kanals logiska nivå MOSFET kommer att göra så länge det är märkt till minst 12V och den ström din LED-remsa förbrukar.
- 1x roterande pulsgivare
- 1x 12V 2A strömförsörjning, strömmen som strömförsörjningen måste leverera kan bero på längden på den använda LED -remsan.
- 16x tröjor från man till han
- 1x Lödlös brödbräda, alla brödbrädor kommer att göra så länge det är tillräckligt stort.
Steg 2: Krets
Anslut Arduino till brädbrädans 12V- och GND -skena. Anslut sedan de andra delarna enligt följande:
Roterande pulsgivare
Stift A - D4
Stift B - D3
GND - GND
MOSFET Röd
Gate - GND
Avlopp - LED -remsa röd tråd
Källa - D11
MOSFET GreenGate - GND
Avlopp - LED -remsa grön tråd
Källa - D9
MOSFET BlueGate - GND
Avlopp - LED -remsa blå tråd
Källa - D6
Steg 3: Kod
// Arduino PWM -stift
int redPin = 11; int greenPin = 6; int bluePin = 9; // Arduino encoder pins int encoderPinA = 3; int encoderPinB = 4; // Färgvariabler int colorVal; int redVal; int greenVal; int blueVal; // Kodervariabler int encoderPos; int encoderPinACurrent; int encoderPinALast = HIGH; // Annan inträknare; void setup () {pinMode (encoderPinA, INPUT_PULLUP); pinMode (encoderPinB, INPUT_PULLUP); } void loop () {readEncoder (); kodare2rgb (räknare); 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; } annat {encoderPos = encoderPos + 1; }} encoderPinALast = encoderPinACurrent; räknare = encoderPos*8; if (räknare 1535) {räknare = 0; } returräknare; } int encoder2rgb (int counterVal) {// Röd till gul om (counterVal <= 255) {colorVal = counterVal; redVal = 255; greenVal = colorVal; blueVal = 0; } // Gul till grön annars if (counterVal <= 511) {colorVal = counterVal - 256; redVal = 255 - colorVal; greenVal = 255; blueVal = 0; } // Grön till cyan annars om (counterVal <= 767) {colorVal = counterVal - 512; redVal = 0; greenVal = 255; blueVal = colorVal; } // Cyan till blått annat om (counterVal <= 1023) {colorVal = counterVal - 768; redVal = 0; greenVal = 255 - colorVal; blueVal = 255; } // Blå till magenta annars om (counterVal <= 1279) {colorVal = counterVal - 1024; redVal = colorVal; greenVal = 0; blueVal = 255; } // Magenta till rött annat {colorVal = counterVal - 1280; redVal = 255; greenVal = 0; blueVal = 255 - colorVal; } returnera redVal, greenVal, blueVal; }