Turinys:
- 1 veiksmas: reikalinga aparatinė įranga
- 2 veiksmas: kelių jungiklių metodo paaiškinimas
- 3 žingsnis: palyginamojo skaičiuoklė
- 4 žingsnis: paleiskite melodiją
Video: DIP melodijos parinkiklis naudojant 1 kaištį: 4 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Prieš kurį laiką dirbau prie „muzikos dėžutės“projekto, kuriam reikėjo pasirinkti net 10 skirtingų melodijų fragmentų. Natūralus pasirinkimas renkantis tam tikrą melodiją buvo 4 kontaktų panardinimo jungiklis, nes 4 jungikliai suteikia 24= 16 skirtingų nustatymų. Tačiau, norint įgyvendinti šį metodą, reikia 4 įrenginio kaiščių, po vieną kiekvienam jungikliui. Kadangi planavau naudoti ATtiny85 plėtrai, prarasti 4 kaiščius buvo šiek tiek per daug. Laimei, aš patekau į straipsnį, kuriame aprašomas išradingas 1 analoginio kaiščio naudojimo būdas, skirtas valdyti kelis jungiklių įėjimus.
Kelių jungiklių 1 įvesties metodas naudoja įtampos skirstytuvo grandinę, kad kiekvienai iš 16 galimų jungiklių nustatymo kombinacijų būtų pateikta unikali sveiko skaičiaus vertė. Šis 16 sveikųjų skaičių identifikatorių rinkinys naudojamas programų programoje, kad susietų veiksmą su nustatymu.
Ši instrukcija naudoja kelių jungiklių metodą, kad būtų galima pasirinkti melodijos programos melodiją. Tada pasirinkta melodija grojama per pjezo garsinį signalą naudojant „Arduino“tonų funkciją.
1 veiksmas: reikalinga aparatinė įranga
Naudojant UNO kaip diegimo platformą, sumažinamas būtinų aparatinės įrangos komponentų skaičius. Įgyvendinant kelių jungiklių įvesties metodą, reikia tik 4 kontaktų įjungimo jungiklio, 5 rezistorių, naudojamų įtampos skirstytuvui, ir prijungimo laido. Prie konfigūracijos pridedamas pjezo garsinis signalas, skirtas muzikos dėžutės melodijų parinkikliui įgyvendinti. Pasirinktinai, atsižvelgiant į naudojamo panardinimo jungiklio tipą, naudinga naudoti 2x4 8 kontaktų lizdą, kad prijungtumėte panardinimo jungiklį prie duonos lentos, nes atrodo, kad standartiniai panardinimo jungiklio kaiščiai yra skirti lituoti prie perforatoriaus, kuris nėra tiesiogiai prijungtas prie duonos lentos. Lizdas stabilizuoja nusileidimo jungiklio jungtis ir neleidžia jungiklio lengvai pakelti nustatant perjungimo jungiklius.
vardas | Galimas šaltinis | Kaip naudojamas |
---|---|---|
4 kontaktų panardinimo jungiklis | Derinti pasirinkimą | |
2x4 kontaktų lizdas (neprivaloma) | „Amazon“ | Daugelio panardinimo jungiklių stulpeliai nelabai laiko jungiklį duonos lentelėje. Lizdas padeda padaryti ryšį tvirtesnį. Alternatyva yra rasti panardinimo jungiklį, kuris tikrai sukurtas naudoti su duonos lenta su įprastais IC kaiščiais. |
rezistoriai:
|
Įdiekite įtampos skirstytuvą | |
pasyvus pjezo garsinis signalas | „Amazon“ | Leiskite melodiją, kurią skatina programa, naudodami „Arduino“tonų funkciją |
2 veiksmas: kelių jungiklių metodo paaiškinimas
Šiame skyriuje aptariamos daugelio jungiklių metodo sąvokos ir kuriamos lygtys, reikalingos savarankiškam unikalių identifikatorių skaičiavimui kiekvienai iš 16 galimų panardinimo jungiklių konfigūracijų. Tada šie identifikatoriai gali būti naudojami taikomojoje programoje, kad susietų jungiklio konfigūraciją su veiksmu. Pvz., Galbūt norėsite, kad nustatymas - įjunkite 1, įjunkite 2, išjunkite 3, išjunkite 4, išjunkite 4 (1, 0, 0, 0) - žaisti „Amazing Grace“ir (0, 1, 0, 0) Liūtas miega šiąnakt. Trumpumo ir glaustumo dėlei konfigūracijos identifikatoriai likusioje dokumento dalyje vadinami lyginamaisiais.
Pagrindinė daugelio jungiklių metodo koncepcija yra įtampos skirstytuvo grandinė, kurią sudaro 2 nuoseklūs rezistoriai, prijungti prie įėjimo įtampos. Išėjimo įtampos laidas yra prijungtas tarp rezistorių, R1 ir R.2, kaip parodyta aukščiau. Skirstytuvo išėjimo įtampa apskaičiuojama kaip įėjimo įtampa, padauginta iš rezistoriaus R santykio2 iki R sumos1 ir R.2 (1 lygtis). Šis santykis visada yra mažesnis nei 1, todėl išėjimo įtampa visada yra mažesnė nei įėjimo įtampa.
Kaip nurodyta aukščiau esančioje projektavimo schemoje, daugiasluoksnis jungiklis sukonfigūruotas kaip įtampos daliklis su R2 fiksuotas ir R.1 lygus 4 dip jungiklio rezistorių sudėtiniam/ekvivalentiniam pasipriešinimui. R vertė1 priklauso nuo to, kurie įjungimo jungikliai yra įjungti, todėl prisideda prie sudėtinio pasipriešinimo. Kadangi įjungimo rezistoriai yra lygiagrečiai, ekvivalentinio pasipriešinimo apskaičiavimo lygtis pateikiama kaip komponentų rezistorių abipusė vertė. Mūsų konfigūracijai ir tuo atveju, kai visi jungikliai yra įjungti, lygtis tampa
1/R.1 = 1/80000 + 1/40000 + 1/20000 + 1/10000
duodamas R.1 = 5333,33 voltai. Siekiant atsižvelgti į tai, kad daugumoje nustatymų bent vienas iš jungiklių yra išjungtas, jungiklio būsena naudojama kaip daugiklis:
1/R.1 = s1*1/80000 + s2*1/40000 + s3*1/20000 + s4*1/10000 (2)
kur būsenos daugiklis, si, yra lygus 1, jei jungiklis įjungtas, ir lygus 0, jei jungiklis yra išjungtas. R1 dabar gali būti naudojamas apskaičiuoti pasipriešinimo koeficientą, reikalingą 1 lygtyje. Vėl naudojant pavyzdį, kai visi jungikliai yra įjungti
Santykis = R2/(R.1+R.2) = 10000/(5333.33+10000) =.6522
Paskutinis žingsnis apskaičiuojant numatomą lyginamąją vertę yra RATIO padauginimas iš 1023, kad būtų imituotas analogRead funkcijos poveikis. Tada identifikatorius to atvejo, kai visi jungikliai yra įjungti, yra
lygintuvas15 = 1023*.6522 = 667
Dabar yra visos lygtys, skirtos 16 galimų jungiklių nustatymų identifikatoriams apskaičiuoti. Apibendrinti:
- R1 apskaičiuojamas naudojant 2 lygtį
- R1 ir R.2 naudojami apskaičiuoti susijusį pasipriešinimą RATIO
- RATIO padauginamas iš 1023, kad būtų gauta lyginamoji vertė
- pasirinktinai numatytą išėjimo įtampą taip pat galima apskaičiuoti kaip RATIO*Vin
Lygintuvų rinkinys priklauso tik nuo įtampos skirstytuvo naudojamų rezistorių verčių ir yra unikalus konfigūracijos parašas. Kadangi skirstytuvo išėjimo įtampa svyruos nuo paleidimo iki paleidimo (ir skaitymo iki skaitymo), unikalus šiame kontekste reiškia, kad nors du identifikatorių rinkiniai gali būti ne visai vienodi, jie yra pakankamai arti, kad komponentų lyginamųjų savybių skirtumai patenka į nedidelį nurodytas intervalas. Intervalo dydžio parametras turi būti pasirinktas pakankamai didelis, kad būtų galima atsižvelgti į numatomus svyravimus, tačiau pakankamai mažas, kad skirtingi jungiklio nustatymai nesutaptų. Paprastai 7 gerai veikia intervalo pusės pločio atžvilgiu.
Tam tikros konfigūracijos palyginamųjų rinkinį galima gauti keliais būdais - paleiskite demonstracinę programą ir įrašykite kiekvieno nustatymo reikšmes; naudokite skaičiuoklę kitame skyriuje, kad apskaičiuotumėte; nukopijuokite esamą rinkinį. Kaip minėta aukščiau, visi rinkiniai greičiausiai šiek tiek skirsis, bet turėtų veikti. Siūlau naudoti metodo autoriaus identifikatorių rinkinį kelių jungiklių sąrankai ir skaičiuoklę iš kito skyriaus, jei kuris nors iš rezistorių yra žymiai pakeistas arba pridėta daugiau rezistorių.
Ši demonstracinė programa iliustruoja lyginamųjų prietaisų naudojimą dabartiniam kritimo jungiklio nustatymui nustatyti. Kiekvieno programos ciklo metu atliekamas „analogRead“, siekiant gauti dabartinės konfigūracijos identifikatorių. Tada šis identifikatorius lyginamas lyginamųjų sąraše, kol randama atitiktis arba sąrašas baigiamas. Jei randama atitiktis, patikrinimui išduodamas išvesties pranešimas; jei nerandamas įspėjimas. Į ciklą įterpiamas 3 sekundžių uždelsimas, kad nuosekliosios išvesties langas nebūtų perpildytas pranešimais ir kad būtų galima šiek tiek laiko iš naujo nustatyti nusileidimo jungiklio konfigūraciją.
//-------------------------------------------------------------------------------------
// Demonstracinė programa, skirta nuskaityti įtampos skirstytuvo išėjimą ir panaudoti ją // dabartinio nusileidimo jungiklio konfigūracijai identifikuoti, ieškant išvesties vertės kiekvienos galimos nuostatos // palyginimo reikšmių masyve. Peržiūros masyvo reikšmes // galima gauti iš ankstesnio konfigūracijos vykdymo arba apskaičiuojant // remiantis pagrindinėmis lygtimis. // ------------------------------------------------ -------------------------------------- int palyginamasis [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Apibrėžti apdorojimo kintamuosius int dipPin = A0; // analoginis kaištis įtampos daliklio įėjimui int dipIn = 0; // laiko daliklio įtampos išėjimą, išverstą į analogRead int count = 0; // kilpos skaitiklis int epsilon = 7; // palyginimo intervalas pusės pločio bool dipFound = false; // tiesa, jei dabartinės įtampos skirstytuvo išvestis rasta paieškos lentelėje void setup () {pinMode (dipPin, INPUT); // konfigūruoti įtampos skirstytuvo kaištį kaip INPUT Serial.begin (9600); // įgalinti nuoseklųjį ryšį} void loop () {delay (3000); // neleisti išvesties slinkti per greitai // Inicijuoti paieškos parametrus count = 0; dipFound = klaidinga; // Skaityti ir dokumentuoti srovės išėjimo įtampą dipIn = analogRead (dipPin); Serial.print („daliklio išvestis“); Serial.print (dipIn); // Ieškoti palyginamųjų sąrašo dabartinės vertės, kol ((skaičius <16) && (! DipFound)) {if (abs (dipIn - lyginamasis [skaičius]) <= epsilon) {// rado dipFound = true; Serial.print ("rasta įvedant"); Serial.print (skaičius); Serial.println ("vertė" + eilutė (palyginimas [skaičius])); pertrauka; } skaičiuoti ++; } if (! dipFound) {// reikšmė nėra lentelėje; neturėtų įvykti Serial.println ("OOPS! Nerasta; geriau paskambinti vaiduoklių griovėjams"); }}
3 žingsnis: palyginamojo skaičiuoklė
16 palyginamųjų verčių skaičiavimai pateikti aukščiau esančioje skaičiuoklėje. Pridedamą „Excel“failą galima atsisiųsti šio skyriaus apačioje.
Skaičiuoklės A-D stulpeliai registruoja kritimo jungiklio rezistorių vertes ir 16 galimų jungiklio nustatymų. Atkreipkite dėmesį, kad techninės įrangos DIP jungiklis, pavaizduotas fritzavimo schemoje, iš tikrųjų yra sunumeruotas iš kairės į dešinę, o ne iš skaičiuoklės parodyta numeravimas iš dešinės į kairę. Man tai pasirodė šiek tiek painu, tačiau alternatyva „1“konfigūracijos (0, 0, 0, 1) nenurodo pirmoje sąrašo vietoje. E stulpelyje naudojama ankstesnio skyriaus 2 formulė įtampos skirstytuvo ekvivalentinei varžai R apskaičiuoti1 nustatymui. F stulpelis naudoja šį rezultatą, kad apskaičiuotų susijusį pasipriešinimo koeficientą, ir, galiausiai, G stulpelis RATIO padaugina iš analogRead max vertės (1023), kad gautų numatytą lyginamąją vertę. Paskutiniuose 2 stulpeliuose yra faktinės demonstracinės programos vykdymo vertės kartu su numatomų ir faktinių verčių skirtumais.
Ankstesniame skyriuje paminėti trys būdai, kaip gauti lyginamųjų verčių rinkinį, įskaitant šios skaičiuoklės išplėtimą, jei rezistoriaus vertės yra žymiai pakeistos arba pridedama daugiau jungiklių. Atrodo, kad nedideli rezistorių verčių skirtumai neturi didelės įtakos galutiniams rezultatams (tai yra gerai, nes rezistorių specifikacijos suteikia leistiną nuokrypį, tarkime, 5%, o rezistorius retai būna lygus jo faktinei vertei).
4 žingsnis: paleiskite melodiją
Kad būtų parodyta, kaip programoje gali būti naudojama kelių jungiklių technika, palyginimo demonstracinė programa iš skyriaus „Metodo paaiškinimas“modifikuojama taip, kad būtų įdiegtas melodijų programos melodijų pasirinkimo apdorojimas. Atnaujinta programos konfigūracija parodyta aukščiau. Vienintelis aparatūros priedas yra pasyvus pjezo garsinis signalas, leidžiantis atkurti pasirinktą melodiją. Pagrindinis programinės įrangos pakeitimas yra įprastos grojamos melodijos pridėjimas, kai jis atpažįstamas naudojant garsinį signalą ir „Arduino“tonų rutiną.
Galimi melodijų fragmentai yra antraštės faile „Tunes.h“ir būtinų pagalbinių struktūrų apibrėžimas. Kiekviena melodija apibrėžiama kaip su nata susijusių struktūrų masyvas, kuriame yra natų dažnis ir trukmė. Užrašų dažnis yra atskirame antraštės faile „Pitches.h“. Programos ir antraštės failus galima atsisiųsti šio skyriaus pabaigoje. Visi trys failai turėtų būti dedami į tą patį katalogą.
Atranka ir identifikavimas vyksta taip:
- „Vartotojas“nustato panardinimo jungiklius pagal norimą melodiją
- kiekvieno programos ciklo ciklo metu dabartinio kritimo jungiklio nustatymo identifikatorius gaunamas per analogRead
- 2 veiksmo konfigūracijos identifikatorius lyginamas su kiekvienu lyginamuoju turimų melodijų sąraše
-
Jei randama atitiktis, iškviečiama „playTune“rutina su informacija, reikalinga norint pasiekti melodijų sąrašo
Naudojant „Arduino“tonų funkciją, kiekviena nata skamba garsiniu signalu
- Jei nerandama atitiktis, nesiimama jokių veiksmų
- pakartokite 1-5
Galimų melodijų DIP jungiklio nustatymai pateikti žemiau esančioje lentelėje, kur 1 reiškia jungiklį įjungtą, 0 išjungtą. Prisiminkite, kad nusileidimo jungiklio orientacija nustato 1 jungiklį kairiausioje padėtyje (ta, kuri yra susijusi su 80K rezistoriumi).
VARDAS | 1 jungiklis | 2 jungiklis | 3 jungiklis | 4 jungiklis |
Danny Boy | 1 | 0 | 0 | 0 |
Meškiukas | 0 | 1 | 0 | 0 |
Liūtas miega šiąnakt | 1 | 1 | 0 | 0 |
Bėdos niekas nežino | 0 | 0 | 1 | 0 |
Nuostabi Grace | 0 | 0 | 0 | 1 |
Tuščia vieta | 1 | 0 | 0 | 1 |
MockingBird Hill | 1 | 0 | 1 | 1 |
Pjezo garso signalo garso kokybė tikrai nėra puiki, tačiau bent jau atpažįstama. Tiesą sakant, jei tonai yra išmatuoti, jie yra labai artimi natų dažniui. Viena įdomi programa, naudojama programoje, yra įrašyti melodijos duomenis į „Flash“/programos atminties skyrių, o ne į numatytąją duomenų atminties skyrių, naudojant PROGMEM direktyvą. Duomenų skyriuje yra programos apdorojimo kintamieji ir jis yra daug mažesnis, maždaug 512 baitų kai kuriems „ATtiny“mikrovaldikliams.
Rekomenduojamas:
Kaip skaityti kelias analogines vertes naudojant vieną analoginį kaištį: 6 žingsniai (su paveikslėliais)
Kaip skaityti kelias analogines vertes naudojant vieną analoginį kaištį: Šioje pamokoje aš jums parodysiu, kaip skaityti kelias analogines vertes naudojant tik vieną analoginį įvesties kaištį
Spalvų parinkiklis: 4 žingsniai
Spalvų parinkiklis: 1 etapas 1 žingsnis: komponentų įsigijimas Komponentai: Esp. 32 (mikrovaldiklis) Ne pikselių žiedas 12 & 9 (RGB žiedo lemputė) Spalvų jutiklis 3.7v akumuliatorius nuo 3.7v iki 5v keitiklis Iššūkiai: Gauti tikslius komponentų matavimus 2 žingsnis: Medžiagų kodavimas: A
„Arduino RGB“spalvų parinkiklis - pasirinkite spalvas iš realaus gyvenimo objektų: 7 žingsniai (su nuotraukomis)
„Arduino RGB“spalvų parinkiklis - pasirinkite spalvas iš realaus gyvenimo objektų: Lengvai pasirinkite spalvas iš fizinių objektų naudodami šį „Arduino“pagrįstą RGB spalvų parinkiklį, leidžiantį atkurti spalvas, kurias matote realaus gyvenimo objektuose savo kompiuteryje ar mobiliajame telefone. Tiesiog paspauskite mygtuką, kad nuskaitytumėte objekto spalvą naudodami pigų TCS347
„Mint Box“garso parinkiklis: 3,5 mm garso jungiklis: 6 žingsniai
„Mint Box“garso parinkiklis: 3,5 mm garso jungiklis: Problema: dažnai darbalaukyje turiu naudoti ausines žaidimams ar klausytis muzikos, kai kiti žmonės yra kambaryje, ir tada, jei noriu parodyti juokingą, turiu persijungti į garsiakalbius vaizdo įrašą arba skambinkite internetu tolimam giminaičiui. T
Kaip perskaityti daug jungiklių naudojant vieną MCU kaištį: 4 žingsniai
Kaip perskaityti daugelį jungiklių naudojant vieną MCU kaištį: Ar kada nors buvote nusiteikę prie projekto (-ų), o projektas vis auga ir auga, o jūs pridedate prie jo daugiau dalykų (mes tai vadiname svaiginančiu kūrybiškumu)? Neseniai įgyvendinęs projektą kūriau dažnio matuoklį ir pridėjau penkių funkcijų