Mündəricat:
Video: ATtiny13 və WS2812: 7 Addımlı 1 dollarlıq LED Mood Lampası
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:43
Müəllif tərəfindən daha çox izləyin:
Bu, dörd rejimi olan ucuz bir əhval lampasıdır.
1. Göy qurşağı qığılcımı. İşıq qığılcımı zaman keçdikcə yuxarıya doğru hərəkət edir və tədricən rəngini dəyişir.
2. Göy qurşağı parıltısı. Rəngi tədricən dəyişən sabit bir parıltı.
3. Şam atəşi simulyasiyası.
4. Qapalı.
Yuxarıdakı bir toxunma düyməsinə toxunaraq rejimi dəyişə bilərsiniz. Mövcud rejim söndürüldükdən sonra EEPROM yaddaşında saxlanılır.
ATtiny13 nə qədər kiçikdir?
Fikir, bu kiçik mikrokontrolörün kənarına yaxın bir layihə olan avtomatlaşdırılmış keçiddən və ya termometrdən daha mürəkkəb bir şey olan minimum cihazdan maksimum xüsusiyyətləri əldə etmək idi. Axı, məhdudiyyətlər sizi yaradıcı düşünməyə vadar edir, elə deyilmi? Yaxşı, əvvəlcə belə görünürdü.
Bu layihədə ən çətin olanı bütün kodu ATtiny13 -ə soxmaq idi. Mikro nəzarətçi 1K bayt flaşa və yalnız 64 bayt RAM -a malikdir. Bəli, "bayt" dedikdə, səkkiz bitdən ibarət olanları nəzərdə tuturam. Bütün yerli dəyişənləriniz və zəng yığınlarınız üçün 64 bayt. Aydınlaşdırmaq üçün 8 RGB LED -ə nəzarət etməli olduğumuzu düşünün. Hər biri 3 baytla müəyyən edilir (biri qırmızı, yaşıl və mavi kanal üçün). Beləliklə, yalnız 8 LED vəziyyətini saxlamaq üçün hər biri 3 bayt olan 8 quruluşdan ibarət bir sıra tətbiq etməliyik və bu dizinin əvvəlinə bir bayt daha gedəcək. Beləliklə, 64 baytdan 25 -i çıxdı. RAM -ın 39% -ni istifadə etdik və hələ başlamamışıq. Əlavə olaraq, yeddi əsas göy qurşağı rəngini saxlamaq üçün 7 × 3 = 21 bayta ehtiyacınız olacaq, buna görə də RAM -ın 72% -i bitib. Əsas rənglərə gəldikdə, şişirdirəm: hamısına eyni vaxtda RAM -da ehtiyacımız yoxdur və heç vaxt dəyişmirlər, buna görə də RAM yerinə flash -da saxlanacaq sabit bir sıra olaraq tətbiq oluna bilər. Hər halda, istifadə olunan avadanlıq haqqında ümumi bir təəssürat yaradır.
Knuthun vaxtından əvvəl optimallaşdırma ilə bağlı açıqlamasını xatırlayaraq, nə olacağını görmək üçün üç lampa rejimini ayrıca prototip etməyə başladım. Düzgün işlədiklərindən və hər birinin mikrokontrollerimə uyğun olduğundan əmin olmaq üçün onları ayrı -ayrılıqda sınadım. Bunu yerinə yetirmək üçün bir neçə axşam lazım idi və hər şey yaxşı getdi … onları açar ifadəsi içərisində bir araya gətirməyə çalışana qədər. avr-size yardım proqramı 1,5 Kb mətn bölmə ölçüsünü bildirdi (-r bayrağı ilə avr-gcc). O anda mənim ilk niyyətim 2Kb flaşla ATtiny25 çəkmək idi və bu hekayənin xoşbəxt sonu ola bilərdi.
Ancaq nədənsə hiss etdim ki, xeyli optimallaşdırıldıqdan sonra o bədbəxt kodu 1Kb -ə endirə bildim. Bununla birlikdə, bunun mümkün olmadığını başa düşmək üçün bir həftə və hər halda bunu etmək bir həftə çəkdi. Göy qurşağını beş əsas rəngə kəsmək məcburiyyətində qaldım (əhəmiyyətli vizual fərq olmadan). Dava ifadələrindən qurtuldum və ikili kod ölçüsünü azaltmaq üçün if-then-if zəncirindən istifadə etdim. Yanğın animasiyasına olduqca böyük olan yalançı təsadüfi ədəd generatoru lazımdır, buna görə də LFSR -nin daimi ilkin dəyəri olan sadələşdirilmiş bir versiyasını tətbiq etdim. PRNG -in tam dövrü ilə maraqlanmıram və sadəcə kod ölçüsü ilə "real yanğın animasiyası" arasında bir eniş balansı axtarıram. Hal -hazırda xatırlaya bilmədiyim bir çox kiçik optimallaşdırma da tətbiq etdim və hətta yanğından başqa bütün modları çipə daxil etməyi də bacardım. Fikirlərim tükənəndə ümumi kodum təxminən 1200 bayt idi.
Mən fasilə aldım və AVR kodunun optimallaşdırılması haqqında çox oxudum. Hər şeyi montaj dilində buraxmağa və yenidən yazmağa yaxın idim, amma son şansı verdim. Son optimallaşdırma tələskən, göy qurşağını üç əsas rəngə ayırdım və digərlərini anında hesablamağa məcbur etdim, hər şeyi yoxladım və AVR optimallaşdırma tövsiyələrinə əməl etdim və nəhayət …
avrdude: yazı flaşı (1004 bayt):
Yazı | ################################################### | 100% 0,90s
Cari rejimi saxlamaq üçün demək olar ki, bütün RAM və bir bayt EEPROM istifadə etdiyimi söyləməyə ehtiyac yoxdur. Bunun ideal və son bir tətbiq olduğunu düşünmürəm. Sadəcə işləyir və mikro nəzarətçiyə uyğundur. Əminəm ki, bunu daha yaxşı edə bilərsiniz. Mən həqiqətən. Başlanğıcda demək olar ki, qeyri -mümkün hesab etdiyiniz praktik olmayan bir problemi həll etməyin əyləncəsini bölüşmək istəyirəm. "Beləliklə, hack etmək mümkün olanların sərhədlərini araşdırmaq deməkdir …" -Richard Stallman.
Təchizat:
1x ATtiny13 MCU (SOP-8 paketindəki MCU üçün 0,28 dollar = 0,24 dollar və DIP8 Adaptoru üçün 0,04 dollar)
8x WS2812 RGB LED (bir lövhə və ya bir LED şeridi tövsiyə edirəm) (0.42 dollar)
1x TTP223 Toxunma düyməsi ($ 0.10)
1x Mikro USB -dən DIP Adaptora (0,14 dollar)
1x 10kΩ müqavimət (<$ 0.01)
1x 100nF keramika kondansatörü (<0.01 $)
1x 10-47µF elektrolitik kondansatör (<$ 0.01)
Ümumi <0,97 dollar
Addım 1: Proqram Quraşdırması
Mənbə kodunu tərtib etmək üçün avr-gcc alət zəncirinə və mikro nəzarətçinin ROMunu yükləmək üçün avrdude proqramına ehtiyacınız olacaq. Quraşdırma prosesi olduqca sadə və sadədir, ancaq əməliyyat sisteminizdən asılıdır. Bir növ GNU/Linux istifadə edirsinizsə, ehtimal ki, anbar ağacınızda müvafiq paketləriniz var. Bu layihənin mənbə kodu buradan yüklənə bilər:
github.com/arduinocelentano/t13_ws2812_lamp
Light_ws2812 kitabxanasına da ehtiyacınız olacaq:
github.com/cpldcpu/light_ws2812
Avr-gcc alət zəncirinə və layihə mənbələrinə sahib olduqdan sonra terminalınızı işə salın və aşağıdakı kodu yazın:
cd yolu/layihəsi
etmək
Addım 2: Mikrokontrolörün proqramlaşdırılması
Bir növ USBASP proqramçınız varsa, pininə görə Attiny -ə qoşun. Adətən bu belə olardı, amma həqiqi pinoutunuzu yoxlamağı şiddətlə məsləhət görürəm!
Alternativ olaraq, bir proqramçı olaraq bir Arduino lövhəsindən istifadə edə bilərsiniz. Arduino IDE -ni açın və "Fayl → Nümunələr" menyusunda Arduino İSS nümunəsini tapın. Eskizi yüklədikdən sonra Arduino lövhəniz proqramçı kimi çıxış edir. Eskiz kodundakı şərhlər pinout üçün bir ipucu verəcəkdir.
İndi qaç
flaş etmək
MCU -nu yandırmaq və
qoruyucu etmək
sigorta bitlərini təyin etmək.
Tövsiyə:
3D Çaplı LED Mood Lampası: 15 Addım (Şəkillərlə birlikdə)
3D Çaplı LED Mood Lampası: Mən həmişə lampalara heyran olmuşam, buna görə də 3D Printing və Arduino -nu LED -lərlə birləşdirmə qabiliyyətinə sahib olmaq mənim üçün lazım olan bir şey idi. qoya biləcəyiniz təcrübələr
Aşağı Poli LED Mood Lampası: 9 Addım (Şəkillərlə birlikdə)
Aşağı Poly LED Mood Lampası: Hər hansı bir masaya, rəfə və ya masaya əla bir əlavə! Baza üzərində yerləşən diskret düymə, müxtəlif LED işıqlandırma nümunələri arasında gəzməyə imkan verir. Fənərinizi oxumaq, istirahət etmək və ya hətta əylənmək üçün istifadə etmək istəməyinizin əhəmiyyəti yoxdur
LED Mood Lampası: 9 Addım (Şəkillərlə birlikdə)
LED Mood Lampası: Bu yaxınlarda Greg Davill tərəfindən LED Cube ilə rastlaşdım. Əla bir sənət əsəridir. Bundan ilham alaraq belə bir şey etmək istədim. Amma bu mənim liqamdan çıxmaq üçün bir yol idi. Bir anda addım atmağa qərar verdim və bir az kiçildim
Yerli Veb Server tərəfindən idarə olunan ESP 8266 Nodemcu Ws 2812 Neopixel Əsaslı LED MOOD Lampası: 6 Addım
ESP 8266 Nodemcu Ws 2812 Neopixel əsaslı LED MOOD Lampası Yerli Veb Server tərəfindən idarə olunur: ESP 8266 Nodemcu Ws 2812 Neopixel əsaslı LED MOOD Lampası Webserverdən istifadə edilərək idarə olunur
ESP 8266 Nodemcu Ws 2812 Neopixel əsaslı LED MOOD Lampası veb serverdən istifadə edərək idarə olunur: 6 addım
ESP 8266 Nodemcu Ws 2812 Neopixel Əsaslı LED MOOD Lampası Web Serverdən İdarə Edilir: Bu Layihədə nodemcu &MO; yerli veb server istifadə edərək hər hansı bir brauzer tərəfindən idarə oluna bilən neopixel