Mündəricat:

Əl işi Arduino ilə işləyən RGB Moodlamp: 7 addım
Əl işi Arduino ilə işləyən RGB Moodlamp: 7 addım

Video: Əl işi Arduino ilə işləyən RGB Moodlamp: 7 addım

Video: Əl işi Arduino ilə işləyən RGB Moodlamp: 7 addım
Video: Arduino ilə Gecə lampası 2024, Noyabr
Anonim
Əl işi Arduino ilə işləyən RGB Moodlamp
Əl işi Arduino ilə işləyən RGB Moodlamp
Əl işi Arduino ilə işləyən RGB Moodlamp
Əl işi Arduino ilə işləyən RGB Moodlamp

Bu təlimat 5 hissəyə bölünür:- Tikintinin planlaşdırılması (Addım 1)- Əl istehsalı kölgə (Addım 2+3)- ATmega8 nəzarətçi ilə 3W LED-lərin idarə edilməsi üçün elektron sxem (Addım 4)- Kod (Addım 5)- Necə əldə etmək olar tək başına (PonyProg ilə Arduino yükləyicisini yandırın və eskizi yandırın) (Addım 6) tezliklə Vid: Bəzi Təəssüratlar

de.youtube.com/watch?v=apZ9NpaUG84 Şəkil 1: The Moodlamp Pic2: Güclü 3W LED

Addım 1: Tikintinin planlaşdırılması:

Tikintinin planlaşdırılması
Tikintinin planlaşdırılması
Tikintinin planlaşdırılması
Tikintinin planlaşdırılması

Yalnız bir vərəqdə bir konsepsiya etməyi sevirəm. İlk səhifədə bəzi erkən fikirlər görürsən. Sağ alt dizaynı seçdim. İkinci səhifədə inşaat üçün bəzi detallar göstərilir. Ölçmələr hər dəfə olduğu kimi eksperimentaldır, amma mənim üçün yaxşıdır;-) Təchizat düşüncələrim belə idi:- Materialları idarə edə bilərəmmi?- İşıq parlayacaqmı? kölgədə? - Hansı nisbətə sahib olmalıdır? - Sadə bir interfeys üçün neçə düymə və qazana ehtiyacım olacaq? Proqram düşüncələrim: Lampanın neçə fərqli funksiyası olmalıdır? - Dəyişən sürətlə avtomatik RGB solması - Manuel rəng tənzimlənməsi - Parlaqlığı tənzimlənən ağ rəng

Addım 2: Əl istehsalı kölgə

Əl istehsalı kölgə
Əl istehsalı kölgə
Əl istehsalı kölgə
Əl istehsalı kölgə
Əl istehsalı kölgə
Əl istehsalı kölgə

Materialları toplamaq: Kölgə: Mağazada 30 dəyirman plastikdən 3 ayaq x 3 ayaq ölçülü bir təbəqə tapdım (Şəkil 1-3). Kəsmək üçün iti bıçaq istifadə edin. Zımpara ilə plastikdən donmuşam (Şəkil 4-6). hamar silindr əldə edin, doğru delikləri qazandan sonra hamısını vidaladım (Şəkil 7-8). Gözəl görünür və idarə etmək çox asandır. 1/8 dişli çubuğa uyğun olaraq deliklər qazdım və vurdum (Şəkil 9-10). Eyni zamanda 3W LED-ləri soyutmaq və möhkəm bir bazaya sahib olmaq üçün bir soyuducu hazırladım. Şaftdan çox kölgə əldə etməmək üçün, üstündə M8 qozu olan qaynaq çubuğundan kiçik bir qəfəs qururam (Şəkil12). Bütün işi bir yerə yığdım. Kiçik vintlər və qoz -fındıq bir az çətin idi, amma 30 dəqiqə sonra bunu bacardım.

Addım 3: Əl istehsalı kölgə

Əl istehsalı kölgə
Əl istehsalı kölgə
Əl istehsalı kölgə
Əl istehsalı kölgə
Əl istehsalı kölgə
Əl istehsalı kölgə

Baza: Disklər hamar və yuvarlaq olması üçün dəzgahda sıxılmışdı. Daha sonra şamın gözəl görünməsi üçün maun ağac ləkəsi ilə ləkələdim. Sonra nə olacaq?!? kölgə kimi donmuş plastik və bir RGB microLED ilə arxa işıq (Şəkil 5). Düymələr: Mən düyməni bir ağac ağacından və düymələri qoz ağacından kəsdim.

Addım 4: Elektrik dövrəsi:

Elektrik dövrəsi
Elektrik dövrəsi
Elektrik dövrəsi
Elektrik dövrəsi
Elektrik dövrəsi
Elektrik dövrəsi

İlk şəkildəki sxemimi görürsünüz və burada başqa bir video var: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

Addım 5: Kod:

Kod
Kod
Kod
Kod
Kod
Kod

Şəkillərdə Arduino ilə prosesimi görürsünüz. Əvvəlcə özüm hazırladığım ProtoShield, bir batareya paketi və bir neçə növ LED ilə sınaqdan keçirdim. Bir neçə ay əvvəl TodEKurt "Spooky Projects" və "BionicArduino" ilə başladım. "RGBMoodlight", "RGBPotMixer" və bəzi uzantılar. Üç analoq və bir rəqəmsal giriş rejimi olaraq Ju (kəsmə rejiminə görə təşəkkür edirik:). LEDlər bağlıdır PulseWithModulation -ı dəstəkləyən D9, D10 və D11 -ə. İstəsəniz, eskizi dərc edə bilərəm, amma bu iki böyük kodun həqiqətən çılpaq birləşməsidir. İşdə orijinal lampa kodum. Bir az qarışıq görünür, çünki mənim idi Proqramlaşdırmanın çox erkən mərhələsi… Ancaq kopyalasanız, əla işləməlidir. "PotColorMixer", "RGBfadingFunction" və rejimi dəyişdirmək üçün kəsmə-rutin kimi gözəl barışıqlar var./* nejo June2008

Clay Shirky tərəfindən "dimmingLEDs" ə əsaslanan "Moodlamp" kodum

*sentyabr 2008

  • Kəsmə rejimi-keçid, RGB-solma və RGB rəng dəyişikliyi üçün analog sürətli yığım ilə moodlamp üçün son kod.
  • Karartma funksiyası yalnız ağ rəng üçün işləyir

*nejo oktyabr 2008

  • Ruh halını tənzimləmək üçün səs uzadılması:
  • Kiçik bir LM368 Amp, bir resifier və aşağı keçid filtrli kondensator mikrofonu
  • başqa analogInput ilə mikrofon siqnalı alaraq rəngi dəyişdirmək üçün RGBPotMixer funksiyasından istifadə edirəm.

* * * PWM istifadə edərək qırmızı, yaşıl və mavi və ya bir üç rəngli LED-lərin kəsişən 3 LED-i üçün kod

  • Proqram yavaş-yavaş qırmızıdan yaşıl, yaşıldan maviyə və mavidən qırmızıya keçər
  • Hata ayıklama kodu, yeni Serial.begin () tipli funksiyalardan istifadə etdiyi üçün Arduino 0004-ü qəbul edir.
  • əslində Clay Shirky tərəfindən "dimmingLEDs"

*

  • AnalogRead, Pin A0 -da RGB sönmə sürətini dəyişmək üçün aktivdir
  • HueRGB rəngini dəyişdirmək üçün Pin A2 -də AnalogRead aktivdir

* * */#daxildir // Çıxış ledPin = 13; // hata ayıklama üçün controlPin redPin = 9; // Qırmızı LED, rəqəmsal pin 9int greenPin = 10 -a bağlıdır; // Yaşıl LED, rəqəmsal pin 10int bluePin = 11 -ə bağlıdır; // Mavi LED, rəqəmsal pin 11int dimredPin = 3 -ə bağlıdır; // Analoq karartma dəyəri üçün pinlər, tranzistor sürücüsünə bağlıdır dimgreenPin = 5; int dimbluePin = 6; // Giriş girişiPin = 2; // keçid D2int pininə bağlıdır val = 0; // pin statusint düyməsini oxumaq üçün dəyişənState; // düyməni saxlamaq üçün dəyişən stateint buttonPresses = 0; // getmək üçün 3 dəfə basın! İnt potPin0 = 0; // Moodlamp -da solma arasındakı gecikməni tənzimləmək üçün qazan; int potPin2 = 2; // hueRGB colorint potVal = 0 dəyişdirmək üçün potansiyometr çıxışı; // maxVal = 0 potansiyometrindən daxil olan məlumatları saxlamaq üçün dəyişən; // dimPin = 4 -də heç bir Pot bağlı deyilsə, karartma faktorunu saxlamaq üçün dəyər 255 -dir; // Parlaqlığı azaltmaq üçün A4 -ə bağlı qazan // Proqram dəyişənləri redVal = 255; // pinsint greenVal = 1 -ə göndəriləcək dəyərləri saxlamaq üçün dəyişənlər; // İlkin dəyərlər Qırmızı dolu, Yaşıl və Mavi offint blueVal = 1; int i = 0; // Loop counter int wait; // = 15; // 50 ms (.05 saniyə) gecikmə; daha sürətli fadesint üçün qısaldır k = 0; // yanıb sönmə funksiyasındakı controlLED üçün dəyər DEBUG = 0; // DEBUG sayğacı; 1 olaraq təyin edildikdə, serialint LCD = 0 vasitəsilə dəyərləri geri yazacaq; // LCD sayğac; 1 olaraq təyin olunarsa, serialvoid setup () {pinMode (ledPin, OUTPUT) vasitəsilə dəyərləri geri yazacaq; pinMode (redPin, ÇIXIŞ); // pinləri çıxış pinMode (greenPin, ÇIXIŞ) olaraq təyin edir; pinMode (bluePin, ÇIXIŞ); pinMode (dimredPin, Çıxış); pinMode (dimgreenPin, ÇIXIŞ); // pinləri çıxış pinMode (dimbluePin, OUTPUT) olaraq təyin edir; pinMode (potPin2, GİRİŞ); // pinMode (potPin0, GİRİŞ); // pinMode (dimPin, GİRİŞ); // pinMode (switchPin, INPUT); // Keçid pimini giriş attachInterrupt olaraq təyin edin (0, isr0, RISING); if (DEBUG) {// Hata ayıklama üçün pin dəyərlərini görmək istəsək… Serial.begin (9600); // … 0004 stilində seriyalı çıxışı qurun}} // Əsas proqramvoid döngəsi () {if (buttonPresses == 0) {Moodlamp (); // Moodlight funksiyasını çağırır} if (buttonPresses == 1) {RGBPotMixer (); // manuel mix funksiyasını çağırır} if (buttonPresses == 2) {White (); // Burada hamısı ağdır} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); // Ağ (); Ekran(); dim ();} void Monitor () {// If State to monitor to if if (DEBUG) {// Çıxışını oxumaq istəsək DEBUG += 1; // DEBUG sayacını artırın, əgər (DEBUG> 10) {// Hər 10 döngəni çap edin DEBUG = 1; // Sayıcı sıfırlayın Serial.print (i); // 0004 üslubunda Serial.print Serial.print ("\ t"); // Nişan yazdır Serial.print ("R:"); // Çıxışın qırmızı dəyər olduğunu göstərin Serial.print (redVal); // Qırmızı dəyəri çap edin Serial.print ("\ t"); // Nişan yazdır Serial.print ("G:"); // Yaşıl və mavi üçün təkrarlayın … Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial. çap (blueVal); // println, bir vaqonla geri qayıtmaq üçün Serial.print ("\ t"); Serial.print ("dimValue:"); Serial. çap (maxVal); // println, bir vaqonla geri qayıtmaq üçün Serial.print ("\ t"); Serial.print ("gözləyin:"); Serial.print (gözləyin); // potPin0 dəyərini Serial.print ("\ t") monitoruna yazır; Serial.print ("hueRGBvalue"); Serial. çap (potVal); // potPin0 dəyərini Serial.print ("\ t") monitoruna yazır; Serial.print ("buttonState:"); Serial.print (buttonState); // potPin0 dəyərini Serial.print ("\ t") monitoruna yazır; Serial.print ("buttonPresses:"); Serial.println (buttonPresses); // düymənin dəyərini yazır Monitora}}} void dim () // Ağın qaralması funksiyası // bəlkə də bütün Modlar üçün daha sonra {maxVal = analogRead (dimPin); maxVal /= 4; // 0..255 dəyərli analogWrite (dimredPin, maxVal) karartmaq üçün 0..1024 -dən çox olan analog diapazonu; analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {wait = analogRead (potPin0); // potPin0 -dan dəyər axtarın; // heç bir Pot bağlı deyilsə: gözləyin 255 i += 1; // Artım sayğacı // i = i - maxVal; if (i <255) // Solmanın ilk mərhələsi {redVal -= 1; // Qırmızı aşağı greenVal += 1; // Green up blueVal = 1; // Mavi aşağı} else if if (i <509) // Solğunluğun ikinci mərhələsi {redVal = 1; // Qırmızı aşağı greenVal -= 1; // Yaşıl aşağı maviVal += 1; // Mavi yuxarı} else if if (i <763) // Üçüncü mərhələ solur {redVal += 1; // Red up greenVal = 1; // Yaşıl lo2 blueVal -= 1; // Mavi aşağı} başqa // Sayacı yenidən qurun və yenidən solmağa başlayın {i = 1; } // yalnız "redVal" yerinə "255 -redVal" edirik, çünki // LEDlər Gnd analogWrite əvəzinə +5V -ə (redPin, 255 - redVal) bağlıdır; // LED pinləri analogWrite -ə cari dəyərləri yazın (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); /* dimredVal = min (redVal - maxVal, 255); // karartma dimredVal = max (redVal - maxVal, 0); dimgreenVal = min (greenVal - maxVal, 255); dimgreenVal = max (greenVal - maxVal, 0); dimblueVal = min (blueVal - maxVal, 255); dimblueVal = max (blueVal - maxVal, 0); analogWrite (redPin, 255 - dimredVal); // LED pinlərinə analogWrite -ə cari dəyərləri yazın (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / gözlə / = 4; gecikmə (gözləmək); // Döngəyə davam etməzdən əvvəl 'gözləmə' millisaniyələri üçün fasilə verin} void RGBPotMixer () {potVal = analogRead (potPin2); // potVio = potVal / 4 giriş pinindəki potansiometr dəyərini oxuyun; // 0-1023-dən 0-255-ə çevir hue_to_rgb (potVal); // potVal-ı hue kimi qəbul edin və rgb vals-ə çevirin // "255-" bunun səbəbi, ümumi katodlu analogWrite (redPin, 255-redVal) deyil, ümumi anodlu LED-lərimizin olmasıdır; // LED pinlərinə analogWrite (greenPin, 255-greenVal) dəyərlər yazın; analogWrite (bluePin, 255-blueVal); } boş White () {analogWrite (redPin, maxVal); // LED pinlərinə analogWrite (greenPin, maxVal) dəyərlər yazın; analogWrite (bluePin, maxVal); }/*

  • Dəyişən bir hue 'h' verildikdə, 0-252 arasında dəyişir,
  • RGB rəng dəyərini uyğun olaraq təyin edin.
  • Maksimum Maksimum Doyma və Maksimum Dəyəri (parlaqlıq) qəbul edir
  • Sırf tam ədəd riyaziyyatı yerinə yetirir, üzən nöqtə yoxdur.

*/void hue_to_rgb (bayt hue) {if (hue> 252) hue = 252; // geri dönmə 252 !! nejo byte hd = hue / 42; // 36 == 252/7, 252 == H_MAX bayt hi = hd % 6; // 0-5 bayt verir f = hue % 42; bayt fs = f * 6; keçid (salam) {hal 0: redVal = 252; greenVal = fs; blueVal = 0; fasilə; hal 1: redVal = 252-fs; greenVal = 252; blueVal = 0; fasilə; hal 2: redVal = 0; greenVal = 252; blueVal = fs; fasilə; hal 3: redVal = 0; greenVal = 252-fs; blueVal = 252; fasilə; hal 4: redVal = fs; greenVal = 0; blueVal = 252; fasilə; hal 5: redVal = 252; greenVal = 0; blueVal = 252-fs; fasilə; }} etibarsız isr0 () {Serial.println ("\ n / n kəsilmiş / n"); buttonState = digitalRead (switchPin); // ilkin vəziyyət gecikməsini oxuyunMikrosaniyələr (100000); // if (val! = buttonState) {// düymə vəziyyəti dəyişdi! // if (buttonState == HIGH) {// düymənin indi basıldığını yoxlayın buttonPresses ++; //} // val = buttonState; // (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} Növbəti mərhələ tranzistor sürücülər idi. 3Ampere maksimum cərəyanı olan 3 PNP tranzistorundan istifadə etdim. İrəli cərəyan və gərginlik tənzimləndikdən sonra, LEDemitter tam intensivliklə əla işləyirdi.

Addım 6: PonyProg tərəfindən yandırılmış Bootloader ilə Bağımsız alın

PonyProg tərəfindən yandırılmış Bootloader ilə Bağımsız alın
PonyProg tərəfindən yandırılmış Bootloader ilə Bağımsız alın

Arduino bootloader -ı ATmega168 və ya ATmega8 -də yandırmaq üçün paralel portunuzdan necə istifadə etmək olar? Tezliklə arduino mühiti ilə ucuz bir boş çip istifadə etmək üçün ….. bəlkə də ayrı bir təlimat verilə bilər Burada ayrıca çipdən istifadə etmək yaxşı bir təlimatdır: https:/ /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Addım 7: Deməli bu mənim Arduino Moodlamp'ımdır

Yəni bu mənim Arduino Moodlamp'ımdır
Yəni bu mənim Arduino Moodlamp'ımdır

Bəyənmisinizsə, mənə qiymət verin.

Tövsiyə: