Daftar Isi:

DIP Tune Selector Menggunakan 1 Pin: 4 Langkah
DIP Tune Selector Menggunakan 1 Pin: 4 Langkah

Video: DIP Tune Selector Menggunakan 1 Pin: 4 Langkah

Video: DIP Tune Selector Menggunakan 1 Pin: 4 Langkah
Video: DPDT switch 6 pin Cara kerjanya.ini cara kerja dan kaki-kaki nya 2024, November
Anonim
DIP Tune Selector Menggunakan 1 Pin
DIP Tune Selector Menggunakan 1 Pin

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

Perangkat Keras yang Diperlukan
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:

  • 10K x2
  • 20K
  • 40K
  • 80K
Terapkan pembagi tegangan
buzzer piezo pasif Amazon Mainkan melodi seperti yang didorong oleh aplikasi melalui fungsi nada Arduino

Langkah 2: Penjelasan Metode Multi-switch

Penjelasan Metode Multi-switch
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.

Gambar
Gambar

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:

  1. R1 dihitung menggunakan persamaan 2
  2. R1 dan R2 digunakan untuk menghitung RASIO resistansi terkait
  3. RASIO dikalikan dengan 1023 untuk mendapatkan nilai pembanding
  4. 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

Gambar
Gambar

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

Mainkan Lagu
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:

  1. "Pengguna" mengatur sakelar celup dalam konfigurasi yang terkait dengan nada yang diinginkan
  2. setiap siklus loop program pengenal untuk pengaturan sakelar celup saat ini diperoleh melalui analogRead
  3. Pengidentifikasi konfigurasi langkah 2 dibandingkan dengan masing-masing pembanding dalam daftar lagu yang tersedia
  4. Jika kecocokan ditemukan, rutinitas playTune dipanggil dengan informasi yang diperlukan untuk mengakses daftar nada nada

    Menggunakan fungsi nada Arduino, setiap nada dimainkan melalui bel

  5. Jika tidak ada kecocokan yang ditemukan, tidak ada tindakan yang diambil
  6. 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: