Daftar Isi:

Mikrokontroler Fabric Tone Generator dalam kode-C: 8 Langkah (dengan Gambar)
Mikrokontroler Fabric Tone Generator dalam kode-C: 8 Langkah (dengan Gambar)

Video: Mikrokontroler Fabric Tone Generator dalam kode-C: 8 Langkah (dengan Gambar)

Video: Mikrokontroler Fabric Tone Generator dalam kode-C: 8 Langkah (dengan Gambar)
Video: Praktikum 7 | Tone Generator dengan ATMega32 di Proteus 7 | Komunikasi Data 2024, Juli
Anonim
Generator Nada Kain Mikrokontroler dalam kode-C
Generator Nada Kain Mikrokontroler dalam kode-C

Pada akhir Oktober tahun lalu, pengguna instruksi carmitsu mengirimi saya pesan setelah melihat synth kotak makan siang saya. Dari pesannya: Saya mengajar musik di sekolah dasar. Kami memainkan banyak musik perekam. yaitu anak-anak bermain seruling kecil…… Saya memiliki beberapa anak berkebutuhan khusus yang dapat menggunakan papan poster hitam dengan lingkaran yang memiliki nama catatan di atasnya. Siswa-siswa ini mendorong pada lingkaran dengan nama catatan pada saat yang sama siswa lainnya memainkan lagu….. Sebagian besar anak-anak berkebutuhan khusus dapat melakukannya dengan cukup baik dan tepat waktu dengan musik. Apa yang saya cari adalah membangun generator suara yang sangat sederhana sehingga anak-anak ini dapat memainkan nada yang sama seperti yang dimainkan oleh siswa pada perekam mereka. Saya hanya akan menjadi beberapa lapangan. Saya pikir saya bisa memasang semacam tombol kecil di bagian bawah lingkaran bundar mereka sehingga ketika mereka menekannya, suara akan keluar dari speaker kecil, cukup keras sehingga mereka bisa mendengar. Memiliki ibu yang seorang guru dan menyukai sekolah, bagaimana saya bisa menolak? Sejujurnya aku tidak bisa. Ini cukup banyak kronik proyek dan instruksi tentang cara membangun Anda sendiri.

Langkah 1: Awal atau Mengapa Saya Tidak Bisa Menggunakan Analog

Awal atau Mengapa Saya Tidak Bisa Menempel Analog
Awal atau Mengapa Saya Tidak Bisa Menempel Analog

Hal-hal yang baik dimulai pada halaman berikutnya. Jika Anda ingin tahu bagaimana saya akhirnya menggunakan bagian-bagian yang saya lakukan, baca terus. Timer yang benar: Setelah memikirkan proyek ini, saya langsung memikirkan generator nada piezo dari buku op-amp Forest Mims III saya. Sepertinya cara yang baik untuk pergi, itu hanya piezo, IC 741 dan beberapa komponen pasif. Bukan masalah besar bukan? Nah itu memiliki 2 masalah, 1) ketika Anda menekan sakelar, dimungkinkan untuk mengubah nada 2) hampir tidak mungkin untuk disetel. Yang pertama mungkin bisa diatasi dengan beberapa teknologi debounce, meskipun saya tidak tahu bagaimana melakukannya tanpa menambahkan penghitung lain. Ini juga bisa menjadi masalah dengan menggunakan piezo. Masalah kedua baru saja menjadi berat ketika Anda mulai mencoba untuk mencapai nada tertentu. Bagaimana dengan 555? Lembar data menunjukkan fungsi waktu tunda berdasarkan resistor dan kapasitor. Yang bagus sampai Anda mulai mengetik nilai sebenarnya dari bagian dunia nyata, saat itulah Anda akan menemukan bahwa memukul nada 440Hz mulai sedikit sulit. Anda dapat menggunakan pot trim untuk menyetelnya, tetapi seiring waktu mereka cenderung bergerak. Menyetel instrumen secara konstan, dikompilasi di atas peningkatan pesat pada biaya dan kuantitas suku cadang, dan istri saya membuat perubahan nada ketika dia menekan tombol membunuh 555 untuk proyek ini. Op-amp:Tidak masalah, orang telah membuat synths dengan op-amp sejak sebelum saya lahir. Seberapa sulitkah membuat yang sangat sederhana, dengan beberapa bagian dan catatan khusus? Lebih sulit dari yang saya kira. Sebagian besar desain di luar sana sangat rumit untuk proyek ini. Desainer synth mencari bentuk gelombang/nada yang sempurna. Ini secara langsung bertentangan dengan proyek yang seharusnya cukup murah untuk anggaran sekolah atau guru. Membuat keyboard cukup mudah, hanya dengan sekumpulan resistor dan daya atau sekumpulan dioda dan daya. Ini sisa desain sirkuit, dan biaya PCB kustom yang mulai keluar dari tangan untuk seseorang di tingkat elektronik awal. Pendefinisian ulang proyek: Jadi proyek itu didefinisikan ulang bahkan sebelum saya benar-benar mulai. Saya membutuhkan sesuatu yang dapat mengaktifkan pin speaker, tepat waktu, dengan menekan sebuah tombol. Saya tidak ingin harus mendesain dan membeli PCB. Ini harus menggunakan komponen sesedikit mungkin, dan dirakit sebagai kit pemula. Itu menatap wajahku sepanjang waktu. Duh!! Mikrokontroler! Mikrokontroler: Jadi setelah membeli kit Arduino Perangkat Modern Bare Bones dan Papan Target Sederhana Ilmuwan Gila Gila dan membiarkan mereka duduk di meja saya selama berbulan-bulan tidak digunakan, saya memiliki proyek pengantar yang sempurna. Saya mulai melihat waktu yang diperlukan untuk menggabungkan keduanya, kurva pembelajaran untuk kode, biaya, suku cadang tambahan yang diperlukan dan membuatnya melakukan apa yang saya inginkan dan menetap di papan target. Biayanya cukup merata, $15 ditambah kabel FTDI $20 untuk Arduino, $12 ditambah programmer USBtinyISP $22. Saya sudah tahu C++ dari perguruan tinggi kecil saya bisa berdiri dan berpikir C untuk mikrokontroler tidak akan seburuk itu, sementara selain berkedip lampu untuk memastikan saya memasang kit saya dengan benar, saya tidak punya pengalaman Arduino. Keduanya bisa dipasang. Itu cukup banyak, jadi saya memutuskan bagian yang lebih sedikit dari keduanya, papan target.

Langkah 2: Apa yang Anda Butuhkan Rev 1

Apa yang Anda Butuhkan Rev 1
Apa yang Anda Butuhkan Rev 1

Biaya Suku CadangUSBtinyISP AVR Programmer Kit (USB SpokePOV Dongle)v2.0 $22.00https://www.adafruit.com/index.php?main_page=product_info&cPath=16&products_id=46Evil Mad Scientist labs ATmegaXX8 Mini Dev Kits $12Header, DIP 6-pin, 5-pk $2,75https://evilmadscience.com/tinykitlist/74-atmegaxx8Speaker (8-ohm Mini) $2,79https://www.radioshack.com/product/index.jsp?productId=2062406SPST Sakelar Sesaat yang Biasanya Terbuka (kami menggunakan 5) $3,49(4pack) https://www.radioshack.com/product/index.jsp?productId=2062539"AAA" Dudukan Baterai $1,79https://www.radioshack.com/product/index.jsp?productId=2102735SPST Submini Slide Switch (opsional untuk sakelar daya) $2.69(2-pack)https://www.radioshack.com/product/index.jsp?productId=2062490LED dan resistor (opsional, jika Anda menginginkan lampu daya) $harus gratis jika mereka tergeletak di sekitarWire $ juga harus tergeletak di sekitarSilver solder (jika ini terjadi di dekat anak-anak Anda mungkin tidak boleh menggunakan timah, orang tua menjadi sangat aneh tentang hal semacam itu;)) Alkohol gosok (untuk kembali pindahkan fluks) Jika Anda ingin menghemat uang di beberapa tempat, Anda tidak perlu mendapatkan suku cadang dari RadioShack. Saya melakukannya karena mereka dekat dan dapat diprediksi.

Langkah 3: Majelis Rev 1

Majelis Rev 1
Majelis Rev 1
Majelis Rev 1
Majelis Rev 1

Letakkan bagian-bagian Anda bersama-sama seperti yang ditunjukkan. Pastikan untuk menggunakan alkohol gosok dan sikat fluks ketika Anda selesai untuk menghilangkan fluks dari penyolderan. Skema di bawah ini untuk mereka yang lebih menyukainya. D1 dan R1 bisa apa saja yang Anda inginkan, itu hanya lampu daya. C1 hanya untuk membantu membuat kekuatan sedikit lebih konsisten. Saya menggunakan 10uF. Skema ini sama untuk versi yang lebih baru, cukup tukar tombol tekan untuk sakelar kain. di revisi terakhir saya menambahkan switch ke PC4 dan PC5 atau pin 27 dan 28.

Langkah 4: Apa yang Anda Butuhkan Rev 2

Apa yang Anda Butuhkan Rev 2
Apa yang Anda Butuhkan Rev 2

Jadi pada dasarnya Anda mengganti tombol Radio Shack dengan kain buatan tangan. Anda membutuhkan: Beberapa warna kain, atau satu warna jika Anda ingin setiap nada memiliki warna yang sama. Bagian quilting dari toko kain terdekat Anda adalah tempat terbaik untuk mendapatkan ini dengan harga murah. Kuartal quilting adalah $ 1,50 dan Anda bisa mendapatkan satu ton sakelar dari satu. Kain konduktif, saya sarankan kain Flectron dari LessEMF harganya $ 20 untuk potongan 12 "x 54" Mata ikan untuk memasang kawat ke kain. Anda bisa mendapatkannya di sebagian besar toko kain dengan harga murah. JoAnn memiliki alat dan 25 untuk $2 Anda akan memerlukan palu untuk ini. Kawat, saya menggunakan 22AWG, saya sarankan lebih kecil jika Anda memilikinya. Fusing, untuk mendapatkan kain berwarna dan konduktif untuk tetap bersama-sama. Tanyakan di toko dan Anda mungkin bisa membelinya di halaman. Ini mungkin akan bekerja dengan baik, meskipun saya menyarankan Anda bertanya kepada someoneBatting, saya menggunakan barang yang sangat longgar pada awalnya, kemudian beralih ke sesuatu yang lebih erat. Saya sarankan Anda mencoba beberapa yang berbeda sampai Anda menemukan yang terbaik. Tabung panas menyusut, ini membuat semuanya jauh lebih mudah diatur. kabel panas menyusut bersama-sama saat mereka melewati satu sama lain dan mereka akan tetap jauh lebih baik.

Langkah 5: Majelis Rev 2

Majelis Rev 2
Majelis Rev 2
Majelis Rev 2
Majelis Rev 2
Majelis Rev 2
Majelis Rev 2

Letakkan kain multi-warna di atas satu sama lain dan potong persegi, itu tidak harus sempurna. Setrika kain untuk menghilangkan lipatan, lapisi lagi satu sama lain dan pastikan ujung-ujungnya cocok. Potong bagian tepi yang tidak. Potong bagian atas dan bawah, biarkan sisi kiri dan kanan lurus. Anda akan membalikkan sakelar setelah menjahit jadi jangan membuat sisi yang membulat terlalu bulat dan sisakan ketinggian yang cukup di sisi datar untuk mendorong sakelar dengan mudah saat Anda selesai. Bulatkan sisi datar sakelar pertama dan terakhir. Arahkan ke mesin jahit Anda dan satukan dua putaran sehingga sisi yang baik saling berhadapan dan jahit jahitan pada bagian yang rata. Setelah bagian atas kancing terpasang dijahit, potong kotak dari kain konduktif dan gabungkan satu sisi. Potong kawat memanjang dan lepaskan salah satu ujungnya. solder kawat di sekitar salah satu lubang tali. (solder kemungkinan tidak akan menempel pada lubangnya) Potong celah kecil pada kain di salah satu sudut dan palu lubangnya untuk menempelkan kain dan kawat. lepaskan bagian belakang dari sekering dan gabungkan kain konduktif ke bagian belakang kain berwarna. Ulangi untuk semua sakelar. Untuk mempermudah, Anda dapat memanaskan tabung susut kabel bersama-sama setiap kali satu kabel melewati kabel untuk sakelar berikutnya. Dapatkan atau buat sepotong kain sepanjang set sakelar dan potong strip kain konduktif sepanjang itu. Berbeda dengan sakelar berwarna, ini adalah satu bagian panjang. Ini akan menjadi apa yang disentuh tombol untuk membuat koneksi. Potong celah kecil dan pasang kabel dengan lubang, seperti bagian atas sakelar berwarna. Sekering ke bagian belakang kain bawah. Jahit bagian atas dan bawah bersama-sama dengan kain konduktif menghadap ke luar, gunakan tongkat yard untuk membalikkan set setelah dijahit. Buat beberapa lubang kecil di batting, saya menggunakan sumpit untuk mendapatkan lingkaran kemudian lepaskan sumpit dan potong. Potong untuk membentuk dan masukkan ke dalam sakelar. Inilah yang membuat kain konduktif terpisah. Mungkin lebih mudah memasukkan batting saat Anda membalikkan sakelar daripada setelahnya. Barang-barang yang saya gunakan robek sangat buruk saat saya memasukkannya dan saya harus mendapatkan pukulan yang berbeda. Akhirnya kaitkan kabel ke papan target dan Anda sudah siap. Strip bawah yang panjang akan digiling.

Langkah 6: Apa yang Anda Butuhkan Rev 3

Apa yang Anda Butuhkan Rev 3
Apa yang Anda Butuhkan Rev 3

Di Rev 3 saya membuat sakelar independen dari kabel. Ini menghemat banyak waktu. Saya juga lebih menyukai tampilan hasil akhirnya. Jadi, inilah bagian-bagian baru yang Anda butuhkan: Snaps, Baru saja mendapatkannya dari JoAnn's. Mereka datang dengan alat instal yang tidak terlalu buruk seharga $ 7. Saya akan menyarankan salah satu alat tang sebagai gantinya karena saya harus membongkar alat saya untuk memasang kancing di tengah. Jahit akan menjadi alternatif yang baik, meskipun membutuhkan waktu lebih lama untuk melekat. Benang konduktif, Spark Fun memiliki barang yang bisa masuk ke mesin jahit Anda. Saya harus bekerja sangat lambat di mesin saya atau utasnya akan putus. Jarak tempuh Anda mungkin berbeda

Langkah 7: Majelis Rev 3

Majelis Rev 3
Majelis Rev 3
Majelis Rev 3
Majelis Rev 3
Majelis Rev 3
Majelis Rev 3
Majelis Rev 3
Majelis Rev 3

Revisi ini jauh lebih baik daripada yang terakhir dalam hal waktu sampai dibangun. Plus, memiliki sakelar yang dapat dilepas menyelamatkan kewarasan saya lebih dari sekali. Mulailah dengan membuat dasarnya. Ini hanya seperempat quilting yang dilipat dua. Letakkan lapisan batting di atas dan jahit, sisakan lubang untuk membalikkannya. Dorong benda itu melalui lubang dan pada dasarnya Anda memiliki benda jenis bantal. Saya quilting sehingga lebih mudah untuk bekerja dengan. Gunakan benang biasa dan jadilah gila. Saya membuat berlian yang satu ini, tapi mungkin lain kali saya akan menempatkan naga di belakang, atau sesuatu yang keren. Sekarang, ke sakelar. Saya suka desain ini karena pada dasarnya Anda dapat membuat banyak dari ini sebelumnya dan hanya menggunakan apa yang Anda inginkan. mulailah dengan menggunakan potongan karton, kertas, atau kain dan potong bentuk buah pir darinya. Gunakan itu sebagai panduan untuk memotong bagian atas dan bawah untuk setiap sakelar. Saya memotong satu warna untuk setiap bagian bawah dan warna yang berbeda untuk bagian atas, tetapi Anda dapat berkreasi dan melakukan apa yang Anda inginkan. Potong panduan Anda menjadi bentuk lolipop yang mudah masuk ke dalam sakelar. Perpanjang "tongkat" sehingga bisa membungkus tepi "pir". Potong bentuk dari sekering dan kain konduktif dan sekering satu sisi kain konduktif. Lepaskan bagian belakang dari bahan sekering dan gabungkan ke bagian atas kain yang akan berada di bagian bawah dan bagian bawah kain yang akan berada di bagian atas. Bungkus sedikit ekstra di sekitar bagian atas. Pergilah ke mesin jahit Anda dan letakkan batting dengan lubang di antara kain atas dan bawah. Jahit di luar kain konduktif dan lewati bagian "tongkat" sakelar. Saya menemukan bahwa itu mungkin untuk menjahit kain konduktif atas ke bawah membuat pendek. Lebih baik tidak menjahit melalui kain konduktif. Pasang kancing dan sakelar selesai. Saya merasa lebih mudah menggunakan snap laki-laki untuk semua koneksi bawah/GND dan snap perempuan untuk semua bagian atas. Ini membuat semua sakelar dapat dipertukarkan. Sirkuit: Hal tentang pemotongan putaran adalah Anda memiliki banyak bit tambahan. Saya mengambil potongan saya, menyatukan potongan besar sekering ke potongan besar kain konduktif dan menggunakannya untuk memotong persegi panjang yang lebih kecil yang saya gunakan sebagai bantalan. Letakkan sakelar Anda secara kasar dan gabungkan bantalan ke alas dengan ruang yang cukup untuk menjahit garis dan memasangnya. Kaki mesin jahit yang saya gunakan tidak terlalu dekat dengan jepret, jadi ingatlah itu dan beri diri Anda sedikit ruang. Karena saya mendapat benang konduktif yang bisa masuk ke mesin jahit saya, saya hanya menjahit garis dari pad ke pad dan kembali. Saya harus pelan-pelan atau benangnya akan putus, tapi itu satu ton lebih cepat daripada menjahit tangan. Juga dengan benang konduktif pada gelendong dan jarum, saya mendapatkan koneksi solid yang sangat bagus. Barang-barangnya berantakan seperti orang gila, tetapi sedikit lem kerajinan atau Elmers membersihkannya dengan benar. Cobalah untuk menjaga garis jauh dari satu sama lain dan Anda seharusnya tidak memiliki masalah. Perakitan akhir: Pasang semua sakelar Anda, sambungkan papan, muat kode dan selesai. Saya menggunakan kawat untuk berpindah dari papan ke pad dan kemudian hanya menjahit kawat ke alas dengan tangan. Untuk versi berikutnya, saya akan memasang papan di kotak plastik dengan kancing untuk menempelkannya ke alas sehingga jari-jari yang menganggur tidak menariknya.

Langkah 8: Kode

Kode
Kode

Jika Anda belum pernah memprogram chip sebelumnya, ini adalah tugas yang agak menakutkan. Itu tidak membantu bahwa alatnya terkelupas dan sebagian besar waktu Anda harus melakukan operasi yang sama beberapa kali. Dua sumber terbaik yang saya temukan untuk mendapatkan pemahaman tentang apa yang terjadi adalah halaman untuk USBtinyISP, https://www.ladyada.net/make/usbtinyisp/ dan kursus kilat dalam memprogram mainan kebisingan, http:/ /blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html Ini seharusnya bisa membantu Anda memulai.

Banyak orang menyukai Arduino untuk pengkodean ini dan tidak ada yang salah dengan menggunakannya, kecuali saya merasa itu menambahkan banyak kembung pada program yang biasanya sederhana. Juga, saya tahu C dan tidak tahu Arduino. Mungkin suatu hari nanti, jika ada waktu.:) Kode: {{{ #include //Gunakan pin untuk mengaktifkan SPK /// Typedefs ////////// typedef unsigned char u8; int main(kosong) { u8 btnState0; u8 btnState1; u8 btnState2; u8 btnState3; u8 btnState4; u8 btnState5; u8 btnState6; DDRB = (1 << DDB6); //Set SPK untuk keluaran PORTD =(1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); //Set Tombol Tinggi PORTC = (1 << PC4) | (1 << PC6); TCCR2B = (1 << CS21); //Mengatur Timer saat (1) { btnState0 = ~PINC & (1 << PC5); btnState1 = ~PINC & (1 << PC4); btnState2 = ~PIND & (1 << PD0); btnState3 = ~PIND & (1 << PD1); btnState4 = ~PIND & (1 << PD2); btnState5 = ~PIND & (1 << PD3); btnState6 = ~PIND & (1 << PD4); if (btnState0) { if (TCNT2 >= 190) { PORTB ^= (1 << PD6); //Membalik Pin SPK TCNT2 = 0; } } if (btnState1) { if (TCNT2 >= 179) { PORTB ^= (1 << PD6); //Membalik Pin SPK TCNT2 = 0; } } if (btnState2) { if (TCNT2 >= 159) { PORTB ^= (1 << PD6); //Membalik Pin SPK TCNT2 = 0; } } if (btnState3) { if (TCNT2 >= 142) { PORTB ^= (1 << PD6); //Membalik Pin SPK TCNT2 = 0; } } if (btnState4) { if (TCNT2 >= 126) { PORTB ^= (1 << PD6); //Membalik Pin SPK TCNT2 = 0; } } if (btnState5) { if (TCNT2 >= 119) { PORTB ^= (1 << PD6); //Membalik Pin SPK TCNT2 = 0; } } if (btnState6) { if (TCNT2 >= 106) { PORTB ^= (1 << PD6); //Membalik Pin SPK TCNT2 = 0; } } } } }}} Dari mana nada-nada itu berasal? Sedikit matematika diperlukan. Jam timer pada atmega 168 berjalan pada 1MHz. Itu terlalu cepat untuk audio jadi kita harus menggunakan prescaler /8. Kemudian karena kita perlu membalik pin output tinggi lalu rendah untuk membuat 1 siklus, kita perlu membagi jawabannya dengan 2 untuk menghasilkan nada yang tepat. Rumusnya terlihat seperti ini, Pitch to put in code= (1000000/8)/(Frekuensi target*2) Untuk A(440) ini akan menjadi 125000/880=142.045 atau 142 untuk tujuan kita, karena nilainya harus bilangan bulat. Frekuensi target catatan dapat ditemukan di mana saja secara online dan umumnya semuanya sama. Saya masih ingin menambahkan pernyataan kasus alih-alih menggunakan banyak Ifs dan menggunakan PWM untuk mengontrol volume dan nada speaker dengan lebih baik, tetapi untuk saat ini, ini berfungsi.

Direkomendasikan: