Cuprins:
Video: O lampă LED de 1 USD, cu ATtiny13 și WS2812: 7 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:41
De arduinocelentano Urmăriți mai multe de la autor:
Aceasta este o lampă de dispoziție low-cost cu patru moduri.
1. Scânteie curcubeu. O scânteie de lumină se mișcă în sus de fiecare dată și schimbă treptat culoarea.
2. Strălucire curcubeu. O strălucire stabilă care schimbă treptat culoarea.
3. Simularea focului de lumânare.
4. Dezactivat.
Puteți schimba modurile atingând un buton tactil din partea de sus. Modul curent este salvat în memoria EEPROM după oprire.
Cât de mic este ATtiny13?
Ideea a fost de a obține caracteristici maxime de la hardware minim, ceva mai complex decât comutatorul automat sau termometrul, un proiect aproape de marginea acestui mic microcontroler. La urma urmei, restricțiile te fac să crezi creativ, nu? Ei bine, la început arăta așa.
Cea mai provocatoare din acest proiect a fost să introducă tot codul în ATtiny13. Microcontrolerul are 1K octeți bliț și doar 64 octeți RAM. Da, când spun „octeți”, mă refer la cei constând din opt biți. 64 de octeți pentru toate variabilele locale și stiva de apeluri. Pentru a clarifica, considerați că trebuie să controlăm 8 LED-uri RGB. Fiecare dintre ele este definit de 3 octeți (unul pentru canalul roșu, verde și respectiv albastru). Deci, doar pentru a stoca starea a 8 LED-uri, va trebui să implementăm o matrice de 8 structuri de câte 3 octeți și un pointer la începutul acestei matrice ar mai lua un octet. Astfel, 25 din 64 de octeți sunt în afara. Tocmai am folosit 39% din RAM și încă nu am început. În plus, pentru a stoca șapte culori de curcubeu de bază, veți avea nevoie de 7 × 3 = 21 octeți, astfel încât 72% din RAM sunt scoase. Ei bine, în ceea ce privește culorile de bază, exagerez: nu avem nevoie de toate în același timp în RAM și ele nu se schimbă niciodată, așa că pot fi implementate ca o matrice constantă pentru a fi stocate în flash în loc de RAM. Oricum, oferă o impresie generală despre hardware-ul folosit.
Amintindu-mi afirmația lui Knuth despre optimizarea prematură, am început să fac prototipuri pentru trei moduri de lampă separat pentru a vedea ce se întâmplă. Le-am testat separat pentru a mă asigura că funcționează corect și că fiecare se potrivește cu microcontrolerul meu. A fost nevoie de câteva seri pentru a-l realiza și totul a mers bine … până când am încercat să le pun împreună în declarația switch. utilitarul avr-size a raportat o dimensiune a secțiunii de text de 1,5 Kb (cu steagul -s al avr-gcc). În acel moment, intenția mea inițială era să iau niște ATtiny25 cu bliț de 2 KB și acesta ar fi putut fi sfârșitul fericit al acestei povești.
Dar cumva am simțit că, după o optimizare considerabilă, am reușit să micșorez codul ăla în 1Kb. Cu toate acestea, a durat încă o săptămână pentru a realiza că este imposibil și încă o săptămână pentru a-l realiza. A trebuit să tai un curcubeu la cinci culori de bază (fără diferențe vizuale semnificative). Am scăpat de declarațiile de caz și am folosit un lanț de if-then-if pentru a reduce dimensiunea codului binar. Animația de foc are nevoie de un generator de numere pseudorandom, care este destul de voluminoasă, așa că am implementat o versiune simplificată a LFSR cu valoare inițială constantă. Nu-mi pasă de durata completă a ciclului PRNG și căut doar un echilibru de coborâre între dimensiunea codului și „animație realistă de foc”. Am implementat, de asemenea, o mulțime de optimizări minore pe care nu mi le amintesc chiar acum și chiar am reușit să blochez toate modurile, în afară de focul în cip. Când am rămas fără idei, codul meu total era de aproximativ 1200 de octeți.
Mi-am luat timeout și citisem multe despre optimizarea codului AVR. Eram aproape să renunț și să rescriu totul în limbaj de asamblare, dar i-am dat ultima șansă. În cursa finală de optimizare, am tăiat un curcubeu în trei culori de bază și am făcut ca altele să fie calculate din mers, am inspectat totul și am urmat recomandările de optimizare AVR și, în cele din urmă …
avrdude: scriere flash (1004 octeți):
Scrierea | ###################################################### | 100% 0,90
Nu este necesar să spunem că am folosit aproape toată memoria RAM și doar un octet de EEPROM pentru a stoca modul curent. Nu implic că aceasta este o implementare ideală și finală. Doar funcționează și se potrivește microcontrolerului. Sunt sigur că ai putea să o faci mai bine. Chiar sunt. Vreau doar să împărtășesc distracția de a rezolva o problemă aparent impracticabilă pe care o considerați aproape imposibilă la început. „Astfel, hacking înseamnă explorarea limitelor a ceea ce este posibil …” - Richard Stallman.
Provizii:
1x ATtiny13 MCU (0,28 USD = 0,24 USD pentru MCU în pachetul SOP-8 și 0,04 USD pentru adaptorul DIP8)
8 LED-uri RGB WS2812 (recomand o placă sau o bucată de bandă LED) (0,42 USD)
1x buton tactil TTP223 (0,10 USD)
1x adaptor Micro USB la DIP (0,14 USD)
1x rezistor de 10kΩ (<0,01 USD)
1x condensator ceramic 100nF (<0,01 USD)
1x condensator electrolitic 10–47µF (<0,01 USD)
Total <0,97 USD
Pasul 1: Configurare software
Veți avea nevoie de lanțul de instrumente avr-gcc pentru compilarea codului sursă și utilitarul avrdude pentru încărcarea ROM-ului microcontrolerului. Procesul de instalare este destul de simplu și simplu, dar depinde de sistemul de operare. Dacă utilizați un fel de GNU / Linux, probabil că aveți deja pachete adecvate în arborele depozitului. Codul sursă al acestui proiect poate fi descărcat de aici:
github.com/arduinocelentano/t13_ws2812_lamp
De asemenea, veți avea nevoie de o bibliotecă light_ws2812:
github.com/cpldcpu/light_ws2812
După ce ați obținut avr-gcc toolchain și surse de proiect, rulați terminalul și tastați următorul cod:
calea cd / către / proiect
face
Pasul 2: Programarea microcontrolerului
Dacă aveți un fel de programator USBASP, conectați-l la Attiny în funcție de pinout-ul său. De obicei, ar arăta așa, dar vă recomand cu tărie să verificați pinout-ul dvs. real!
Alternativ, puteți utiliza o placă Arduino ca programator. Deschideți Arduino IDE și găsiți exemplul Arduino ISP în meniul „Fișier → Exemple”. După încărcarea schiței, placa dvs. Arduino acționează ca un programator. Comentariile din codul de schiță vă vor oferi un indiciu de identificare.
Acum fugi
face flash
pentru a clipi MCU și
face siguranță
pentru a seta biți de siguranță.
Recomandat:
Lanternă super strălucitoare de 100 USD pentru sub 10 USD !: 5 pași
Lanternă super strălucitoare de 100 dolari pentru sub 10 dolari! Am crezut că trebuie să existe o modalitate mai ușoară de a modifica o lanternă mai mică, cu mai puțin hardware și una care a durat mai puțin timp. Eu
Neopixel Ws2812 Rainbow LED Glow Cu M5stick-C - Rularea Rainbow pe Neopixel Ws2812 Utilizarea M5stack M5stick C Utilizarea Arduino IDE: 5 pași
Neopixel Ws2812 Rainbow LED Glow Cu M5stick-C | Rularea Rainbow pe Neopixel Ws2812 Utilizarea M5stack M5stick C Utilizarea Arduino IDE: Bună băieți, în acest instructables vom învăța cum să utilizați LED-uri neopixel ws2812 sau benzi LED sau matrice LED sau inel cu LED cu placa de dezvoltare m5stack m5stick-C cu Arduino IDE și vom face un model curcubeu cu el
Asigurați-vă propria pernă (2,00 USD în loc de 40,00 USD): 4 pași
Asigurați-vă propria pernă (2,00 USD în loc de 40,00 USD): faceți cu ușurință o altă pernă fără materiale reale
Creați-vă propriul aparat profesional de curățare a înregistrărilor pentru mai puțin de 80 USD și economisiți până la 3000 USD și mai mult .: 6 pași (cu imagini)
Creați-vă propria mașină de curățat înregistrările profesionale pentru mai puțin de 80 USD și economisiți până la 3000 USD și mai mult. Cum să curățați corect înregistrările!? Există multe modalități prin Internet. Moduri mai ieftine, cum ar fi Knosti sau Discofilm, dar și
Asigurați-vă propriul pachet EeePC / Netbook din pâslă frumoasă pentru aproximativ 8 USD (și economisiți 91 USD în loc să cumpărați de la Redmaloo): 5 pași (cu imagini)
Creați-vă propriul pungă EeePC / Netbook din pâslă frumoasă pentru aproximativ 8 USD (și economisiți 91 USD în loc să cumpărați de la Redmaloo): Acest instructiv vă va arăta cum să vă confecționați propriul laptop, foarte frumos și frumos, sau o pungă netbook chiar mai bună. Vă va stoca netbook-ul, vă va oferi un mousepad, senzația de a folosi ceva unic, frumos și realizat manual și senzația de goos de