2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Pogosto, ko želijo ljudje upravljati svoj RGB LED trak z Arduinom, se za mešanje rdeče, zelene in modre barve uporabljajo trije potenciometri. To deluje in bi lahko bilo popolnoma v redu za vaše potrebe, vendar sem želel narediti nekaj bolj intuitivnega, na primer barvno kolo.
Zdi se, da je ta projekt popolna aplikacija za rotacijski dajalnik. To je naprava, ki pretvori gibanje svoje gredi v digitalni izhod. Ko je gred obrnjena, dajalnik pošlje signal (impulz), ki ga je mogoče izmeriti z Arduinom. Za več informacij o rotacijskih kodirnikih si lahko ogledate ta videoposnetek, ki to podrobneje pojasnjuje.
V tem navodilu vam bom pokazal, kako z vrtljivim dajalnikom narediti Arduino RGB LED tračni krmilnik. Ta navodila opisujejo konstrukcijo vezja na plošči. Lahko pa izdelate lastno tiskano vezje, da ustvarite Arduino ščit!
1. korak: Deli
Za krmilnik LED trakov RGB boste potrebovali naslednje materiale:
- 1x Arduino Nano
- 3x IRLB8721PBF, bo kateri koli N-kanalni logični nivo MOSFET deloval, dokler je ocenjen na najmanj 12V in tok, ki ga porabi vaš LED trak.
- 1x rotacijski dajalnik
- 1x 12V 2A napajalnik, tok, ki ga mora napajati, je lahko odvisen od dolžine uporabljenega LED traku.
- 16x moških moških žic
- 1x brez lemljenja, vsaka plošča bo delovala, dokler je dovolj velika.
2. korak: Vezje
Arduino priključite na 12V in GND tirnico na plošči. Nato ostale dele povežite na naslednji način:
Rotacijski dajalnik
Pin A - D4
Pin B - D3
GND - GND
MOSFET rdeč
Vrata - GND
Odtok - rdeča žica z LED trakom
Vir - D11
MOSFET GreenGate - GND
Odtok - LED trak zelena žica
Vir - D9
MOSFET BlueGate - GND
Odtok - modra žica z LED trakom
Vir - D6
3. korak: Koda
// Arduino PWM zatiči
int redPin = 11; int greenPin = 6; int bluePin = 9; // zatiči dajalnika Arduino int encoderPinA = 3; int kodirnikPinB = 4; // Barvne spremenljivke int colorVal; int redVal; int greenVal; int blueVal; // spremenljivke kodirnika int encoderPos; int encoderPinACurrent; int encoderPinALast = HIGH; // Drugi int števec; void setup () {pinMode (encoderPinA, INPUT_PULLUP); pinMode (encoderPinB, INPUT_PULLUP); } void loop () {readEncoder (); kodirnik2rgb (števec); 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; števec = kodirnikPos*8; if (števec 1535) {števec = 0; } števec vračila; } int encoder2rgb (int counterVal) {// Rdeče do rumeno if (counterVal <= 255) {colorVal = counterVal; redVal = 255; greenVal = colorVal; blueVal = 0; } // Rumeno do zeleno drugače if (counterVal <= 511) {colorVal = counterVal - 256; redVal = 255 - colorVal; greenVal = 255; blueVal = 0; } // Zeleno do cijan sicer if (counterVal <= 767) {colorVal = counterVal - 512; redVal = 0; greenVal = 255; blueVal = colorVal; } // modro -modra drugače if (counterVal <= 1023) {colorVal = counterVal - 768; redVal = 0; greenVal = 255 - colorVal; blueVal = 255; } // Modra do škrlatna drugače if (counterVal <= 1279) {colorVal = counterVal - 1024; redVal = colorVal; greenVal = 0; blueVal = 255; } // Magenta do rdeča else {colorVal = counterVal - 1280; redVal = 255; greenVal = 0; blueVal = 255 - colorVal; } return redVal, greenVal, blueVal; }