Isi kandungan:

Pemilih Penyesuaian DIP Menggunakan 1 Pin: 4 Langkah
Pemilih Penyesuaian DIP Menggunakan 1 Pin: 4 Langkah

Video: Pemilih Penyesuaian DIP Menggunakan 1 Pin: 4 Langkah

Video: Pemilih Penyesuaian DIP Menggunakan 1 Pin: 4 Langkah
Video: EYE on NPI – CUI Devices' Rotary DIP Switches #EyeOnNPI #DigiKey @cuidevices @DigiKey @Adafruit 2024, Julai
Anonim
Pemilih Penyesuaian DIP Menggunakan 1 Pin
Pemilih Penyesuaian DIP Menggunakan 1 Pin

Beberapa saat lalu saya mengusahakan projek "kotak muzik" yang perlu dipilih antara 10 coretan lagu yang berbeza. Pilihan semula jadi untuk memilih lagu tertentu adalah suis dip 4 pin kerana 4 suis menyediakan 24= 16 tetapan yang berbeza. Walau bagaimanapun, pelaksanaan brute force untuk pendekatan ini memerlukan 4 pin peranti, satu untuk setiap suis. Oleh kerana saya merancang untuk menggunakan ATtiny85 untuk pembangunan, kehilangan 4 pin adalah terlalu banyak. Nasib baik, saya menemui artikel yang menerangkan kaedah bijak untuk menggunakan 1 pin analog untuk menangani pelbagai input suis.

Teknik multi-suis; 1-input menggunakan litar Voltage Divider untuk memberikan nilai bilangan bulat yang unik untuk setiap 16 kemungkinan kombinasi tetapan suis. Kumpulan 16 pengenal integer ini kemudian digunakan dalam program aplikasi untuk mengaitkan tindakan dengan pengaturan.

Instruksional ini menggunakan kaedah multi-switch untuk melaksanakan pemilihan lagu untuk aplikasi kotak muzik. Melodi yang dipilih kemudian dimainkan melalui buzzer piezo menggunakan fungsi nada Arduino.

Langkah 1: Perkakasan yang Diperlukan

Perkakasan yang diperlukan
Perkakasan yang diperlukan

Penggunaan UNO sebagai platform pelaksanaan meminimumkan bilangan komponen perkakasan yang diperlukan. Pelaksanaan kaedah input multi-switch hanya memerlukan suis dip 4-pin, 5 perintang yang digunakan untuk pembahagi voltan, dan wayar penyambung untuk sambungan. Buzzer piezo ditambahkan ke konfigurasi untuk pelaksanaan pemilih lagu muzik. Secara pilihan, bergantung pada jenis suis dip yang digunakan, sangat berguna untuk menggunakan soket 2 pin 4x4 untuk menyambungkan suis dip ke papan roti kerana pin suis dip standard sepertinya dibuat untuk pematerian ke papan wangi yang tidak dipasang langsung ke papan roti. Soket menstabilkan sambungan suis dip dan memastikan suis tidak mudah diangkat semasa mengatur suis togol.

Nama Sumber Berkemungkinan Bagaimana Digunakan
Suis dip 4 pin Pilihan lagu
Soket pin 2x4 (Pilihan) Amazon Tiang pada kebanyakan suis dip tidak memegang suis dengan baik di papan roti. Soket membantu menjadikan sambungan lebih kukuh. Alternatifnya ialah mencari suis dip yang benar-benar dibuat untuk penggunaan papan roti dengan pin IC biasa.

perintang:

  • 10K x2
  • 20K
  • 40K
  • 80K
Laksanakan pembahagi voltan
buzzer piezo pasif Amazon Mainkan melodi seperti yang didorong oleh aplikasi melalui fungsi nada Arduino

Langkah 2: Penjelasan Kaedah pelbagai suis

Penjelasan Kaedah Berbilang Suis
Penjelasan Kaedah Berbilang Suis

Bahagian ini membincangkan konsep yang mendasari kaedah multi-switch dan mengembangkan persamaan yang diperlukan untuk pengiraan sendiri pengecam unik untuk setiap 16 konfigurasi tetapan suis dip mungkin. Pengecam ini kemudian dapat digunakan dalam program aplikasi untuk mengaitkan konfigurasi suis dengan tindakan. Sebagai contoh, anda mungkin mahu tetapan - hidupkan 1, matikan 2, matikan 3, matikan 4 (1, 0, 0, 0) - untuk memainkan Amazing Grace dan (0, 1, 0, 0) untuk dimainkan Singa Tidur Malam Ini. Untuk ringkas dan ringkas, pengenal konfigurasi disebut sebagai pembanding dalam baki dokumen.

Imej
Imej

Konsep asas untuk kaedah multi-suis adalah litar Voltage Divider yang terdiri daripada 2 in seri siri yang disambungkan ke voltan input. Lead voltan keluaran disambungkan antara perintang, R1 dan R2, seperti gambar di atas. Voltan keluaran pembahagi dikira sebagai voltan input dikalikan dengan nisbah perintang R2 hingga jumlah R1 dan R2 (persamaan 1). Nisbah ini selalu kurang dari 1 jadi voltan keluaran selalu lebih kecil daripada voltan input.

Seperti yang ditunjukkan dalam rajah reka bentuk di atas multi-switch dikonfigurasikan sebagai pembahagi voltan dengan R2 tetap dan R1 sama dengan rintangan komposit / setara untuk perintang suis 4 dip. Nilai R1 bergantung pada suis dip yang dihidupkan dan, oleh itu, menyumbang kepada rintangan komposit. Oleh kerana perintang suis dip adalah selari, persamaan pengiraan rintangan yang sama dinyatakan dalam bentuk timbal balik perintang komponen. Untuk konfigurasi kami dan sekiranya semua suis dihidupkan, persamaan menjadi

1 / R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000

memberi R1 = 5333.33 volt. Untuk mengetahui fakta bahawa kebanyakan tetapan telah mematikan sekurang-kurangnya salah satu suis, keadaan suis digunakan sebagai pengganda:

1 / R1 = s1* 1/80000 + s2* 1/40000 + s3* 1/20000 + s4*1/10000 (2)

di mana pengganda negeri, si, sama dengan 1 jika suis dihidupkan dan sama dengan 0 jika suis dimatikan. R1 kini boleh digunakan untuk mengira nisbah rintangan yang diperlukan dalam persamaan 1. Menggunakan kes di mana semua suis dihidupkan seperti contohnya lagi

RATIO = R2/ (R1+ R2) = 10000/(5333.33+10000) =.6522

Langkah terakhir dalam pengiraan nilai pembanding yang diramalkan adalah pendaraban RATIO dengan 1023 untuk meniru kesan fungsi analogRead. Pengecam untuk kes di mana semua suis dihidupkan

pembanding15 = 1023*.6522 = 667

Semua persamaan kini disediakan untuk pengiraan pengecam untuk 16 kemungkinan tetapan suis. Untuk Meringkaskan:

  1. R1 dikira menggunakan persamaan 2
  2. R1 dan R2 digunakan untuk mengira RATIO rintangan yang berkaitan
  3. RATIO didarabkan dengan 1023 untuk mendapatkan nilai pembanding
  4. secara pilihan, voltan keluaran yang diramalkan juga dapat dikira sebagai RATIO * Vin

Set pembanding hanya bergantung pada nilai perintang yang digunakan untuk pembahagi voltan dan merupakan tandatangan unik untuk konfigurasi. Kerana voltan keluaran pembahagi akan turun naik dari run ke run (dan read to read), unik dalam konteks ini bermaksud bahawa walaupun dua set pengecam mungkin tidak sama persis, mereka cukup dekat sehingga perbezaan komparator komponen berada dalam pra- kecil selang yang ditentukan. Parameter ukuran selang mesti dipilih cukup besar untuk memperhitungkan turun naik yang diharapkan tetapi cukup kecil sehingga tetapan suis yang berlainan tidak bertindih. Biasanya 7 berfungsi dengan baik untuk selang setengah lebar.

Satu set pembanding untuk konfigurasi tertentu dapat diperoleh dengan beberapa kaedah - jalankan program demo dan catat nilai untuk setiap tetapan; gunakan hamparan di bahagian seterusnya untuk mengira; salin set yang ada. Seperti yang dinyatakan di atas, semua set kemungkinan akan sedikit berbeza tetapi harus berfungsi. Saya cadangkan untuk menggunakan set pengecam pengarang kaedah untuk penyediaan pelbagai suis dan hamparan dari bahagian seterusnya jika ada perintang yang diubah dengan ketara atau lebih banyak perintang ditambahkan.

Program demo berikut menggambarkan penggunaan pembanding untuk mengenal pasti tetapan suis dip semasa. Dalam setiap kitaran program, analogRead dilakukan untuk mendapatkan pengenal pasti untuk konfigurasi semasa. Pengecam ini kemudian dibandingkan di seluruh senarai pembanding sehingga perlawanan dijumpai atau senarai habis. Sekiranya perlawanan didapati mesej output dikeluarkan untuk pengesahan; sekiranya tidak dijumpai amaran dikeluarkan. Kelewatan 3 saat dimasukkan ke dalam gelung sehingga tetingkap output bersiri tidak dibanjiri dengan pesan dan memberi sedikit masa untuk menetapkan semula konfigurasi suis dip.

//-------------------------------------------------------------------------------------

// Demo program untuk membaca output pembahagi voltan dan menggunakannya untuk mengenal pasti // konfigurasi suis dip semasa dengan melihat nilai output dalam array // nilai perbandingan untuk setiap tetapan yang mungkin. Nilai-nilai dalam tatasusunan carian boleh // sama ada diperoleh dari jalan sebelumnya untuk konfigurasi atau melalui pengiraan // berdasarkan persamaan yang mendasari. // ------------------------------------------------ -------------------------------------- pembanding int [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Tentukan pemboleh ubah pemprosesan int dipPin = A0; // pin analog untuk input pembahagi voltan int dipIn = 0; // menahan output voltan pembahagi yang diterjemahkan oleh analogRead int count = 0; // gelung kaunter int epsilon = 7; // selang perbandingan separuh lebar bool dipFound = false; // benar jika output pembahagi voltan semasa dijumpai dalam susunan jadual kosong () {pinMode (dipPin, INPUT); // konfigurasikan pin pembahagi voltan sebagai Serial.begin INPUT (9600); // aktifkan komunikasi bersiri} gelung kosong () {kelewatan (3000); // jauhkan output daripada menatal terlalu cepat // Memulakan jumlah parameter carian = 0; dipFound = palsu; // Baca dan dokumentasikan voltan keluaran semasa dipIn = analogRead (dipPin); Serial.print ("output pembahagi"); Serial.print (dipIn); // Cari senarai perbandingan untuk nilai semasa sementara ((kiraan <16) && (! DipFound)) {if (abs (dipIn - pembanding [kiraan]) <= epsilon) {// mendapati ia dipFound = true; Serial.print ("dijumpai semasa kemasukan"); Cetakan bersiri (kiraan); Serial.println ("value" + String (pembanding [kiraan])); rehat; } hitung ++; } jika (! dipFound) {// nilai tidak ada dalam jadual; tidak seharusnya berlaku Serial.println ("OOPS! Tidak dijumpai; lebih baik memanggil Ghost Busters"); }}

Langkah 3: Hamparan Perbandingan

Imej
Imej

Pengiraan untuk 16 nilai pembanding diberikan dalam hamparan yang ditunjukkan di atas. Fail excel yang disertakan boleh dimuat turun di bahagian bawah bahagian ini.

Lajur spreadsheet A-D mencatatkan nilai perintang suis dip dan 16 kemungkinan tetapan suis. Harap maklum bahawa suis DIP perkakasan yang ditunjukkan dalam rajah reka bentuk fritzing sebenarnya bernombor dari kiri ke kanan dan bukannya penomboran kanan ke kiri yang ditunjukkan dalam hamparan. Saya mendapati ini agak membingungkan tetapi alternatifnya tidak meletakkan konfigurasi "1" (0, 0, 0, 1) pada yang pertama dalam senarai. Lajur E menggunakan formula 2 dari bahagian sebelumnya untuk mengira rintangan setara Voltage Divider1 untuk tetapan. Lajur F menggunakan hasil ini untuk mengira RATIO rintangan yang berkaitan, dan, akhirnya, Lajur G mengalikan RATIO dengan nilai analogRead max (1023) untuk mendapatkan nilai pembanding yang diramalkan. 2 lajur terakhir mengandungi nilai sebenar dari run program demo bersama dengan perbezaan antara nilai yang diramalkan dan yang sebenarnya.

Bahagian sebelumnya menyebutkan tiga kaedah untuk mendapatkan satu set nilai pembanding termasuk peluasan hamparan ini jika nilai perintang diubah dengan ketara atau lebih banyak suis ditambahkan. Nampaknya perbezaan kecil dalam nilai perintang tidak mempengaruhi keputusan akhir secara signifikan (yang baik kerana spesifikasi perintang memberi toleransi, katakanlah 5%, dan perintang jarang sama dengan nilai yang dinyatakan sebenarnya).

Langkah 4: Mainkan Tune

Main Tune
Main Tune

Untuk menggambarkan bagaimana teknik multi-suis dapat digunakan dalam aplikasi, program demo perbandingan dari bagian "Penjelasan Metode" diubah untuk melaksanakan pemprosesan pemilihan lagu untuk program kotak musik. Konfigurasi aplikasi yang dikemas kini ditunjukkan di atas. Satu-satunya tambahan pada perkakasan adalah buzzer piezo pasif untuk memainkan lagu yang dipilih. Perubahan asas pada perisian adalah penambahan rutin untuk memainkan lagu, setelah dikenal pasti, menggunakan buzzer dan rutin nada Arduino.

Coretan lagu yang tersedia terkandung dalam fail header, Tunes.h, bersama dengan definisi struktur sokongan yang diperlukan. Setiap lagu didefinisikan sebagai susunan struktur nota yang mengandungi frekuensi dan jangka masa nota. Kekerapan nota terkandung dalam fail header yang berasingan, Pitches.h. Fail program dan tajuk tersedia untuk dimuat turun di akhir bahagian ini. Ketiga-tiga fail harus diletakkan di direktori yang sama.

Pemilihan dan pengenalan dilakukan seperti berikut:

  1. "Pengguna" menetapkan suis dip dalam konfigurasi yang berkaitan dengan nada yang diinginkan
  2. setiap gelung program mengitar pengenal untuk tetapan suis dip semasa diperoleh melalui analogRead
  3. Pengecam konfigurasi langkah 2 dibandingkan dengan setiap pembanding dalam senarai lagu yang tersedia
  4. Sekiranya perlawanan dijumpai, rutin playTune dipanggil dengan maklumat yang diperlukan untuk mengakses senarai nota lagu

    Dengan menggunakan fungsi nada Arduino, setiap nota dimainkan melalui bel

  5. Sekiranya tiada perlawanan, tindakan tidak akan diambil
  6. ulang 1-5

Tetapan suis DIP untuk nada yang tersedia ditunjukkan dalam jadual di bawah di mana 1 bermaksud suis dihidupkan, 0 matikan. Ingat bahawa cara suis dip adalah berorientasikan tempat beralih 1 di kedudukan paling kiri (yang berkaitan dengan perintang 80K).

NAMA Tukar 1 Tukar 2 Tukar 3 Tukar 4
Budak Danny 1 0 0 0
Beruang kecil 0 1 0 0
Singa Tidur Malam Ini 1 1 0 0
Tidak ada yang Mengetahui Masalahnya 0 0 1 0
Rahmat yang luar biasa 0 0 0 1
Ruang kosong 1 0 0 1
Bukit MockingBird 1 0 1 1

Kualiti suara dari bel piezo pastinya tidak hebat tetapi paling tidak dapat dikenali. Sebenarnya jika nada diukur, ia sangat hampir dengan nota frekuensi tepat. Salah satu teknik menarik yang digunakan dalam program ini adalah untuk menyimpan data tune di bahagian memori flash / program dan bukannya bahagian memori data lalai dengan menggunakan arahan PROGMEM. Bahagian data menyimpan pemboleh ubah pemprosesan program dan jauh lebih kecil, sekitar 512 bait untuk beberapa mikrokontroler ATtiny.

Disyorkan: