Cuprins:
- Pasul 1: Hardware necesar
- Pasul 2: Explicație a metodei cu comutare multiplă
- Pasul 3: Foaie de calcul comparator
- Pasul 4: Joacă un Tune
Video: Selector de reglaj DIP folosind 1 pin: 4 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
Cu ceva timp în urmă, am lucrat la un proiect de „cutie muzicală” care trebuia să aleagă între 10 fragmente de melodii diferite. O alegere naturală pentru alegerea unei melodii specifice a fost un comutator dip cu 4 pini, deoarece 4 comutatoare oferă 24= 16 setări diferite. Cu toate acestea, implementarea forței brute pentru această abordare necesită 4 pini de dispozitiv, unul pentru fiecare comutator. Din moment ce plănuiam să folosesc ATtiny85 pentru dezvoltare, pierderea a 4 pini a fost cam prea mare. Din fericire, am intrat într-un articol care descrie o metodă ingenioasă de utilizare a unui pin analogic pentru a gestiona mai multe intrări de comutare.
Tehnica multi-comutatorului cu 1 intrare folosește un circuit divizor de tensiune pentru a oferi o valoare întreagă unică pentru fiecare dintre cele 16 combinații posibile de setare a comutatorului. Acest set de 16 identificatori întregi este apoi folosit în programul aplicației pentru a asocia o acțiune cu o setare.
Acest instructable folosește metoda multi-switch pentru a implementa selecția melodiei pentru aplicația muzicală. Melodia selectată este apoi redată printr-un buzzer piezo folosind funcția de ton Arduino.
Pasul 1: Hardware necesar
Utilizarea UNO ca platformă de implementare minimizează numărul de componente hardware necesare. Implementarea metodei de intrare cu mai multe comutatoare necesită doar un comutator dip cu 4 pini, cele 5 rezistențe utilizate pentru divizorul de tensiune și un cablu de conectare pentru conexiuni. La configurația se adaugă un buzzer piezoelector pentru implementarea selectorului de melodii pentru caseta de muzică. Opțional, în funcție de tipul de comutator dip utilizat, este util să utilizați o priză 2x4 cu 8 pini pentru a conecta comutatorul dip la placa de prindere, deoarece pinii standard ai comutatorului dip par să fie lipiți la o placă de perfecționare, nu conectându-se direct la o placă de prindere. Priza stabilizează conexiunile întrerupătorului și împiedică ridicarea cu ușurință a comutatorului atunci când setați comutatoarele.
Nume | Sursa posibilă | Cât de folosit |
---|---|---|
Comutator dip cu 4 pini | Selectarea tonului | |
Priză 2x4 pini (opțional) | Amazon | Posturile de pe majoritatea comutatoarelor dip nu țin comutatorul foarte bine într-o placă de calcul. O priză ajută la consolidarea conexiunii. O alternativă este de a găsi un comutator dip care este cu adevărat conceput pentru utilizarea panourilor cu pini IC obișnuiți. |
rezistențe:
|
Implementați divizorul de tensiune | |
buzzer piezoactiv pasiv | Amazon | Redați melodia în funcție de aplicație prin funcția de ton Arduino |
Pasul 2: Explicație a metodei cu comutare multiplă
Această secțiune discută conceptele subiacente pentru metoda multi-switch și dezvoltă ecuațiile necesare pentru calcularea independentă a identificatorilor unici pentru fiecare dintre cele 16 configurații posibile de setare a switch-ului dip. Acești identificatori pot fi utilizați apoi într-un program de aplicație pentru a asocia o configurație a comutatorului cu o acțiune. De exemplu, s-ar putea să doriți setarea - comutați 1, opriți 2, opriți 3, opriți 4 (1, 0, 0, 0) - pentru a juca Amazing Grace și (0, 1, 0, 0) pentru a juca Leul doarme în seara asta. Pentru concizie și concizie, identificatorii de configurație sunt denumiți comparatori în restul documentului.
Conceptul fundamental pentru metoda multi-switch este circuitul divizor de tensiune care constă din 2 rezistențe în serie conectate la o tensiune de intrare. Conductorul de tensiune de ieșire este conectat între rezistențe, R1 și R2, așa cum se arată mai sus. Tensiunea de ieșire a separatorului este calculată ca tensiune de intrare înmulțită cu raportul rezistenței R2 la suma lui R1 și R2 (ecuația 1). Acest raport este întotdeauna mai mic de 1, astfel încât tensiunea de ieșire este întotdeauna mai mică decât tensiunea de intrare.
După cum se indică în schema de proiectare de mai sus, comutatorul multiplu este configurat ca un divizor de tensiune cu R2 fix și R1 egală cu rezistența compozită / echivalentă pentru cele 4 rezistențe de comutator dip. Valoarea lui R1 depinde de ce comutatoare dip sunt activate și, prin urmare, contribuie la rezistența compozitului. Deoarece rezistențele de comutator dip sunt în paralel, ecuația de calcul a rezistenței echivalente este menționată în termeni de reciprocități ale rezistențelor componente. Pentru configurația noastră și pentru cazul în care toate comutatoarele sunt activate, ecuația devine
1 / R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000
dând R1 = 5333,33 volți. Pentru a ține cont de faptul că majoritatea setărilor au cel puțin unul dintre comutatoare dezactivate, starea comutatorului este utilizată ca multiplicator:
1 / R1 = s1* 1/80000 + s2* 1/40000 + s3* 1/20000 + s4*1/10000 (2)
unde multiplicatorul de stat, seu, este egal cu 1 dacă comutatorul este pornit și egal cu 0 dacă comutatorul este oprit. R1 acum poate fi folosit pentru a calcula raportul de rezistență necesar în ecuația 1. Folosind cazul în care toate comutatoarele sunt pornite ca exemplu din nou
RAPORT = R2/ (R1+ R2) = 10000/(5333.33+10000) =.6522
Ultimul pas în calcularea valorii comparatoare prezise este multiplicarea RATIO cu 1023 pentru a emula efectul funcției analogRead. Identificatorul cazului în care toate comutatoarele sunt activate este atunci
comparator15 = 1023*.6522 = 667
Toate ecuațiile sunt acum la locul lor pentru calcularea identificatorilor pentru cele 16 setări posibile ale comutatorului. A rezuma:
- R1 se calculează folosind ecuația 2
- R1 și R2 sunt utilizate pentru a calcula raportul de rezistență asociat
- RAPORTUL este înmulțit cu 1023 pentru a obține valoarea de comparare
- opțional, tensiunea de ieșire prezisă poate fi calculată și ca RATIO * Vin
Setul de comparatoare depinde doar de valorile rezistenței utilizate pentru divizorul de tensiune și reprezintă o semnătură unică pentru configurație. Deoarece tensiunile de ieșire ale divizorului vor fluctua de la rulare la rulare (și citite pentru citire), unic în acest context înseamnă că, deși două seturi de identificatori pot să nu fie exact aceiași, acestea sunt suficient de apropiate încât diferențele comparatorului de componente se încadrează într-o mică interval specificat. Parametrul dimensiunii intervalului trebuie să fie ales suficient de mare pentru a ține cont de fluctuațiile așteptate, dar suficient de mic pentru a nu se suprapune diferite setări ale comutatorului. De obicei, 7 funcționează bine pentru intervalul de jumătate de lățime.
Un set de comparatoare pentru o anumită configurație poate fi obținut prin mai multe metode - rulați programul demonstrativ și înregistrați valorile pentru fiecare setare; folosiți foaia de calcul din secțiunea următoare pentru a calcula; copiați un set existent. Așa cum s-a menționat mai sus, toate seturile vor fi cel mai probabil ușor diferite, dar ar trebui să funcționeze. Vă sugerez să folosiți setul de identificatori al autorului metodei pentru configurarea multi-switch și foaia de calcul din secțiunea următoare, dacă oricare dintre rezistențe este modificat semnificativ sau se adaugă mai multe rezistențe.
Următorul program demonstrativ ilustrează utilizarea comparatoarelor pentru a identifica setarea curentă a comutatorului dip. În fiecare ciclu de program se efectuează o citire analogică pentru a obține un identificator pentru configurația curentă. Acest identificator este apoi comparat în lista comparatoare până când se găsește o potrivire sau lista este epuizată. Dacă se găsește o potrivire, se emite un mesaj de ieșire pentru verificare; dacă nu este găsit, se emite un avertisment. O întârziere de 3 secunde este introdusă în buclă, astfel încât fereastra de ieșire serială să nu fie copleșită de mesaje și să acorde ceva timp pentru a reseta configurația dip switch-ului.
//-------------------------------------------------------------------------------------
// Demo program pentru a citi ieșirea divizorului de tensiune și utilizați-l pentru a identifica // configurația curentă a comutatorului dip prin căutarea valorii de ieșire în sus într-o serie de // valori de comparație pentru fiecare setare posibilă. Valorile din matricea de căutare pot // fie să fie obținute dintr-o rulare anterioară pentru configurație, fie prin calcul // pe baza ecuațiilor subiacente. // ------------------------------------------------ -------------------------------------- int comparator [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Definiți variabilele de procesare int dipPin = A0; // pin analogic pentru intrarea divizorului de tensiune int dipIn = 0; // deține ieșirea tensiunii divizorului tradusă prin analogRead int count = 0; // loop counter int epsilon = 7; // interval de comparație jumătate de lățime bool dipFound = false; // adevărat dacă ieșirea divizorului de tensiune de curent se găsește în tabelul de căutare void setup () {pinMode (dipPin, INPUT); // configurați pinul divizor de tensiune ca INPUT Serial.begin (9600); // active serial communication} void loop () {delay (3000); // păstrați ieșirea de la derulare prea rapid // Inițializați parametrii de căutare număr = 0; dipFound = false; // Citiți și documentați tensiunea de ieșire curentă dipIn = analogRead (dipPin); Serial.print ("ieșire divizor"); Serial.print (dipIn); // Căutați lista comparatoare pentru valoarea curentă în timp ce ((număr <16) && (! DipFound)) {if (abs (dipIn - comparator [număr]) <= epsilon) {// a găsit-o dipFound = adevărat; Serial.print („găsit la intrare”); Serial.print (număr); Serial.println ("valoare" + Șir (comparator [număr])); pauză; } conta ++; } if (! dipFound) {// valoarea nu este în tabel; nu ar trebui să se întâmple Serial.println ("OOPS! Nu a fost găsit; mai bine sunați Ghost Busters"); }}
Pasul 3: Foaie de calcul comparator
Calculele pentru cele 16 valori de comparare sunt date în foaia de calcul prezentată mai sus. Fișierul Excel însoțitor este disponibil pentru descărcare în partea de jos a acestei secțiuni.
Coloanele A-D ale foii de calcul înregistrează valorile rezistenței switch-ului dip și cele 16 setări posibile ale switch-ului. Vă rugăm să rețineți că comutatorul DIP hardware afișat în diagrama de proiectare fritzing este de fapt numerotat de la stânga la dreapta în loc de numerotarea de la dreapta la stânga afișat în foaia de calcul. Mi s-a părut oarecum confuz, dar alternativa nu pune configurația „1” (0, 0, 0, 1) la prima listă. Coloana E folosește formula 2 din secțiunea anterioară pentru a calcula rezistența echivalentă R a divizorului de tensiune1 pentru setare. Coloana F utilizează acest rezultat pentru a calcula raportul de rezistență asociat și, în cele din urmă, coloana G înmulțește RATIO cu valoarea analogRead max (1023) pentru a obține valoarea de comparare prezisă. Ultimele 2 coloane conțin valorile reale dintr-o rulare a programului demonstrativ, împreună cu diferențele dintre valorile prezise și cele reale.
Secțiunea anterioară menționează trei metode pentru a obține un set de valori de comparare, inclusiv extinderea acestei foi de calcul, dacă valorile rezistenței sunt modificate semnificativ sau se adaugă mai multe comutatoare. Se pare că diferențele mici în valorile rezistenței nu afectează în mod semnificativ rezultatele finale (ceea ce este bun, deoarece specificațiile rezistenței oferă o toleranță, să zicem 5%, iar rezistența este rar egală cu valoarea sa declarată reală).
Pasul 4: Joacă un Tune
Pentru a ilustra modul în care tehnica multi-switch ar putea fi utilizată într-o aplicație, programul demonstrativ de comparație din secțiunea „Explicație metodă” este modificat pentru a implementa procesarea selecției melodiei pentru programul de muzică. Configurația actualizată a aplicației este prezentată mai sus. Singura adăugare la hardware este un buzzer piezoactiv pasiv pentru a reda melodia selectată. Schimbarea de bază a software-ului este adăugarea unei rutine pentru a reda o melodie, odată identificată, folosind buzzer-ul și rutina tonurilor Arduino.
Fragmentele de melodie disponibile sunt conținute într-un fișier de antet, Tunes.h, împreună cu definirea structurilor de suport necesare. Fiecare melodie este definită ca o serie de structuri legate de notă care conțin frecvența și durata notei. Frecvențele notelor sunt conținute într-un fișier de antet separat, Pitches.h. Fișierele cu antet și program sunt disponibile pentru descărcare la sfârșitul acestei secțiuni. Toate cele trei fișiere ar trebui plasate în același director.
Selecția și identificarea se desfășoară după cum urmează:
- „Utilizatorul” setează comutatoarele dip în configurația asociată cu tonul dorit
- la fiecare ciclu de buclă de program, identificatorul pentru setarea curentă a comutatorului dip este obținut prin analogRead
- Identificatorul de configurare al pasului 2 este comparat cu fiecare dintre comparatoarele din lista de melodii disponibile
-
Dacă se găsește o potrivire, rutina playTune este apelată cu informațiile necesare pentru a accesa lista de note de acord
Folosind funcția de ton Arduino, fiecare notă este redată prin buzzer
- Dacă nu se găsește nicio potrivire, nu se iau măsuri
- repetați 1-5
Setările comutatorului DIP pentru melodiile disponibile sunt afișate în tabelul de mai jos, unde 1 înseamnă că comutatorul este pornit, 0 oprit. Amintiți-vă că modul în care este orientat comutatorul dip pune comutatorul 1 în poziția cea mai la stânga (cea asociată cu rezistorul 80K).
NUME | Comutatorul 1 | Comutatorul 2 | Comutatorul 3 | Comutatorul 4 |
Danny Boy | 1 | 0 | 0 | 0 |
Ursulețul | 0 | 1 | 0 | 0 |
Leul doarme în seara asta | 1 | 1 | 0 | 0 |
Nimeni nu cunoaște problemele | 0 | 0 | 1 | 0 |
Amazing | 0 | 0 | 0 | 1 |
Spațiu liber | 1 | 0 | 0 | 1 |
MockingBird Hill | 1 | 0 | 1 | 1 |
Calitatea sunetului de la un buzzer piezo cu siguranță nu este excelentă, dar este cel puțin recunoscută. De fapt, dacă tonurile sunt măsurate, acestea sunt foarte apropiate de frecvența exactă a notelor. O tehnică interesantă utilizată în program este stocarea datelor de reglare în secțiunea de memorie flash / program în loc de secțiunea de memorie de date implicită utilizând directiva PROGMEM. Secțiunea de date conține variabilele de procesare a programului și este mult mai mică, în jur de 512 octeți pentru unele dintre microcontrolerele ATtiny.
Recomandat:
DIY -- Cum se face un robot Spider care poate fi controlat folosind un smartphone folosind Arduino Uno: 6 pași
DIY || Cum să faci un robot Spider care poate fi controlat folosind un smartphone Utilizând Arduino Uno: În timp ce faci un robot Spider, poți învăța atât de multe lucruri despre robotică. În acest videoclip vă vom arăta cum să realizați un robot Spider, pe care să îl putem utiliza cu smartphone-ul nostru (Androi
Stație de Looper cu efect de chitară True Bypass programabilă folosind comutatoare Dip: 11 pași
Stație de Looper cu efect de chitară True Bypass programabilă folosind comutatoare Dip: Sunt un pasionat de chitară și un jucător hobbyist. Majoritatea proiectelor mele se întâmplă în jurul accesoriilor de chitară. Îmi construiesc propriile amplificatoare și câteva pedale de efect. În trecut am jucat într-o bandă mică și m-am convins că am nevoie doar de un amplificator cu re
Programarea MSP430 DIP folosind un Ez430: 4 pași
Programarea MSP430 DIP Utilizarea unui Ez430: Când am găsit programatorul USB T4 ez430, mi s-a părut a fi una dintre metodele mai ușoare de a porni și a rula cu un MCU. Cum aș putea să mă înșel, are ez în nume! Se pare că este de fapt ușor … mai ales.Ez430 este minunat dacă vrei
Selector audio Mint Box: Comutator audio de 3,5 mm: 6 pași
Selector audio Mint Box: Comutator audio de 3,5 mm: Problemă: De multe ori pe desktopul meu trebuie să folosesc căști pentru jocuri sau ascult muzică în timp ce alți oameni sunt în cameră și apoi trebuie să trec la difuzoare dacă vreau să arăt o amuzantă video sau efectuați un apel pe internet către o rudă îndepărtată. Th
Cutie selector AV: 4 pași (cu imagini)
AV Selector Box: Am un DVD player, un videoclip VHS și o cameră video mini-DV. Înregistrez mini-DV pe computerul meu, și înregistrez VHS pe digital într-un mod similar. Uneori duc audio-video de pe DVD pe PC. Obișnuiam să alimentez video compozit pe graficele computerului meu