Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
Ko'pincha odamlar RGB LED tasmasini Arduino yordamida boshqarishni xohlashganda, qizil, yashil va ko'k ranglarni aralashtirish uchun uchta potentsiometr ishlatiladi. Bu ishlaydi va sizning ehtiyojlaringiz uchun juda yaxshi bo'lishi mumkin, lekin men rang g'ildiragi kabi yanada sezgirroq narsa qilishni xohlardim.
Bu loyiha aylanuvchi kodlovchi uchun mukammal dastur bo'lib tuyuladi. Bu o'z milining harakatini raqamli chiqishga o'zgartiradigan qurilma. Mil aylantirilganda, kodlovchi Arduino tomonidan o'lchanadigan signal (puls) yuboradi. Aylanadigan kodlovchi haqida ko'proq ma'lumot olish uchun siz uni batafsilroq tushuntirib beradigan ushbu videoni ko'rishingiz mumkin.
Bu yo'riqnomada men sizga aylanadigan enkoder yordamida Arduino RGB LED tasmasini qanday boshqarishni ko'rsataman. Bu yo'riqnoma non taxtasida sxemani qurishni o'z ichiga oladi. Arduino qalqoni yaratish uchun siz o'zingizning tenglikni ishlab chiqarishingiz mumkin!
1 -qadam: qismlar
RGB LED tasmasini boshqarish moslamasi uchun sizga quyidagi materiallar kerak bo'ladi.
- 1 marta Arduino Nano
- 3x IRLB8721PBF, har qanday N-kanalli MOSFET mantiqiy darajasi, agar u kamida 12 V ga baholangan bo'lsa va LED tasmasi iste'mol qilsa, bajaradi.
- 1x aylanadigan kodlovchi
- 1x 12V 2A quvvat manbai, elektr ta'minoti oqimi ishlatilgan LED chizig'ining uzunligiga bog'liq bo'lishi mumkin.
- 16x Erkak -erkak o'tish simlari
- 1x lehimsiz non paneli, har qanday non paneli etarlicha katta bo'lsagina bajariladi.
2 -qadam: O'chirish
Arduino -ni non panelidagi 12V va GND rayiga ulang. Keyin boshqa qismlarni quyidagicha ulang:
Aylanadigan kodlovchi
Pin A - D4
Pin B - D3
GND - GND
MOSFET qizil
Darvoza - GND
Drenaj - qizil chiziqli LED chiziq
Manba - D11
MOSFET GreenGate - GND
Drenaj - yashil chiziqli LED chiziq
Manba - D9
MOSFET BlueGate - GND
Drenaj - ko'k chiziqli LED chiziq
Manba - D6
3 -qadam: kod
// Arduino PWM pinlari
int redPin = 11; int greenPin = 6; int bluePin = 9; // Arduino kodlovchi pinlari int encoderPinA = 3; int kodlovchiPinB = 4; // Rang o'zgaruvchilari int colorVal; int redVal; int greenVal; int blueVal; // Encoder o'zgaruvchilari int encoderPos; int kodlovchiPinACurrent; int encoderPinALast = HIGH; // Boshqa int hisoblagich; void setup () {pinMode (encoderPinA, INPUT_PULLUP); pinMod (kodlovchiPinB, INPUT_PULLUP); } void loop () {readEncoder (); encoder2rgb (hisoblagich); 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; } boshqa {encoderPos = encoderPos + 1; }} encoderPinALast = encoderPinACurrent; hisoblagich = encoderPos*8; agar (hisoblagich 1535) {hisoblagich = 0; } qaytish hisoblagichi; } int encoder2rgb (int counterVal) {// Qizildan sariq ranggacha, agar (counterVal <= 255) {colorVal = counterVal; redVal = 255; yashilVal = rangVal; blueVal = 0; } // Sariqdan yashilgacha, agar boshqa (counterVal <= 511) {colorVal = counterVal - 256; redVal = 255 - colorVal; greenVal = 255; blueVal = 0; } // Yashildan ko'k ranggacha, agar boshqa (counterVal <= 767) {colorVal = counterVal - 512; redVal = 0; greenVal = 255; ko'kVal = rangVal; } // Ko'k rangdan ko'k ranggacha boshqa if (counterVal <= 1023) {colorVal = counterVal - 768; redVal = 0; greenVal = 255 - colorVal; blueVal = 255; } // Moviydan to'q qizil ranggacha, agar boshqa (counterVal <= 1279) {colorVal = counterVal - 1024; qizilVal = rangVal; greenVal = 0; blueVal = 255; } // Qizil rangdan qizil ranggacha {colorVal = counterVal - 1280; redVal = 255; greenVal = 0; blueVal = 255 - colorVal; } redVal, greenVal, blueVal qaytarish; }