INHOUDSOPGAWE:
- Stap 1: Vereiste hardeware
- Stap 2: Multi-switch Metode Verduideliking
- Stap 3: Vergelyking -sigblad
- Stap 4: Speel 'n deuntjie
Video: DIP Tune Selector met behulp van 1 pen: 4 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
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
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:
|
Implementeer spanningsverdeler | |
passiewe piezo -zoemer | Amazon | Speel melodie soos aangedryf deur die toepassing via die Arduino -toonfunksie |
Stap 2: 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.
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:
- R1 word bereken deur gebruik te maak van vergelyking 2
- R1 en R.2 word gebruik om die gepaardgaande weerstand VERHOUDING te bereken
- die RATIO word vermenigvuldig met 1023 om die vergelykingswaarde te verkry
- 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
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
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:
- Die "gebruiker" stel die dip -skakelaars in die konfigurasie wat verband hou met die gewenste deuntjie
- elke programluslus word die identifiseerder vir die huidige dip switch -instelling verkry via analogRead
- Die konfigurasie -identifiseerder van stap 2 word vergelyk met elk van die vergelykers in die beskikbare snitlys
-
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
- As daar geen wedstryd gevind word nie, word geen stappe gedoen nie
- 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:
Beheer oor die hele wêreld met behulp van internet met behulp van Arduino: 4 stappe
Beheer oor die hele wêreld met behulp van internet met behulp van Arduino: Hallo, ek is Rithik. Ons gaan 'n internetbeheerde LED maak met u telefoon. Ons gaan sagteware soos Arduino IDE en Blynk gebruik. Dit is eenvoudig, en as u daarin geslaag het, kan u soveel elektroniese komponente beheer as wat u wil
Monitor versnelling met behulp van Raspberry Pi en AIS328DQTR met behulp van Python: 6 stappe
Monitering van versnelling met behulp van Raspberry Pi en AIS328DQTR Gebruik van Python: Versnelling is eindig, volgens ek volgens sommige wette van die fisika.- Terry Riley 'n Jagluiperd gebruik ongelooflike versnelling en vinnige spoedveranderinge wanneer hy jaag. Die vinnigste wesens aan wal gebruik af en toe sy hoogste tempo om prooi te vang. Die
AT-bevele vir Bluetooth-module (HC-05 W/ EN-pen en -KNOP) met behulp van Arduino-bord !: 5 stappe
AT-bevele vir Bluetooth-module (HC-05 W/ EN-pin en -KNOP) Met behulp van Arduino-bord !: Deur Jay Amiel AjocGensan PH Hierdie instruksies sal u help om aan die gang te kom met die gebruik van u HC05-Bluetooth-module. Aan die einde van hierdie instruksies sal u geleer het oor die stuur van AT -opdragte na die module om dit te konfigureer/te verander (naam, wagwoord, baud ra
Hoe om van 0 tot 99 te tel met behulp van 8051 mikrobeheerder met 7 segmentweergawe: 5 stappe (met foto's)
Hoe om van 0 tot 99 te tel Met behulp van 8051 mikrobeheerder met 7 -segmentweergawe: Hallo almal, in hierdie tutoriaal gaan ons u vertel hoe om van 0 tot 99 te tel met twee 7 -segment -skerms
MSP430 DIP programmeer met behulp van 'n Ez430: 4 stappe
MSP430 DIP programmeer met behulp van 'n Ez430: Toe ek die ez430 USB -programmeerder van TI vind, was dit een van die maklikste metodes om met 'n MCU aan die gang te kom. Hoe kan ek verkeerd wees, dit het ez in die naam! Dit blyk dat dit in werklikheid maklik is … meestal. Die ez430 is wonderlik as u wil