Satura rādītājs:
- 1. darbība. Nepieciešamā aparatūra
- 2. darbība. Daudzslēdžu metodes skaidrojums
- 3. darbība. Salīdzinātāja izklājlapa
- 4. solis: atskaņojiet melodiju
Video: DIP melodijas selektors, izmantojot 1 tapu: 4 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:56
Kādu laiku atpakaļ es strādāju pie "mūzikas kastes" projekta, kuram bija jāizvēlas starp 10 dažādiem melodijas fragmentiem. Dabiska izvēle konkrētas melodijas izvēlei bija 4 kontaktu iegremdēšanas slēdzis, jo 4 slēdži nodrošina 24= 16 dažādi iestatījumi. Tomēr brutāla spēka ieviešanai šai pieejai ir nepieciešami 4 ierīces tapas, pa vienam katram slēdzim. Tā kā es plānoju ATtiny85 izmantot attīstībai, 4 tapas zaudēšana bija mazliet par daudz. Par laimi, es satiku rakstu, kurā aprakstīta ģeniāla metode, kā izmantot 1 analogo tapu, lai apstrādātu vairākas slēdžu ievades.
Daudzslēdžu; 1 ievades metode izmanto sprieguma dalītāja ķēdi, lai nodrošinātu unikālu veselu skaitļu vērtību katrai no 16 iespējamām slēdžu iestatījumu kombinācijām. Šo 16 veselu skaitļu identifikatoru kopu pēc tam izmanto lietojumprogrammā, lai saistītu darbību ar iestatījumu.
Šī pamācība izmanto vairāku slēdžu metodi, lai ieviestu melodijas izvēles lietojumprogrammu. Pēc tam izvēlētā melodija tiek atskaņota caur pjezo skaņas signālu, izmantojot Arduino toņa funkciju.
1. darbība. Nepieciešamā aparatūra
UNO izmantošana kā ieviešanas platforma samazina nepieciešamo aparatūras komponentu skaitu. Daudzslēdžu ievades metodes ieviešanai nepieciešams tikai 4 kontaktu iegremdēšanas slēdzis, 5 rezistori, ko izmanto sprieguma dalītājam, un savienojuma vads. Mūzikas kastes melodijas atlasītāja ieviešanai konfigurācijai ir pievienots pjezo skaņas signāls. Pēc izvēles, atkarībā no izmantotā iegremdēšanas slēdža veida, ir noderīgi izmantot 2x4 8 kontaktu kontaktligzdu, lai savienotu mērīšanas slēdzi ar maizes dēli, jo šķiet, ka standarta iegremdēšanas tapas ir paredzētas lodēšanai pie perforatora, kas nav pievienojams tieši maizes dēlim. Kontaktligzda stabilizē iegremdēšanas slēdža savienojumus un neļauj slēdzim viegli pacelties, pārslēdzot slēdžus.
Vārds | Iespējamais avots | Kā lietot |
---|---|---|
4 kontaktu iegremdēšanas slēdzis | Noskaņojiet atlasi | |
2x4 kontaktu ligzda (pēc izvēles) | Amazon | Stabi uz lielākās daļas slēdžu ne pārāk labi tur slēdzi maizes dēļā. Kontaktligzda palīdz padarīt savienojumu stabilāku. Alternatīva ir atrast iegremdēšanas slēdzi, kas patiešām ir paredzēts maizes dēļa lietošanai ar parastajām IC tapām. |
rezistori:
|
Ieviest sprieguma dalītāju | |
pasīvs pjezo skaņas signāls | Amazon | Atskaņojiet melodiju lietojumprogrammas vadībā, izmantojot Arduino toņu funkciju |
2. darbība. Daudzslēdžu metodes skaidrojums
Šajā sadaļā aplūkoti vairāku slēdžu metodes pamatjēdzieni un izstrādāti vienādojumi, kas nepieciešami unikālo identifikatoru atsevišķam aprēķinam katrai no 16 iespējamām dip slēdža iestatījumu konfigurācijām. Pēc tam šos identifikatorus var izmantot lietojumprogrammā, lai saistītu slēdža konfigurāciju ar darbību. Piemēram, iespējams, vēlēsities iestatījumu - ieslēgt 1, izslēgt 2, izslēgt 3, izslēgt 4 (1, 0, 0, 0) - atskaņot Amazing Grace un (0, 1, 0, 0) atskaņot. Lauva šonakt guļ. Īsuma un kodolīguma labad konfigurācijas identifikatori dokumenta pārējā daļā tiek dēvēti par salīdzinātājiem.
Daudzslēdžu metodes pamatkoncepcija ir sprieguma dalītāja ķēde, kas sastāv no 2 virknes rezistoriem, kas savienoti ar ieejas spriegumu. Izejas sprieguma vads ir savienots starp rezistoriem, R1 un R.2, kā parādīts iepriekš. Sadalītāja izejas spriegums tiek aprēķināts kā ieejas spriegums, kas reizināts ar rezistora R attiecību2 līdz R summai1 un R.2 (1. vienādojums). Šī attiecība vienmēr ir mazāka par 1, tāpēc izejas spriegums vienmēr ir mazāks par ieejas spriegumu.
Kā norādīts konstrukcijas diagrammā virs daudzslēdžu ir konfigurēts sprieguma dalītājs ar R2 fiksēts un R1 vienāds ar kompozītmateriāla/ekvivalenta pretestību 4 dip slēdža rezistoriem. R vērtība1 ir atkarīgs no tā, kuri dip slēdži ir ieslēgti, un tādējādi veicina saliktās pretestības palielināšanos. Tā kā dip slēdža rezistori atrodas paralēli, ekvivalenta pretestības aprēķina vienādojums ir norādīts komponentu rezistoru atgriezeniskajā izteiksmē. Mūsu konfigurācijai un gadījumam, kad visi slēdži ir ieslēgti, vienādojums kļūst
1/R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000
dodot R.1 = 5333,33 volti. Lai ņemtu vērā faktu, ka lielākajā daļā iestatījumu vismaz viens no slēdžiem ir izslēgts, slēdža stāvoklis tiek izmantots kā reizinātājs:
1/R1 = s1*1/80000 + s2*1/4 000 000 + s3*1/20000 + s4*1/10000 (2)
kur valsts reizinātājs, si, ir vienāds ar 1, ja slēdzis ir ieslēgts, un vienāds ar 0, ja slēdzis ir izslēgts. R1 tagad var izmantot, lai aprēķinātu pretestības koeficientu, kas vajadzīgs 1. vienādojumā. Atkal izmantojot gadījumu, kad visi slēdži ir ieslēgti
RATIO = R2/(R.1+R.2) = 10000/(5333.33+10000) =.6522
Pēdējais solis aprēķinātās salīdzināmās vērtības aprēķinā ir koeficienta RATIO reizināšana ar 1023, lai atdarinātu analogRead funkcijas efektu. Tad tiek identificēts gadījums, kad visi slēdži ir ieslēgti
salīdzinātājs15 = 1023*.6522 = 667
Visi vienādojumi tagad ir pieejami, lai aprēķinātu 16 iespējamo slēdža iestatījumu identifikatorus. Apkopot:
- R1 aprēķina, izmantojot 2. vienādojumu
- R1 un R.2 tiek izmantoti, lai aprēķinātu saistīto pretestību RATIO
- RATIO tiek reizināts ar 1023, lai iegūtu salīdzināmo vērtību
- pēc izvēles paredzamo izejas spriegumu var aprēķināt arī kā RATIO*Vin
Salīdzinātāju komplekts ir atkarīgs tikai no sprieguma dalītājam izmantotajām rezistoru vērtībām un ir unikāls konfigurācijas paraksts. Tā kā dalītāja izejas spriegums svārstīsies no palaišanas līdz palaišanai (un nolasīšanas līdz lasīšanai), unikāls šajā kontekstā nozīmē, ka, lai gan divas identifikatoru kopas var nebūt pilnīgi vienādas, tās ir pietiekami tuvu, lai komponentu salīdzinātāju atšķirības nonāktu nelielā iepriekšējā noteiktais intervāls. Intervāla lieluma parametrs jāizvēlas pietiekami liels, lai ņemtu vērā paredzamās svārstības, bet pietiekami mazs, lai dažādi slēdža iestatījumi nepārklātu. Parasti 7 labi darbojas intervāla pusplatumā.
Salīdzinātāju komplektu noteiktai konfigurācijai var iegūt ar vairākām metodēm - palaidiet demonstrācijas programmu un ierakstiet katra iestatījuma vērtības; aprēķināšanai izmantojiet izklājlapu nākamajā sadaļā; kopēt esošu kopu. Kā minēts iepriekš, visi komplekti, visticamāk, nedaudz atšķirsies, bet tiem vajadzētu darboties. Es iesaku izmantot metodes autora identifikatoru kopu daudzslēdžu iestatīšanai un izklājlapu no nākamās sadaļas, ja kāds no rezistoriem ir būtiski mainīts vai pievienoti vairāki rezistori.
Šī demonstrācijas programma parāda salīdzinātāju izmantošanu, lai identificētu pašreizējo dip slēdža iestatījumu. Katrā programmu ciklā tiek veikta analogRead, lai iegūtu pašreizējās konfigurācijas identifikatoru. Pēc tam šo identifikatoru salīdzina salīdzināšanas sarakstā, līdz tiek atrasta atbilstība vai saraksts ir izsmelts. Ja tiek atrasta atbilstība, pārbaudei tiek izsniegts izvades ziņojums; ja netiek atrasts, tiek izteikts brīdinājums. Cilpā tiek ievietota 3 sekunžu aizkave, lai sērijveida izvades logs netiktu pārpildīts ar ziņojumiem un dotu kādu laiku, lai atiestatītu mērīšanas slēdža konfigurāciju.
//-------------------------------------------------------------------------------------
// Demo programma, lai nolasītu sprieguma dalītāja izeju un izmantotu to, lai identificētu // pašreizējās dip slēdža konfigurāciju, meklējot izejas vērtību // salīdzinājuma vērtību masīvā katram iespējamajam iestatījumam. Uzmeklēšanas masīva vērtības var // iegūt vai nu no iepriekšējās konfigurācijas palaišanas, vai arī, aprēķinot //, pamatojoties uz pamatā esošajiem vienādojumiem. // ------------------------------------------------ -------------------------------------- int salīdzinātājs [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Definēt apstrādes mainīgos int dipPin = A0; // analogā tapa sprieguma dalītāja ieejai int dipIn = 0; // satur dalītāja sprieguma izeju, ko tulkojis analogRead int skaits = 0; // cilpas skaitītājs int epsilon = 7; // salīdzināšanas intervāls pusplatuma bool dipFound = false; // true, ja pašreizējā sprieguma dalītāja izeja ir atrasta uzmeklēšanas tabulā void setup () {pinMode (dipPin, INPUT); // konfigurēt sprieguma dalītāja tapu kā INPUT Serial.begin (9600); // iespējot sērijas sakarus} void loop () {delay (3000); // paturēt izvadi no pārāk ātras ritināšanas // Inicializēt uzmeklēšanas parametrus count = 0; dipFound = nepatiess; // Nolasīt un dokumentēt strāvas izejas spriegumu dipIn = analogRead (dipPin); Serial.print ("dalītāja izvade"); Serial.print (dipIn); // Meklējiet salīdzinātāju sarakstu pašreizējai vērtībai, kamēr ((skaits <16) && (! DipFound)) {if (abs (dipIn - salīdzinājums [skaits]) <= epsilon) {// atrada to dipFound = true; Serial.print ("atrasts pie ieraksta"); Sērijas nospiedums (skaits); Serial.println ("vērtība" + virkne (salīdzinājums [skaits])); pārtraukums; } skaits ++; } if (! dipFound) {// vērtība nav tabulā; nevajadzētu notikt Serial.println ("OOPS! Nav atrasts; labāk zvanīt Ghost Busters"); }}
3. darbība. Salīdzinātāja izklājlapa
Aprēķini 16 salīdzinājuma vērtībām ir sniegti iepriekš redzamajā izklājlapā. Pievienotais Excel fails ir pieejams lejupielādei šīs sadaļas apakšā.
Izklājlapu kolonnas A-D reģistrē slēdža pretestības vērtības un 16 iespējamos slēdža iestatījumus. Lūdzu, ņemiet vērā, ka aparatūras DIP slēdzis, kas parādīts fritzes dizaina shēmā, faktiski ir numurēts no kreisās uz labo, nevis no labās uz kreiso numuru, kas parādīta izklājlapā. Man tas šķita nedaudz mulsinoši, taču alternatīva "1" konfigurāciju (0, 0, 0, 1) nenovieto saraksta pirmajā vietā. E slejā tiek izmantota iepriekšējās sadaļas 2. formula, lai aprēķinātu sprieguma dalītāja ekvivalento pretestību R1 iestatījumam. F kolonna izmanto šo rezultātu, lai aprēķinātu saistīto pretestības koeficientu, un, visbeidzot, G kolonna reizina koeficientu ar analogRead max vērtību (1023), lai iegūtu paredzēto salīdzinājuma vērtību. Pēdējās 2 slejas satur demo programmas darbības faktiskās vērtības, kā arī atšķirības starp paredzamajām un faktiskajām vērtībām.
Iepriekšējā sadaļā tika minētas trīs metodes, kā iegūt salīdzināmo vērtību kopu, ieskaitot šīs izklājlapas paplašinājumu, ja rezistoru vērtības ir būtiski mainītas vai tiek pievienoti vairāki slēdži. Šķiet, ka nelielas rezistoru vērtību atšķirības būtiski neietekmē gala rezultātus (kas ir labi, jo rezistoru specifikācijas sniedz pielaidi, teiksim, 5%, un rezistors reti ir vienāds ar tā faktisko noteikto vērtību).
4. solis: atskaņojiet melodiju
Lai ilustrētu, kā lietojumprogrammā var izmantot vairāku slēdžu paņēmienu, salīdzināšanas demonstrācijas programma no sadaļas "Metodes skaidrojums" ir modificēta, lai ieviestu mūzikas kastes programmas melodijas atlases apstrādi. Atjauninātā lietojumprogrammas konfigurācija ir parādīta iepriekš. Vienīgais aparatūras papildinājums ir pasīvs pjezo skaņas signāls, lai atskaņotu izvēlēto melodiju. Pamata izmaiņas programmatūrā ir rutīnas pievienošana melodijas atskaņošanai, kad tā ir identificēta, izmantojot skaņas signālu un Arduino toņu režīmu.
Pieejamie melodijas fragmenti ir iekļauti galvenes failā Tunes.h, kā arī nepieciešamo atbalsta struktūru definīcija. Katra melodija ir definēta kā ar notīm saistītu struktūru masīvs, kas satur notu biežumu un ilgumu. Piezīmju biežums ir iekļauts atsevišķā galvenes failā Pitches.h. Programmas un galvenes faili ir pieejami lejupielādei šīs sadaļas beigās. Visi trīs faili jāievieto vienā direktorijā.
Atlase un identifikācija notiek šādi:
- "Lietotājs" nosaka dip slēdžus konfigurācijā, kas saistīta ar vēlamo melodiju
- katrā programmas cikla ciklā, izmantojot analogRead, tiek iegūts pašreizējā dip slēdža iestatījuma identifikators
- Konfigurācijas identifikatora 2. darbība tiek salīdzināta ar katru salīdzinošo versiju pieejamajā melodiju sarakstā
-
Ja tiek atrasta atbilstība, tiek izsaukta rutīna playTune ar informāciju, kas nepieciešama, lai piekļūtu piezīmju sarakstam
Izmantojot Arduino toņu funkciju, katra notis tiek atskaņota, izmantojot skaņas signālu
- Ja neatbilstība netiek atrasta, netiek veiktas nekādas darbības
- atkārtojiet 1-5
Pieejamo melodiju DIP slēdža iestatījumi ir parādīti tabulā zemāk, kur 1 nozīmē, ka slēdzis ir ieslēgts, 0 - izslēgts. Atgādiniet, ka dip slēdža virziens novieto slēdzi 1 kreisajā pozīcijā (tas, kas saistīts ar 80K rezistoru).
NAME | Slēdzis 1 | Slēdzis 2 | Slēdzis 3 | Slēdzis 4 |
Denijs Zēns | 1 | 0 | 0 | 0 |
Mazais Lācis | 0 | 1 | 0 | 0 |
Lauva šonakt guļ | 1 | 1 | 0 | 0 |
Neviens nezina nepatikšanas | 0 | 0 | 1 | 0 |
Apbrīnojama žēlastība | 0 | 0 | 0 | 1 |
Tukša vieta | 1 | 0 | 0 | 1 |
MockingBird Hill | 1 | 0 | 1 | 1 |
Skaņas kvalitāte no pjezo skaņas signāla noteikti nav lieliska, taču tā ir vismaz atpazīstama. Faktiski, ja toņi tiek mērīti, tie ir ļoti tuvu precīzai piezīmju frekvencei. Programmā izmantotais interesants paņēmiens ir melodijas datu saglabāšana zibspuldzes/programmas atmiņas sadaļā, nevis noklusējuma datu atmiņas sadaļā, izmantojot PROGMEM direktīvu. Datu sadaļā ir programmas apstrādes mainīgie, un tas ir daudz mazāks, aptuveni 512 baiti dažiem ATtiny mikrokontrolleriem.
Ieteicams:
Kā lasīt vairākas analogās vērtības, izmantojot vienu analogo tapu: 6 soļi (ar attēliem)
Kā lasīt vairākas analogās vērtības, izmantojot vienu analogo tapu: šajā apmācībā es jums parādīšu, kā lasīt vairākas analogās vērtības, izmantojot tikai vienu analogās ievades tapu
Mans mēģinājums pie Arduino pogas zvana melodijas: 11 soļi
Mans mēģinājums pie Arduino pogas skaņas signāla melodijas: šajā apmācībā es jums parādīšu, kā poga var sākt melodiju. Mācību gada laikā daudzas mūsu dzīves vada zvani vai toņi, kas ļauj mums zināt, kad ir pienācis laiks doties prom vai doties ceļā. Lielākā daļa no mums reti apstājas un domā par to, kā šie atšķirīgie
0,96 collu I2C OLED ar SMD tapu: 3 soļi
0,96 collu I2C OLED ar SMD tapu: materiāls: 1 x OPEN-SMART UNO R3 tāfele 1 x 0,96 collu I2C OLED ar SMD tapu 1 x IO paplašināšanas vairogs 1 x testa stiprinājums To ir viegli pielodēt eksperimenta PCB vai
Vairāku pogu savienošana ar vienu tapu Arduino: 4 soļi
Vairāku pogu savienošana ar vienu Arduino tapu: Sveiki, visi, kad jūsu Arduino projektos ir pāraugušas mirgojošas gaismas diodes, jums var būt vajadzīgas dažas papildu tapas. Es jums parādīšu triku, kuru varat izmantot, ja jums var būt vairākas pogas, kas visas ir savienotas ar vienu un to pašu analogo tapu
Mint Box audio selektors: 3,5 mm audio slēdzis: 6 soļi
Mint Box audio selektors: 3,5 mm audio slēdzis: Problēma: bieži uz darbvirsmas spēlēm vai mūzikas klausīšanai ir jāizmanto austiņas, kamēr telpā ir citi cilvēki, un tad, ja vēlos parādīt smieklīgu skaļruni video vai veikt interneta zvanu uz tālu radinieku. Th