INHOUDSOPGAWE:

DIP Tune Selector met behulp van 1 pen: 4 stappe
DIP Tune Selector met behulp van 1 pen: 4 stappe

Video: DIP Tune Selector met behulp van 1 pen: 4 stappe

Video: DIP Tune Selector met behulp van 1 pen: 4 stappe
Video: Полный курс Redux Toolkit + RTK Query для начинающих | Редакс за 2 часа! 2024, November
Anonim
DIP Tune Selector Met 1 Pin
DIP Tune Selector Met 1 Pin

Ek werk 'n rukkie terug aan 'n "musiekboks" -projek wat tussen 10 verskillende snitte moes kies. 'N Natuurlike keuse om 'n spesifieke deuntjie te kies, was 'n 4 -pins dipskakelaar, aangesien 4 skakelaars 2 bied4= 16 verskillende instellings. Die implementering van brute krag vir hierdie benadering vereis egter 4 apparaatpenne, een vir elke skakelaar. Aangesien ek van plan was om die ATtiny85 vir ontwikkeling te gebruik, was die verlies van 4 penne 'n bietjie te veel. Gelukkig het ek 'n artikel raakgeloop wat 'n vindingryke metode beskryf vir die gebruik van 1 analoog pen om verskeie skakelingsinsette te hanteer.

Die multi-skakelaar; 1-invoer tegniek gebruik 'n spanningverdeler-kring om 'n unieke heelgetalwaarde vir elk van die 16 moontlike skakelaarinstellingskombinasies te verskaf. Hierdie stel van 16 heelgetal -identifiseerders word dan in die toepassingsprogram gebruik om 'n aksie met 'n instelling te assosieer.

Hierdie instruksies maak gebruik van die multi-switch-metode om die keuse van deuntjies vir die musiekboks-toepassing te implementeer. Die geselekteerde melodie word dan deur 'n piëzo -zoemer met die Arduino -toonfunksie gespeel.

Stap 1: Vereiste hardeware

Vereiste hardeware
Vereiste hardeware

Die gebruik van die UNO as implementeringsplatform verminder die aantal benodigde hardeware -komponente. Die implementering van die multi-skakelaar invoer metode vereis slegs 'n 4-pins dip switch, die 5 weerstande wat gebruik word vir die spanningsverdeler en aansluitdraad vir verbindings. 'N Piezo -zoemer word by die konfigurasie gevoeg vir die implementering van die melkkassie -kieser. Afhangend van die tipe dipskakelaar wat gebruik word, is dit opsioneel nuttig om 'n 2x4 8 -pen -aansluiting te gebruik om die dip -skakelaar aan die broodbord te koppel, aangesien dit lyk asof die standaard dip -skakelaarpenne gemaak is vir soldeer aan 'n perfboard wat nie direk in 'n broodbord aansluit nie. Die aansluiting stabiliseer die dipskakelverbindings en voorkom dat die skakelaar maklik opgelig word wanneer die skakelaars ingestel word.

Naam Moontlike bron Hoe gebruik
4-pins dipskakelaar Kies die keuse
2x4 -pen aansluiting (opsioneel) Amazon Die paaltjies op die meeste dipskakelaars hou die skakelaar nie baie goed in 'n broodbord nie. 'N Sokkel help om die verbinding stewiger te maak. 'N Alternatief is om 'n dipskakelaar te vind wat werklik gemaak is vir broodbordgebruik met gereelde IC -penne.

weerstande:

  • 10K x2
  • 20K
  • 40K
  • 80K
Implementeer spanningsverdeler
passiewe piezo -zoemer Amazon Speel melodie soos aangedryf deur die toepassing via die Arduino -toonfunksie

Stap 2: Multi-switch Metode Verduideliking

Multi-switch Metode Verduideliking
Multi-switch Metode Verduideliking

Hierdie afdeling bespreek die onderliggende konsepte vir die multi-switch metode en ontwikkel die vergelykings wat nodig is vir 'n losstaande berekening van unieke identifiseerders vir elk van die 16 moontlike dip switch switch konfigurasies. Hierdie identifiseerders kan dan in 'n toepassingsprogram gebruik word om 'n skakelaarkonfigurasie met 'n aksie te assosieer. U wil byvoorbeeld hê dat die instelling - skakel 1 aan, skakel 2 af, skakel 3 af, skakel 4 af (1, 0, 0, 0) - om Amazing Grace te speel en (0, 1, 0, 0) om te speel Leeu slaap vanaand. Vir kortheid en bondigheid word in die res van die dokument na die konfigurasie -identifiseerders verwys as vergelykers.

Beeld
Beeld

Die fundamentele konsep vir die multi-switch-metode is die spanningverdelerkring wat bestaan uit 2 in serie weerstande wat aan 'n ingangsspanning gekoppel is. Die uitgangsspanningskabel is verbind tussen die weerstande, R1 en R.2, soos hierbo getoon. Die verdeler se uitgangsspanning word bereken as die insetspanning vermenigvuldig met die verhouding van weerstand R2 tot die som van R1 en R.2 (vergelyking 1). Hierdie verhouding is altyd minder as 1, dus is die uitsetspanning altyd kleiner as die ingangsspanning.

Soos aangedui in die ontwerpdiagram hierbo, is die multi-skakelaar gekonfigureer as 'n spanningsverdeler met R2 vasgestel en R.1 gelyk aan die saamgestelde/ekwivalente weerstand vir die 4 dip switch weerstande. Die waarde van R.1 hang af van watter dipskakelaars aangeskakel is en dra dus by tot die saamgestelde weerstand. Aangesien die dipskakelweerstande parallel is, word die ekwivalente weerstandsberekeningvergelyking aangedui in terme van die wederkerigheid van die komponentweerstande. Vir ons opset en as alle skakelaars aangeskakel is, word die vergelyking

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

gee R.1 = 5333,33 volt. Om in ag te neem dat ten minste een van die skakelaars in die meeste instellings afgeskakel is, word die skakelaarstatus as 'n vermenigvuldiger gebruik:

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

waar die staatsvermenigvuldiger, sek, is gelyk aan 1 as die skakelaar aangeskakel is en gelyk aan 0 as die skakelaar afgeskakel is. R1 kan nou gebruik word om die weerstandsverhouding wat in vergelyking 1. benodig word, te bereken. Gebruik die geval waar alle skakelaars weer as voorbeeld is

VERHOUDING = R2/(R1+R.2) = 10000/(5333.33+10000) =.6522

Die laaste stap in die berekening van die voorspelde vergelykingswaarde is die vermenigvuldiging van die RATIO met 1023 om die effek van die analogRead -funksie na te boots. Die identifiseerder vir die geval waar alle skakelaars aan is, is dan

vergelyker15 = 1023*.6522 = 667

Al die vergelykings is nou in plek vir die berekening van identifiseerders vir die 16 moontlike skakelaarinstellings. Op te som:

  1. R1 word bereken deur gebruik te maak van vergelyking 2
  2. R1 en R.2 word gebruik om die gepaardgaande weerstand VERHOUDING te bereken
  3. die RATIO word vermenigvuldig met 1023 om die vergelykingswaarde te verkry
  4. opsioneel kan die voorspelde uitsetspanning ook bereken word as RATIO*Vin

Die stel vergelykers hang slegs af van die weerstandswaardes wat vir die spanningsverdeler gebruik word, en is 'n unieke handtekening vir die opset. Omdat die uitgangsspannings van die verdeler van loop tot hardloop sal wissel (en lees om te lees), beteken uniek in hierdie konteks dat hoewel twee stelle identifiseerders moontlik nie presies dieselfde is nie, hulle naby genoeg is dat die komponentvergelyker-verskille binne 'n klein gespesifiseerde interval. Die intervalgrootte -parameter moet groot genoeg gekies word om die verwagte skommelinge in ag te neem, maar klein genoeg dat verskillende skakelaarinstellings nie oorvleuel nie. Gewoonlik werk 7 goed vir die interval halfwydte.

'N Stel vergelykers vir 'n spesifieke opset kan op verskillende maniere verkry word - voer die demo -program uit en teken die waardes vir elke instelling aan; gebruik die sigblad in die volgende afdeling om te bereken; kopieer 'n bestaande stel. Soos hierbo genoem, sal alle stelle waarskynlik effens anders wees, maar moet werk. Ek stel voor dat u die metode-outeur se stel identifiseerders gebruik vir die multi-switch-opstelling en die sigblad uit die volgende afdeling as een van die resistors aansienlik verander word of meer resistors bygevoeg word.

Die volgende demo -program illustreer die gebruik van die vergelykers om die huidige dip -skakelaar -instelling te identifiseer. In elke programsiklus word 'n analogRead uitgevoer om 'n identifiseerder vir die huidige opset te verkry. Hierdie identifiseerder word dan in die vergelykingslys vergelyk totdat 'n pasmaat gevind word of die lys uitgeput is. As 'n pasmaat gevind word, word 'n uitsetboodskap vir verifikasie uitgereik; as dit nie gevind word nie, word 'n waarskuwing uitgereik. 'N Vertraging van 3 sekondes word in die lus geplaas, sodat die seriële uitsetvenster nie oorlaai sal word met boodskappe nie en om tyd te gee om die dipskakelaar se konfigurasie terug te stel.

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

// Demo -program om die spanningsverdeleruitset te lees en dit te gebruik om die // huidige dipskakelaarkonfigurasie te identifiseer deur die uitsetwaarde in 'n verskeidenheid // vergelykingswaardes vir elke moontlike instelling op te soek. Die waardes in die naslaanreeks kan // óf verkry word uit 'n vorige lopie vir die opset óf deur berekening // gebaseer op die onderliggende vergelykings. // ------------------------------------------------ -------------------------------------- int vergelyker [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Definieer verwerkingsveranderlikes int dipPin = A0; // analoog pen vir spanningsverdeler ingang int dipIn = 0; // hou verdelerspanningsuitset vertaal deur analogRead int count = 0; // lusteller int epsilon = 7; // vergelyking interval halfwydte bool dipFound = false; // waar as die uitset van die huidige spanningsverdeler gevind word in die opsporingstabel se leemte -opstelling () {pinMode (dipPin, INPUT); // die spanningsverdelerpen opstel as 'n INPUT Serial.begin (9600); // aktiveer seriële kommunikasie} leemte -lus () {vertraging (3000); // keer dat die uitset te vinnig blaai // Initialiseer die soekparameters; 0 =; dipFound = vals; // Lees en dokumenteer huidige uitsetspanning dipIn = analogRead (dipPin); Serial.print ("verdeler -uitvoer"); Serial.print (dipIn); // Soek vergelykingslys na huidige waarde terwyl ((telling <16) && (! DipFound)) {if (abs (dipIn - vergelyker [telling]) <= epsilon) {// gevind het dipFound = true; Serial.print ("gevind by inskrywing"); Serial.print (telling); Serial.println ("waarde" + string (vergelyking [telling])); breek; } tel ++; } if (! dipFound) {// waarde nie in tabel nie; moet nie gebeur nie Serial.println ("OOPS! Nie gevind nie; beter om Ghost Busters te bel"); }}

Stap 3: Vergelyking -sigblad

Beeld
Beeld

Die berekeninge vir die 16 vergelykingswaardes word in die sigblad hierbo getoon. Die meegaande Excel -lêer kan onderaan hierdie afdeling afgelaai word.

Sigbladkolomme A-D teken die weerstandswaardes van die dipskakelaar en die 16 moontlike skakelaarinstellings aan. Let asseblief daarop dat die hardeware -DIP -skakelaar wat in die ontwerpontwerpdiagram getoon word, eintlik van links na regs genommer is in plaas van die nommer regs na links in die sigblad. Ek het dit ietwat verwarrend gevind, maar die alternatief plaas die "1" -opstelling (0, 0, 0, 1) nie eerste op die lys nie. Kolom E gebruik formule 2 van die vorige afdeling om die ekwivalentweerstand R van die spanningsverdeler te bereken1 vir die omgewing. Kolom F gebruik hierdie resultaat om die gepaardgaande weerstand RATIO te bereken, en laastens vermenigvuldig kolom G die RATIO met die analogRead maksimum waarde (1023) om die voorspelde vergelykingswaarde te verkry. Die laaste twee kolomme bevat die werklike waardes van die uitvoering van die demo -program, asook die verskille tussen die voorspelde en werklike waardes.

Die vorige afdeling het drie metodes genoem om 'n stel vergelykingswaardes te verkry, insluitend die uitbreiding van hierdie sigblad, as die weerstandswaardes aansienlik verander word of meer skakelaars bygevoeg word. Dit blyk dat klein verskille in die weerstandswaardes nie die finale resultate beduidend beïnvloed nie (wat goed is, aangesien resistorspesifikasies 'n toleransie gee, sê 5%, en die weerstand selde gelyk is aan die werklike verklaarde waarde daarvan).

Stap 4: Speel 'n deuntjie

Speel 'n deuntjie
Speel 'n deuntjie

Om te illustreer hoe die multi-switch-tegniek in 'n toepassing gebruik kan word, word die vergelykings-demoprogram uit die "Metode-verduideliking" -gedeelte gewysig om die deurseleksieverwerking vir die musiekboksprogram te implementeer. Die opgedateerde programkonfigurasie word hierbo getoon. Die enigste toevoeging tot die hardeware is 'n passiewe piezo -zoemer om die geselekteerde deuntjie te speel. Die basiese verandering aan die sagteware is die toevoeging van 'n roetine om 'n deuntjie te speel, sodra dit geïdentifiseer is, met behulp van die zoemer en die Arduino -toonroetine.

Die beskikbare snitstukke is vervat in 'n koptekstlêer, Tunes.h, saam met die definisie van die nodige ondersteuningsstrukture. Elke deuntjie word gedefinieer as 'n reeks nootverwante strukture wat die frekwensie en duur van die noot bevat. Die note frekwensies is vervat in 'n aparte kop lêer, Pitches.h. Die program- en koplêers kan aan die einde van hierdie afdeling afgelaai word. Al drie lêers moet in dieselfde gids geplaas word.

Die keuse en identifikasie verloop soos volg:

  1. Die "gebruiker" stel die dip -skakelaars in die konfigurasie wat verband hou met die gewenste deuntjie
  2. elke programluslus word die identifiseerder vir die huidige dip switch -instelling verkry via analogRead
  3. Die konfigurasie -identifiseerder van stap 2 word vergelyk met elk van die vergelykers in die beskikbare snitlys
  4. As 'n wedstryd gevind word, word die playTune -roetine gebel met die inligting wat nodig is om toegang te verkry tot die deuntjie -lys

    Met die Arduino -toonfunksie word elke noot deur die zoemer gespeel

  5. As daar geen wedstryd gevind word nie, word geen stappe gedoen nie
  6. herhaal 1-5

DIP -skakelaarinstellings vir die beskikbare wysies word in die onderstaande tabel getoon, waar 1 beteken dat skakelaar aan is, 0 afskakel. Onthou dat die manier waarop die dipskakelaar gerig is, skakelaar 1 in die linkerkantste posisie plaas (die een wat verband hou met die 80K-weerstand).

NAAM Skakelaar 1 Skakelaar 2 Skakelaar 3 Skakelaar 4
Danny Boy 1 0 0 0
Beertjie 0 1 0 0
Leeu slaap vanaand 1 1 0 0
Niemand ken die moeilikheid nie 0 0 1 0
Ongelooflike genade 0 0 0 1
Leë spasie 1 0 0 1
Spottende Bird Hill 1 0 1 1

Die klankgehalte van 'n piëzo -zoemer is beslis nie goed nie, maar dit is ten minste herkenbaar. As die kleure gemeet word, is dit baie naby aan die presiese frekwensie van die note. 'N Interessante tegniek wat in die program gebruik word, is om die tune -data in die flits-/programgeheue -afdeling te stoor in plaas van die standaard -data -geheue -afdeling deur die PROGMEM -richtlijn te gebruik. Die data -afdeling bevat die programverwerkingsveranderlikes en is baie kleiner, ongeveer 512 grepe vir sommige van die ATtiny -mikrobeheerders.

Aanbeveel: