Mundarija:

Qo'lda ishlangan Arduino bilan ishlaydigan RGB Moodlamp: 7 qadam
Qo'lda ishlangan Arduino bilan ishlaydigan RGB Moodlamp: 7 qadam

Video: Qo'lda ishlangan Arduino bilan ishlaydigan RGB Moodlamp: 7 qadam

Video: Qo'lda ishlangan Arduino bilan ishlaydigan RGB Moodlamp: 7 qadam
Video: Entry_Qiziqarli haydash sayohati 01 2024, Noyabr
Anonim
Arduino bilan ishlaydigan RGB Moodlamp qo'lda ishlangan
Arduino bilan ishlaydigan RGB Moodlamp qo'lda ishlangan
Arduino bilan ishlaydigan RGB Moodlamp qo'lda ishlangan
Arduino bilan ishlaydigan RGB Moodlamp qo'lda ishlangan

Bu ko'rsatma 5 qismga bo'lingan:- Qurilishni rejalashtirish (1-qadam)- Qo'lda ishlangan soya (2+3-qadam)- ATmega8 boshqaruvchisi bilan 3W LEDni boshqarish uchun elektron sxema (4-qadam)- Kod (5-qadam)- Qanday qilib olish mumkin yakka o'zi (Arduino bootloader-ni PonyProg bilan o'chiring va eskizni yoqing) (6-qadam) yaqinda Vid: Ba'zi taassurotlar

de.youtube.com/watch?v=apZ9NpaUG84 Rasm 1: Moodlamp Pic2: 3W kuchli LED

1 -qadam: Qurilishni rejalashtirish:

Qurilishni rejalashtirish
Qurilishni rejalashtirish
Qurilishni rejalashtirish
Qurilishni rejalashtirish

Men faqat bitta varaqda kontseptsiya qilishni yaxshi ko'raman, birinchi varaqda siz ba'zi dastlabki g'oyalarni ko'rasiz. Men pastki o'ngdagi dizaynni tanladim. Ikkinchi sahifada qurilishning ba'zi tafsilotlari ko'rsatilgan. O'lchovlar har safargidek eksperimental, lekin men uchun yaxshi;-) Mening apparat fikrlarim shunday edi:- Men materiallar bilan ishlay olamanmi?- Yorug'lik porlaydimi? Soya orqali? - U qanday nisbatga ega bo'lishi kerak? - Oddiy interfeys uchun menga nechta tugma va qozon kerak bo'ladi? Mening dasturiy fikrlarim: Chiroq necha xil funktsiyaga ega bo'lishi kerak? - O'zgaruvchan tezlikda avtomatik RGB o'chishi - Rangni qo'lda sozlash - Oq rang sozlanishi yorqinligi bilan

2 -qadam: Qo'lda yasalgan soya

Qo'lda ishlangan soya
Qo'lda ishlangan soya
Qo'lda ishlangan soya
Qo'lda ishlangan soya
Qo'lda ishlangan soya
Qo'lda ishlangan soya

Materiallarni yig'ish: Soya: Do'konda men 30 millimetrli plastmassadan 3 fut x 3 futli varaq topdim (Pic1-3). Kesish uchun o'tkir pichoqni ishlating. Zımpara yordamida plastmassani muzlatib qo'ydim (4-6-rasm). silliq silindrni oling, men to'g'ri teshiklarni burg'ilashdan keyin hammasini vidaladim (Pic7-8). Bu chiroyli ko'rinishga ega va ishlov berish juda oson, men 1/8 tishli novda (Pic9-10) ga mos keladigan teshiklarni burg'iladim va urdim. Shu bilan birga, men 3 vattli LEDlarni sovutish va mustahkam poydevorga ega bo'lish uchun sovutgich o'rnatdim. Shaftdan juda ko'p soyalarni olmaslik uchun, men payvand chokidan bir oz qafas quraman, uning tepasida M8 yong'og'i bor (Pic12). Men tugagach, men hammasini yig'ib oldim. Kichik vintlar va yong'oqlar biroz murakkab edi, lekin 30 daqiqadan so'ng men buni qildim.

3 -qadam: Qo'lda ishlangan soya

Qo'lda ishlangan soya
Qo'lda ishlangan soya
Qo'lda ishlangan soya
Qo'lda ishlangan soya
Qo'lda ishlangan soya
Qo'lda ishlangan soya

