RGB LEDni Arduino-ga qanday ulash mumkin. Turli xil ranglarni quyish uchun Arduino Arduino kodi tomonidan boshqariladigan RGB Led Strip




Pulse Width Modulation (PWM) servolarni haydashda qiziqarli va ayniqsa qiziqarli, ammo bugun biz uni uch rangli LEDga qo'llaymiz. Bu bizga uning rangini nazorat qilish va go'zallik ko'rinishini olish imkonini beradi.

PWM

PWM ning ajoyib ta'rifi Vikipediyada tuzilgan, shuning uchun men uni o'sha erdan ko'chirib olaman: "PWM - kerakli signalni (ko'p darajali yoki uzluksiz) haqiqiy ikkilik signallarga yaqinlashtirish (ikki darajali - yoqilgan o'chirilgan ), shuning uchun o'rtacha ma'lum vaqt davomida ularning qiymatlari teng bo'ladi. <...> V IM doimiy chastotali va o'zgaruvchan impuls signalidir ish aylanishi , ya'ni zarba takrorlash davrining uning davomiyligiga nisbati. Ish siklini belgilash orqali (puls davomiyligi)PWM chiqishida o'rtacha kuchlanishni o'zgartirishingiz mumkin. "


Endi bu nimani anglatishini aniqlaylik. Shunday oddiy to'rtburchaklar signal bo'lsin:




U belgilangan chastotaga va 50% ish aylanishiga ega. Bu shuni anglatadiki, davrning yarmi kuchlanish maksimal, qolgan yarmi esa nolga teng. Ushbu signalni davr mobaynida birlashtirgandan so'ng, biz uning energiyasi maksimalning yarmiga teng ekanligini ko'ramiz. Bu xuddi biz kabi bo'ladi Hamma vaqt qo'llaniladigan yarim kuchlanish.


Agar bizda maksimal kuchlanish 5 V bo'lsa, unda PWM chiqishida olingan kuchlanish 5 V ga ko'paytirilgan ish aylanishiga teng (va rasmiy-nazi bog'lanmasligi uchun 100% ga bo'linadi):


Arduino sizga PWM chiqishiga 0 dan 255 gacha qiymat yozish imkonini beradi, ya'ni biz taxminan 20 mV o'lchamdagi kuchlanishni olishimiz mumkin.


Uch rangli LED

Mana, u to'rt oyoqli kelishgan odam:


Eng uzun oyoq - umumiy anod, qolganlari esa katodlar bo'lib, ularning har biri o'z rangi uchun javobgardir: (rasmga qarang) pastki qismi qizil, yuqoridan ikkinchisi yashil, yuqori qismi ko'k.

Agar siz uzun oyoqqa +5V, qolganlariga esa 0V ni qo'llasangiz, siz oq nurga ega bo'lasiz (sizdan iltimos qilaman, o'zingizni himoya qiling - cheklovchi rezistorlarni qo'ying!). Uning qanchalik oq ekanligini quyidagi video orqali aniqlash mumkin:


Ammo oq rangga ega bo'lish qiziq emas. Keling, uni turli xil ranglar bilan qanday porlashni ko'rib chiqaylik.

Arduino-da PWM

Arduino-da PWM chastotasi taxminan 490 Gts ni tashkil qiladi. Arduino UNO platasida PWM uchun ishlatilishi mumkin bo'lgan pinlar 3,5,6, 9, 10 va 11 dir. Doskada buning uchun ishora bor - PWM pin raqamlari oldida tilda yoki keskin bor. silkscreen orqali.

Arduino bilan PWM-ni boshqarishdan osonroq narsa yo'q! Buning uchun faqat bitta funktsiya mavjud. analogWrite (pin, qiymat), qayerda pin- chiqish raqami, va qiymat- 0 dan 255 gacha bo'lgan qiymat. Bunday holda, hech narsa yozishingiz shart emas bekor o'rnatish()!

Bu haqda ko'proq ingliz tilida o'qishingiz mumkin va.

Bir oz ishlayapti

Keling, LEDni turli xil ranglarda porlab turaylik. Bir rang asta-sekin yo'qolsin, ikkinchisi esa porlaydi. Biz navbat bilan bir nechta rangni o'zgartiramiz va rang aylana bo'ylab qizildan yashilga, yashildan ko'kgacha, ko'kdan qizilga aylanadi.

Keling, oddiy sxemani yig'amiz:


Va oddiy kod yozing:

// rangga qarab chiqishlarni chaqirish
int REDpin = 9;
int GREEN pin = 10;
int BLUE pin = 11;

bekor sozlash (){}

bekor halqa (){
uchun (int qiymati = 0; qiymat<= 255; value +=1) {
// qizil rangning yorqinligi pasayadi
analogWrite(REDpin, qiymat);
// yashil rangning yorqinligi oshadi
analogWrite(GREENpin, 255-qiymat);
// ko'k o'chirilgan
analogWrite (BLUEpin, 255);
// pauza
kechikish (30);
}

uchun (int qiymati = 0; qiymat<= 255; value +=1) {
// qizil o'chirilgan
analogWrite (REDpin, 255);
// yashil rangning yorqinligi pasayadi
analogWrite(GREENpin, qiymat);
//ko'k rangning yorqinligi oshadi
analogWrite(BLUEpin, 255-qiymat);
// pauza
kechikish (30);
}

uchun (int qiymati = 0; qiymat<= 255; value +=1) {
// qizil rangning yorqinligi oshadi
analogWrite(REDpin, 255-qiymat);
// yashil o'chirilgan
analogWrite (GREENpin, 255);
//ko'kning yorqinligi pasayadi
analogWrite(BLUEpin, qiymat);
// pauza
kechikish (30);
}
}

  • 220 ohmli 3 ta rezistor (bu erda eng keng tarqalgan reytinglarning ajoyib rezistorlari to'plami mavjud);
  • ulash simlari (men ushbu to'plamni tavsiya qilaman);
  • non taxtasi (non taxtasi);
  • Arduino IDE ishlab chiqish muhitiga ega shaxsiy kompyuter.
  • 1 RGB LEDlar orasidagi farq umumiy anod va umumiy katod

    RGB LEDlar ikki xil bo'ladi: umumiy anod bilan ("ortiqcha") Va umumiy katod ("minus"). Rasmda ushbu ikki turdagi LEDlarning elektron sxemalari ko'rsatilgan. LEDning uzun oyog'i har doim umumiy quvvat pinidir. Qizil LEDning chiqishi (R) alohida, yashil (G) va ko'k (B) rasmda ko'rsatilganidek, umumiy chiqishning boshqa tomonida joylashgan. Ushbu maqolada biz RGB LEDni umumiy anod va umumiy katod bilan ulashni ko'rib chiqamiz.

    2 RGB LEDni umumiy anod bilan ulash Arduino uchun

    Umumiy anodli RGB LED ulanish sxemasi rasmda ko'rsatilgan. Biz anodni Arduino platasida "+5 V" ga, qolgan uchta chiqishni o'zboshimchalik bilan raqamli pinlarga ulaymiz.


    Shuni esda tutingki, biz har bir LEDni o'z rezistori orqali ulaymiz va bitta umumiy rezistordan foydalanmaymiz. Buni qilish tavsiya etiladi, chunki LEDlarning har biri o'z samaradorligiga ega. Va agar siz ularning barchasini bitta rezistor orqali ulasangiz, LEDlar turli yorqinlik bilan yonadi.

    Siz tanlagan LED uchun mos keladigan qarshilik qiymatini tezda hisoblash uchun siz onlayn LED kalkulyatoridan foydalanishingiz mumkin.

    3 RGB LED boshqaruvi Arduino yordamida

    Keling, klassik eskizni qayta yozamiz miltillash. Biz uchta rangning har birini navbat bilan yoqamiz va o'chirib qo'yamiz. E'tibor bering, biz Arduino-ning mos keladigan piniga past darajani (LOW) qo'llaganimizda LED yonadi.

    // PIN raqamlarini o'rnatish: const int pinR = 12; const int pinG = 10; const int pinB = 9; bekor o'rnatish()(// PIN-kodni belgilash: pinMode(pinR, OUTPUT); pinMode (pinG, OUTPUT); pinMode (pinB, OUTPUT); } void loop() ( digitalWrite (pinR, LOW); //kanalni yoqing Qizil kechikish(100); digitalWrite (pinR, HIGH); //Qizil kechikishni o'chirish(200); digitalWrite (pinG, LOW); //kanalni yoqing Yashil kechikish(100); digitalWrite (pinG, HIGH); //Yashil kechikishni o'chirish (200); digitalWrite (pinB, LOW); //kanalni yoqing Moviy kechikish(100); digitalWrite (pinB, HIGH); //Moviy kechikishni o'chirish (200); }

    4 Sxemani yig'ing non taxtasida

    Keling, RGB LED ishlayotganini ko'rib chiqaylik. LED navbat bilan qizil, yashil va ko'k yonadi. Har bir rang 0,1 soniya yoniq qoladi va keyin 0,2 soniya davomida o'chadi va keyingisi yoqiladi. Siz har bir kanalni alohida-alohida yoqishingiz mumkin, barchasini bir vaqtning o'zida yoqishingiz mumkin, keyin porlashning rangi o'zgaradi.


    Arduino-ga ulangan RGB LED. Sxema non taxtasida yig'ilgan

    5 Arduino uchun

    Agar foydalanayotgan bo'lsangiz Umumiy katodli RGB LED, keyin LEDning uzun simini ga ulang GND Arduino platalari va R, G va B kanallari Arduino raqamli portlariga. Shuni esda tutish kerakki, LEDlar umumiy anodli LEDdan farqli o'laroq, R, G, B kanallariga yuqori daraja (HIGH) qo'llanilganda yonadi.


    Umumiy katodli RGB LEDni Arduino-ga ulash diagrammasi

    Agar siz yuqoridagi eskizni o'zgartirmasangiz, bu holda LEDning har bir rangi 0,2 soniya yonadi va ular orasidagi pauza 0,1 soniyani tashkil qiladi.

    Agar siz LEDning yorqinligini nazorat qilmoqchi bo'lsangiz, RGB LEDni PWM funksiyasiga ega bo'lgan Arduino raqamli pinlariga ulang. Arduino taxtasidagi bunday pinlar odatda tilda (to'lqinli chiziq), yulduzcha yoki aylana bilan belgilanadi.

    Ko'p rangli LEDlar yoki ular RGB deb ham ataladi, rangi dinamik ravishda o'zgarib turadigan orqa yorug'likni ko'rsatish va yaratish uchun ishlatiladi. Aslida, ular haqida hech qanday maxsus narsa yo'q, keling, ular qanday ishlashini va RGB LEDlari nima ekanligini ko'rib chiqaylik.

    Ichki tashkilot

    Aslida, RGB LED bitta paketda birlashtirilgan uchta bitta rangli kristalldir. RGB nomi har bir kristall chiqaradigan ranglarga ko'ra Qizil - qizil, Yashil - yashil, Moviy - ko'k degan ma'noni anglatadi.

    Ushbu uchta rang asosiy bo'lib, har qanday rang ularni aralashtirish orqali hosil bo'ladi; bu texnologiya uzoq vaqtdan beri televizor va fotografiyada qo'llanilgan. Yuqoridagi rasmda siz har bir kristallning yorqinligini alohida ko'rishingiz mumkin.

    Ushbu rasmda siz barcha soyalarni olish uchun ranglarni aralashtirish tamoyilini ko'rasiz.

    RGB LED-lardagi kristallar quyidagi tarzda ulanishi mumkin:

    Umumiy anod bilan;

    Umumiy katod bilan;

    Ulanmagan.

    Birinchi ikkita variantda siz LEDning 4 ta pinli ekanligini ko'rasiz:

    Yoki oxirgi holatda 6 ta xulosa:

    Fotosuratda ob'ektiv ostida aniq ko'rinadigan uchta kristallni ko'rishingiz mumkin.

    Bunday LEDlar uchun maxsus o'rnatish yostiqchalari sotiladi, ular hatto xulosalarning maqsadini ham ko'rsatadi.

    RGBW - LEDlarni e'tiborsiz qoldirib bo'lmaydi, ularning farqi shundaki, ularning holatida oq yorug'lik chiqaradigan boshqa kristal mavjud.

    Tabiiyki, bunday LEDlar bilan lentalarsiz emas edi.

    Ushbu rasmda umumiy anod sxemasi bo'yicha yig'ilgan RGB LEDli chiziq ko'rsatilgan, yorug'lik intensivligi quvvat manbaining "-" (minus) ni boshqarish orqali o'rnatiladi.

    RGB tasmasining rangini o'zgartirish uchun maxsus RGB kontrollerlari ishlatiladi - lentaga berilgan kuchlanishni almashtirish uchun qurilmalar.

    Mana RGB SMD5050 pinout:

    Va lentalar yo'q, RGB lentalari bilan ishlash uchun maxsus xususiyatlar yo'q, hamma narsa monoxrom modellar bilan bir xil bo'lib qoladi.

    Ular uchun LED tasmasini lehimsiz ulash uchun ulagichlar ham mavjud.

    Mana 5 mm RGB LED uchun pinout:

    Yorqinlikning rangi qanday o'zgaradi

    Rangni sozlash kristallarning har birining nurlanishining yorqinligini sozlash orqali amalga oshiriladi. Biz allaqachon ko'rib chiqdik.

    Lenta uchun RGB kontrolleri xuddi shu printsip bo'yicha ishlaydi, u elektr ta'minotining salbiy chiqishini boshqaruvchi mikroprotsessorga ega - uni mos keladigan rang sxemasidan ulaydi va ajratadi. Tekshirish moslamasi odatda masofadan boshqarish pulti bilan birga keladi. Nazoratchilar turli xil imkoniyatlarga ega, ularning o'lchamlari bunday miniatyuradan boshlab bunga bog'liq.

    Ha, bunday kuchli qurilma quvvat manbai o'lchamidagi holatda.

    Ular lentaga quyidagi sxema bo'yicha ulanadi:

    Lentadagi treklarning bo'limi lentaning keyingi qismini u bilan ketma-ket ulashga imkon bermaganligi sababli, birinchisining uzunligi 5 m dan oshsa, ikkinchi qismni to'g'ridan-to'g'ri RGB tekshirgichidan simlar bilan ulashingiz kerak.

    Ammo siz vaziyatdan chiqib ketishingiz mumkin va tekshirgichdan 5 metr masofada qo'shimcha 4 simni tortib olmaysiz va RGB kuchaytirgichidan foydalaning. Uning ishlashi uchun siz faqat 2 ta simni (ortiqcha va minus 12V) cho'zishingiz yoki eng yaqin 220V manbadan boshqa quvvat manbaini, shuningdek oldingi segmentdagi 4 ta "ma'lumot" simini (R, G va B) yoqishingiz kerak. boshqaruvchidan buyruqlarni qabul qilish, shuning uchun butun struktura bir xil tarzda porlaydi.

    Va keyingi segment allaqachon kuchaytirgichga ulangan, ya'ni. u oldingi lenta qismidagi signaldan foydalanadi. Ya'ni, lentani to'g'ridan-to'g'ri uning yonida joylashgan kuchaytirgichdan quvvatlantirishingiz mumkin va shu bilan asosiy RGB kontrolleridan simlarni yotqizish uchun pul va vaqtni tejashingiz mumkin.

    Biz o'z qo'llarimiz bilan RGB-ledni sozlaymiz

    Shunday qilib, RGB LEDlarni boshqarishning ikkita varianti mavjud:

    Bu erda 1A gacha bo'lgan oqimni etkazib berishga qodir uchta CAT4101 drayverlaridan foydalangan holda, arduin va boshqa mikrokontrollerlardan foydalanmasdan sxemaning varianti.

    Biroq, endi kontrollerlar ancha arzon va agar siz LED tasmasini sozlashingiz kerak bo'lsa, unda tayyor versiyani sotib olish yaxshiroqdir. Arduino bilan sxemalar ancha sodda, ayniqsa siz rangni qo'lda o'rnatishingiz mumkin bo'lgan eskizni yozishingiz mumkin yoki berilgan algoritmga muvofiq ranglarni tanlash avtomatik bo'ladi.

    Xulosa

    RGB-LEDlar qiziqarli yoritish effektlarini yaratishga imkon beradi, interyer dizaynida, maishiy texnika uchun orqa yorug'lik sifatida, televizor ekranini kengaytirish effekti uchun ishlatiladi. Oddiy LEDlardan ular bilan ishlashda alohida farqlar yo'q.

    Ushbu qurilmalarni boshqarish uchun RGB kontroller ishlatiladi. Ammo undan tashqari, so'nggi yillarda Arduino platasi ham ishlatilgan.

    Arduino - ishlash printsipi

    arduino taxtasi

    Arduino platasi - bu dasturlashtiriladigan mikrokontroller o'rnatilgan qurilma. Unga turli xil sensorlar, boshqaruv elementlari yoki enkoderlar ulangan va ma'lum bir eskizga (dasturga) ko'ra, plata motorlar, LEDlar va boshqa aktuatorlarni, shu jumladan SPI protokoli yordamida boshqa Arduino platalarini boshqaradi. Qurilmani masofadan boshqarish pulti, Bluetooth moduli, HC-06, Wi-Fi, ESP yoki internet va tugmalar orqali boshqarish mumkin. Eng mashhur platalardan ba'zilari Arduino Nano va Arduino Uno, shuningdek, ATmega 328 mikrokontrolleriga asoslangan Arduino Pro Mini qurilmasidir.


    Tashqi ko'rinishi Arduino Pro Mini
    Tashqi ko'rinishi Arduino Uno
    Arduino mikro ko'rinishi

    Dasturlash oddiy kompyuterda o'rnatilgan ochiq kodli Arduino muhitida amalga oshiriladi. Dasturlar USB orqali yuklab olinadi.

    Arduino orqali yukni boshqarish printsipi


    Arduino nazorati

    Kengash ko'plab chiqishlarga ega, ikkala raqamli, ikkita holatga ega - yoqish va o'chirish va analog, 500 Gts chastotali PWM kontrolleri orqali boshqariladi.

    Lekin chiqishlar 5 V kuchlanishli 20 - 40 mA oqim uchun mo'ljallangan. Bu ko'rsatkich RGB LED yoki 32x32 mm LED matritsa modulini quvvatlantirish uchun etarli. Keyinchalik kuchli yuk uchun bu etarli emas.

    Ko'pgina loyihalarda ushbu muammoni hal qilish uchun siz qo'shimcha qurilmalarni ulashingiz kerak:

    • Estafeta. 5V kuchlanishli individual o'rni bilan bir qatorda, turli xil kontaktlarga ega bo'lgan barcha yig'ilishlar, shuningdek, o'rnatilgan starterlar mavjud.
    • Bipolyar tranzistorlardagi kuchaytirgichlar. Bunday qurilmalarning kuchi nazorat oqimi bilan cheklangan, ammo siz bir nechta elementlardan sxemani yig'ishingiz yoki tranzistorlar birikmasidan foydalanishingiz mumkin.
    • Dala effekti yoki MOSFET tranzistorlari. Ular 40 - 50 V gacha bo'lgan bir necha amperli oqim va kuchlanishli yuklarni boshqarishi mumkin. Mosfetni PWM va vosita yoki boshqa induktiv yukga ulashda himoya diyot kerak bo'ladi. LED yoki LED lampalarga ulanganda, bu shart emas.
    • Kengaytirish platalari.

    LED tasmasini Arduino-ga ulash


    LED tasmasini arduinoga ulash

    Ekspert fikri

    Aleksey Bartosh

    Elektr jihozlari va sanoat elektronikasini ta'mirlash, texnik xizmat ko'rsatish bo'yicha mutaxassis.

    Mutaxassisdan so'rang

    Arduino Nano nafaqat elektr motorlarini boshqara oladi. Ular LED chiziqlar uchun ham ishlatiladi. Biroq, taxtaning chiqish oqimi va kuchlanishi LED-lar bilan chiziqni to'g'ridan-to'g'ri ulash uchun etarli emasligi sababli, boshqaruvchi va LED tasmasi o'rtasida qo'shimcha qurilmalar o'rnatilishi kerak.

    rele orqali


    Rele orqali ulanish

    O'rni qurilmaga raqamli chiqishga ulangan. Uning yordami bilan boshqariladigan chiziq faqat ikkita holatga ega - yoqish va o'chirish. Qizil-ko'k-yashil lentani boshqarish uchun uchta o'rni kerak. Bunday qurilmani boshqarishi mumkin bo'lgan oqim lasanning kuchi bilan cheklangan (past quvvatli bobin katta kontaktlarni yopishga qodir emas). Ko'proq quvvatni ulash uchun o'rni agregatlari ishlatiladi.

    Bipolyar tranzistor bilan


    Transistor bilan ulanish

    Chiqish oqimi va kuchlanishini kuchaytirish uchun bipolyar tranzistordan foydalanish mumkin. U yukning oqimi va kuchlanishiga qarab tanlanadi. Tekshirish oqimi 20 mA dan yuqori bo'lmasligi kerak, shuning uchun u 1 - 10 kOhm oqim cheklovchi qarshilik orqali ta'minlanadi.

    Transistorni ishlatish yaxshiroqdir n-p-n umumiy emitent bilan. Yuqori daromad olish uchun bir nechta elementlar yoki tranzistorlar yig'ilishi (kuchaytirgich chipi) bo'lgan sxema ishlatiladi.

    Dala effektli tranzistor bilan

    Tarmoqlarni boshqarish uchun bipolyarga qo'shimcha ravishda dala effektli tranzistorlar qo'llaniladi. Ushbu qurilmalarning boshqa nomi MOS yoki MOSFET-tranzistordir.

    Bunday element, bipolyardan farqli o'laroq, oqim bilan emas, balki eshikdagi kuchlanish bilan boshqariladi. Bu kichik eshik oqimini katta yuk oqimlarini - o'nlab ampergacha olib borish imkonini beradi.

    Element oqim cheklovchi qarshilik orqali ulanadi. Bunga qo'shimcha ravishda, u shovqinlarga sezgir, shuning uchun tekshirgichning chiqishi 10 kŌ qarshilik bilan erga ulanishi kerak.

    Kengaytirish platalari bilan


    Arduino-ni kengaytirish platalari bilan ulash

    O'rni va tranzistorlardan tashqari, tayyor bloklar va kengaytirish platalari ishlatiladi.

    Bu Wi-Fi yoki Bluetooth, L298N moduli yoki ekvalayzer kabi motorni boshqarish drayveri bo'lishi mumkin. Ular turli quvvat va kuchlanishdagi yuklarni boshqarish uchun mo'ljallangan. Bunday qurilmalar bitta kanalli - ular faqat monoxrom lentani boshqarishi mumkin va ko'p kanalli - RGB va RGBW qurilmalari uchun mo'ljallangan, shuningdek, WS 2812 LEDli lentalar.

    Dastur misol


    Arduino va LED tasmasi

    Arduino platalari oldindan belgilangan dasturlarga muvofiq LED tuzilmalarini boshqarishga qodir. Ularning kutubxonalarini rasmiy saytdan yuklab olish, Internetda topish yoki o'zingiz yangi eskiz (kod) yozishingiz mumkin. Bunday qurilmani o'z qo'llaringiz bilan yig'ishingiz mumkin.

    Bunday tizimlardan foydalanishning ba'zi variantlari:

    • Yoritish nazorati. Yorug'lik sensori yordamida xonadagi yorug'lik ham darhol, ham quyosh botishi bilan yorqinlikning asta-sekin o'sishi bilan yoqiladi. Qo'shilish, shuningdek, "aqlli uy" tizimiga yoki telefon aloqasiga integratsiyalashgan holda, wi-fi orqali amalga oshirilishi mumkin.
    • Zinadan yoki uzun koridorda chiroqni yoqish. Har bir qadamning LED yoritgichi alohida-alohida juda chiroyli ko'rinadi. Harakat sensori taxtaga ulanganda, uning ishlashi ketma-ketlikka olib keladi, vaqtni kechiktirish bilan qadamlar yoki koridorning yoritilishi yoqiladi va bu elementni o'chirib qo'yish teskari jarayonga olib keladi.
    • Rangli musiqa. Filtrlar orqali analog kirishlarga audio signalni qo'llash orqali chiqish rangli-musiqiy o'rnatish bo'ladi.
    • Kompyuterni modifikatsiya qilish. Tegishli sensorlar va dasturlar yordamida LEDlarning rangi haroratga yoki protsessor yoki RAMning yukiga bog'liq bo'lishi mumkin. Bunday qurilma dmx 512 protokoli bo'yicha ishlaydi.
    • Kodlovchi bilan ishlaydigan chiroqlarning tezligini nazorat qilish. Shunga o'xshash o'rnatishlar WS 2811, WS 2812 va WS 2812B chiplarida yig'ilgan.

    Video ko'rsatma

    Men yaqinda 2 ta rulon sotib oldim rgb led chiziq 5 metr va darhol u bilan tajriba o'tkazishga qaror qildi. To'plamga tarmoqli boshqaruv bloki kiritilgan, ammo dasturlar men uchun qiziq emasdek tuyuldi va Tinyos Uno yaqinda edi (to'liq Xitoy analogi). Arduino UNO). Shuni hisobga olib arduino har bir chiqishda maksimal 5v, va tez-tez 3,3v bilan ishlaydi, keyin yechim topish kerak edi. Ushbu maqolada 12 voltli LED tasmasini qanday ulash kerakligi ko'rsatilgan arduino bilan lenta va nazorat qilish uchun alohida ozuqa bilan arduino kanalni boshqarish uchun MOSFETlardan foydalanish RGB chiziqlar.

    Analog LED tasmasi standart spetsifikatsiyasidan boshlaylik, menimcha, bu eng keng tarqalgan.

    • Har bir segment uchun kengligi 10,5 mm (0,41 dyuym), qalinligi 3 mm (0,12 dyuym), uzunligi 100 mm (3,95 dyuym)
    • Bu suv o'tkazmaydigan ( Suv o'tmas) va himoyasiz ( suv o'tkazmaydigan)
    • Orqa tomonda lentani biriktirish uchun yopishqoq lenta mavjud
    • Har bir segment uchun maksimal kuchlanish 12V va 60mA
    • Har bir segment uchun 3 ta umumiy anodli LED
    • LED to'lqin uzunligi: 630nm / 530nm / 475nm
    • Mikrokontroller yoki kontroller chipi yo'q (sof analog boshqaruv)

    Ishni boshlashdan oldin Arduino va kuchlanish 5 voltdan yuqori bo'lsa, yonib ketmaslik uchun sizga o'qishni maslahat beraman Arduino. U qanday foydalanishni yaxshi tasvirlab beradi MOSFETlar dan Arduino. Agar siz ushbu maqolani allaqachon o'qigan bo'lsangiz, keling, davom etamiz.
    LED tasmasi bilan ishlash uchun bizga kerak:

    1. MOSFET xuddi shu EBay-da topish mumkin bo'lgan tranzistorlar
    2. 10k uchun rezistorlar?
    3. Breadboard lehimsiz taxta ( non taxtasi)
    4. Ulanish uchun simlar arduino non taxtasi bilan (erkak-erkak)
    5. LED tasmasi (men oldim aliexpress bu lenta va men bir xil sotuvchidan yana ikkita buyurtma berishni rejalashtirmoqdaman)

    Keling, ushbu maqolaning asosiy qismi aniq bo'ladigan ulanish sxemasiga o'tamiz:

    Endi keling Arduino IDE, unda biz tasmani boshqarish uchun eskiz yozamiz:

    // E'tibor bering, bu yerda ba'zi eski kodlar qolgan, ular hech narsa qilmaydi // lekin hech qanday zarar keltirmasligi kerak ... // bular bilan o'ylamang, noqonuniy summalarni keyinroq #define RED 9// qizil LED uchun pin #define GREEN 10 // yashil uchun pin - hech qachon aniq havola qilinmagan #define BLUE 11 // pin uchun ko'k - hech qachon aniq havola qilinmagan #Define SIZE 255 #define DELAY 20 #define HUE_MAX 6.0 #define HUE_DELTA 0,01 ( //long deltas = //long, deltas) 6, 7); uzoq rgb; uzoq rgbval; // noma'lum sabablarga ko'ra, agar qiymat !=0 bo'lsa, LED yonmaydi Hmm ... // va to'yinganlik teskari ko'rinadi float hue=0,0, to'yinganlik=1, qiymat=1; /* tanlangan LED SparkFun sku : COM-09264 maksimal yorqinlikka (RGB) ega: (2800, 6500, 1200)mcd, shuning uchun biz ularni 1200 mcd ga normallashtiramiz - R 250/600 = 107/256 G 250/950 = 67/252 B 205 = /256 */ uzun yorqin = ( 107, 67, 256); // uzun yorqin = ( 256, 256, 256); uzun k, temp_value; bekor oʻrnatish () ( randomSeed(analogRead(4)); (k=) uchun 0;k<3; k++) { pinMode(RED + k, OUTPUT); rgb[k]=0; analogWrite(RED + k, rgb[k] * bright[k]/256); } } void loop() { hue += HUE_DELTA; if (hue >HUE_MAX) ( rang=0,0; ) rgbval=HSV_to_RGB(rang, to‘yinganlik, qiymat); rgb = (rgbval & 0x00FF0000) >> 16; // yaxshiroq yo'llar bo'lishi kerak rgb = (rgbval & 0x0000FF00) >><3; k++) { // for all three colours analogWrite(RED + k, rgb[k] * bright[k]/256); } delay(DELAY); } long HSV_to_RGB(float h, float s, float v) { // H is given on . S and V are given on . // RGB is returned as a 24-bit long #rrggbb int i; float m, n, f; // not very elegant way of dealing with out of range: return black if ((s<0.0) || (s>1.0) || (v<1.0) || (v> < 0.0) || (h >6.0)) ( qaytish long(v * 255) + long(v * 255) * 256 + long(v * 255) * 65536; ) i = qavat(h); f = h - i; agar (!(i&1)) ( f = 1 - f; // agar i juft bo'lsa ) m = v * (1 - s); n = v * (1 - s * f); switch (i) ( 6-holat: 0-holat: qaytish long(v * 255) * 65536 + long(n * 255) * 256 + long(m * 255); 1-holat: qaytish long(n * 255) * 65536 + long(v * 255) * 256 + long(m * 255); 2-holat: qaytish long(m * 255) * 65536 + long(v * 255) * 256 + long(n * 255); 3-holat: uzoq qaytish (m * 255) * 65536 + uzun(n * 255) * 256 + uzun(v * 255); 4-holat: uzoqni qaytarish (n * 255) * 65536 + uzun (m * 255) * 256 + uzun(v *) 255); 5-holat: qaytish long(v * 255) * 65536 + uzun(m * 255) * 256 + uzun(n * 255); ) )

    Eskizni arduino-ga yuklang va zavqlaning.
    Harorat sensori yordamida variant ham mavjud DS18B20 protokolga muvofiq ishlaydi 1 sim.

    G'oya shundan iboratki, " sovuq harorat, odatda ko'k, va issiq harorat" qizil rangga ega bo'ladi. Agar birinchi eskizda foydalangan HSV g'ildiragiga qarasangiz (rangli g'ildirak uchun vikiga qarang), rang sovuqda 240° dan issiqda 0° gacha, soat yo'nalishi bo'yicha harakatlanadi (ko'k, yashil va sariq ranglardan o'tib) ).

    sovuq harorat bu holda, biz 18 ° S ni nazarda tutamiz va issiq 30 ° S ni nazarda tutadi. Sovuq chegaradan past harorat sovuq, issiq chegaradan yuqori harorat issiq deb hisoblanadi. HSV kodini tayyorlaganingizdan so'ng yakuniy kod aslida juda oddiy:

    // Arduino uchun HSV oʻchdi/bounce // Eʼtibor bering, bu yerda hech narsa qilmayotganga oʻxshab koʻringan bir qancha eski kodlar qolgan // lekin hech qanday zarar keltirmasligi kerak... #include “OneWire.h” //#include “Oqim. h" const int DS18S20_Pin = 2; //DS18S20 Signal pin 2 raqamli pin #define MIN_TEMP 18 #define MAX_TEMP 30 //Temperatura chip i/o OneWire ds(DS18S20_Pin); // raqamli pinda 2 // don"t fut bilan bular, noqonuniy summalar keyinroq #define RED 9// qizil LED uchun pin #define GREEN 10 // pin yashil uchun - hech qachon aniq havola qilinmagan #define BLUE 11 // pin for ko'k - hech qachon aniq havola qilinmagan #Define SIZE 255 #define DELAY 0 # HUE_MAX 6.0 ni aniqlang #define HUE_DELTA 0.01 //uzun deltalar = ( 5, 6, 7 ); uzoq rgb; uzoq rgbval; // noma'lum sabablarga ko'ra, agar qiymat !=0 bo'lsa, LED yonmaydi Hmm ... // va to'yinganlik teskari ko'rinadi float hue=0,0, to'yinganlik=1, qiymat=1; /* tanlangan LED SparkFun sku : COM-09264 maksimal yorqinlikka (RGB) ega: (2800, 6500, 1200)mcd, shuning uchun biz ularni 1200 mcd ga normallashtiramiz - R 250/600 = 107/256 G 250/950 = 67/252 B 205 = /256 */ uzun yorqin = ( 107, 67, 256); // uzun yorqin = ( 256, 256, 256); uzun k, temp_value; bekor oʻrnatish () ( randomSeed(analogRead(4)); Serial.begin( 57600); uchun (k=0; k<3; k++) { pinMode(RED + k, OUTPUT); rgb[k]=0; analogWrite(RED + k, rgb[k] * bright[k]/256); } } void loop() { float temperature = constrain(getTemp(), MIN_TEMP, MAX_TEMP); float deltaTemp = (MAX_TEMP - MIN_TEMP); float deltaHue = 4 - 0; hue = map((temperature - MIN_TEMP) * 100, 0, deltaTemp * 100, deltaHue * 100, 0) / 100.0; //Serial << "Temperature: " << temperature << endl; //Serial << "HUE: " << hue << endl; rgbval=HSV_to_RGB(hue, saturation, value); rgb = (rgbval & 0x00FF0000) >> 16; // yaxshiroq yo'llar bo'lishi kerak rgb = (rgbval & 0x0000FF00) >> 8; rgb=rgbval&0x000000FF; uchun (k=0; k<3; k++) { // for all three colours analogWrite(RED + k, rgb[k] * bright[k]/256); } //delay(DELAY); } float getTemp(){ //returns the temperature from one DS18S20 in DEG Celsius byte data; byte addr; if (!ds.search(addr)) { //no more sensors on chain, reset search ds.reset_search(); return -1000; } if (OneWire::crc8(addr, 7) != addr) { Serial.println("CRC is not valid!"); return -1000; } if (addr != 0x10 && addr != 0x28) { Serial.print("Device is not recognized"); return -1000; } ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end byte present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for (int i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } ds.reset_search(); byte MSB = data; byte LSB = data; float tempRead = ((MSB << 8) | LSB); //using two"s compliment float TemperatureSum = tempRead / 16; return TemperatureSum; } long HSV_to_RGB(float h, float s, float v) { // H is given on . S and V are given on . // RGB is returned as a 24-bit long #rrggbb int i; float m, n, f; // not very elegant way of dealing with out of range: return black if ((s<0.0) || (s>1.0) || (v<1.0) || (v>1.0)) ( 0L qaytaring; ) agar ((h< 0.0) || (h >6.0)) ( qaytish long(v * 255) + long(v * 255) * 256 + long(v * 255) * 65536; ) i = qavat(h); f = h - i; agar (!(i&1)) ( f = 1 - f; // agar i juft bo'lsa ) m = v * (1 - s); n = v * (1 - s * f); switch (i) ( 6-holat: 0-holat: qaytish long(v * 255) * 65536 + long(n * 255) * 256 + long(m * 255); 1-holat: qaytish long(n * 255) * 65536 + long(v * 255) * 256 + long(m * 255); 2-holat: qaytish long(m * 255) * 65536 + long(v * 255) * 256 + long(n * 255); 3-holat: uzoq qaytish (m * 255) * 65536 + uzun(n * 255) * 256 + uzun(v * 255); 4-holat: uzoqni qaytarish (n * 255) * 65536 + uzun (m * 255) * 256 + uzun(v *) 255); 5-holat: qaytish long(v * 255) * 65536 + uzun(m * 255) * 256 + uzun(n * 255); ) )