Isi kandungan:
Video: Lampu Suasana LED $ 1 Dengan ATtiny13 dan WS2812: 7 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:06
Oleh arduinocelentano Ikuti Lagi oleh pengarang:
Ini adalah lampu mood kos rendah dengan empat mod.
1. Percikan pelangi. Kilauan cahaya bergerak ke atas dari semasa ke semasa dan secara beransur-ansur mengubah warnanya.
2. Pelangi bercahaya. Cahaya stabil yang secara beransur-ansur mengubah warna.
3. Simulasi api lilin.
4. Mati.
Anda boleh menukar mod dengan mengetuk butang sentuh di bahagian atas. Mod semasa disimpan dalam memori EEPROM setelah dimatikan.
Berapa kecil ATtiny13?
Ideanya adalah untuk mendapatkan ciri maksimum dari perkakasan minimum, sesuatu yang lebih kompleks daripada suis automatik atau termometer, sebuah projek yang hampir dengan tepi mikrokontroler kecil ini. Lagipun, sekatan membuat anda berfikir kreatif, bukan? Awalnya, ia kelihatan seperti itu pada awalnya.
Yang paling mencabar dalam projek ini adalah memasukkan semua kod ke ATtiny13. Mikrokontroler mempunyai denyar 1K byte dan hanya 64 bait RAM. Ya, apabila saya mengatakan "bait", saya bermaksud yang terdiri daripada lapan bit. 64 bait untuk semua pemboleh ubah tempatan dan timbunan panggilan anda. Untuk memperjelasnya, pertimbangkan bahawa kita harus mengawal 8 LED RGB. Masing-masing ditentukan oleh 3 bait (masing-masing untuk saluran merah, hijau dan biru). Jadi, hanya untuk menyimpan keadaan 8 LED, kita perlu menerapkan susunan 8 struktur 3 bait masing-masing dan penunjuk ke permulaan array ini memerlukan satu bait lagi. Oleh itu, 25 daripada 64 bait habis. Kami baru menggunakan 39% RAM dan belum betul-betul memulakannya. Selain itu, untuk menyimpan tujuh warna pelangi asas, anda memerlukan 7 × 3 = 21 bait, sehingga 72% RAM habis. Nah, seperti warna asas, saya melebih-lebihkan: kita tidak memerlukan semuanya pada masa yang sama dalam RAM dan ia tidak pernah berubah, jadi ia mungkin dilaksanakan sebagai tatasusunan tetap untuk disimpan dalam flash dan bukannya RAM. Bagaimanapun, ia memberikan gambaran keseluruhan mengenai perkakasan terpakai.
Mengingati pernyataan Knuth mengenai pengoptimuman pramatang, saya mula memprotaip tiga mod lampu secara berasingan untuk melihat apa yang berlaku. Saya telah mengujinya secara berasingan untuk memastikan ia berfungsi dengan betul dan masing-masing sesuai dengan mikrokontroler saya. Ia memerlukan beberapa malam untuk menyelesaikannya dan semuanya berjalan lancar … sehingga saya cuba menyatukannya di dalam pernyataan pertukaran. utiliti ukuran avr melaporkan ukuran bahagian teks 1.5 Kb (dengan bendera -s avr-gcc). Pada masa itu, tujuan asal saya adalah untuk mengambil beberapa ATtiny25 dengan flash 2Kb dan itu mungkin merupakan akhir cerita yang gembira ini.
Tetapi entah bagaimana saya merasakan bahawa setelah pengoptimuman yang cukup besar saya dapat mengecilkan kod buruk itu menjadi 1Kb. Namun, diperlukan satu minggu lagi untuk menyedari bahawa mustahil dan satu minggu lagi untuk mencapainya. Saya terpaksa memotong pelangi kepada lima warna asas (tanpa perbezaan visual yang ketara). Saya menyingkirkan penyataan kes dan menggunakan rangkaian if-then-if untuk mengurangkan saiz kod binari. Animasi api memerlukan penjana nombor pseudorandom yang cukup besar, jadi saya menerapkan versi LFSR yang dipermudahkan dengan nilai awal yang tetap. Saya tidak peduli dengan panjang kitaran penuh PRNG dan hanya mencari keseimbangan keturunan antara saiz kod dan "animasi api realistik". Saya juga melaksanakan banyak pengoptimuman kecil yang saya tidak ingat sekarang dan bahkan berjaya mengedipkan semua mod selain menyalakan cip. Ketika saya kehabisan idea, jumlah kod saya kira-kira 1200 bait.
Saya mengambil masa habis dan telah banyak membaca mengenai pengoptimuman kod AVR. Saya hampir menyerah dan menulis semula semuanya dalam bahasa perhimpunan tetapi memberi peluang terakhir. Semasa pengoptimuman terakhir, saya telah memotong pelangi kepada tiga warna asas dan membuat yang lain dapat dikira dengan cepat, saya memeriksa semuanya dan mengikuti cadangan pengoptimuman AVR dan akhirnya…
avrdude: menulis kilat (1004 bait):
Penulisan | ################################################# | 100% 0.90s
Tidak perlu dikatakan bahawa saya menggunakan hampir semua RAM dan hanya satu bait EEPROM untuk menyimpan mod semasa. Saya tidak bermaksud bahawa ini adalah pelaksanaan yang ideal dan muktamad. Ia hanya berfungsi dan sesuai dengan mikrokontroler. Saya yakin, anda boleh melakukannya dengan lebih baik. Saya betul-betul. Saya hanya ingin berkongsi keseronokan menyelesaikan masalah yang nampaknya tidak praktikal yang anda anggap hampir mustahil pada awalnya. “Oleh itu, penggodaman bermaksud meneroka batas apa yang mungkin…” --Richard Stallman.
Bekalan:
1x ATtiny13 MCU ($ 0.28 = $ 0.24 untuk MCU dalam pakej SOP-8 dan $ 0.04 untuk Penyesuai DIP8)
8x WS2812 RGB LED (saya cadangkan papan atau sehelai jalur LED) ($ 0.42)
Butang Sentuh 1x TTP223 ($ 0.10)
1x USB Micro to DIP Adapter ($ 0.14)
Perintang 1x 10kΩ (<$ 0.01)
Kapasitor seramik 1x 100nF (<$ 0.01)
Kapasitor elektrolitik 1x 10–47µF (<$ 0.01)
Jumlah <$ 0.97
Langkah 1: Persediaan Perisian
Anda memerlukan rantai alat avr-gcc untuk menyusun kod sumber dan utiliti avrdude untuk memuat naik ROM mikrokontroler. Proses pemasangan cukup mudah dan mudah, tetapi bergantung pada sistem operasi anda. Sekiranya anda menggunakan beberapa jenis GNU / Linux, anda mungkin sudah mempunyai pakej yang sesuai di pokok repositori anda. Kod sumber projek ini boleh dimuat turun di sini:
github.com/arduinocelentano/t13_ws2812_lamp
Anda juga memerlukan perpustakaan light_ws2812:
github.com/cpldcpu/light_ws2812
Setelah anda mendapat rantai alat dan sumber projek avr-gcc, jalankan terminal anda dan taipkan kod berikut:
jalan cd / ke / projek
membuat
Langkah 2: Memprogram Pengawal Mikro
Sekiranya anda mempunyai semacam programmer USBASP, sambungkan sahaja ke Attiny mengikut pinoutnya. Biasanya ia kelihatan seperti ini tetapi saya sangat mengesyorkan anda melihat pinout sebenar anda!
Sebagai alternatif, anda boleh menggunakan papan Arduino sebagai pengaturcara. Buka Arduino IDE dan cari contoh Arduino ISP dalam menu "Fail → Contoh". Setelah memuat naik lakaran, papan Arduino anda bertindak sebagai pengaturcara. Komen dalam kod lakaran akan memberi anda petunjuk untuk keluar.
Sekarang jalankan
buat denyar
untuk menyalakan MCU dan
buat fius
untuk menetapkan bit fius.
Disyorkan:
(WiFi) Lampu Suasana: 8 Langkah (dengan Gambar)
(WiFi) Mood Lamp: Dalam Instructable ini, saya akan menunjukkan kepada anda cara membina lampu mood yang sangat mudah dan murah. Lampu boleh ditingkatkan dengan LED RGB dan mikrokontroler serasi WiFi
Lampu Suasana Reaktif Muzik: 5 Langkah (dengan Gambar)
Lampu Suasana Reaktif Muzik: Pengenalan dan Latar Belakang. Kembali pada tahun pertama (Musim bunga 2019), saya mahu merapikan bilik asrama saya. Saya datang dengan idea untuk membina lampu mood saya sendiri yang akan bertindak balas terhadap muzik yang saya dengarkan di fon kepala saya. Terus terang, saya tidak mempunyai inspirasi tertentu
Lampu Suasana LED Poli Rendah: 9 Langkah (dengan Gambar)
Lampu Mood LED Poli Rendah: Tambahan yang bagus untuk sebarang meja, rak atau meja! Butang diskrit yang terletak di dasar membolehkan anda menelusuri pelbagai corak pencahayaan LED. Tidak menjadi masalah sama ada anda ingin menggunakan lampu anda untuk belajar, bersantai atau berpesta … ada masalah
Xpedit - Peranti Pemantauan Suasana untuk Mendaki dan Trekking: 12 Langkah (dengan Gambar)
Xpedit - Peranti Pemantauan Atmosfer untuk Kembara dan Trekking: Semasa anda merancang untuk melakukan perjalanan pengembaraan atau trekking ke alam liar, adalah penting untuk mempunyai peranti di dalam beg galas anda yang dapat membantu anda memahami alam sekitar. Untuk perjalanan pengembaraan saya yang akan datang, saya merancang untuk membina peranti genggam yang membantu
Cara Membuat Suasana, dan Membaca, Lampu Dengan Pembesar Suara: 10 Langkah
Cara Membuat Suasana, dan Membaca, Lampu Dengan Pembesar Suara: Memulakan projek ini lambat, kita harus melalui proses Reka Bentuk Reka Bentuk, proses ini adalah Empathizing, Defining, Ideating, Prototyping, dan akhirnya, Testing. Kami bermula di # 1, Empathizing, dan kami melalui satu siri wawancara dengan