Annoy-O-Bug: Buat Mainan Busu LED Kompak dengan ATtiny85
Komponen dan Perlengkapan
Berikut adalah komponen yang diperlukan:
PCB buatan kustom OSH Park – 1 unit
Busu – 1 unit
LED (umum) – 1 unit
Resistor 330 ohm – 1 unit
Baterai sel koin CR2032 – 1 unit
Pegangan CR2032 – 1 unit
Mikrochip ATtiny85 – 1 unit
Soket DIP 8 pin – 1 unit
Arduino UNO (hanya untuk memprogram ATtiny) – 1 unit
Kapasitor 10 µF (hanya untuk memprogram ATtiny) – 1 unit
Alat dan Mesin yang Diperlukan
Paku las (umum)
Aplikasi dan Layanan Online
Autodesk circuits.io
Tentang Proyek Ini
Cukup kecil untuk masuk ke dalam kaleng permen, namun cukup keras untuk didengar di seluruh rumah dengan hanya beberapa dolar per unit. Kombinasi yang bagus untuk kejutan yang cukup baik! Mari kita mulai!
Langkah Satu: Rangkaian
Anda dapat membeli papan cetak dari OSH Park menggunakan tautan di bagian komponen pembangunan ini. Anda sama sekali tidak perlu menggunakan ATtiny atau papan cetak saya sendiri. Rangkaian ini akan memakan waktu sekitar 20 menit untuk dirakit di papan roti apa pun. Namun, jika Anda ingin rangkaian sangat kecil, saya sarankan opsi papan cetak. Jika Anda tertarik untuk memasang di papan roti atau papan perf, versi papan roti ditampilkan di atas. Ganti ATtiny85 dengan mikrokontroler apa pun.
Langkah Dua: Rangkai PCB
Ini seharusnya PCB yang cukup mudah diisi dengan komponen. Cukup ingat bahwa busu dan LED adalah komponen terpolarisasi. Kaki busu yang lebih panjang harus melewati bundaran bulat, dan kaki yang lebih pendek harus melewati bundaran persegi. Kaki LED yang lebih panjang harus melewati lubang di sisi berlawanan persegi panjang putih. Satu-satunya bagian yang sedikit rumit adalah memasang konektor baterai dengan las. Pastikan Anda memasang semua komponen di sisi depan terlebih dahulu. Anda kemudian dapat memasang pin ground konektor baterai ke bundarannya melalui lubang di tengah soket DIP.
Saya juga telah menyertakan persegi panjang silkscreen putih di PCB jika Anda ingin menulis pesan kecil untuk korban kejutan Anda :). Jika Anda ingin menyesuaikan PCB, cukup duplikasi desain circuits.io saya: https://circuits.io/circuits/2677013-annoying-circuit.
Langkah Tiga: Perangkat Lunak
//Kode dihasilkan oleh Alex Wulff: https://www.AlexWulff.com #define BUZZ 0 #define LED 1 #define BEEP_DELAY 30 #define LIGHT_DELAY 200 #define INITIAL 5000 //Nilai dalam milidetik. //10,000 ms menghasilkan waktu total urutan 46,5 Detik //20,000 ms menghasilkan waktu total urutan 91,5 Detik //30,000 ms menghasilkan waktu total urutan 136,5 Detik //Anda paham pola. Setiap 10 detik menghasilkan lagi 45 //detik waktu total pada urutan. void setup() { //Inisialisasi pin keluaran pinMode(BUZZ, OUTPUT); pinMode(LED, OUTPUT); //Berkedipkan lampu untuk memastikan perangkat berfungsi untuk (int i = 0; i < 5; i++) { digitalWrite(LED, HIGH); delay(LIGHT_DELAY); digitalWrite(LED, LOW); delay(LIGHT_DELAY); } } void loop() { //Ulangi 50 kali, menurunkan penundaan loop dengan faktor 1/i setiap kali untuk (int i = 1; i < 50; i++) { digitalWrite(BUZZ, HIGH); digitalWrite(LED, HIGH); delay(BEEP_DELAY); digitalWrite(BUZZ, LOW); digitalWrite(LED, LOW); delay(INITIAL/i); } }
Di atas adalah contoh program pendek yang menampilkan beberapa kemampuan perangkat ini. Ini juga program yang berjalan dalam video yang ditampilkan di atas. Waktu antara setiap bunyi berikutnya semakin kecil, yang bisa sangat mengganggu! Anda dapat mengubah skala waktu pada sketsa ini dengan mengubah INITIAL menjadi sesuatu yang jauh lebih besar. Bahkan mungkin untuk menjalankannya selama satu minggu, semakin cepat setiap harinya!
Anda juga dapat menulis program yang sangat sederhana yang hanya berbunyi dan berkedip secara acak, atau Anda dapat membuat busu memainkan lagu pendek dalam waktu yang sama dengan LED. Kemungkinan tidak terbatas!
Saya telah membuat simulasi Autodesk Circuits yang memungkinkan Anda mencoba sketsa Anda pada rangkaian virtual tanpa perlu menyambungkan apa pun. Coba di sini: https://circuits.io/circuits/4778452-the-annoy-o-bug-a-chirping-light-up-throwie/.
Langkah Empat: Memprogram ATtiny85
Anda dapat memprogram ATtiny Anda menggunakan Arduino Uno (atau praktis perangkat berbasis ATmega apa pun) dan kapasitor 10uF. Instruksi dapat ditemukan di sini: https://www.hackster.io/arjun/programming-attiny85-with-arduino-uno-afb829.
Hati-hati saat mencabut ATtiny dari soket DIP. Kadang-kadang lebih membantu menggunakan alat pincut untuk mencabutnya daripada mencoba mengeluarkannya dengan jari Anda.
Langkah Lima: Penempatan
Menempatkan perangkat ini adalah setengah kesenangan. Bergantung pada di mana Anda mendapatkan bagian-bagiannya, bayi-bayi ini dapat menghabiskan kurang dari $5; relatif murah untuk membuat banyak dari mereka. Mereka cukup kecil untuk ditempatkan di tanaman dalam pot, kotak kecil, bantal, di dalam lampu, di meja, dan di mana saja yang Anda bisa bayangkan! Jika Anda menggunakan pengamat waktu watchdog untuk mematikan ATtiny, rangkaian ini dapat berjalan lebih dari satu tahun pada baterai sel koin.
Selesai! Jika Anda membutuhkan bantuan untuk membuat program tertentu atau merakit rangkaian, cukup berikan komentar di bawah. Saya akan senang membantu.
Untuk melihat lebih banyak proyek saya kunjungi www.AlexWulff.com dan https://www.hackster.io/AlexWulff.
Peringatan kecil: Karena sifat proyek ini, mungkin ada yang menafsirkan suara yang dihasilkannya sebagai ancamanc peledak potensial. Jadi, jangan menempatkan ini di area publik tempat Anda mungkin mendapat masalah!
Kode
Rangkaian Mengganggu
Rangkaian MenggangguArduino
//Kode dihasilkan oleh Alex Wulff: https://www.AlexWulff.com #define BUZZ 0 #define LED 1 #define INITIAL 5000 //10,000 ms menghasilkan waktu total urutan 46,5 Detik //20,000 ms menghasilkan waktu total urutan 91,5 Detik //30,000 ms menghasilkan waktu total urutan 136,5 Detik //Anda paham pola. Setiap 10 detik menghasilkan lagi 45 //detik waktu total pada urutan. void setup() { // letakkan kode pengaturan Anda di sini, untuk dijalankan sekali: pinMode(BUZZ, OUTPUT); pinMode(LED, OUTPUT); //Berkedipkan lampu untuk memastikan perangkat berfungsi untuk (int i = 0; i < 5; i++) { digitalWrite(LED, HIGH); delay(200); digitalWrite(LED, LOW); delay(200); } } void loop() { untuk (int i = 1; i < 50; i++) { digitalWrite(BUZZ, HIGH); digitalWrite(LED, HIGH); delay(30); digitalWrite(0, LOW); digitalWrite(LED, LOW); delay(INITIAL/i); } }