Sadržaj:
Video: LED svjetiljka za raspoloženje od 1 USD s ATtiny13 i WS2812: 7 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:32
Autor arduinocelentanoSlijedi više od autora:
Ovo je jeftina svjetiljka za raspoloženje s četiri načina rada.
1. Iskra duge. Svjetlost se s vremena na vrijeme pomiče prema gore i postupno mijenja boju.
2. Dugin sjaj. Stabilan sjaj koji postupno mijenja boju.
3. Simulacija paljenja svijeća.
4. Isključeno.
Načine možete mijenjati dodirom na dodirnu tipku na vrhu. Trenutni način rada sprema se u memoriju EEPROM -a nakon isključivanja.
Koliko je ATtiny13 sićušan?
Ideja je bila dobiti maksimalne značajke od minimalnog hardvera, nešto složenije od automatiziranog prekidača ili termometra, projekta blizu ruba ovog malenog mikrokontrolera. Uostalom, ograničenja vas tjeraju na kreativno razmišljanje, zar ne? Pa, tako je izgledalo u početku.
Najizazovniji u ovom projektu bio je ugurati sav kôd u ATtiny13. Mikrokontroler ima 1K bajtova bljeskalice i samo 64 bajta RAM -a. Da, kad kažem "bajtovi", mislim na one koji se sastoje od osam bitova. 64 bajta za sve vaše lokalne varijable i hrpu poziva. Da bi bilo jasno, razmislite da moramo kontrolirati 8 RGB LED dioda. Svaki od njih definiran je s 3 bajta (po jedan za crveni, zeleni i plavi kanal). Dakle, samo za spremanje stanja 8 LED dioda, morat ćemo implementirati niz od 8 struktura po 3 bajta, a pokazivač na početak ovog niza trebao bi još jedan bajt. Dakle, 25 od 64 bajta je vani. Upravo smo iskoristili 39% RAM -a i još nismo započeli. Osim toga, za spremanje sedam osnovnih duginih boja trebat će vam 7 × 3 = 21 bajt, pa 72% RAM -a nema. Pa, što se tiče osnovnih boja, pretjerujem: ne trebaju nam sve odjednom u RAM -u i nikad se ne mijenjaju, pa se mogu implementirati kao stalni niz koji će se pohraniti u flash umjesto u RAM. U svakom slučaju, ostavlja opći dojam o korištenom hardveru.
Sjećajući se Knuthove izjave o prijevremenoj optimizaciji, počeo sam od prototipiranja tri načina rada lampe zasebno da vidim što se događa. Testirao sam ih zasebno kako bih se uvjerio da rade ispravno i da svaki odgovara mojem mikrokontroleru. Bilo je potrebno nekoliko večeri da se to postigne i sve je prošlo u najboljem redu … dok ih nisam pokušao sastaviti unutar izjave switch. uslužni program veličine avr prijavio je veličinu tekstualnog odjeljka od 1,5 Kb (sa -s zastavicom avr-gcc). U tom trenutku moja je prvotna namjera bila zgrabiti neki ATtiny25 s 2Kb bljeskalicom i to je mogao biti sretan kraj ove priče.
Ali nekako sam osjetio da bih nakon znatne optimizacije uspio taj usrani kôd smanjiti u 1 KB. Međutim, trebao je još tjedan dana da se shvati da je to nemoguće i još jedan tjedan da se to ipak postigne. Morao sam izrezati dugu na pet osnovnih boja (bez značajnih vizualnih razlika). Riješio sam se iskaza slučaja i upotrijebio lanac if-then-if za smanjenje veličine binarnog koda. Za animaciju vatre potreban je generator pseudo slučajnih brojeva koji je prilično glomazan, pa sam implementirao pojednostavljenu verziju LFSR -a s konstantnom početnom vrijednošću. Ne zanima me dužina cijelog ciklusa PRNG -a i samo tražim ravnotežu između veličine koda i "realne animacije vatre". Također sam implementirao mnogo manjih optimizacija kojih se trenutno ne mogu sjetiti, pa sam čak uspio sve načine rada osim vatre ubaciti u čip. Kad sam ostao bez ideja, moj ukupni kôd bio je oko 1200 bajtova.
Uzeo sam timeout i puno sam čitao o optimizaciji AVR koda. Bio sam blizu odustajanja i prepisivanja svega na asemblerskom jeziku, ali dao sam mu posljednju priliku. Tijekom konačne optimizacije, prerezao sam dugu na tri osnovne boje i natjerao druge da se računaju u hodu, pregledao sam sve i slijedio preporuke za optimizaciju AVR -a i na kraju …
avrdude: flash za pisanje (1004 bajta):
Pisanje | ################################################# | 100% 0,90s
Nema potrebe govoriti da sam za pohranu trenutnog načina rada koristio gotovo svu RAM memoriju i samo jedan bajt EEPROM -a. Ne impliciram da je ovo idealna i konačna implementacija. Samo radi i odgovara mikrokontroleru. Siguran sam da biste mogli bolje. Stvarno jesam. Samo želim podijeliti zabavu u rješavanju naizgled nepraktičnog problema koji na početku smatrate gotovo nemogućim. "Dakle, hakiranje znači istražiti granice mogućeg …" -Richard Stallman
Pribor:
1x ATINy13 MCU (0,28 USD = 0,24 USD za MCU u paketu SOP-8 i 0,04 USD za DIP8 adapter)
8x WS2812 RGB LED dioda (preporučujem ploču ili dio LED trake) (0,42 USD)
1x tipka na dodir TTP223 (0,10 USD)
1x mikro USB na DIP adapter (0,14 USD)
1x 10 kΩ otpornik (<0,01 USD)
1x 100nF keramički kondenzator (<0,01 USD)
1x elektrolitski kondenzator 10–47µF (<0,01 USD)
Ukupno <0,97 USD
Korak 1: Postavljanje softvera
Trebat će vam avr-gcc lanac alata za sastavljanje izvornog koda i avrdude uslužni program za prijenos ROM-a mikrokontrolera. Postupak instalacije prilično je jednostavan i jasan, ali ovisi o vašem operacijskom sustavu. Ako koristite neku vrstu GNU -a/Linuxa, vjerojatno već imate odgovarajuće pakete u stablu spremišta. Izvorni kod ovog projekta možete preuzeti ovdje:
github.com/arduinocelentano/t13_ws2812_lamp
Trebat će vam i knjižnica light_ws2812:
github.com/cpldcpu/light_ws2812
Nakon što dobijete avr-gcc lanac alata i izvore projekata, pokrenite svoj terminal i upišite sljedeći kod:
cd put/do/projekta
napraviti
Korak 2: Programiranje mikrokontrolera
Ako imate neku vrstu USBASP programatora, samo ga spojite na Attiny prema ispisu. Obično bi to izgledalo ovako, ali toplo preporučujem da provjerite svoj stvarni pinout!
Alternativno, možete koristiti Arduino ploču kao programer. Otvorite Arduino IDE i pronađite primjer davatelja internetskih usluga Arduino u izborniku "Datoteka → Primjeri". Nakon što prenesete skicu, vaša Arduino ploča djeluje kao programer. Komentari u kodu skice dali bi vam trag za identifikaciju.
Sada trči
napravi bljesak
za bljeskanje MCU -a i
napraviti osigurač
za postavljanje bitova osigurača.
Preporučeni:
IOT svjetiljka za raspoloženje: 8 koraka (sa slikama)
IOT Mood Lamp: IoT Mood Lampa napravljena pomoću Node MCU (ESP8266), RGB LED dioda i staklenke. Boje svjetiljke mogu se promijeniti pomoću aplikacije Blynk. Odabrao sam Memorijalni kip Tonyja Starksa koji sam 3D ispisao da stavim u ovu svjetiljku. Možete uzeti bilo koji gotov kip ili možete
Arduino svjetiljka za raspoloženje: 6 koraka
Arduino svjetiljka raspoloženja: svjetiljka raspoloženja o lampari de sentimientos kreiranju u kući i programu s Arduinom. Lampa se sastoji od una estructura rígida, la cual funciona con un Arduino UNO, potenciómetros, NeoPixeles, switch de encendido y apagado, botón para cambiar entre modos
Svjetiljka za raspoloženje s RGB LED diodom: 4 koraka
Mood Lamp With RGB Led: Este proyecto se trató de hacer una lampara de * sentimientos * using Arduino Uno. Primero se necesitan varios materiales como džamperi, LED diode RGB ili Neopixel, ovisi o tome kako se desiti. En este caso utilizaremos je vodio RGB con ánodo común
LED svjetiljka za raspoloženje: 9 koraka (sa slikama)
LED svjetiljka za raspoloženje: Nedavno sam naišao na LED kocku Grega Davilla. To je izvrsno umjetničko djelo. Nadahnuvši se time, čak sam i ja htio napraviti nešto takvo. Ali ovaj je bio izlaz iz moje lige. Odlučio sam ići korak po korak i smanjio sam v
DIY LED svjetlo - moderna stolna svjetiljka za raspoloženje s daljinskim upravljačem: 8 koraka (sa slikama)
DIY LED svjetlo - moderna stolna svjetiljka za raspoloženje s daljinskim upravljačem: U ovom članku ću proći postupak koji sam koristio za izradu ove sjajne LED svjetiljke za raspoloženje u obliku piramide. Koristio sam javor za glavnu strukturu i neke bodlje od mahagonija za dodatnu snagu. Za svjetla sam koristio RGB LED svjetla koja dolaze u traci od 16 stopa t