Sisällysluettelo:
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
Usein, kun ihmiset haluavat ohjata RGB -LED -nauhaansa Arduinolla, kolme potentiometriä käytetään punaisen, vihreän ja sinisen värin sekoittamiseen. Tämä toimii ja voisi sopia täydellisesti tarpeisiisi, mutta halusin tehdä jotain intuitiivisempaa, jotain väripyörää.
Tämä projekti näyttää olevan täydellinen sovellus pyörivälle anturille. Tämä on laite, joka muuntaa akselinsa liikkeen digitaaliseksi lähdöksi. Kun akselia käännetään, anturi lähettää signaalin (pulssin), jonka Arduino voi mitata. Jos haluat lisätietoja pyörivistä enkoodereista, katso tämä video, joka selittää sen syvällisemmin.
Tässä ohjeessa näytän sinulle, kuinka tehdä Arduino RGB LED -kaistaohjain kiertokooderin avulla. Tämä opas kattaa piirin rakentamisen leipälevylle. Voit kuitenkin valmistaa oman piirilevyn Arduino -kilven luomiseksi!
Vaihe 1: Osat
RGB -LED -nauhaohjaimelle tarvitset seuraavat materiaalit:
- 1x Arduino Nano
- 3x IRLB8721PBF, mikä tahansa N-kanavainen logiikkataso MOSFET toimii niin kauan kuin se on mitoitettu vähintään 12 V: lle ja LED-nauhan kuluttama virta.
- 1x pyörivä anturi
- 1x 12V 2A virtalähde, virtalähteen toimittama virta voi riippua käytetyn LED -nauhan pituudesta.
- 16x Uros -uros -hyppyjohdot
- 1x Juoton leipälauta, mikä tahansa leipälauta toimii niin kauan kuin se on riittävän suuri.
Vaihe 2: Piiri
Liitä Arduino leipälevyn 12V- ja GND -kiskoon. Liitä sitten muut osat seuraavasti:
Pyörivä anturi
Nasta A - D4
Nasta B - D3
GND - GND
MOSFET Punainen
Portti - GND
Tyhjennys - LED -nauha punainen lanka
Lähde - D11
MOSFET GreenGate - GND
Tyhjennys - LED -nauha vihreä lanka
Lähde - D9
MOSFET BlueGate - GND
Tyhjennys - LED -nauha sininen johto
Lähde - D6
Vaihe 3: Koodi
// Arduino PWM -nastat
int redPin = 11; int greenPin = 6; int bluePin = 9; // Arduino -kooderin nastat int encoderPinA = 3; int -kooderiPinB = 4; // Värimuuttujat int colorVal; int redVal; int greenVal; int blueVal; // Encoder -muuttujat int encoderPos; int encoderPinACurrent; int encoderPinALast = HIGH; // muu int -laskuri; void setup () {pinMode (encoderPinA, INPUT_PULLUP); pinMode (encoderPinB, INPUT_PULLUP); } void loop () {readEncoder (); kooderi2rgb (laskuri); analogWrite (redPin, redVal); analogWrite (vihreäPin, vihreäVal); 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; laskuri = kooderiPos*8; jos (laskuri 1535) {laskuri = 0; } palautuslaskuri; } int encoder2rgb (int counterVal) {// Punaisesta keltaiseksi, jos (counterVal <= 255) {colorVal = counterVal; redVal = 255; greenVal = colorVal; blueVal = 0; } // Keltaisesta vihreään muuten if (counterVal <= 511) {colorVal = counterVal - 256; redVal = 255 - colorVal; vihreäVal = 255; blueVal = 0; } // Vihreästä syaaniin muuhun if (counterVal <= 767) {colorVal = counterVal - 512; redVal = 0; vihreäVal = 255; blueVal = colorVal; } // Syaani siniseksi muuten if (counterVal <= 1023) {colorVal = counterVal - 768; redVal = 0; greenVal = 255 - colorVal; blueVal = 255; } // Sininen purppuraan muuhun if (counterVal <= 1279) {colorVal = counterVal - 1024; redVal = colorVal; vihreäVal = 0; blueVal = 255; } // Magenta punaiseksi else {colorVal = counterVal - 1280; redVal = 255; vihreäVal = 0; blueVal = 255 - colorVal; } palauta redVal, greenVal, blueVal; }