2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
Često kada ljudi žele kontrolirati svoju RGB LED traku s Arduinom, koriste se tri potenciometra za miješanje crvene, zelene i plave boje. Ovo funkcionira i moglo bi biti savršeno u redu za vaše potrebe, ali htio sam učiniti nešto intuitivnije, nešto poput kotača u boji.
Čini se da je ovaj projekt savršena aplikacija za rotacijski davač. Ovo je uređaj koji pretvara gibanje svoje osovine u digitalni izlaz. Kad se vratilo okrene, koder šalje signal (puls) koji se može izmjeriti pomoću Arduina. Za više informacija o rotacijskim koderima možete pogledati ovaj video koji to dublje objašnjava.
U ovom Instructable -u ću vam pokazati kako napraviti Arduino RGB LED kontroler pomoću trake pomoću rotacijskog davača. Ovaj Instructable pokriva konstrukciju kruga na ploči. Međutim, mogli biste proizvesti vlastiti PCB kako biste stvorili Arduino štit!
Korak 1: Dijelovi
Za kontroler RGB LED trake trebat će vam sljedeći materijali:
- 1x Arduino Nano
- 3x IRLB8721PBF, bilo koji N-kanalni logički nivo MOSFET-a će raditi sve dok je ocijenjen na najmanje 12V i struju koju vaša LED traka troši.
- 1x rotacijski davač
- 1x napajanje 12V 2A, struja koju napajanje mora isporučiti može ovisiti o duljini korištene LED trake.
- 16x žice kratkospojnika za muškarce
- 1x ploča za lemljenje, svaka ploča će raditi sve dok je dovoljno velika.
Korak 2: Krug
Spojite Arduino na 12V i GND vodilicu matične ploče. Zatim spojite ostale dijelove na sljedeći način:
Rotacijski davač
Pin A - D4
Pin B - D3
GND - GND
MOSFET Crveni
Vrata - GND
Odvod - LED traka crvena žica
Izvor - D11
MOSFET GreenGate - GND
Odvod - LED traka zelena žica
Izvor - D9
MOSFET BlueGate - GND
Odvod - LED traka plava žica
Izvor - D6
Korak 3: Kodirajte
// Arduino PWM igle
int redPin = 11; int greenPin = 6; int bluePin = 9; // Arduino koder pinovi int encoderPinA = 3; int enkoderPinB = 4; // Varijable boja int colorVal; int redVal; int greenVal; int blueVal; // Varijable kodera int encoderPos; int enkoderPinACurrent; int encoderPinALast = HIGH; // Drugi int brojač; void setup () {pinMode (encoderPinA, INPUT_PULLUP); pinMode (encoderPinB, INPUT_PULLUP); } void loop () {readEncoder (); enkoder2rgb (brojač); 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; brojač = enkoderPos*8; if (brojač 1535) {brojač = 0; } brojač povratka; } int encoder2rgb (int counterVal) {// Crveno do žuto if (counterVal <= 255) {colorVal = counterVal; redVal = 255; greenVal = colorVal; blueVal = 0; } // Žuto do zeleno inače if (counterVal <= 511) {colorVal = counterVal - 256; redVal = 255 - colorVal; greenVal = 255; blueVal = 0; } // Zeleno do cijan inače if (counterVal <= 767) {colorVal = counterVal - 512; redVal = 0; greenVal = 255; blueVal = colorVal; } // Cijan do plavo else if (counterVal <= 1023) {colorVal = counterVal - 768; redVal = 0; greenVal = 255 - colorVal; blueVal = 255; } // Plavo do magenta drugo if (counterVal <= 1279) {colorVal = counterVal - 1024; redVal = colorVal; greenVal = 0; blueVal = 255; } // Magenta do crvena else {colorVal = counterVal - 1280; redVal = 255; greenVal = 0; blueVal = 255 - colorVal; } return redVal, greenVal, blueVal; }