2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-13 06:58
Keď ľudia chcú ovládať svoj RGB LED pásik pomocou Arduina, často sa používajú tri potenciometre na zmiešanie červenej, zelenej a modrej farby. To funguje a pre vaše potreby to môže byť úplne v poriadku, ale chcel som urobiť niečo intuitívnejšie, niečo ako farebné koliesko.
Tento projekt sa zdá byť perfektnou aplikáciou pre rotačný kodér. Jedná sa o zariadenie, ktoré prevádza pohyb svojho hriadeľa na digitálny výstup. Keď je hriadeľ otočený, kodér vyšle signál (impulz), ktorý je možné merať pomocou Arduina. Ak sa chcete dozvedieť viac o rotačných snímačoch, môžete si pozrieť toto video, ktoré to vysvetľuje podrobnejšie.
V tomto návode vám ukážem, ako vytvoriť ovládač LED pásu Arduino RGB pomocou rotačného enkodéra. Tento návod sa týka konštrukcie obvodu na doske. Môžete si však vytvoriť vlastnú PCB a vytvoriť tak štít Arduino!
Krok 1: Diely
Na ovládač RGB LED pásov budete potrebovať nasledujúce materiály:
- 1x Arduino Nano
- 3x IRLB8721PBF, akýkoľvek N-kanálový logický stupeň MOSFET bude fungovať, pokiaľ je dimenzovaný na minimálne 12V a prúd, ktorý spotrebuje váš pásik LED.
- 1x rotačný kodér
- 1x napájací zdroj 12V 2A, prúd, ktorý musí napájací zdroj dodať, závisí od dĺžky použitého LED pásu.
- 16x prepojovacie vodiče medzi mužom a mužom
- 1x spájkovačka bez spájkovania, akýkoľvek prkénko bude fungovať, pokiaľ je dostatočne veľké.
Krok 2: Okruh
Pripojte Arduino k 12V a GND lište nepájivej dosky. Potom pripojte ostatné diely nasledovne:
Rotačný kodér
Kolík A - D4
Kolík B - D3
GND - GND
MOSFET červený
Brána - GND
Odtok - LED pásik červený drôt
Zdroj - D11
MOSFET GreenGate - GND
Odvod - LED pásik zelený drôt
Zdroj - D9
MOSFET BlueGate - GND
Odtok - LED pásik modrý drôt
Zdroj - D6
Krok 3: Kód
// Piny Arduino PWM
int redPin = 11; int greenPin = 6; int bluePin = 9; // Kodéry Arduino piny int encoderPinA = 3; int kodérPinB = 4; // Farebné premenné int colorVal; int redVal; int greenVal; int blueVal; // Premenné kodéra int encoderPos; int kodérPinACurrent; int kodérPinALast = HIGH; // Iné int počítadlo; neplatné nastavenie () {pinMode (encoderPinA, INPUT_PULLUP); pinMode (encoderPinB, INPUT_PULLUP); } void loop () {readEncoder (); encoder2rgb (počítadlo); 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; počítadlo = kodérPos*8; if (počítadlo 1535) {počítadlo = 0; } počítadlo spiatočky; } int encoder2rgb (int counterVal) {// Červená až žltá if (counterVal <= 255) {colorVal = counterVal; redVal = 255; greenVal = colorVal; blueVal = 0; } // Žltá až zelená else if (counterVal <= 511) {colorVal = counterVal - 256; redVal = 255 - colorVal; greenVal = 255; blueVal = 0; } // Zelená až azúrová else if (counterVal <= 767) {colorVal = counterVal - 512; redVal = 0; greenVal = 255; blueVal = colorVal; } // Azúrová až modrá inak if (counterVal <= 1023) {colorVal = counterVal - 768; redVal = 0; greenVal = 255 - colorVal; blueVal = 255; } // Modrá až purpurová else if (counterVal <= 1279) {colorVal = counterVal - 1024; redVal = colorVal; greenVal = 0; blueVal = 255; } // Magenta to red else {colorVal = counterVal - 1280; redVal = 255; greenVal = 0; blueVal = 255 - colorVal; } vrátiť redVal, greenVal, blueVal; }