Sisällysluettelo:
Video: 1 dollarin LED -tunnelmavalaisin ATtiny13: lla ja WS2812: 7 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 08:59
Seuraa lisää tekijältä:
Tämä on edullinen tunnelmavalaisin, jossa on neljä tilaa.
1. Sateenkaaren kipinä. Valon kipinä liikkuu kerta toisensa jälkeen ylöspäin ja muuttaa väriä vähitellen.
2. Sateenkaaren hehku. Vakaa hehku, joka muuttaa väriä vähitellen.
3. Kynttilän palosimulaatio.
4. Pois päältä.
Voit vaihtaa tilaa napauttamalla yläosassa olevaa kosketuspainiketta. Nykyinen tila tallennetaan EEPROM -muistiin virran katkaisun jälkeen.
Kuinka pieni ATtiny13 on?
Ajatuksena oli saada maksimaaliset ominaisuudet minimilaitteistosta, jotain monimutkaisempaa kuin automaattinen kytkin tai lämpömittari, projekti lähellä tämän pienen mikrokontrollerin reunaa. Loppujen lopuksi rajoitukset saavat sinut ajattelemaan luovaa, eikö? No siltä se näytti alussa.
Haastavinta tässä projektissa oli työntää kaikki koodit ATtiny13: een. Mikro -ohjaimessa on 1K tavua flash ja vain 64 tavua RAM. Kyllä, kun sanon "tavuja", tarkoitan niitä, jotka koostuvat kahdeksasta bitistä. 64 tavua kaikille paikallisille muuttujille ja puhelupinolle. Selvyyden vuoksi meidän on ohjattava 8 RGB -LEDiä. Jokainen niistä on määritelty 3 tavulla (yksi punaiselle, vihreälle ja siniselle kanavalle). Joten vain 8 LEDin tilan tallentamiseksi meidän on toteutettava 8 rakenteen ryhmä, joka on 3 tavua, ja osoitin tämän taulukon alkuun vie yhden tavun. Näin ollen 25 tavua 64 tavusta on poissa. Olemme juuri käyttäneet 39% RAM -muistista emmekä ole vielä aloittaneet. Lisäksi seitsemän sateenkaaren perusvärin tallentamiseen tarvitset 7 × 3 = 21 tavua, joten 72% RAM -muistista on poissa. Mitä tulee perusväreihin, liioittelen: emme tarvitse kaikkia niitä samanaikaisesti RAM -muistissa, eivätkä ne muutu koskaan, joten ne voidaan toteuttaa vakiona, joka tallennetaan flash -muistiin RAM -muistin sijaan. Joka tapauksessa se antaa yleisen vaikutelman käytetyistä laitteista.
Muistaen Knuthin lausunnon ennenaikaisesta optimoinnista, aloin prototyypittää kolme lampputilaa erikseen nähdäkseni, mitä tapahtuu. Olen testannut niitä erikseen varmistaakseni, että ne toimivat kunnolla ja että jokainen sopii mikrokontrolleriini. Kesti pari iltaa sen suorittamiseen ja kaikki sujui hyvin… kunnes yritin koota ne yhteen kytkinlauseen sisällä. avr-kokoinen apuohjelma ilmoitti 1,5 kb: n tekstiosion koon (-s-lipulla avr-gcc). Tuolloin alkuperäinen tarkoitukseni oli napata ATtiny25 2Kb: n salamalla ja se olisi voinut olla tämän tarinan onnellinen loppu.
Mutta jotenkin minusta tuntui, että huomattavan optimoinnin jälkeen pystyisin pienentämään tuon paskan koodin 1 kt: ksi. Kesti kuitenkin vielä yhden viikon tajuta, että se on mahdotonta, ja vielä yksi viikko sen saavuttamiseen. Minun piti leikata sateenkaari viiteen perusväriin (ilman merkittävää visuaalista eroa). Pääsin eroon tapauslausunnoista ja pienensin binäärikoodin kokoa ketjussa jos-sitten-jos. Tulianimaatio tarvitsee näennäissatunnaislukugeneraattorin, joka on melko paljon tilaa vievä, joten toteutin yksinkertaistetun version LFSR: stä, jolla oli vakio alkuarvo. En välitä PRNG: n koko syklin pituudesta ja etsin vain laskevaa tasapainoa koodin koon ja "realistisen tulianimaation" välillä. Toteutin myös monia pieniä optimointeja, joita en muista juuri nyt, ja jopa onnistuin salamaan kaikki tilat tulipalon lisäksi sirulle. Kun ideat loppuivat, koko koodini oli noin 1200 tavua.
Otin aikakatkaisun ja olin lukenut paljon AVR -koodin optimoinnista. Olin lähellä luovuttaa ja kirjoittaa kaiken kokoonpanokielellä, mutta annoin sille viimeisen mahdollisuuden. Viimeisen optimointikurssin aikana olen leikannut sateenkaaren kolmeen perusväriin ja tehnyt muut laskettavaksi lennossa, tarkistin kaiken ja seurasin AVR -optimointisuosituksia ja lopulta…
avrdude: flash -kirjoitus (1004 tavua):
Kirjoittaminen | ################################################## | 100% 0.90s
Ei tarvitse sanoa, että käytin lähes koko RAM -muistia ja vain yhden tavun EEPROMia nykyisen tilan tallentamiseen. En tarkoita, että tämä olisi ihanteellinen ja lopullinen toteutus. Se vain toimii ja sopii mikrokontrolleriin. Olen varma, että voisit tehdä sen paremmin. Minä todella olen. Haluan vain jakaa ilon ratkaista ilmeisesti epäkäytännöllinen ongelma, jota pidät alussa lähes mahdottomana.”Hakkerointi tarkoittaa siis mahdollisuuksien rajojen tutkimista…” -Richard Stallman.
Tarvikkeet:
1x ATtiny13 MCU (0,28 dollaria = 0,24 dollaria MCU: lle SOP-8-paketissa ja 0,04 dollaria DIP8-sovittimelle)
8x WS2812 RGB -LEDit (suosittelen levyä tai pala LED -raitaa) (0,42 dollaria)
1x TTP223 -kosketuspainike (0,10 dollaria)
1x Micro USB -DIP -sovitin (0,14 dollaria)
1x 10 kΩ vastus (<$ 0.01)
1x 100nF keraaminen kondensaattori (<$ 0.01)
1x 10–47µF elektrolyyttikondensaattori (<0,01 $)
Yhteensä <0,97 dollaria
Vaihe 1: Ohjelmiston asennus
Tarvitset avr-gcc-työkaluketjun lähdekoodin kokoamiseen ja avrdude-apuohjelman mikro-ohjaimen ROM-levyn lataamiseen. Asennusprosessi on melko yksinkertainen ja suoraviivainen, mutta se riippuu käyttöjärjestelmästäsi. Jos käytät jonkinlaista GNU/Linuxia, sinulla on luultavasti jo asianmukaiset paketit arkistopuussasi. Tämän projektin lähdekoodin voi ladata täältä:
github.com/arduinocelentano/t13_ws2812_lamp
Tarvitset myös light_ws2812 -kirjaston:
github.com/cpldcpu/light_ws2812
Kun sinulla on avr-gcc-työkaluketju ja projektilähteet, suorita päätelaite ja kirjoita seuraava koodi:
cd -polku/projektiin
tehdä
Vaihe 2: Mikro -ohjaimen ohjelmointi
Jos sinulla on jonkinlainen USBASP -ohjelmoija, liitä se Attinyyn sen pistokkeen mukaisesti. Yleensä se näyttää tältä, mutta suosittelen lämpimästi tarkistamaan todellisen pinoutisi!
Vaihtoehtoisesti voit käyttää Arduino -korttia ohjelmoijana. Avaa Arduino IDE ja etsi Arduino ISP -esimerkki valikosta "Tiedosto → Esimerkit". Luonnoksen lataamisen jälkeen Arduino -korttisi toimii ohjelmoijana. Luonnoskoodin kommentit antavat sinulle vihjeen pinoutista.
Juokse nyt
saada salama
vilkuttaa MCU ja
tehdä sulake
sulakepaikkojen asettamiseen.
Suositeltava:
Bluetooth RC -auto STM32F103C: llä ja L293D: llä - Edullinen: 5 vaihetta
Bluetooth RC -auto STM32F103C: llä ja L293D: llä - Edullista: Tein Bluetooth Arduino -auton, kuten tässä kuvattu, Ardumotive_com. Ongelmani olivat akut ja niiden paino sekä kustannukset. Sittemmin matkapuhelimien halvoista virtapankkeista on tullut erittäin edullisia. Kaikki mitä tarvitsen
Alexa Ääniohjattu Raspberry Pi Drone IoT: llä ja AWS: llä: 6 vaihetta (kuvilla)
Alexa Ääniohjattu Raspberry Pi Drone IoT: llä ja AWS: llä: Hei! Nimeni on Armaan. Olen 13-vuotias Massachusettsin poika. Tämä opetusohjelma näyttää, kuten voit päätellä otsikosta, kuinka rakentaa Raspberry Pi Drone. Tämä prototyyppi osoittaa, kuinka dronit kehittyvät ja kuinka suuri rooli niillä voi olla
Sisäkasvien kastelu NodeMCU: lla, paikallisella Blynk -palvelimella ja Blynk Apk: lla, säädettävä asetuspiste: 3 vaihetta
Sisäkasvien kastelu NodeMCU: lla, paikallisella Blynk -palvelimella ja Blynk Apk: llä, säädettävä asetuspiste: Olen rakentanut tämän projektin, koska sisäkasvieni on oltava terveitä, vaikka olen lomalla pitkään ja pidän ajatuksesta hallita tai ainakin seurata kaikkia mahdollisia asioita, joita kotona tapahtuu Internetin kautta
Neopixel Ws2812 Rainbow LED-hehku M5stick-C: llä - Sateenkaaren ajaminen Neopixel Ws2812: llä M5stack M5stick C: n avulla Arduino IDE: 5 askelta
Neopixel Ws2812 Rainbow LED-hehku M5stick-C: llä | Sateenkaaren ajaminen Neopixel Ws2812: llä M5stack M5stick C: n käyttäminen Arduino IDE: n avulla: Hei kaverit, tässä ohjeessa opimme käyttämään neopixel ws2812 LED-valoja tai led-nauhaa tai led-matriisia tai led-rengasta m5stack m5stick-C -kehityskortilla Arduino IDE: n kanssa ja teemme sateenkaarikuvio sen kanssa
Älypuhelintelakka USB: llä ja HDMI: llä: 6 vaihetta
Älypuhelintelakka USB: llä ja HDMI: llä: Tämä on opas rakentaa älypuhelintelakka, jossa on neljä USB -tuloa, HDMI -lähtö ja USB C -läpivienti lataamista varten. monenlaisiin USB -laitteisiin, kuten näppäimistöihin, hiiriin