Sadržaj:
Video: LED svjetiljka za raspoloženje od 1 USD sa ATtiny13 i WS2812: 7 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:04
Autor arduinocelentanoSledi Još autora:
Ovo je jeftina lampa za raspoloženje sa četiri načina rada.
1. Dugina iskra. Iskra svjetlosti se s vremena na vrijeme pomiče prema gore i postepeno mijenja boju.
2. Dugin sjaj. Stabilan sjaj koji postepeno mijenja boju.
3. Simulacija paljenja svijeća.
4. Isključeno.
Možete promijeniti način dodirivanjem dodirnog gumba na vrhu. Trenutni način rada pohranjuje se u memoriju EEPROM -a nakon isključivanja.
Koliko je ATtiny13 sićušan?
Ideja je bila da se maksimalne karakteristike dobiju iz minimalnog hardvera, nešto složenije od automatiziranog prekidača ili termometra, projekta blizu ruba ovog malenog mikrokontrolera. Uostalom, ograničenja vas tjeraju da razmišljate kreativno, zar ne? Pa, tako je izgledalo na početku.
Najizazovniji u ovom projektu bio je ugurati sav kôd u ATtiny13. Mikrokontroler ima 1K bajtova fleša i samo 64 bajta RAM -a. Da, kad kažem „bajtovi“, mislim na one koji se sastoje od osam bitova. 64 bajta za za sve vaše lokalne varijable i stek 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 će uzeti 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, tako da 72% RAM -a nema. Pa, što se tiče osnovnih boja, pretjerujem: ne trebaju nam sve odjednom u RAM -u i nikada se ne mijenjaju, pa se mogu implementirati kao konstantan niz koji se pohranjuje u flash umjesto u RAM. U svakom slučaju, ostavlja opći dojam o korištenom hardveru.
Prisjećajući se Knuthove izjave o prijevremenoj optimizaciji, krenuo 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 … sve dok ih nisam pokušao sastaviti unutar naredbe 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 mi je prvobitna namjera bila da uzmem ATtiny25 sa 2Kb blicem i to je mogao biti sretan kraj ove priče.
Ali nekako sam osjetio da ću nakon znatne optimizacije uspjeti taj usrani kôd smanjiti u 1 KB. Međutim, trebala je još jedna sedmica da se shvati da je to nemoguće i još jedna sedmica da se to ipak ostvari. Morao sam izrezati dugu na pet osnovnih boja (bez značajnih vizualnih razlika). Riješio sam se izjava o slučaju 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 sa 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đe sam implementirao mnogo manjih optimizacija kojih se trenutno ne mogu sjetiti, pa sam čak uspio prebaciti sve načine osim vatre 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, presjekao 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: blic za pisanje (1004 bajta):
Pisanje | ################################################# | 100% 0.90s
Nema potrebe reći 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 krajnja implementacija. Samo radi i odgovara mikrokontroleru. Siguran sam da biste mogli bolje. Zaista 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živanje granica mogućeg …" -Ričard Stalman.
Potrošni materijal:
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 komad LED trake) (0,42 USD)
1x TTP223 Dodirno dugme (0,10 USD)
1x mikro USB na DIP adapter (0,14 USD)
1x 10kΩ 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 uslužni program avrdude za postavljanje ROM-a mikrokontrolera. Proces instalacije je prilično jednostavan i jasan, ali ovisi o vašem operativnom sistemu. Ako koristite neku vrstu GNU/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 biblioteka light_ws2812:
github.com/cpldcpu/light_ws2812
Nakon što nabavite avr-gcc lanac alata i izvore projekata, pokrenite svoj terminal i upišite sljedeći kod:
cd putanja do/projekta
napraviti
Korak 2: Programiranje mikrokontrolera
Ako imate neku vrstu USBASP programatora, samo ga spojite na Attiny prema njegovom 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 Arduino ISP -a u izborniku “Datoteka → Primjeri”. Nakon što otpremite skicu, vaša Arduino ploča djeluje kao programer. Komentari u kodu skice dali bi vam trag za isticanje.
Sada trči
napravi blic
da biste uključili MCU i
napraviti osigurač
za postavljanje bitova osigurača.
Preporučuje se:
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 lampe se mogu promijeniti pomoću aplikacije Blynk. Odabrao sam Memorijalni kip Tonyja Starksa koji sam 3D odštampao da stavim u ovu lampu. Možete uzeti bilo koju gotovu statuu ili možete
Como Hacer Una svjetiljka za raspoloženje (proyecto Uvg): 5 koraka (sa slikama)
Como Hacer Una Mood Lamp (proyecto Uvg): Ovo je svjetiljka raspoloženja koja funkcionira na bazi senzora DHT11 i 3 potenciometra. tiene 2 moda: el primero el color cambia con los potenciómetros, y el segundo cambia bazna svjetla senzora DHT11
Domaća svjetiljka za raspoloženje: 6 koraka
Domaća svjetiljka za raspoloženje: Una Mood Lamp je jedna od najboljih svjetskih personaliziranih boja u boji. Nastavak se muestra como puedes hacer una con un Kit de principiantes de Arduino y materiales caseros
Moderna RGB svjetiljka za raspoloženje: 7 koraka (sa slikama)
Moderna RGB svjetiljka raspoloženja: Želite li dodati malo stila svom stolu? Pokrili smo vas DIY lampom za raspoloženje napravljenom od dijelova koje možete lako pronaći kako leže u vašoj garaži ili šupi. Naša lampa za raspoloženje ima estetski i moderan dizajn, dok vam daje potpunu kontrolu nad bojom
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 odlično umjetničko djelo. Inspiriran 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 ga u