Satura rādītājs:

DIP melodijas selektors, izmantojot 1 tapu: 4 soļi
DIP melodijas selektors, izmantojot 1 tapu: 4 soļi

Video: DIP melodijas selektors, izmantojot 1 tapu: 4 soļi

Video: DIP melodijas selektors, izmantojot 1 tapu: 4 soļi
Video: РЕАКЦИЯ ПЕДАГОГА ПО ВОКАЛУ: DIMASH - САМАЛТАУ 2024, Novembris
Anonim
DIP melodijas selektors, izmantojot 1 tapu
DIP melodijas selektors, izmantojot 1 tapu

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

Nepieciešamā aparatūra
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:

  • 10K x 2
  • 20K
  • 40K
  • 80 tūkstoši
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

Daudzslēdžu metodes skaidrojums
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.

Attēls
Attēls

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:

  1. R1 aprēķina, izmantojot 2. vienādojumu
  2. R1 un R.2 tiek izmantoti, lai aprēķinātu saistīto pretestību RATIO
  3. RATIO tiek reizināts ar 1023, lai iegūtu salīdzināmo vērtību
  4. 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

Attēls
Attēls

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

Atskaņojiet melodiju
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:

  1. "Lietotājs" nosaka dip slēdžus konfigurācijā, kas saistīta ar vēlamo melodiju
  2. katrā programmas cikla ciklā, izmantojot analogRead, tiek iegūts pašreizējā dip slēdža iestatījuma identifikators
  3. Konfigurācijas identifikatora 2. darbība tiek salīdzināta ar katru salīdzinošo versiju pieejamajā melodiju sarakstā
  4. 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

  5. Ja neatbilstība netiek atrasta, netiek veiktas nekādas darbības
  6. 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: