Mundarija:
Video: ATtiny13 va WS2812: 7 qadamli 1 dollarlik LED kayfiyatli chiroq
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:22
Muallif tomonidan batafsil:
Bu to'rtta rejimga ega bo'lgan arzon kayfiyat chiroqidir.
1. Kamalak uchquni. Yorug'lik uchquni vaqti -vaqti bilan yuqoriga qarab harakat qiladi va asta -sekin rangini o'zgartiradi.
2. Kamalakning porlashi. Rangni asta -sekin o'zgartiradigan barqaror nur.
3. Sham olovining simulyatsiyasi.
4. O'chirilgan.
Yuqoridagi sensorli tugmani bosib rejimlarni o'zgartirishingiz mumkin. Joriy rejim o'chirilgandan so'ng EEPROM xotirasida saqlanadi.
ATtiny13 qanchalik kichkina?
Maqsad - bu minimal uskunadan maksimal funktsiyalarni olish, avtomatlashtirilgan kalit yoki termometrdan ko'ra murakkabroq narsa, bu kichik mikrokontrollerning chetiga yaqin loyiha. Axir, cheklovlar sizni ijodiy o'ylashga majbur qiladi, to'g'rimi? Xo'sh, boshida shunday ko'rinardi.
Ushbu loyihadagi eng qiyin narsa ATtiny13 -ga barcha kodlarni kiritish edi. Mikrokontroller 1K baytli fleshka va faqat 64 baytli RAMga ega. Ha, men "bayt" deganda, sakkiz bitdan iborat bo'lganlarni nazarda tutyapman. Barcha mahalliy o'zgaruvchilar va qo'ng'iroqlar to'plami uchun 64 bayt. Aniq bo'lish uchun, biz 8 ta RGB LEDni boshqarishimiz kerakligini o'ylab ko'ring. Ularning har biri 3 bayt bilan belgilanadi (mos ravishda qizil, yashil va ko'k kanallar uchun). Shunday qilib, faqat 8 ta LED holatini saqlash uchun biz har biri 3 bayt bo'lgan 8 ta tuzilmadan iborat massivni amalga oshirishimiz kerak va bu qatorning boshiga ko'rsatgich yana bir baytni oladi. Shunday qilib, 64 baytdan 25 tasi tashqarida. Biz RAMning 39 foizini ishlatganmiz va hozircha ishga tushmaganmiz. Bundan tashqari, kamalakning ettita asosiy rangini saqlash uchun sizga 7 × 3 = 21 bayt kerak bo'ladi, shuning uchun RAMning 72 foizi tugagan. Asosiy ranglarga kelsak, men bo'rttirib aytaman: ularning barchasiga bir vaqtning o'zida RAMda kerak emas va ular hech qachon o'zgarmaydi, shuning uchun ularni RAM o'rniga fleshda saqlash uchun doimiy massiv sifatida qo'llash mumkin. Qanday bo'lmasin, u ishlatilgan uskunalar haqida umumiy taassurot qoldiradi.
Knutning muddatidan oldin optimallashtirish haqidagi bayonotini eslab, nima bo'lishini ko'rish uchun uchta chiroq rejimini alohida prototiplashdan boshladim. Men ularning to'g'ri ishlashini va har biri mening mikrokontrollerimga mos kelishini tekshirish uchun ularni alohida sinovdan o'tkazdim. Buni amalga oshirish uchun bir necha oqshom kerak bo'ldi va men hamma narsani yaxshi o'tdim … men ularni kalit so'zlari ichida birlashtirishga harakat qilgunimcha. avr-size yordam dasturi 1,5 Kb hajmdagi matn bo'limi haqida xabar berdi (avr-gcc bayrog'i bilan). O'sha paytda mening asl niyatim 2Kb fleshli ATtiny25 ni olish edi va bu hikoyaning baxtli oxiri bo'lishi mumkin edi.
Ammo men qandaydir tarzda optimallashtirishdan so'ng, bu yomon kodni 1Kb ga qisqartirishim mumkinligini his qildim. Biroq, buning iloji yo'qligini anglash uchun yana bir hafta kerak bo'ldi va baribir buni amalga oshirish uchun yana bir hafta kerak bo'ldi. Men kamalakni beshta asosiy rangga kesishim kerak edi (sezilarli vizual farqsiz). Men ish bayonotlaridan qutuldim va ikkilik kod hajmini kamaytirish uchun if-then-if zanjiridan foydalandim. Yong'in animatsiyasi juda katta hajmdagi soxta tasodifiy sonlar generatoriga muhtoj, shuning uchun men doimiy boshlang'ich qiymati bilan LFSR ning soddalashtirilgan versiyasini joriy qildim. Menga PRNG to'liq tsikli haqida qayg'urmayman va faqat kod o'lchami va "haqiqiy yong'in animatsiyasi" o'rtasidagi tushish muvozanatini qidiraman. Men hozirda eslay olmaydigan juda ko'p kichik optimallashtirishlarni amalga oshirdim va hatto yong'indan tashqari barcha rejimlarni chipga o'chirishga muvaffaq bo'ldim. Fikrlar tugagach, mening umumiy kodim taxminan 1200 bayt edi.
Men tanaffus oldim va AVR kodini optimallashtirish haqida ko'p o'qigan edim. Men hamma narsadan voz kechishga va assambleyada qayta yozishga yaqin edim, lekin oxirgi imkoniyatni berdim. Oxirgi optimallashtirish paytida men kamalakni uchta asosiy rangga kesib tashladim va boshqalarini tezda hisoblab chiqdim, men hamma narsani ko'rib chiqdim va AVRni optimallashtirish bo'yicha tavsiyalarga amal qildim va nihoyat …
avrdude: yozish chirog'i (1004 bayt):
Yozish | ######################################################################################## | 100% 0,90s
Hozirgi rejimni saqlash uchun deyarli barcha operativ xotira va bir bayt EEPROM ishlatilgan deb aytishga hojat yo'q. Men bu ideal va yakuniy amalga oshirish degani emas. Bu shunchaki ishlaydi va mikrokontrollerga mos keladi. Ishonchim komilki, buni yaxshiroq qilishingiz mumkin. Men haqiqatan ham. Men siz boshida deyarli imkonsiz deb hisoblagan amaliy bo'lmagan muammoni hal qilishning zavqini bo'lishmoqchiman. "Shunday qilib, xakerlik -bu mumkin bo'lgan chegaralarni o'rganishni anglatadi …" -Richard Stallman.
Ta'minot:
1x ATtiny13 MCU (SOP-8 paketidagi MCU uchun $ 0,28 = 0,24 dollar va DIP8 adapteri uchun 0,04 dollar)
8x WS2812 RGB LEDlari (men taxtani yoki LED tasmasini tavsiya qilaman) (0,42 dollar)
1x TTP223 sensorli tugma ($ 0.10)
1x Micro USB to DIP adapter (0,14 dollar)
1x 10kΩ qarshilik (<$ 0.01)
1x 100nF sopol kondansatör (<$ 0.01)
1x 10-47 mkF elektrolitik kondansatör (<$ 0.01)
Hammasi <$ 0,97
1 -qadam: dasturiy ta'minotni sozlash
Sizga manba kodini tuzish uchun avr-gcc asboblar zanjiri va mikrokontroller ROMini yuklash uchun avrdude yordam dasturi kerak bo'ladi. O'rnatish jarayoni juda oddiy va sodda, lekin bu sizning operatsion tizimingizga bog'liq. Agar siz GNU/Linux -dan foydalansangiz, ehtimol sizning ombor daraxtingizda tegishli paketlar mavjud. Loyihaning manba kodini bu erdan yuklab olish mumkin:
github.com/arduinocelentano/t13_ws2812_lamp
Sizga light_ws2812 kutubxonasi ham kerak bo'ladi:
github.com/cpldcpu/light_ws2812
Avr-gcc asboblar zanjiri va loyiha manbalariga ega bo'lgach, terminalingizni ishga tushiring va quyidagi kodni kiriting:
cd yo'l/loyihasi
qilmoq
2 -qadam: Mikrokontrollerni dasturlash
Agar sizda qandaydir USBASP dasturchisi bo'lsa, uni Attiny -ga ulang. Odatda bu shunday bo'ladi, lekin men sizning haqiqiy pinoutingizni tekshirishni qat'iy tavsiya qilaman!
Shu bilan bir qatorda, Arduino kartasini dasturchi sifatida ishlatishingiz mumkin. Arduino IDE -ni oching va "Fayl → Misollar" menyusida Arduino provayderining misolini toping. Eskizni yuklaganingizdan so'ng, sizning Arduino kartangiz dasturchi vazifasini bajaradi. Eskiz kodidagi izohlar sizga pinout haqida ma'lumot beradi.
Endi yugur
chirog 'qilish
MCU -ni o'chirish va
sug'urta qilmoq
sug'urta bitlarini o'rnatish uchun.
3 -qadam: sxemalar
Tavsiya:
3D bosilgan LED kayfiyatli chiroq: 15 qadam (rasmlar bilan)
3D bosma LED kayfiyatli chiroq: Men har doim chiroqlarni yaxshi ko'raman, shuning uchun 3D bosib chiqarish va Arduino -ni LED bilan birlashtirish qobiliyatiga ega bo'lishim kerak edi. Siz qo'yishingiz mumkin bo'lgan tajribalar
Kam Poly LED kayfiyatli chiroq: 9 qadam (rasmlar bilan)
Kam Poly LED kayfiyatli chiroq: har qanday stol, javon yoki stolga ajoyib qo'shimcha! Baza ustida joylashgan diskret tugma sizga turli xil LED yoritgichli sxemalar orqali aylanish imkonini beradi. Chirog'ingizni o'qish, dam olish yoki hordiq chiqarish uchun ishlatishni xohlamasligingiz muhim emas
Smartfon veb -interfeysi bilan 5 dollarlik aqlli chiroq: 4 qadam
Smartfon veb -interfeysi bilan 5 dollarlik aqlli chiroq: Salom! Mening ismim Rafael. Bu mening birinchi ko'rsatma! Bu chiroqni yaratishdan asosiy maqsadim-harakatchanligi cheklangan odamlarning hayotiga yordam berish. Qachonlardir bizda devorni o'chiradigan yoki ulanishi qiyin bo'ladigan vilkalar bo'lmaydi, aksincha bizning smartfonlarimiz boshqaradi
Masofadan boshqariladigan RGB LED kayfiyatli yorug'lik: 3 qadam (rasmlar bilan)
Uzoqdan boshqariladigan RGB LED kayfiyat nuri: masofadan boshqarish pulti yordamida kuchli LED yorug'lik nurining rangini boshqaring, ranglarni saqlang va ularni xohlaganingizcha eslab qoling. uchta asosiy rang: qizil yashil
Taxminan 10 dollarlik 7 qadamli ikkita AAA LED kitobli chiroq
Taxminan 10 dollarlik ikkita AAA LED kitob chiroqlari: O'qishni yoqtirasiz, lekin LED kitob chiroqlari uchun ortiqcha pul to'lashni xohlamaysizmi? Arzonlari o'zlarini shunday his qilishadi va odatda qimmat dumaloq batareyalarni olishadi. Bu erda men sizga ikkita AAA LED kitob chiroqlarini taxminan 10 dollarga va yarim soatga qanday yasashni ko'rsataman