Baza: Disklar tokchada silliq va yumaloq bo'lishi uchun chayqalgan edi, keyin men uni yog'ochdan yasalgan yog'och dog 'bilan bo'yab qo'ydim, shunda qarag'ay yaxshi ko'rinardi. Keyin nima?! Men ham xuddi shunday tayanch yasashga qaror qildim. muzli plastmassa soyali bo'lib, uni RGB microLED bilan orqa nuri bilan yoritadi (Rasm 5). Tugmalar: Men tugmachani yog'ochdan yasalgan bo'lakdan va tugmachalarni yong'oqning kesilgan qismidan yasadim.

4 -qadam: Elektr davri:

Elektr davri
Elektr davri
Elektr davri
Elektr davri
Elektr davri
Elektr davri

Birinchi rasmda siz mening sxemamni ko'ryapsiz va bu erda boshqa video: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

5 -qadam: Kod:

Kod
Kod
Kodeks
Kodeks
Kod
Kod

Rasmlarda siz Arduino bilan bo'lgan jarayonimni ko'rasiz. Birinchidan, men o'zim ishlab chiqargan ProtoShield, batareya to'plami va bir nechta LED -larni sinab ko'rdim. Bir necha oy oldin TodEKurt "Spooky Projects" va "BionicArduino" bilan boshladim. Http://todbot.com/blog/spookyarduino/ uning loyiha kodining murakkab kombinatsiyasi. "RGBMoodlight", "RGBPotMixer" va ba'zi kengaytmalar. Uchta analog va bitta raqamli ulanish rejimini almashtirish (Ju uchun rahmat, uzilishlar uchun:). LEDlar ulangan PulseWithModulation -ni qo'llab -quvvatlaydigan D9, D10 va D11 -ga. Agar xohlasangiz, men eskizni nashr qila olaman, lekin bu ikkita ajoyib kodning chindan ham yalang'och kombinatsiyasi. Mana mening chiroqning asl kodi. Bu biroz chalkash ko'rinadi, chunki bu meniki edi. Dasturlashning juda erta bosqichi … Lekin agar siz uni nusxa ko'chirsangiz, u juda yaxshi ishlashi kerak. "PotColorMixer", "RGBfadingFunction" va rejimni almashtirish uchun uzilishlar tartibi kabi nozik tinchliklar mavjud./* nejo June 2008

Kley Shirkining "dimmingLEDs" ga asoslangan "Moodlamp" kodim

*2008 yil sentyabr

  • To'xtatish rejimini o'zgartiruvchi, RGB o'chishi va RGB rangini o'zgartirish uchun analog tez terish bilan kayfiyat yoritgichining yakuniy kodi.
  • Karartma funktsiyasi faqat oq rang uchun ishlaydi

*Nejo oktyabr 2008 yil

  • Kayfiyatni ko'tarish uchun ovoz kengaytmasi:
  • Kichkina LM368 Ampli kondensatorli mikrofon, retseptor va past o'tkazgichli RC.
  • Boshqa analog kirish bilan men RGBPotMixer funktsiyasidan foydalanib, mikrofon signalini olish orqali rangni o'zgartiraman.

* * * PWM yordamida 3 ta LED, qizil, yashil va ko'k yoki bitta uch rangli LEDni o'chirish kodi.

  • Dastur asta-sekin qizildan yashilga, yashildan ko'kga va ko'kdan qizilga o'tadi
  • Nosozliklarni tuzatish kodi Arduino 0004 ni o'z ichiga oladi, chunki u yangi Serial.begin () uslubidagi funktsiyalarni ishlatadi.
  • dastlab Kley Shirkining "dimmingLEDs"

*

  • AnalogRead A0 pinida RGB o'chish tezligini o'zgartirish uchun yoqilgan
  • HueRGB rangini o'zgartirish uchun A2 pinida AnalogRead yoqilgan

* * */#o'z ichiga oladi // Chiqish LEDPin = 13; // nosozliklarni tuzatish uchun controlPin redPin = 9; // Qizil LED, raqamli pin 9int greenPin = 10 ga ulangan; // Yashil LED, raqamli pin 10int bluePin = 11 ga ulangan; // Moviy LED, raqamli pin 11int dimredPin = 3 ga ulangan; // tranzistor drayveriga ulangan analog xiralashtirish uchun pinlar dimgreenPin = 5; int dimbluePin = 6; // Kirish tugmasiPin = 2; // kalit D2int piniga ulangan val = 0; // pin statusint tugmasini o'qish uchun o'zgaruvchiState; // tugmani ushlab turish uchun o'zgaruvchi stateint buttonPresses = 0; // borish uchun 3 marta bosiladi! Int potPin0 = 0; // Moodlamp -da so'nish orasidagi kechikishni sozlash uchun idish; int potPin2 = 2; // HueRGB colorint potVal = 0 ni o'zgartirish uchun potentsiometr chiqishi. // maxVal = 0 potansiyometridan kirishni saqlash uchun o'zgaruvchi; // xiralashtiruvchi omilni saqlash qiymati - 255, agar Pot ulanmagan bo'lsa dimPin = 4; // Yorqinlikni pasaytirish uchun A4 ga ulangan qozon // Dasturning o'zgaruvchilari redVal = 255; // pinsint greenVal = 1 ga yuboriladigan qiymatlarni saqlash uchun o'zgaruvchilar; // Boshlang'ich qiymatlar qizil to'la, yashil va ko'k offint blueVal = 1; int i = 0; // Loop counter int wait; // = 15; // 50ms (.05 soniya) kechikish; tezroq pasayishi uchun qisqartirish k = 0; // miltillash funktsiyasidagi controlLED uchun qiymat DEBUG = 0; // DEBUG hisoblagichi; agar 1 ga o'rnatilgan bo'lsa, qiymatlarni serialint LCD = 0 orqali qaytaradi; // LCD hisoblagich; agar 1 ga o'rnatilgan bo'lsa, serialvoid setup () {pinMode (ledPin, OUTPUT) orqali qiymatlarni qaytaradi; pinMode (redPin, OUTPUT); // pinlarni chiqish pinMode (greenPin, OUTPUT) sifatida belgilaydi; pinMode (bluePin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // pinlarni chiqish pinMode (dimbluePin, OUTPUT) sifatida belgilaydi; pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Kommutator pinini kiritish attachInterrupt sifatida o'rnating (0, isr0, RISING); if (DEBUG) {// Agar biz disk raskadrovka uchun pin qiymatlarini ko'rishni istasak… Serial.begin (9600); // … 0004 uslubida ketma -ket chiqishni o'rnatish}} // Asosiy programvoid loop () {if (buttonPresses == 0) {Moodlamp (); // Moodlight funksiyasini chaqiradi} if (buttonPresses == 1) {RGBPotMixer (); // manuel aralashtirish funktsiyasini chaqiradi} if (buttonPresses == 2) {White (); // Bu erda hamma narsa oq rangda} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); // Oq (); Monitor (); dim ();} void Monitor () {// Statusni monitorga yuborish if (DEBUG) {// Agar biz o'qishni xohlasak DEBUG += 1; // DEBUG hisoblagichini ko'paytiring, agar (DEBUG> 10) {// Har 10 tsikldan bosib chiqaring DEBUG = 1; // Hisoblagichni tiklash Serial.print (i); // 0004 uslubidagi ketma -ket buyruqlar Serial.print ("\ t"); // Yorliqni chop etish Serial.print ("R:"); // Chiqish qizil qiymat ekanligini ko'rsating Serial.print (redVal); // Qizil qiymatni chop etish Serial.print ("\ t"); // Yorliqni chop etish Serial.print ("G:"); // Yashil va ko'k uchun takrorlang … Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Ketma -ket chop etish (blueVal); // println, kariyerni qaytarish bilan yakunlanishi Serial.print ("\ t"); Serial.print ("dimValue:"); Ketma -ket chop etish (maxVal); // println, kariyerni qaytarish bilan yakunlanishi Serial.print ("\ t"); Serial.print ("kuting:"); Serial.print (kutish); // potPin0 qiymatini Serial.print monitoriga yozadi ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // potPin0 qiymatini Serial.print monitoriga yozadi ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // potPin0 qiymatini Serial.print monitoriga yozadi ("\ t"); Serial.print ("buttonPresses:"); Serial.println (tugmani bosish); // tugmachaning qiymatini yozadi Monitorga}}} void dim () // Oqni xiralashtirish funktsiyasi // balki keyinchalik barcha rejimlar uchun {maxVal = analogRead (dimPin); maxVal /= 4; // 0..255 analogWrite (dimredPin, maxVal) qiymatini xiralashtirish uchun 0..1024 dan analog diapazoni juda ko'p; analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {kutish = analogRead (potPin0); // potPin0 qiymatini qidiring; // agar Pot ulanmagan bo'lsa: kuting 255 i += 1; // Hisoblagich hisoblagichi // i = i - maxVal; if (i <255) // Birinchi bosqichi pasayadi {redVal -= 1; // Qizil pastga yashilVal += 1; // Yashil -ko'k blueVal = 1; // Moviy past} else if if (i <509) // O'chishning ikkinchi bosqichi {redVal = 1; // Qizil past yashilVal -= 1; // Yashil pastga ko'kVal += 1; // Blue up} else if if (i <763) // Uchinchi bosqich o'chadi {redVal += 1; // Red up greenVal = 1; // Yashil lo2 blueVal -= 1; // Moviy pastga} boshqa // Hisoblagichni qayta o'rnating va yana o'chishni boshlang {i = 1; } // biz "redVal" o'rniga "255 -redVal" qilamiz, chunki // LEDlar Gnd analogWrite o'rniga +5V ga ulangan (redPin, 255 - redVal); // analog pinli LED pinlariga joriy qiymatlarni yozing (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); /* dimredVal = min (redVal - maxVal, 255); // karartma dimredVal = max (redVal - maxVal, 0); dimgreenVal = min (greenVal - maxVal, 255); dimgreenVal = maksimal (greenVal - maxVal, 0); dimblueVal = min (blueVal - maxVal, 255); dimblueVal = maksimal (blueVal - maxVal, 0); analogWrite (redPin, 255 - dimredVal); // analog pinli LED pinlariga joriy qiymatlarni yozing (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / kutish / = 4; kechikish (kutish); // tsiklni davom ettirishdan oldin "kutish" millisekundiga pauza qiling} void RGBPotMixer () {potVal = analogRead (potPin2); // potViol = potVal / 4 kirish pinidagi potentsiometr qiymatini o'qing; // 0-1023 dan 0-255 gacha hue_to_rgb (potVal) ga aylantirish; // potVal-ni rang sifatida ko'rib chiqing va rgb vals-ga aylantiring // "255-", chunki bizda umumiy katod analogWrite (redPin, 255-redVal) emas, balki umumiy anodli LEDlar mavjud; // analog pinli LED pinlariga qiymatlarni yozing (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // qiymatlarni LED pinlariga analogWrite yozing (greenPin, maxVal); analogWrite (bluePin, maxVal); }/*

  • 0-252 oralig'idagi "h" o'zgaruvchan rangini hisobga olgan holda,
  • RGB rang qiymatini mos ravishda o'rnating.
  • Maksimal maksimal to'yinganlik va maksimal qiymat (yorqinlik) ni o'z ichiga oladi.
  • To'liq matematikani bajaradi, suzuvchi nuqta yo'q.

*/void hue_to_rgb (bayt tusi) {if (hue> 252) hue = 252; // 252 ga orqaga qaytish !! nejo bayt hd = tus / 42; // 36 == 252/7, 252 == H_MAX bayt salom = hd % 6; // 0-5 bayt beradi f = tus % 42; bayt fs = f * 6; switch (salom) {0 holat: redVal = 252; greenVal = fs; blueVal = 0; tanaffus; 1-holat: redVal = 252-fs; greenVal = 252; blueVal = 0; tanaffus; 2 -holat: redVal = 0; greenVal = 252; blueVal = fs; tanaffus; 3 -holat: redVal = 0; greenVal = 252-fs; blueVal = 252; tanaffus; 4 -holat: redVal = fs; greenVal = 0; blueVal = 252; tanaffus; 5 -holat: redVal = 252; greenVal = 0; blueVal = 252-fs; tanaffus; }} bekor isr0 () {Serial.println ("\ n / n uzilish / n"); buttonState = digitalRead (switchPin); // dastlabki holat kechikishini o'qingMikrosaniyalar (100000); // if (val! = buttonState) {// tugma holati o'zgardi! // if (buttonState == HIGH) {// tugma bosilganligini tekshiring, tugmani bosing ++; //} // val = buttonState; // yangi holatni o'zgarmaydiganimizda saqlang, agar (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} Keyingi bosqich-tranzistor-haydovchilar. Men 3Ampere maksimal oqimi bo'lgan 3 ta PNP tranzistoridan foydalandim. Oldinga oqim va kuchlanish tartibga solingandan so'ng, LEDemitter to'liq intensivlikda juda yaxshi ishladi.

6-qadam: PonyProg-da yoqilgan yuklash vositasi yordamida mustaqil bo'ling

PonyProg-da yoqilgan yuklash vositasi yordamida uni mustaqil ravishda oling
PonyProg-da yoqilgan yuklash vositasi yordamida uni mustaqil ravishda oling

Arduino bootloader -ni ATmega168 yoki ATmega8 -da yondirish uchun arduino muhit bilan arzon bo'sh chipni yoqish uchun paralel portidan qanday foydalanish kerak. /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

7 -qadam: Bu mening Arduino Moodlamp

Bu mening Arduino Moodlamp
Bu mening Arduino Moodlamp

Agar sizga yoqqan bo'lsa, menga baho bering.

Tavsiya: