Daftar Isi:
- Langkah 1: Perangkat Keras yang Diperlukan
- Langkah 2: Penjelasan Metode Multi-switch
- Langkah 3: Spreadsheet Pembanding
- Langkah 4: Mainkan Lagu
Video: DIP Tune Selector Menggunakan 1 Pin: 4 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
Beberapa waktu lalu saya mengerjakan proyek "kotak musik" yang harus memilih di antara sebanyak 10 cuplikan nada yang berbeda. Pilihan alami untuk memilih nada tertentu adalah sakelar celup 4 pin karena 4 sakelar menyediakan 24=16 pengaturan yang berbeda. Namun, implementasi brute force untuk pendekatan ini membutuhkan 4 pin perangkat, satu untuk setiap sakelar. Karena saya berencana menggunakan ATtiny85 untuk pengembangan, kehilangan 4 pin agak terlalu banyak. Untungnya, saya menemukan artikel yang menjelaskan metode cerdik untuk menggunakan 1 pin analog untuk menangani beberapa input sakelar.
Teknik multi-switch; 1-input menggunakan rangkaian Pembagi Tegangan untuk memberikan nilai integer unik untuk masing-masing dari 16 kemungkinan kombinasi pengaturan sakelar. Kumpulan 16 pengidentifikasi bilangan bulat ini kemudian digunakan dalam program aplikasi untuk mengaitkan tindakan dengan pengaturan.
Instruksi ini menggunakan metode multi-saklar untuk menerapkan pemilihan nada untuk aplikasi kotak musik. Melodi yang dipilih kemudian dimainkan melalui buzzer piezo menggunakan fungsi nada Arduino.
Langkah 1: Perangkat Keras yang Diperlukan
Penggunaan UNO sebagai platform implementasi meminimalkan jumlah komponen perangkat keras yang diperlukan. Implementasi metode input multi-saklar hanya membutuhkan sakelar celup 4-pin, 5 resistor yang digunakan untuk pembagi tegangan, dan kabel pengait untuk koneksi. Buzzer piezo ditambahkan ke konfigurasi untuk implementasi pemilih nada kotak musik. Opsional, tergantung pada jenis sakelar celup yang digunakan, akan sangat membantu untuk menggunakan soket 2x4 8 pin untuk menghubungkan sakelar celup ke papan tempat memotong roti karena pin sakelar celup standar tampaknya dibuat untuk menyolder ke papan perf yang tidak dicolokkan langsung ke papan tempat memotong roti. Soket menstabilkan koneksi sakelar celup dan menjaga sakelar agar tidak mudah diangkat saat mengatur sakelar sakelar.
Nama | Kemungkinan Sumber | Bagaimana Digunakan |
---|---|---|
Sakelar celup 4-pin | Pilihan nada | |
Soket pin 2x4 (Opsional) | Amazon | Posting pada sebagian besar sakelar celup tidak menahan sakelar dengan baik di papan tempat memotong roti. Soket membantu membuat koneksi lebih solid. Alternatifnya adalah menemukan sakelar celup yang benar-benar dibuat untuk penggunaan papan tempat memotong roti dengan pin IC biasa. |
resistor:
|
Terapkan pembagi tegangan | |
buzzer piezo pasif | Amazon | Mainkan melodi seperti yang didorong oleh aplikasi melalui fungsi nada Arduino |
Langkah 2: Penjelasan Metode Multi-switch
Bagian ini membahas konsep yang mendasari metode multi-sakelar dan mengembangkan persamaan yang diperlukan untuk penghitungan pengidentifikasi unik yang berdiri sendiri untuk masing-masing dari 16 kemungkinan konfigurasi pengaturan sakelar celup. Pengidentifikasi ini kemudian dapat digunakan dalam program aplikasi untuk mengaitkan konfigurasi sakelar dengan suatu tindakan. Misalnya, Anda mungkin ingin pengaturan - aktifkan 1, matikan 2, matikan 3, matikan 4 (1, 0, 0, 0) - untuk memainkan Amazing Grace dan (0, 1, 0, 0) untuk memainkan Singa Tidur Malam Ini. Untuk singkat dan ringkasnya, pengidentifikasi konfigurasi disebut sebagai pembanding di sisa dokumen.
Konsep dasar dari metode multi-saklar adalah rangkaian Pembagi Tegangan yang terdiri dari 2 buah resistor seri yang dihubungkan dengan tegangan masukan. Kabel tegangan keluaran dihubungkan antara resistor, R1 dan R2, seperti yang ditunjukkan di atas. Tegangan keluaran pembagi dihitung sebagai tegangan masukan dikalikan dengan rasio resistor R2 dengan jumlah R1 dan R2 (persamaan 1). Rasio ini selalu kurang dari 1 sehingga tegangan keluaran selalu lebih kecil dari tegangan masukan.
Seperti yang ditunjukkan dalam diagram desain di atas, multi-saklar dikonfigurasi sebagai pembagi tegangan dengan R2 tetap dan R1 sama dengan resistansi komposit/ekuivalen untuk 4 resistor sakelar celup. Nilai R1 tergantung pada sakelar celup mana yang dihidupkan dan, oleh karena itu, berkontribusi pada resistansi komposit. Karena resistor sakelar celup paralel, persamaan perhitungan resistansi ekivalen dinyatakan dalam kebalikan dari resistor komponen. Untuk konfigurasi kami dan kasus di mana semua sakelar dihidupkan, persamaannya menjadi
1/R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000
memberikan R1 = 5333,33 volt. Untuk menjelaskan fakta bahwa sebagian besar pengaturan memiliki setidaknya satu sakelar dimatikan, status sakelar digunakan sebagai pengganda:
1/R1 = s1*1/80000 + dtk2*1/40000 + s3*1/2000 + s4*1/10000 (2)
di mana pengganda keadaan, sSaya, sama dengan 1 jika sakelar dihidupkan dan sama dengan 0 jika sakelar dimatikan. R1 sekarang dapat digunakan untuk menghitung rasio resistansi yang dibutuhkan dalam persamaan 1. Menggunakan kasus di mana semua sakelar dihidupkan sebagai contoh lagi
RASIO = R2/(R1+R2) = 10000/(5333.33+10000) =.6522
Langkah terakhir dalam perhitungan nilai komparator yang diprediksi adalah perkalian RASIO dengan 1023 untuk meniru efek fungsi analogRead. Pengidentifikasi untuk kasus di mana semua sakelar aktif adalah
pembanding15 = 1023*.6522 = 667
Semua persamaan sekarang tersedia untuk penghitungan pengidentifikasi untuk 16 kemungkinan pengaturan sakelar. Untuk meringkas:
- R1 dihitung menggunakan persamaan 2
- R1 dan R2 digunakan untuk menghitung RASIO resistansi terkait
- RASIO dikalikan dengan 1023 untuk mendapatkan nilai pembanding
- opsional, tegangan output yang diprediksi juga dapat dihitung sebagai RATIO*Vin
Himpunan komparator hanya bergantung pada nilai resistor yang digunakan untuk pembagi tegangan dan merupakan tanda unik untuk konfigurasi. Karena tegangan keluaran pembagi akan berfluktuasi dari run ke run (dan read to read), unik dalam konteks ini berarti bahwa sementara dua set pengenal mungkin tidak persis sama, mereka cukup dekat sehingga perbedaan komparator komponen termasuk dalam pra-perkiraan kecil. interval yang ditentukan. Parameter ukuran interval harus dipilih cukup besar untuk memperhitungkan fluktuasi yang diharapkan tetapi cukup kecil sehingga pengaturan sakelar yang berbeda tidak tumpang tindih. Biasanya 7 bekerja dengan baik untuk interval setengah lebar.
Satu set komparator untuk konfigurasi tertentu dapat diperoleh dengan beberapa metode - jalankan program demo dan catat nilai untuk setiap pengaturan; gunakan spreadsheet di bagian berikutnya untuk menghitung; menyalin set yang ada. Seperti disebutkan di atas semua set kemungkinan besar akan sedikit berbeda tetapi harus bekerja. Saya sarankan menggunakan metode pengidentifikasi penulis untuk pengaturan multi-switch dan spreadsheet dari bagian berikutnya jika ada resistor yang diubah secara signifikan atau lebih banyak resistor ditambahkan.
Program demo berikut mengilustrasikan penggunaan komparator untuk mengidentifikasi pengaturan sakelar celup saat ini. Dalam setiap siklus program, analogRead dilakukan untuk mendapatkan pengenal untuk konfigurasi saat ini. Pengidentifikasi ini kemudian dibandingkan di seluruh daftar pembanding hingga kecocokan ditemukan atau daftar habis. Jika kecocokan ditemukan, pesan keluaran dikeluarkan untuk verifikasi; jika tidak ditemukan akan diberikan peringatan. Penundaan 3 detik dimasukkan ke dalam loop sehingga jendela keluaran serial tidak akan dipenuhi dengan pesan dan memberikan waktu untuk mengatur ulang konfigurasi sakelar celup.
//-------------------------------------------------------------------------------------
// Program demo untuk membaca output pembagi tegangan dan menggunakannya untuk mengidentifikasi // konfigurasi sakelar celup arus dengan melihat nilai output ke atas dalam larik // nilai perbandingan untuk setiap pengaturan yang memungkinkan. Nilai dalam larik pencarian dapat // diperoleh dari proses sebelumnya untuk konfigurasi atau melalui perhitungan // berdasarkan persamaan yang mendasarinya. //------------------------------------------------ -------------------------------------- int pembanding[16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Tentukan variabel pemrosesan int dipPin = A0; // pin analog untuk input pembagi tegangan int dipIn = 0; // menahan keluaran tegangan pembagi yang diterjemahkan oleh analogRead int count = 0; // loop penghitung int epsilon = 7; // perbandingan interval setengah lebar bool dipFound = false; // true jika keluaran pembagi tegangan arus ditemukan pada tabel pencarian void setup() { pinMode(dipPin, INPUT); // konfigurasikan pin pembagi tegangan sebagai INPUT Serial.begin(9600); // aktifkan komunikasi serial } void loop() { delay(3000); // menjaga output agar tidak menggulir terlalu cepat // Inisialisasi parameter pencarian count = 0; dipDitemukan = salah; // Membaca dan mendokumentasikan tegangan keluaran arus dipIn = analogRead(dipPin); Serial.print("keluaran pembagi"); Serial.print(dipIn); // Cari daftar pembanding untuk nilai saat ini while((count < 16) && (!dipFound)) { if(abs(dipIn - comparator[count]) <= epsilon) { // menemukannya dipFound = true; Serial.print("ditemukan di entri"); Serial.print(hitungan); Serial.println("nilai" + String(pembanding[hitungan])); merusak; } hitung++; } if(!dipFound) { // nilai tidak ada di tabel; seharusnya tidak terjadi Serial.println(" OOPS! Tidak ditemukan; lebih baik panggil Ghost Busters"); } }
Langkah 3: Spreadsheet Pembanding
Perhitungan untuk 16 nilai pembanding diberikan dalam spreadsheet yang ditunjukkan di atas. File excel yang menyertainya tersedia untuk diunduh di bagian bawah bagian ini.
Kolom spreadsheet A-D merekam nilai resistor sakelar celup dan 16 kemungkinan pengaturan sakelar. Harap dicatat bahwa sakelar DIP perangkat keras yang ditunjukkan dalam diagram desain fritzing sebenarnya diberi nomor dari kiri ke kanan, bukan penomoran kanan ke kiri yang ditunjukkan dalam spreadsheet. Saya menemukan ini agak membingungkan tetapi alternatifnya tidak menempatkan konfigurasi "1" (0, 0, 0, 1) di urutan pertama daftar. Kolom E menggunakan rumus 2 bagian sebelumnya untuk menghitung resistansi ekivalen Pembagi Tegangan R1 untuk pengaturan. Kolom F menggunakan hasil ini untuk menghitung RASIO resistansi terkait, dan akhirnya, Kolom G mengalikan RASIO dengan nilai analogRead max (1023) untuk mendapatkan nilai komparator yang diprediksi. 2 kolom terakhir berisi nilai aktual dari menjalankan program demo bersama dengan perbedaan antara nilai prediksi dan aktual.
Bagian sebelumnya menyebutkan tiga metode untuk mendapatkan satu set nilai pembanding termasuk perpanjangan spreadsheet ini jika nilai resistor diubah secara signifikan atau lebih banyak sakelar ditambahkan. Tampaknya perbedaan kecil dalam nilai resistor tidak secara signifikan mempengaruhi hasil akhir (yang bagus karena spesifikasi resistor memberikan toleransi, katakanlah 5%, dan resistor jarang sama dengan nilai yang dinyatakan sebenarnya).
Langkah 4: Mainkan Lagu
Untuk mengilustrasikan bagaimana teknik multi-switch dapat digunakan dalam suatu aplikasi, program demo perbandingan dari bagian " Penjelasan Metode " dimodifikasi untuk mengimplementasikan pemrosesan pemilihan nada untuk program kotak musik. Konfigurasi aplikasi yang diperbarui ditunjukkan di atas. Satu-satunya tambahan pada perangkat keras adalah buzzer piezo pasif untuk memainkan lagu yang dipilih. Perubahan mendasar pada perangkat lunak adalah penambahan rutin untuk memainkan nada, setelah diidentifikasi, menggunakan buzzer dan rutinitas nada Arduino.
Cuplikan lagu yang tersedia terkandung dalam file header, Tunes.h, bersama dengan definisi struktur pendukung yang diperlukan. Setiap nada didefinisikan sebagai susunan struktur terkait nada yang berisi frekuensi dan durasi nada. Frekuensi nada terdapat dalam file header terpisah, Pitch.h. File program dan header tersedia untuk diunduh di akhir bagian ini. Ketiga file harus ditempatkan di direktori yang sama.
Seleksi dan identifikasi berlangsung sebagai berikut:
- "Pengguna" mengatur sakelar celup dalam konfigurasi yang terkait dengan nada yang diinginkan
- setiap siklus loop program pengenal untuk pengaturan sakelar celup saat ini diperoleh melalui analogRead
- Pengidentifikasi konfigurasi langkah 2 dibandingkan dengan masing-masing pembanding dalam daftar lagu yang tersedia
- Jika kecocokan ditemukan, rutinitas playTune dipanggil dengan informasi yang diperlukan untuk mengakses daftar nada nada
Menggunakan fungsi nada Arduino, setiap nada dimainkan melalui bel
- Jika tidak ada kecocokan yang ditemukan, tidak ada tindakan yang diambil
- ulangi 1-5
Pengaturan sakelar DIP untuk nada yang tersedia ditunjukkan pada tabel di bawah ini di mana 1 berarti sakelar aktif, 0 mati. Ingatlah bahwa cara sakelar celup berorientasi menempatkan sakelar 1 di posisi paling kiri (yang terkait dengan resistor 80K).
NAMA | Beralih 1 | Beralih 2 | Beralih 3 | Beralih 4 |
Danny Boy | 1 | 0 | 0 | 0 |
Beruang kecil | 0 | 1 | 0 | 0 |
Singa Tidur Malam Ini | 1 | 1 | 0 | 0 |
Tidak ada yang tahu masalahnya | 0 | 0 | 1 | 0 |
Rahmat yang mengagumkan | 0 | 0 | 0 | 1 |
Ruang kosong | 1 | 0 | 0 | 1 |
Bukit Burung Mengejek | 1 | 0 | 1 | 1 |
Kualitas suara dari buzzer piezo memang tidak bagus tapi setidaknya bisa dikenali. Bahkan jika nada diukur, mereka sangat dekat dengan frekuensi nada yang tepat. Salah satu teknik menarik yang digunakan dalam program ini adalah menyimpan data tune di bagian memori flash/program alih-alih bagian memori data default dengan menggunakan direktif PROGMEM. Bagian data menyimpan variabel pemrosesan program dan jauh lebih kecil, sekitar 512 byte untuk beberapa mikrokontroler ATtiny.
Direkomendasikan:
Konektor ICSP untuk Arduino Nano Tanpa Solder Pin Header Tapi Pogo Pin: 7 Langkah
Konektor ICSP untuk Arduino Nano Tanpa Solder Pin Header Tapi Pogo Pin: Buat konektor ICSP untuk Arduino Nano tanpa solder pin header di papan tetapi Pogo Pin. Parts3×2 Pin Socket x1 - APitch 2.54mm Dupont Line Wire Female Pin Connector Perumahan Terminal x6 - BP75-E2 (Kepala Kerucut 1.3mm) Uji Musim Semi Probe Pogo Pin
Elektrifikasi Piano Tap-A-Tune Anda: 9 Langkah (dengan Gambar)
Elektrifikasi Piano Tap-A-Tune Anda: Buat musik punk eksperimental dan efek suara film horor dengan proyek ini yang terinspirasi oleh "Gitar Kotak Cerutu Listrik" dari Randofo Instructable dan EvanKale "Electric Ukelele with Tone Control" Dapat Diinstruksikan. Piano tap-a-tune adalah
Stasiun Looper Efek Gitar Bypass Sejati yang Dapat Diprogram Menggunakan Dip Switch: 11 Langkah
Stasiun Looper Efek Gitar Bypass Sejati yang Dapat Diprogram Menggunakan Dip Switch: Saya adalah penggemar gitar dan pemain hobi. Sebagian besar proyek saya terjadi di sekitar perlengkapan gitar. Saya membuat ampli sendiri dan beberapa pedal efek. Di masa lalu saya bermain di band kecil dan meyakinkan diri sendiri bahwa saya hanya membutuhkan amp dengan re
Pemrograman MSP430 DIP Menggunakan Ez430: 4 Langkah
Pemrograman MSP430 DIP Menggunakan Ez430: Ketika saya menemukan programmer USB ez430 TI, tampaknya itu adalah salah satu metode yang lebih mudah untuk memulai dan menjalankan dengan MCU. Bagaimana saya bisa salah, ada ez di namanya! Ternyata sebenarnya mudah… kebanyakan. ez430 sangat bagus jika Anda ingin
Soket ISP 6 Pin hingga 8 Pin: 4 Langkah
ISP 6 Pin to 8 Pin Socket: Alasan utama saya membangun proyek ini adalah untuk memprogram ATTiny45, yang memiliki koneksi 8 pin, sedangkan USBtinyISP saya (dari Ladyada) hanya memiliki koneksi 10 pin dan 6 pin. Setelah mengintip di internet selama sekitar 3-4 minggu, saya tidak menemukan apa pun