Sisukord:
Video: 1 dollari suurune LED -meeleolulamp koos ATtiny13 ja WS2812: 7 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:45
Jälgi autori lisateavet:
See on nelja režiimiga odav meeleolulamp.
1. Vikerkaare säde. Valgusäde liigub aeg -ajalt ülespoole ja muudab järk -järgult värvi.
2. Vikerkaare kuma. Stabiilne sära, mis muudab värvi järk -järgult.
3. Küünla tule simulatsioon.
4. Väljas.
Režiime saate vahetada, puudutades ülaosas olevat puutetundlikku nuppu. Praegune režiim salvestatakse pärast väljalülitamist EEPROM -i mällu.
Kui väike on ATtiny13?
Idee oli saada maksimaalseid funktsioone minimaalsest riistvarast - midagi keerulisemat kui automaatne lüliti või termomeeter - projekt, mis asub selle väikese mikrokontrolleri serva lähedal. Lõppude lõpuks panevad piirangud mõtlema loovalt, eks? No alguses tundus nii.
Selle projekti kõige keerulisem oli kogu kood ATtiny13 -sse sisestada. Mikrokontrolleril on 1K baiti välk ja vaid 64 baiti RAM. Jah, kui ma ütlen “baite”, pean silmas neid, mis koosnevad kaheksast bitist. 64 baiti kõigi kohalike muutujate ja kõnede virna jaoks. Selguse huvides peame kaaluma 8 RGB LED -i juhtimist. Igaüks neist on määratletud 3 baidiga (üks vastavalt punase, rohelise ja sinise kanali jaoks). Niisiis, lihtsalt 8 LED -i oleku salvestamiseks peame rakendama 8 struktuuri massiivi, igaüks 3 baiti ja kursor selle massiivi algusesse võtaks veel ühe baidi. Seega on 64 baidist 25 väljas. Me kasutasime äsja 39% muutmälu ja pole veel tegelikult alustanud. Lisaks vajate seitsme põhivärvvärvi salvestamiseks 7 × 3 = 21 baiti, nii et 72% RAM -ist on väljas. Põhivärvide osas liialdan: me ei vaja neid kõiki korraga RAM -is ja need ei muutu kunagi, nii et neid võidakse rakendada püsiva massiivina, mis salvestatakse RAM -i asemel välklampi. Igatahes jätab see üldise mulje kasutatud riistvara kohta.
Meenutades Knuthi avaldust enneaegse optimeerimise kohta, alustasin kolme lambirežiimi prototüüpimisega, et näha, mis juhtub. Olen neid eraldi testinud, veendumaks, et need töötavad korralikult ja igaüks sobib minu mikrokontrolleriga. Selle saavutamiseks kulus paar õhtut ja kõik läks hästi … kuni proovisin neid lüliti avalduses kokku panna. avr-suurusega utiliit teatas 1,5 Kb tekstiosa suurusest (koos -s lipuga avr-gcc). Sel hetkel oli minu esialgne kavatsus haarata 2Kb välguga ATtiny25 ja see võis olla selle loo õnnelik lõpp.
Kuid millegipärast tundsin, et pärast märkimisväärset optimeerimist suudan selle jubeda koodi 1Kb -ni kokku tõmmata. Siiski kulus veel nädal, et aru saada, et see on võimatu, ja veel nädal selle saavutamiseks. Pidin vikerkaare viieks põhivärviks lõikama (ilma olulise visuaalse erinevuseta). Ma vabanesin juhtumite avaldustest ja kasutasin binaarse koodi suuruse vähendamiseks ahelat if-then-if. Tuleanimatsioon vajab pseudojuhuslike numbrite generaatorit, mis on üsna mahukas, nii et rakendasin LFSR -i lihtsustatud versiooni, millel oli konstantne algväärtus. Mind ei huvita PRNG kogu tsükli pikkus ja ma otsin lihtsalt tasakaalu koodi suuruse ja "realistliku tuleanimatsiooni" vahel. Rakendasin ka palju väiksemaid optimeerimisi, mida ma praegu ei mäleta, ja suutsin isegi kõik režiimid peale tule kiibile välgutada. Kui mul ideed otsa said, oli minu kood kokku umbes 1200 baiti.
Võtsin aja maha ja lugesin palju AVR -koodi optimeerimise kohta. Olin lähedal loobumisele ja kõike koostamiskeeles ümber kirjutama, kuid andsin sellele viimase võimaluse. Viimase optimeerimissurma ajal lõikasin vikerkaare kolmeks põhivärviks ja panin teised käigu pealt arvutama, kontrollisin kõike ja järgisin AVR -i optimeerimissoovitusi ning lõpuks…
avrdude: kirjutusvälk (1004 baiti):
Kirjutamine | ########################################### | 100% 0,90
Pole vaja öelda, et kasutasin praeguse režiimi salvestamiseks peaaegu kogu RAM -i ja ainult ühte baiti EEPROM -i. Ma ei vihja sellele, et see on ideaalne ja ülim teostus. See lihtsalt töötab ja sobib mikrokontrolleriga. Olen kindel, et saaksite seda paremini teha. Ma tõesti olen. Ma tahan lihtsalt jagada lõbu lahendada näiliselt ebapraktilist probleemi, mida peate alguses peaaegu võimatuks. "Seega tähendab häkkimine võimalike piiride uurimist …" -Richard Stallman.
Tarvikud:
1x ATtiny13 MCU (0,28 dollarit = 0,24 dollarit MCU jaoks SOP-8 paketis ja 0,04 dollarit DIP8 adapteri jaoks)
8x WS2812 RGB LED -d (soovitan tahvlit või LED -riba) (0,42 dollarit)
1x TTP223 puutetundlik nupp (0,10 dollarit)
1x mikro -USB -DIP -adapter (0,14 dollarit)
1x 10 kΩ takisti (<$ 0,01)
1x 100nF keraamiline kondensaator (<$ 0,01)
1x 10–47 µF elektrolüütkondensaator (<$ 0,01)
Kokku <0,97 dollarit
Samm: tarkvara seadistamine
Lähtekoodi koostamiseks ja mikrokontrolleri ROM-i üleslaadimiseks vajate avrdude utiliiti. Installiprotsess on üsna lihtne ja arusaadav, kuid see sõltub teie operatsioonisüsteemist. Kui kasutate mingit GNU/Linuxi, on teie hoidlapuus tõenäoliselt juba korralikud paketid. Selle projekti lähtekoodi saab alla laadida siit:
github.com/arduinocelentano/t13_ws2812_lamp
Teil on vaja ka raamatukogu light_ws2812:
github.com/cpldcpu/light_ws2812
Kui teil on avr-gcc tööriistakett ja projektiallikad, käivitage oma terminal ja tippige järgmine kood:
cd tee/projektile
tegema
Samm: mikrokontrolleri programmeerimine
Kui teil on mingi USBASP -programmeerija, ühendage see lihtsalt Attiny -ga vastavalt selle pistikule. Tavaliselt näeks see välja selline, kuid soovitan tungivalt kontrollida oma tegelikku pinouti!
Teise võimalusena võite programmeerijana kasutada Arduino plaati. Avage Arduino IDE ja leidke Arduino ISP näide menüüst „Fail → Näited”. Pärast visandi üleslaadimist toimib teie Arduino plaat programmeerijana. Eskiisikoodi kommentaarid annaksid teile vihje selle kohta, kuidas neid otsida.
Nüüd jookse
sähvatama
MCU välgutamiseks ja
teha kaitsmeid
kaitsmeotsikute seadistamiseks.
Soovitan:
Ülimalt ere Lego-valgus alates 14 dollari suurusest raadiolaua laualambist: 8 sammu (koos piltidega)
Üliterav Lego-valgus alates 14 dollari suurusest Radio Shack laualambist: oma kassi väikese abiga saate hõlpsalt muuta 14-dollarise laualambi Radio Shackist võimsaks Lego-valguseks, millel on palju kasutusvõimalusi. Lisaks saate seda toita vahelduvvoolu või USB kaudu. Ostsin Lego mudelile valgustuse lisamiseks osi, kui leidsin selle kogemata
Neopixel Ws2812 Rainbow LED-helendus koos M5stick-C - Vikerkaare käivitamine Neopixel Ws2812 -l M5stack M5stick C abil Arduino IDE abil: 5 sammu
Neopixel Ws2812 Rainbow LED-helendus koos M5stick-C | Vikerkaare jooksmine Neopixel Ws2812-l M5stack M5stick C kasutamine Arduino IDE kasutamine: Tere poisid, selles juhendis õpime, kuidas kasutada neopixel ws2812 LED-e või led-riba või led-maatriksit või led-rõngast koos m5stack m5stick-C arendusplaadiga Arduino IDE-ga ja teeme vikerkaare muster koos sellega
Teisendage Bose QC25 juhtmevabaks koos mikrofoniga vähem kui 15 dollari eest!: 4 sammu (koos piltidega)
Teisendage Bose QC25 juhtmevabaks, kaasa arvatud mikrofoniks vähem kui 15 dollari eest !: See pole küll kõige ilusam häkk, kuid see on odavaim ja väljamõeldud viis, kuidas muuta suurepärased Bose kõrvaklapid QC25 juhtmevabaks isegi siis, kui mikrofon töötab! Peame ostma ainult kaks odavat tükki ja midagi lihvima: 1: nokia adapter teisendamiseks
Tehke 30 dollari suurune digitaalne pildiraam: 7 sammu
Tehke 30 dollari suurune digitaalne pildiraam: see õpetus näitab teile, kuidas teha 2,5 -tolline digitaalne pildiraam, kasutades Matteli mahlapakki. Osade kogumaksumus oli umbes 30 dollarit. Ma tean, et seda tüüpi õpetusi on tehtud mitu korda, kuid mõtlesin, et postitan oma esitluse sellest. Ma pole
5 dollari dollari sissemurdjahäire!: 17 sammu
5 dollari dollari sissemurdjahäire !: Tegin sissemurdmishäire alla 5 dollari eest ja esemed, mille leidsin maja ümber asetamas! Jootmist pole vaja. (jootmine valikuline) laadisin selle video üles ka video sektsiooni. Vaadake minu videot allpool: