Kazalo:
Video: LED svetilka za razpoloženje v vrednosti 1 USD z ATtiny13 in WS2812: 7 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:02
Avtor arduinocelentano Sledite še avtorja:
To je poceni svetilka za razpoloženje s štirimi načini delovanja.
1. Mavrična iskra. Iskra svetlobe se od časa do časa premika navzgor in postopoma spreminja barvo.
2. Mavrični sij. Stabilen sijaj, ki postopoma spreminja barvo.
3. Simulacija ognja sveč.
4. Izklopljeno.
Načine lahko preklopite tako, da se dotaknete gumba na dotik na vrhu. Trenutni način se po izklopu shrani v pomnilnik EEPROM.
Kako majhen je ATtiny13?
Zamisel je bila, da bi dobili čim več funkcij iz minimalne strojne opreme, nekaj bolj zapletenega kot avtomatizirano stikalo ali termometer, projekt blizu roba tega drobnega mikrokrmilnika. Konec koncev vas omejitve spodbudijo k ustvarjalnemu razmišljanju, kajne? No, tako je bilo videti na začetku.
Največji izziv pri tem projektu je bil vstaviti vso kodo v ATtiny13. Mikrokrmilnik ima 1K bajtov flash in samo 64 bajtov RAM -a. Da, ko rečem "bajti", mislim na tiste, ki so sestavljeni iz osmih bitov. 64 bajtov za za vse vaše lokalne spremenljivke in sklad klicev. Da bi bilo jasno, pomislimo, da moramo nadzorovati 8 LED RGB. Vsak od njih je definiran s 3 bajti (eden za rdeči, zeleni in modri kanal). Torej, samo za shranjevanje stanja 8 LED, bomo morali implementirati matriko 8 struktur po 3 bajte in kazalec na začetek tega niza bo vzel še en bajt. Tako je 25 od 64 bajtov zunaj. Ravnokar smo porabili 39% RAM -a in se v resnici še nismo začeli. Poleg tega boste za shranjevanje sedmih osnovnih barv mavrice potrebovali 7 × 3 = 21 bajtov, zato 72% RAM -a ni na voljo. No, kar se tiče osnovnih barv, pretiravam: ne potrebujemo jih vseh hkrati v RAM -u in se nikoli ne spremenijo, zato se lahko izvajajo kot konstantna matrika, ki se shrani v bliskavico namesto v RAM. Kakorkoli že, daje splošen vtis o rabljeni strojni opremi.
Ko sem se spomnil Knuthove izjave o prezgodnji optimizaciji, sem začel ločeno izdelovati tri načine svetilk, da vidim, kaj se zgodi. Preizkusil sem jih ločeno, da sem prepričan, da delujejo pravilno in da vsak ustreza mojemu mikrokrmilniku. To je trajalo nekaj večerov in vse je šlo dobro … dokler jih nisem poskušal sestaviti v izjavi o stikalih. pripomoček velikosti avr je poročal o velikosti 1,5 kb besedilnega odseka (z -s zastavico avr-gcc). Takrat je bil moj prvotni namen vzeti nekaj ATtiny25 z 2Kb bliskavico in to bi lahko bil srečen konec te zgodbe.
Nekako pa se mi je zdelo, da bi lahko po precejšnji optimizaciji to sranje kodo skrčil v 1 KB. Vendar je potreboval še en teden, da se je zavedel, da je to nemogoče, in še en teden, da bi to vseeno dosegel. Mavrico sem moral izrezati na pet osnovnih barv (brez bistvene vizualne razlike). Znebil sem se stavkov velikih primerov in uporabil verigo if-then-if za zmanjšanje velikosti binarne kode. Požarna animacija potrebuje generator psevdo naključnih števil, ki je precej velik, zato sem uvedel poenostavljeno različico LFSR s konstantno začetno vrednostjo. Ne zanima me dolžina celotnega cikla PRNG in samo iščem ravnovesje med velikostjo kode in "realistično animacijo ognja". Izvedel sem tudi veliko manjših optimizacij, ki se jih trenutno ne morem spomniti, in celo uspel celo vklopiti vse načine razen ognja v čip. Ko mi je zmanjkalo idej, je bila moja skupna koda približno 1200 bajtov.
Vzel sem si časovne omejitve in veliko sem bral o optimizaciji kode AVR. Skoraj sem se odrekel in vse prepisal v zbirnem jeziku, vendar sem dal zadnjo priložnost. Med zadnjo optimizacijo sem mavrico razrezal na tri osnovne barve in naredil druge, ki so bile na hitro izračunane, vse sem pregledal in sledil priporočilom za optimizacijo AVR in na koncu …
avrdude: zapisovanje bliskavice (1004 bajtov):
Pisanje | ################################################# | 100% 0,90 s
Ni treba reči, da sem za shranjevanje trenutnega načina porabil skoraj ves RAM in samo en bajt EEPROM -a. Ne mislim, da je to idealna in končna izvedba. Deluje in ustreza mikrokrmilniku. Prepričan sem, da bi to lahko naredili bolje. Res sem. Želim samo deliti zabavo pri reševanju očitno nepraktičnega problema, ki se vam zdi na začetku skoraj nemogoč. "Tako vdor pomeni raziskovanje meja možnega …" -Richard Stallman.
Zaloge:
1x MCIN ATtiny13 (0,28 USD = 0,24 USD za MCU v paketu SOP-8 in 0,04 USD za DIP8 adapter)
8x LED WS2812 RGB (priporočam ploščo ali kos LED traku) (0,42 USD)
1x gumb na dotik TTP223 (0,10 USD)
1x Micro USB v DIP adapter (0,14 USD)
1x 10 kΩ upor (<0,01 USD)
1x 100nF keramični kondenzator (<0,01 USD)
1x 10-47 μF elektrolitski kondenzator (<0,01 USD)
Skupaj <0,97 USD
1. korak: Namestitev programske opreme
Za sestavljanje izvorne kode in pripomočka avrdude za nalaganje ROM-a mikrokrmilnika boste potrebovali orodno verigo avr-gcc. Postopek namestitve je precej preprost in enostaven, vendar je odvisen od vašega operacijskega sistema. Če uporabljate nekakšen GNU/Linux, imate v drevesu skladišča verjetno že ustrezne pakete. Izvorno kodo tega projekta lahko prenesete tukaj:
github.com/arduinocelentano/t13_ws2812_lamp
Potrebovali boste tudi knjižnico light_ws2812:
github.com/cpldcpu/light_ws2812
Ko dobite orodno verigo avr-gcc in vire projektov, zaženite svoj terminal in vnesite naslednjo kodo:
cd pot/do/projekta
narediti
2. korak: Programiranje mikrokrmilnika
Če imate nekakšen programer USBASP, ga priključite na Attiny glede na njegov pinout. Običajno bi to izgledalo tako, vendar toplo priporočam, da preverite svoj dejanski pinout!
Druga možnost je, da kot programer uporabite ploščo Arduino. Odprite Arduino IDE in poiščite primer ponudnika internetnih storitev Arduino v meniju »Datoteka → Primeri«. Po nalaganju skice vaša plošča Arduino deluje kot programer. Komentarji v kodi skice vam lahko dajo nasvet.
Zdaj teči
naredi bliskavico
za utripanje MCU in
naredite varovalko
za nastavitev bitov varovalk.
3. korak: Sheme
Priporočena:
3D natisnjena LED svetilka za razpoloženje: 15 korakov (s slikami)
3D tiskana LED svetilka za razpoloženje: Vedno sem bil navdušen nad svetilkami, zato sem imel možnost združiti 3D tiskanje in Arduino z LED, kar sem si moral prizadevati. Koncept je zelo preprost in rezultat je eden najbolj zadovoljivih vizualnih izkušnje, ki jih lahko podate
LED svetilka za razpoloženje Low Poly: 9 korakov (s slikami)
LED svetilka za razpoloženje Low Poly: Odličen dodatek k vsaki mizi, polici ali mizi! Diskretni gumb na dnu omogoča kolesarjenje po različnih vzorcih LED osvetlitve. Ni važno, ali želite svetilko uporabiti za študij, sprostitev ali celo zabavo … obstaja nekaj
LED svetilka za razpoloženje: 9 korakov (s slikami)
LED svetilka za razpoloženje: pred kratkim sem naletel na LED kocko Grega Davilla. To je odlično umetniško delo. Ko sem ga navdihnil, sem tudi jaz želel narediti nekaj takega. Toda ta je bil izhod iz moje lige. Odločil sem se, da bom naredil korak za korakom in naredil precej manjši v
DIY LED luč - moderna namizna svetilka za razpoloženje z daljinskim upravljalnikom: 8 korakov (s slikami)
DIY LED Light - Sodobna namizna svetilka za razpoloženje z daljinskim upravljalnikom: V tem članku bom predstavil postopek, ki sem ga uporabil za izdelavo te čudovite LED svetilke za razpoloženje v obliki piramide. Za dodatno strukturo sem uporabil javor, za večjo strukturo pa še nekaj mahagonijevih bodic. Za luči sem uporabil LED luči RGB, ki so na voljo v 16 -metrskem traku
Enostavna pametna svetilka v vrednosti 5 USD s spletnim vmesnikom za pametne telefone: 4 koraki
Enostavna pametna svetilka v vrednosti 5 USD s spletnim vmesnikom za pametne telefone: Pozdravljeni! Moje ime je Raphael. To je moj prvi Instructable! Moj glavni motiv pri ustvarjanju te svetilke je pomagati ljudem z omejeno mobilnostjo. Nekega dne ne bomo imeli stikal na stenah ali težko dostopnih vtičev, temveč pametne telefone za nadzor