Mündəricat:

Titrəyən Şam Körpüsü: 6 addım (şəkillərlə)
Titrəyən Şam Körpüsü: 6 addım (şəkillərlə)

Video: Titrəyən Şam Körpüsü: 6 addım (şəkillərlə)

Video: Titrəyən Şam Körpüsü: 6 addım (şəkillərlə)
Video: EVİNDƏ ANAKONDA SAXLAYAN QADIN 2024, Noyabr
Anonim
Image
Image

Bu göstərişli, statik işıqlı sadə bir şam körpüsünü, titrəyən işıqların, parıldayanların, dalğa naxışlarının və heç bir şeyin sonsuz dəyişikliyi ilə gözəl parlayan bir əhval işığına necə çevirəcəyinizi göstərir. Milad satışından sonra 8 avroya bir şam körpüsü aldım. 7 LED işıqları və təxminən 33 V 3 W divar adapteri var. Parlaq və isti ağ rənglə parlayır və şamların titrəməsi üçün bir Arduino qoyacağım bu layihə üçün mükəmməl olacaq. Ən populyar Arduino Arduino Unodur. Bu layihədə Arduino Mega 2560 istifadə edəcəyəm.

Mən 30 V enerji təchizatını dayandıracağam və enerji təchizatı olaraq cib telefonları üçün nəzərdə tutulmuş sadə 5 V güc bankını istifadə edəcəyəm.

Güc bankları haqqında bilmək lazım olan bir şey, batareyanı 3.7 V -dan 5 V -ə çevirən daxili bir dövrə sahib olmasıdır. Proses müəyyən güc istifadə etdiyindən, güc bankı istifadə edilmədikdə özünü bağlayır. Güc bankı Arduino əsaslı DIY cihazları üçün istifadə olunursa, gadget özünü enerji qənaət edən yuxuya qoya bilməz və bir neçə dəqiqədən sonra yenidən başlaya bilər. Bu güc bankını bağlayacaq. Bu titrəyən şam körpüsünün yuxu rejimi yoxdur. Elektrik kabeli çıxarılanadək, güc bankını aktiv saxlayaraq daima gücdən istifadə edir.

Videoda şam körpüsü statik rejimdə və tam titrəyir. Tam titrəmə gözlər üçün əslində olduqca zəhlətökəndir, video isə onu bir qədər hamarlaşdırır. Kabellərin kəsilməsi, yeni əlaqələrin lehimlənməsi və bəzi komponentlərin əlavə edilməsi də daxil olmaqla aparat düzəldildikdən sonra, Arduino üçün kod yazılaraq bütün istədiyiniz işıq nümunələri yaradılır. Bu təlimata daxil etdiyim nümunələr bunlardır:

  • Əsl şamları təqlid edən 4 fərqli titrəyən işıq
  • 2 fərqli parıltı (əks halda statik işıqların təsadüfi yanıb sönməsi)
  • 2 fərqli dalğa nümunəsi
  • sadə statik işıq

Nümunələrin dəyişdirilməsi tək istifadəçi interfeysi elementi olan bir düymə ilə baş verir. İnsan nə qədər çox nümunə istəyirsə və nə qədər çox tənzimləmə istəyirsə, o qədər çox düymə və düymə əlavə etmək lazımdır. Ancaq gözəllik sadəlikdədir. Seçilən nümunələrin sayını aşağı saxlayın. Kodlaşdırma və sınaq zamanı aparata çoxlu nəzarət əlavə etməklə deyil, ən yaxşı parametrləri seçin.

Təchizat

  • 7 ampullü 1 LED şam körpüsü. Ölümcül 110 - 240 V AC -ni 6 - 30 V DC -ə çevirən, ya batareyalı, ya da divara quraşdırılmış enerji mənbəyi olan aşağı gərginlikli bir DC modeli olduğundan əmin olun. Beləliklə, şam körpüsünü sındırmaq tamamilə təhlükəsizdir.
  • 1 Arduino Mega (hər hansı digər mikro nəzarətçi edəcək, sadəcə proqramlaşdıra biləcəyinizə əmin olun)
  • 1 prototip çörək taxtası
  • tullanan tellər və digər tellər
  • lehimləmə vasitəsi
  • multimetr
  • 7 rezistor, 120 Ω
  • 1 düymə (bunun əvəzinə Arduino -da quraşdırılmış düyməni necə istifadə edəcəyinizi göstərəcəyəm)
  • ULN2803AP 7 tranzistor üçün bir darlington transistorlu IC edəcək (Bir Arduino Uno və ya Meaga istifadə edirsinizsə, buna həqiqətən ehtiyacınız yoxdur)
  • Cib telefonları üçün nəzərdə tutulmuş 5 V güc bankı

Addım 1: Aldığınızı yoxlayın

Aldığınızı yoxlayın
Aldığınızı yoxlayın
Aldığınızı yoxlayın
Aldığınızı yoxlayın

Hər bir LED -in hansı gərginlikdə işlədiyini və nə qədər cərəyanın axdığını öyrənin.

  1. Şam körpüsünün altını açın. Bir şama gedən iki teli tapın.
  2. Mis telləri kəsmədən mis telləri açan kabellərdən bəzi izolyasiyanı çıxarın.
  3. İşıqları yandırın (rahatlayın, yalnız bir neçə voltdur) və aşkar edilmiş mis tellər üzərindəki gərginliyi ölçün.
  4. Ölçmə nöqtələrindən birində kabel kəsin (əlbəttə ki, bu zaman işıqlar sönür), hər iki ucunda bir qədər izolyasiyanı (3-4 mm) çıxarın. Keçən cərəyanı ölçün. Etdiyiniz şey, bütün cərəyanın multimetrinizdən keçməsinə imkan verən, kəsilmiş kabeli multimetrinizlə yenidən bağlamaqdır ki, bu da indi sizə cərəyanın miqdarını bildirir.

Oxumalarım

Bir şamın üzərindəki gərginlik (addım 3): 3.1 V.

Şam körpüsünün enerji mənbəyinin 33 V olduğunu unutmayın. Belə ki, yeddi dəfə 3.1 V yalnız 21.7 V -dir. Bəzi şamlarda əlavə bir rezistor olmalıdır. Şam gərginliyini ölçsəydim, təxminən 11 V olmalı idi.

Şam yandıqda axan cərəyan (addım 4): 19 mA

5 V 2 A batareya dəsti ilə hər şeyi gücləndirəcəyəm. Şamlar üçün gərginliyi 5 V -dan 3 V -a endirməliyəm. 19 mA cərəyanda 2 V gərginliyi azaldan bir rezistora ehtiyacım var.

2 V / 0.019 A = 105 Ω

Güc dağıdıcıdır:

2 V * 19 mA = 38 mW

Bu əhəmiyyətsizdir. Daha çox şey rezistorun özünü vura bilər. Yenə də 105 Ω rezistor olmadan LED -i yandıra bilərəm. 100 Ω və 120 Ω rezistorlarım var. 120 with ilə gedirəm. Daha çox qoruma təmin edir.

Bütün 7 şamın 3 V ilə sınanması, yalnız çox zəif bir işığı olan və yalnız 0,8 mA keçən bir şam istisna olmaqla, parlaq bir işıq verdi. Bu, əlavə rezistorlu şamım idi. Məlum oldu ki, digər şamların rezistoru yoxdur. Avizədə istifadə olunan LED işıqlar sadəcə 3 V üçün nəzərdə tutulmuşdur! Əlavə rezistorlu şamı yüngül şiddətlə açmaq lazım idi, amma heç nə qırılmadı. Rezistor plastik şam lampasının içindəki kiçik LED -in altında tapıldı. Söküb telləri yenidən satmalı oldum. Bir az qarışıq idi, çünki lehimləmə dəmiri montaj üçün istifadə olunan isti yapışqanı qızdırdı.

İndi bilirəm ki, istifadə etdiyim enerji mənbəyi, gərginlik nə olursa olsun, 19 mA -nın keçməsinə imkan verən gərginliyi 3 V -a endirməliyəm.

LED texnologiyası ilə daha yaxından tanış olsaydım, istifadə olunan LED növünü tanıyardım və 3 V -ə ehtiyac olduğunu bilirdim.

Addım 2: Biraz Lehimləmə

Bəzi Lehimləmə
Bəzi Lehimləmə
Bəzi Lehimləmə
Bəzi Lehimləmə

Bu addımda 5 şamdan bütün müsbət (+) telləri bir telə bağlayıram. Sonra hər şam üçün ayrı bir mənfi (-) tel əlavə edirəm. Bir LED işığı yalnız '+' və '-' sağa keçdikdə yanar. Hər bir şamdan yalnız iki eyni kabel ucu olduğundan, hansının '+', hansının '-' olduğunu sınamalısınız. Bunun üçün 3 V güc mənbəyinə ehtiyacınız var. İki AAA batareyadan ibarət kiçik bir batareya paketim var idi. 3 V -lik bir batareya test üçün də əla işləyir.

Şam körpüsünün Arduino ilə körpü arasında keçməsi üçün 8 kabel lazımdır. 8 izolyasiya edilmiş telli bir kabel tapsanız, çox yaxşı olar. Bir tel 120 mA tutmalıdır, qalanları isə ən çoxu 20 mA. Təsadüfən 4 cüt telli kabel istifadə etməyi seçdim.

Birinci şəkil, bütün '+' telləri şamdan bağlamaq üçün bir ümumi tel hazırladığımı göstərir. Hər bir şam üçün ümumi telin izolyasiyasını çıxarın. Hər bir birləşmə üçün bir parça büzülmə izolyasiya borusu (şəkildəki sarı şerit) əlavə edin və ümumi kabelin doğru yerinə qoyun. '+' Teli hər bir şamdan birləşməsinə qədər lehimləyin, birləşməni büzülmə borusu ilə örtün və büzün. Əlbəttə ki, sadə yapışan bant yaxşıdır, hər şey sonda əhatə olunacaq.

İkinci şəkil, hər bir şamın ehtiyacı olan '-' tellərini göstərir. Ümumi '+' teli birbaşa Arduinonun 5 V pininə (və ya bəlkə də çörək taxtasından) gedir. Hər bir '-' teli öz tranzistor IC pininə gedir (yenə də, ehtimal ki, çörək taxtasından).

Arduino tez -tez prototip lövhəsi adlanır. Çörək taxtası da prototiplərdə istifadə etdiyiniz bir şeydir. Bu təlimatda təsvir etdiyim bir prototipdir. Hər şeyi gözəl plastik qutularda gizlədilmiş, parlaq bir məhsul halına gətirməyəcəyəm. Prototipdən növbəti səviyyəyə keçmək, çörək lövhəsini çap edilmiş bir lövhə və lehimlənmiş komponentlərlə əvəz etmək və hətta Arduino -nu sadə bir mikro nəzarət çipi ilə əvəz etmək demək olardı (əslində belə bir çip Arduinonun beynidir). Və hər şeyin plastik bir qutuya və ya sındırılmış şam körpüsünün içərisinə uyğun olması.

Addım 3: Bağlantılar

Əlaqələr
Əlaqələr
Əlaqələr
Əlaqələr
Əlaqələr
Əlaqələr
Əlaqələr
Əlaqələr

Bu səhifədən götürülmüş Arduinos haqqında:

  • Giriş/çıxış pin başına ümumi maksimum cərəyan: 40mA
  • Bütün giriş/çıxış pinlərinin cərəyanlarının cəmi: 200mA

Şamlarım hər biri 19 mA çəkir, 3 V ilə işləyərkən yeddi var, bu da 133 mA təşkil edir. Beləliklə, onları birbaşa çıxış pinlərindən gücləndirə bilərdim. Ancaq bir az ehtiyat darlington tranzistorlu IC -lərim var. Düşündüm ki, niyə olmasın. Mənim dövrəm işi düzgün şəkildə edir: məlumat pinləri güc üçün deyil, yalnız siqnallar üçündür. Bunun əvəzinə LED işıqlarını gücləndirmək üçün Arduino üzərindəki 5 V pin istifadə edirəm. Test işləyərkən laptopumu Arduinoya bağladım. Hər şey 5 V verən dizüstü USB ilə təchiz edilmişdir. Arduino Mega, kompüteri qorumaq üçün 500 mA -da partlayan öz qoruyucusuna malikdir. Şamlarım ən çox 133 mA çəkir. Arduino, ehtimal ki, daha azdır. Laptopla işləyərkən hər şey yaxşı işləyir, buna görə Arduinonun USB portuna qoşulmuş 5 V batareya paketindən istifadə etmək çox yaxşıdır.

D3 - D9 məlumat pinləri IC ULN2803APGCN -ə gedir. LEDlər 3 V -da işləyir. Hər bir ampul 5 V mənbəyinə və daha sonra 120 Ω rezistora bağlıdır. Nəhayət, IC -də bir darlington tranzistoru vasitəsilə dövrə birləşdirən IC -nin bir kanalından başqa.

Bəzi istifadəçi hərəkətlərini təmin etmək üçün dövrə bir düymə əlavə olunur. Şam körpüsünün istifadəçi tərəfindən seçilən bir neçə proqramı ola bilər.

Dövrədəki düymə RESET və GND -ə bağlıdır. Daxili sıfırlama düyməsinin etdiyi şey budur. Hər şeyi plastik bir qutuya yığmadığım üçün proqramı idarə etmək üçün Arduino -da sıfırlama düyməsini istifadə edirəm. Görüntüyə görə bir düymə əlavə etmək, lövhəni sıfırlama düyməsi kimi işləyəcək. Proqram, sonuncu dəfə işlədikdə hansı işıq proqramının istifadə edildiyini xatırlayaraq işləyir. Beləliklə, hər sıfırlama növbəti işıq proqramına keçəcəkdir.

Fotoşəkillər yeni kabellərin körpüdən necə çıxdığını, tranzistor IC və rezistorları çörək taxtasına necə qoyduğumu və tullanan tellərin Arduino Mega -ya necə bağlandığını göstərir. Şam körpüsündən çıxan 8 kabelə lehimladığım 4 kişi-kişi tullanan teli 8 yarım telə kəsdim. Bu şəkildə kabelləri çörək taxtasına yapışdıra bilərəm.

Transistorlar olmadan alternativ

Əvvəlki addımda, şamlar üçün ortaq bir '+' tel hazırladım və tranzistor IC-dən yerə keçən '-' tellərini ayırdım. Bir məlumat pimi yüksəldikdə, müvafiq '-' teli tranzistoru və LED işıqları vasitəsilə topraklanır.

'-' tellərini birbaşa Arduino'nun məlumat pinlərinə bağlamaq da işləyəcək, ancaq məlumat pinlərinin nə qədər cərəyana dözə biləcəyini həmişə unutmayın! Bu yanaşma proqramımda bir dəyişikliyə ehtiyac duyacaq. Şamları yandırmaq üçün aşağı düşmək üçün məlumat pinlərinə ehtiyac var. Proqramımı olduğu kimi istifadə etmək üçün şamlarda '+' və '-' işarələrini dəyişdirməlisiniz. Arduino üzərindəki GND-ə gedən mumlar üçün ortaq bir '-' telinə sahib olun. Ayrı tellər, şamın '+' teli ilə Arduinonun məlumat pinləri arasında keçir.

Addım 4: İşıq Proqramları

Növbəti addımda təqdim etdiyim proqram 9 işıq proqramından keçir. Düyməni basmaq bir saniyə işıqları qaraldır, sonra aşağıdakı işıq proqramı başlayacaq. Proqramlar aşağıdakı kimidir:

  1. Güclü titrəmə. Şamlar təsadüfən yanıb -sönür. Onlara yaxın məsafədən baxdıqda bu çox əsəbi görünür, amma uzaqdan və bəlkə də şaxtalı bir çardaq pəncərəsinin arxasında yaxşı görünə bilər. Baxmayaraq ki, qonşunuz yanğınsöndürənləri çağıra bilər.
  2. Yumşaq titrəmə. Çox yaxşı görünür. Qaralama olmayan bir otaqdakı həqiqi şamlar kimi.
  3. Fərqli titrəmə. Şamlar 30 saniyəlik fasilələrlə güclü və yumşaq titrəmələr arasında hamar bir şəkildə dəyişir.
  4. Fərqli titrəmə. 3 nömrəli kimi, ancaq hər bir şam 30 ilə 60 saniyə arasında öz sürətində dəyişir.
  5. Sürətli parıltı. Şamlar statik olaraq sönmüş bir səviyyədə parlayır və təsadüfi olaraq parıldayır. Orta hesabla hər saniyədə bir parıltı var.
  6. Yavaş parıltı. #5 kimi, amma daha yavaş bir sürətlə.
  7. Orta yuxarı şamdan aşağı olanlara qədər sürətli dalğa.
  8. Yuxarı orta şamdan aşağı olanlara qədər yavaş dalğa.
  9. Statik parlaq işıq. Bunu daxil etməli idim, orijinal funksiyadan qurtulmaq istəmirdim.

