INHOUDSOPGAWE:
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
As mense gereeld hul RGB LED -strook met 'n Arduino wil beheer, word drie potensiometers gebruik om die rooi, groen en blou kleure te meng. Dit werk en kan perfek vir u behoeftes pas, maar ek wou iets meer intuïtief maak, soos 'n kleurwiel.
Dit lyk asof hierdie projek 'n perfekte toepassing vir 'n roterende encoder is. Dit is 'n toestel wat die beweging van sy as na 'n digitale uitset omskakel. As die as gedraai word, stuur die encoder 'n sein (pols) uit wat deur 'n Arduino gemeet kan word. Vir meer inligting oor roterende enkoders, kan u hierdie video kyk wat dit meer in diepte verduidelik.
In hierdie instruksies sal ek u wys hoe u 'n Arduino RGB LED -strookbeheerder kan maak deur 'n draaikodeerder te gebruik. Hierdie instruksie dek die konstruksie van die kring op 'n broodbord. U kan egter u eie PCB vervaardig om 'n Arduino -skild te skep!
Stap 1: Onderdele
Vir die RGB LED -strookbeheerder benodig u die volgende materiale:
- 1x Arduino Nano
- 3x IRLB8721PBF, sal enige N-kanaal logiese vlak MOSFET doen solank dit 'n minimum van 12V het en die stroom wat u LED-strook verbruik.
- 1x Rotary encoder
- 1x 12V 2A kragtoevoer, die stroom wat die kragtoevoer moet lewer, kan afhang van die lengte van die gebruikte LED -strook.
- 16x manlike tot manlike draaddrade
- 1x soldeerlose broodbord, enige broodbord sal dit doen solank dit voldoende groot is.
Stap 2: Skakel
Koppel die Arduino aan die 12V- en GND -spoor van die broodbord. Koppel dan die ander dele soos volg:
Rotary encoder
Speld A - D4
Speld B - D3
GND - GND
MOSFET Rooi
Hek - GND
Dreineer - LED strook rooi draad
Bron - D11
MOSFET GreenGate - GND
Dreineer - LED -strook groen draad
Bron - D9
MOSFET BlueGate - GND
Dreineer - LED -strook blou draad
Bron - D6
Stap 3: Kodeer
// Arduino PWM -penne
int redPin = 11; int greenPin = 6; int bluePin = 9; // Arduino encoder pins int encoderPinA = 3; int encoderPinB = 4; // Kleurveranderlikes int colorVal; int redVal; int greenVal; int blueVal; // Encoder veranderlikes int encoderPos; int encoderPinACurrent; int encoderPinALast = HOOG; // Ander inteller; ongeldige opstelling () {pinMode (encoderPinA, INPUT_PULLUP); pinMode (encoderPinB, INPUT_PULLUP); } leemte -lus () {readEncoder (); encoder2rgb (teller); 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; } anders {encoderPos = encoderPos + 1; }} encoderPinALast = encoderPinACurrent; teller = encoderPos*8; as (teller 1535) {teller = 0; } retourteller; } int encoder2rgb (int counterVal) {// Rooi na geel as (counterVal <= 255) {colorVal = counterVal; redVal = 255; greenVal = colorVal; blouval = 0; } // Geel tot groen anders as (counterVal <= 511) {colorVal = counterVal - 256; redVal = 255 - colorVal; greenVal = 255; blouval = 0; } // Groen tot siaan anders as (counterVal <= 767) {colorVal = counterVal - 512; redVal = 0; greenVal = 255; blueVal = colorVal; } // Siaan in blou anders as (counterVal <= 1023) {colorVal = counterVal - 768; redVal = 0; greenVal = 255 - colorVal; blouval = 255; } // Blou tot magenta anders as (counterVal <= 1279) {colorVal = counterVal - 1024; redVal = colorVal; greenVal = 0; blouval = 255; } // Magenta na rooi anders {colorVal = counterVal - 1280; redVal = 255; greenVal = 0; blueVal = 255 - colorVal; } gee terug redVal, greenVal, blueVal; }