Բովանդակություն:
Video: $ 1 LED տրամադրության լամպ ATtiny13- ով և WS2812- ով ՝ 7 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:45
Հետևեք հեղինակի ավելին.
Սա էժան տրամադրության լամպ է ՝ չորս ռեժիմով:
1. Rիածանի կայծ: Լույսի կայծը ժամանակ առ ժամանակ շարժվում է դեպի վեր և աստիճանաբար փոխում գույնը:
2. Rիածանի փայլ: Կայուն փայլ, որն աստիճանաբար փոխում է գույնը:
3. Մոմի կրակի մոդելավորում:
4. Անջատված:
Դուք կարող եք փոխել ռեժիմները ՝ կտտացնելով վերևի հպման կոճակին: Ընթացիկ ռեժիմը պահվում է EEPROM հիշողության մեջ `անջատվելուց հետո:
Որքան փոքր է ATtiny13- ը:
Գաղափարն այն էր, որ առավելագույն հնարավորություններ ստանանք նվազագույն սարքավորումներից, ինչը ավելի բարդ է, քան ավտոմատ անջատիչ կամ ջերմաչափ, նախագիծ, որը մոտ է այս փոքրիկ միկրոկոնտրոլերի եզրին: Ի վերջո, սահմանափակումները ստիպում են ձեզ ստեղծագործ մտածել, այնպես չէ՞: Դե, սկզբում նման էր:
Այս նախագծում ամենադժվարը ամբողջ ծածկագիրը ATtiny13- ի մեջ մտցնելն էր: Միկրոկոնտրոլերն ունի 1 ԿԲ բայթ և ընդամենը 64 Բայթ օպերատիվ հիշողություն: Այո, «բայթ» ասելիս նկատի ունեմ ութ բիթից բաղկացածները: 64 բայթ ՝ ձեր բոլոր տեղական փոփոխականների և զանգերի հավաքածուի համար: Հստակեցնելու համար հաշվի առեք, որ մենք պետք է վերահսկենք 8 RGB LED: Նրանցից յուրաքանչյուրը սահմանվում է 3 բայթով (մեկը համապատասխանաբար կարմիր, կանաչ և կապույտ ալիքների համար): Այսպիսով, պարզապես 8 LED- ների վիճակը պահելու համար մենք պետք է ներդնենք 8 կառույցից բաղկացած զանգված `յուրաքանչյուրը 3 բայթ, և այս զանգվածի սկզբի ցուցիչը կտևի ևս մեկ բայթ: Այսպիսով, 64 բայթից 25 -ը դուրս է: Մենք պարզապես օգտագործել ենք RAM- ի 39% -ը և իրականում դեռ չենք սկսել: Բացի այդ, ծիածանի յոթ հիմնական գույները պահելու համար ձեզ հարկավոր կլինի 7 × 3 = 21 բայթ, այնպես որ RAM- ի 72% -ը սպառված է: Ինչ վերաբերում է հիմնական գույներին, ապա ես չափազանցնում եմ. Դրանք բոլորը մեզ պետք չեն միաժամանակ RAM- ում և դրանք երբեք չեն փոխվում, ուստի դրանք կարող են իրականացվել որպես մշտական զանգված, որը պետք է պահվի ֆլեշում ՝ RAM- ի փոխարեն: Ամեն դեպքում, դա ընդհանուր տպավորություն է թողնում օգտագործված սարքավորումների մասին:
Հիշելով վաղաժամ օպտիմալացման վերաբերյալ Քնութի հայտարարությունը, ես սկսեցի լամպի երեք ռեժիմի առանձին նախատիպից ՝ տեսնելու, թե ինչ է տեղի ունենում: Ես դրանք առանձին եմ փորձարկել `համոզվելու համար, որ դրանք ճիշտ են աշխատում, և յուրաքանչյուրը համապատասխանում է իմ միկրոկոնտրոլերին: Դա կատարելու համար մի քանի երեկո տևեց, և ամեն ինչ լավ անցավ … մինչև որ ես փորձեցի դրանք միացնել անջատիչ հայտարարության ներսում: avr-size կոմունալ ծառայությունը հաղորդեց 1.5 Կբ տեքստային հատվածի չափ (avr-gcc -s դրոշով): Այդ պահին իմ սկզբնական մտադրությունը 2Kb ֆլեշով որոշ ATtiny25 գրավելն էր, և դա կարող էր լինել այս պատմության երջանիկ ավարտը:
Բայց ինչ -որ կերպ ես զգացի, որ զգալի օպտիմալացումից հետո կարող եմ հասցնել կրճատել այդ խայտառակ ծածկագիրը 1 Կբ -ի: Այնուամենայնիվ, ևս մեկ շաբաթ պահանջվեց հասկանալու համար, որ դա անհնար է, և ամեն դեպքում դա կատարելու համար ևս մեկ շաբաթ: Ես ստիպված էի ծիածանը կտրել հինգ հիմնական գույների (առանց էական տեսողական տարբերության): Ես ազատվեցի դեպքի հայտարարություններից և օգտագործեցի if-then-if շղթան `երկուական կոդի չափը նվազեցնելու համար: Fire անիմացիային անհրաժեշտ է կեղծ պատահական թվերի գեներատոր, որը բավականին մեծ է, ուստի ես իրականացրեցի LFSR- ի պարզեցված տարբերակ `մշտական սկզբնական արժեքով: Ինձ չի հետաքրքրում PRNG ցիկլի ամբողջ տևողությունը և պարզապես ծագման հավասարակշռություն եմ փնտրում կոդի չափի և «իրատեսական կրակի անիմացիայի» միջև: Ես նաև իրականացրեցի շատ փոքր օպտիմալացումներ, որոնք այժմ չեմ կարող հիշել, և նույնիսկ հասցրեցի բոլոր ռեժիմները, բացի կրակից, ցայտել չիպի մեջ: Երբ ես սպառեցի գաղափարները, իմ ընդհանուր կոդը մոտ 1200 բայթ էր:
Ես ընդմիջում վերցրեցի և շատ էի կարդում AVR կոդի օպտիմալացման մասին: Ես մոտ էի հանձնվելու և ամեն ինչ վերաշարադրելու հավաքի լեզվով, բայց վերջին հնարավորությունը տվեցի դրան: Օպտիմալացման վերջնական շտապի ժամանակ ես ծիածանը կտրեցի երեք հիմնական գույների և ստիպեցի մյուսներին հաշվարկել ինքնաթիռում, ես ստուգեցի ամեն ինչ և հետևեցի AVR- ի օպտիմալացման առաջարկներին և վերջապես…
avrdude: գրելու ֆլեշ (1004 բայթ):
Գրելը | #################################################### | 100% 0.90s
Կարիք չկա ասելու, որ ես օգտագործել եմ գրեթե ամբողջ RAM և ընդամենը մեկ բայթ EEPROM ՝ ընթացիկ ռեժիմը պահելու համար: Ես չեմ ենթադրում, որ սա իդեալական և վերջնական իրականացում է: Այն պարզապես աշխատում է և տեղավորվում է միկրոկոնտրոլերի վրա: Համոզված եմ, դուք կարող եք դա անել ավելի լավ: Ես իսկապես այդպիսին եմ: Ես պարզապես ուզում եմ կիսվել այն թվացյալ անիրագործելի խնդրի լուծման հաճույքով, որը սկզբում գրեթե անհնար եք համարում: «Այսպիսով, կոտրելը նշանակում է ուսումնասիրել հնարավորի սահմանները …» -Ռիչարդ Ստալման:
Պարագաներ:
1x ATtiny13 MCU ($ 0.28 = $ 0.24 MCU- ի համար SOP-8 փաթեթում և $ 0.04 DIP8 ադապտերի համար)
8x WS2812 RGB LED (խորհուրդ եմ տալիս տախտակ կամ LED շերտի մի կտոր) (0,42 դոլար)
1x TTP223 հպման կոճակ (0,10 դոլար)
1x Micro USB- ից DIP ադապտեր (0.14 դոլար)
1x 10kΩ դիմադրություն (<0,01 դոլար)
1x 100nF կերամիկական կոնդենսատոր (<0,01 դոլար)
1x 10-47µF էլեկտրոլիտային կոնդենսատոր (<0,01 դոլար)
Ընդհանուր <0.97 դոլար
Քայլ 1: Softwareրագրաշարի տեղադրում
Ձեզ անհրաժեշտ կլինի avr-gcc գործիքաշղթա ՝ սկզբնաղբյուրը կազմելու և avrdude կոմունալը ՝ միկրոկառավարիչի ROM- ը վերբեռնելու համար: Տեղադրման գործընթացը բավականին պարզ և պարզ է, բայց դա կախված է ձեր օպերացիոն համակարգից: Եթե դուք օգտագործում եք մի տեսակ GNU/Linux, ապա հավանաբար արդեն ունեք համապատասխան փաթեթներ ձեր պահեստի ծառում: Այս նախագծի աղբյուրի կոդը կարելի է ներբեռնել այստեղ ՝
github.com/arduinocelentano/t13_ws2812_lamp
Ձեզ նույնպես պետք է light_ws2812 գրադարան.
github.com/cpldcpu/light_ws2812
Avr-gcc գործիքաշղթայի և ծրագրի աղբյուրների ձեռքբերումից հետո գործարկեք ձեր տերմինալը և մուտքագրեք հետևյալ ծածկագիրը.
cd ուղի/դեպի/նախագիծ
կատարել
Քայլ 2. Միկրոհսկիչի ծրագրավորում
Եթե ունեք ինչ -որ USBASP ծրագրավորող, պարզապես միացրեք այն Attiny- ին ՝ ըստ դրա պինուտի: Սովորաբար դա այսպիսի տեսք կունենար, բայց ես խստորեն խորհուրդ եմ տալիս ստուգել ձեր իրական pinout- ը:
Այլապես, դուք կարող եք օգտագործել Arduino տախտակը որպես ծրագրավորող: Բացեք Arduino IDE- ն և գտեք Arduino ISP- ի օրինակը «Ֆայլ → Օրինակներ» ընտրացանկում: Էսքիզը վերբեռնելուց հետո ձեր Arduino տախտակը հանդես է գալիս որպես ծրագրավորող: Էսքիզային կոդի մեջ տրված մեկնաբանությունները ձեզ հուշում կտան քերծելու մասին:
Հիմա վազիր
կատարել ֆլեշ
բռնկել MCU- ն և
ապահովիչ սարքել
ապահովիչի բիթեր տեղադրելու համար:
Խորհուրդ ենք տալիս:
3D տպված LED տրամադրության լամպ. 15 քայլ (նկարներով)
3D տպագիր LED տրամադրության լամպ. Ես միշտ ունեցել եմ այս գրավչությունը լամպերի հետ, այնպես որ 3D տպագրությունն ու Arduino- ն LED- ների հետ համատեղելու ունակությունն այն էր, ինչ ես պետք է հետապնդեի: Հայեցակարգը շատ պարզ է, և արդյունքը ամենահագեցող տեսողական պատկերներից մեկն է: փորձառություններ, որոնք կարող եք տեղադրել
Տրամադրության լամպ (Ռոդրիգո Խիմենես 20052) ՝ 3 քայլ
ՏՐԱՄԱՍՆԱԿԱՆ ԼԱՄ (Ռոդրիգո Խիմենես 20052). Հղում տեսանյութի և youtube- ի վրա ՝ https://youtu.be/H4ghI6UAJw8
Polyածր Poly LED տրամադրության լամպ. 9 քայլ (նկարներով)
Polyածր Poly LED տրամադրության լամպ. Հիանալի հավելում ցանկացած գրասեղանի, դարակի կամ սեղանի համար: Հիմքի վրա տեղակայված դիսկրետ կոճակը թույլ է տալիս շրջել LED լուսավորման տարբեր նախշերով: Կարևոր չէ ՝ ուզում եք ձեր լամպն օգտագործել ուսման, հանգստանալու կամ նույնիսկ խնջույքի համար … կան կտրուկ
LED տրամադրության լամպ. 9 քայլ (նկարներով)
LED տրամադրության լամպ. Վերջերս ես հանդիպեցի Գրեգ Դեյվիլի LED խորանարդին: Դա հիանալի ստեղծագործություն է: Ոգեշնչվելով դրանից, նույնիսկ ես էի ուզում նման բան պատրաստել: Բայց սա մեկն էր իմ լիգայից դուրս գալու համար: Ես որոշեցի մեկ -մեկ քայլ անել և մի փոքր ավելի փոքր ճանապարհ դարձա
DIY LED Light - Desամանակակից աշխատասեղանի տրամադրության լամպ հեռակառավարմամբ `8 քայլ (նկարներով)
DIY LED Light - Desամանակակից աշխատասեղանի տրամադրության լամպ հեռակառավարմամբ. Այս հոդվածում ես կանցնեմ այն գործընթացի վրա, որը ես օգտագործել եմ այս հիանալի բուրգաձև ձևավորված LED տրամադրության լամպը կառուցելու համար: Ես օգտագործել եմ թխկի հիմնական կառուցվածքի և մի քանի կարմրափայտերի համար `լրացուցիչ ուժ ստանալու համար: Լույսի համար ես օգտագործել եմ RGB LED լույսեր, որոնք գալիս են 16 ոտնաչափ ժապավենով