Addım 5: Kod

/*

FLICKERING MUM KÖPRÜSÜ */ // Rejimi dəyişməklə vəziyyəti // saxlamaq üçün elan edin _attribute _ ((bölmə (". Noinit"))) işarəsiz int rejimi; // Proqram sıfırlandıqdan sonra işə başladıqda, bu yaddaş parçası // işə salınmır, ancaq sıfırlamadan əvvəl əldə etdiyi // dəyərini saxlayır. // proqramı ilk dəfə işə salındıqda təsadüfi bir dəyər tutur. / * * Mum sinfi, titrəyən bir şamın işıq səviyyəsini hesablamaq üçün lazım olan hər şeyi tutur. */ sinif şamı {özəl: uzun maxtime; uzun müddət; uzun maxlit; uzun minlit; uzun orta; uzun başlanğıc vaxtı; uzun başlanğıc; uzun origmaxlite; uzun origminlit; uzun origmeanlite; uzun deltamaxtime; uzun deltamintime; uzun deltamaxlit; uzun deltaminlit; uzun deltameanlit; uzun lforate; uzun bərabərlik; uzun başlanğıc; uzun hədəf; üzən faktor; uzun hədəf müddəti; uzun başlanğıc; uzun sürmə; boş yeni hədəf (boş); uzun bir hədəf (boş); ictimai: şam (uzun mat, uzun mit, uzun mal, uzun mil, uzun mel, uzun eo); uzun səviyyəli məlumat (boş); void initlfo (uzun deltamat, uzun deltamit, uzun deltamal, uzun deltamil, uzun deltamean, uzun sürət); boşluq setlfo (boş); }; şam:: şam (uzun mat, uzun mit, uzun mal, uzun mil, uzun mel, uzun eo): maxtime (mat), mintime (mit), maxlite (mal), minlite (mil), Meanlite (mel), bərabər (eo), origmaxtime (mat), origmintime (mit), origmaxlite (mal), origminlite (mil), origmeanlite (mel) {target = meanlite; yeni hədəf (); } / * * levelnow (), şamın hazırda olması lazım olan işıq səviyyəsini qaytarır. * Funksiya yeni bir təsadüfi işıq səviyyəsinin təyin edilməsini və * bu səviyyəyə çatmaq üçün lazım olan vaxtın öhdəsindən gəlir. Dəyişiklik xətti deyil, * sigmoid əyrisi ilə gedir. Yeni * səviyyəni təyin etməyin vaxtı çatmadıqda, funksiya sadəcə işıq səviyyəsini qaytarır. */ uzun şam:: levelnow (void) {uzun kömək, indi; float t1, t2; indi = millis (); if (indi> = hədəf vaxtı) {yardım = hədəf; yeni hədəf (); yardımı geri qaytarmaq; } başqa {// yardım = hədəf * (milis () - başlanğıc vaxtı) / deltatime + başlanğıc * (hədəf vaxtı - millis ()) / deltatime; t1 = float (hədəf vaxtı - indi) / deltatime; t2 = 1. - t1; // Bu sigmoid hesablama yardımıdır = t1*t1*t1*start + t1*t1*t2*start*3 + t1*t2*t2*target*3 + t2*t2*t2*target; yardımı geri qaytarmaq; }} boş şam:: newtarget (void) {uzun məbləğ; cəmi = 0; for (long i = 0; i <evenout; i ++) sum+= onetarget (); start = hədəf; hədəf = cəm / bərabərlik; başlanğıc vaxtı = milis (); hədəf vaxtı = başlanğıc + təsadüfi (ən çox vaxt, maksimum vaxt); deltatime = hədəf vaxtı - başlanğıc vaxtı; } uzun şam:: onetarget (void) {if (random (0, 10) lastcheck + 100) {lastcheck = now; / * * "Milisaniyədən sonra" parıldamaq üçün algo: * 2 milisaniyədən sonra yoxlamağa başlayın * 2 milisaniyəlik bir müddət ərzində bir parıltı ehtimalını 50 %təşkil edin. * Əgər nisbət 10000 ms olarsa, 5000 ms ərzində sikkə * 50 dəfə çevrilir. * 1/50 = 0.02 * Əgər təsadüfi (10000) başlanğıc + dərəcəsi / 2) {if (təsadüfi (nisbət) hədəf vaxtı) aşağı səviyyəyə qayıdırsa; qayıt (start - lowlite) * (hədəf vaxtı - indi) / (hədəf vaxtı - başlanğıc vaxtı) + lowlite; } boş boş parıltı:: twink (void) {starttime = millis (); hədəf vaxtı = təsadüfi (ən çox vaxt, maksimum vaxt) + başlanğıc vaxtı; başlanğıc = təsadüfi (minlit, maxlit); } void setup () {int led; // Sehrli mod dəyişənini oxuyun ki, bu da sonuncu dəfə hansı işıq proqramının işlədiyini // artırsın // artırsın və daşqın olarsa sıfıra sıfırlansın. rejimi ++; rejimi %= 9; // Bu dəyər nə olursa olsun // Arduino // bu proqramı ilk dəfə işlədib. / * * Vacib qeyd * ============ * * * Bu proqramın əsas işi PWM * siqnallarını LED işıqlarına çıxarmaqdır. Burada pinləri 3 -dən 9 -a * çıxış rejiminə qoydum. Arduino Mega2560 -da bu sancaqlar gözəl PWM siqnalları çıxarır. Başqa bir Arduino varsa, * hansı sancaqlar (və neçə ədəd) istifadə edə biləcəyinizi yoxlayın. Proqram PWM istifadə etmək üçün hər zaman kodu yenidən yaza bilərsiniz, əgər Arduino * kifayət qədər PWM sancaqlar təmin edə bilmirsə. * */ pinMode (3, ÇIXIŞ); pinMode (4, Çıxış); pinMode (5, Çıxış); pinMode (6, Çıxış); pinMode (7, Çıxış); pinMode (8, Çıxış); pinMode (9, Çıxış); pinMode (LED_BUILTIN, ÇIXIŞ); analogWrite (LED_BUILTIN, 0); // Arduino şamında *can qutusundakı sinir bozucu qırmızı ledini söndürün [7]; // titrəyən şamlardan istifadə etməyə hazırlaş, istəsən də, istəməsən də parlamasan *çırpın [7]; // parlayan şamlardan istifadə etməyə hazırlaşın… if (mode == 8) {for (int i = 3; i <10; i ++) analogWrite (i, 255); while (doğru); // Bu proqram hər dəfə işə salındıqda // sıfırlama // düyməsinə basılana qədər // bu cür sonsuz döngəyə daxil olur. } əgər (rejim <2) // titrəyən {uzun maxtime_; uzun mintime_; uzun maxlite_; uzun minlite_; uzun orta_sayı; uzun cüt_; əgər (rejim == 0) {maxtime_ = 250; mintime_ = 50; maxlite_ = 256; minlite_ = 0; Meanlite_ = 128; cüt_ = 1; } əgər (rejim == 1) {maxtime_ = 400; mintime_ = 150; maxlite_ = 256; minlite_ = 100; Meanlite_ = 200; cüt_ = 1; } üçün (int i = 0; i <7; i ++) {can = yeni şam (maxtime_, mintime_, maxlite_, minlite_, Meanlite_, even_); } while (true) // Yanıp sönən şamlar üçün sonsuz döngə {for (int i = 0; i levelnow ()); }} if (mode <4) // lfo titrəyənə əlavə olunur {if (mode == 2) // bütün lamlar üçün eyni lfo (30 s) {for (int i = 0; i initlfo (75, 50, 0), 50, 36, 30000);}} if (mode == 3) // şamlar üçün lfo: s dəyişən {for (int i = 0; i initlfo (75, 50, 0, 50, 36, 20000); can [1]-> initlfo (75, 50, 0, 50, 36, 25000); can [2]-> initlfo (75, 50, 0, 50, 36, 30000); can [3]-> initlfo (75, 50, 0, 50, 36, 35000); can [4]-> initlfo (75, 40, 0, 50, 36, 40000); can [5]-> initlfo (75, 30, 0, 50, 26, 45000); can [6]-> initlfo (75, 20, 0, 50, 16, 50000); can [7]-> initlfo (75, 10, 0, 50, 6, 55000);} while (doğru) // Bir lfo {uzun son saat = 0; üçün (int i = 0; i levelnow ()); əgər (milis ()> son saat + 4000) {son saat = milis (); (int i = 0; i setlfo ();}}} if (mode <6) // parlayan şamlar {int speedo; if (mode == 4) speedo = 6000; başqa speedo = 22000; for (int i = 0); i <7; i ++) twink = yeni parıldayan (300, 295, 255, 250, speedo); while (true) {for (int i = 0; i levelnow ()); }} // Dalğalar. // Bu bölmə, ziddiyyətli dəyişən adların olmadığından əmin olmaq üçün sadəcə // buruq mötərizədən başlayır. // Başqa mötərizəyə ehtiyac yoxdur, // modun dəyərini yoxlamağa ehtiyac yoxdur.{int lolite = 2; int hilite = 255; int demək; int ampl; float fasedelta = 2.5; üzmə mərhələsi; int uzun müddət; üzən faktor; uzun müddət; orta = (lolit + hilit) / 2; ampl = hilite - orta; əgər (rejim == 6) dövr = 1500; başqa dövr = 3500; faktor = 6.28318530718 / dövr; while (true) {fase = phactor * (milis () % dövr); elong = orta + ampl * sin (faza); analogWrite (7, uzun); analogWrite (9, uzun); fase = faktor * ((milis () + dövr / 4) % dövr); elong = orta + ampl * sin (faza); analogWrite (3, uzun); analogWrite (8, uzun); fase = faktor * ((millis () + dövr / 2) % dövr); elong = orta + ampl * sin (faza); analogWrite (4, uzun); analogWrite (5, uzun); fase = faktor * ((millis () + 3 * dövr / 4) % dövr); elong = orta + ampl * sin (faza); analogWrite (6, uzun); } // Şam tellərini Arduino -ya bağlayarkən // Mən onları qarışdırdım və heç vaxt qaydasına salmadım. // Sifariş dalğa nümunələri yaratmaq üçün vacibdir, buna görə də bu kiçik cədvəli mənim üçün yazdım: // // Şam# körpüdə: 2 3 5 4 7 6 1 // Arduino üzərindəki məlumat pin: 3 4 5 6 7 8 9}} void loop () {// Hər bir işıq proqramı öz sonsuz döngəsi olduğundan // start () bölməsində // bütün döngələri yazdım // və bu loop () bölməsi üçün heç nə qoymadım. }

Addım 6: PWM haqqında

Ledlər 3 V ilə işlədikdə parlaq işıq saçır. Yalnız 1,5 V istifadə edərək ümumiyyətlə yanmır. LED işıqlar, közərmə lampaları kimi sönən gərginliklə də gözəl bir şəkildə solmur. Bunun əvəzinə tam gərginliklə açılmalı, sonra söndürülməlidir. Bu saniyədə 50 dəfə baş verdikdə, az və ya çox 50 % parlaqlıqla gözəl parlayırlar. Yalnız 5 ms -də və 15 ms -də açıq olmalarına icazə verilsə, 25 % parlaqlıqla parlaya bilərlər. Bu texnika LED işığını qaraldır. Bu texnikaya puls genişliyi modulyasiyası və ya PWM deyilir. Arduino kimi bir mikro nəzarətçi, ümumiyyətlə açma/söndürmə siqnalları göndərə bilən məlumat pinlərinə malikdir. Bəzi məlumat pinləri PWM üçün imkanlara malikdir. Ancaq quraşdırılmış PWM ilə kifayət qədər pin yoxdursa, "proqram PWM pinləri" yaratmaq üçün adətən xüsusi proqramlaşdırma kitabxanalarından istifadə etmək mümkündür.

Layihəmdə 3 - 9 sancaqlarında PWM aparatı olan bir Arduino Mega2560 istifadə etdim. Bir Arduino UNO istifadə edirsinizsə, yalnız altı PWM sancağınız var. Bu vəziyyətdə, 7 -ci (və ya daha çox) bir şam lazımdırsa, burada tapa biləcəyiniz Brett Hagman proqram PWM kitabxanasını tövsiyə edə bilərəm.

Tövsiyə: