Turinys:

DIP melodijos parinkiklis naudojant 1 kaištį: 4 žingsniai
DIP melodijos parinkiklis naudojant 1 kaištį: 4 žingsniai

Video: DIP melodijos parinkiklis naudojant 1 kaištį: 4 žingsniai

Video: DIP melodijos parinkiklis naudojant 1 kaištį: 4 žingsniai
Video: Masterclass con Paola Hermosín sobre Lágrima de Tárrega 2024, Lapkritis
Anonim
DIP melodijos parinkiklis naudojant 1 kontaktą
DIP melodijos parinkiklis naudojant 1 kontaktą

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

Reikalinga aparatūra
Reikalinga aparatūra

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:

  • 10K x2
  • 20 tūkst
  • 40 tūkst
  • 80 tūkst
Įdiekite įtampos skirstytuvą
pasyvus pjezo garsinis signalas „Amazon“ Leiskite melodiją, kurią skatina programa, naudodami „Arduino“tonų funkciją

2 veiksmas: kelių jungiklių metodo paaiškinimas

Kelių jungiklių metodo paaiškinimas
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.

Vaizdas
Vaizdas

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:

  1. R1 apskaičiuojamas naudojant 2 lygtį
  2. R1 ir R.2 naudojami apskaičiuoti susijusį pasipriešinimą RATIO
  3. RATIO padauginamas iš 1023, kad būtų gauta lyginamoji vertė
  4. 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ė

Vaizdas
Vaizdas

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ą

Groti melodiją
Groti 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:

  1. „Vartotojas“nustato panardinimo jungiklius pagal norimą melodiją
  2. kiekvieno programos ciklo ciklo metu dabartinio kritimo jungiklio nustatymo identifikatorius gaunamas per analogRead
  3. 2 veiksmo konfigūracijos identifikatorius lyginamas su kiekvienu lyginamuoju turimų melodijų sąraše
  4. 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

  5. Jei nerandama atitiktis, nesiimama jokių veiksmų
  6. 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: