Kazalo:
- 1. korak: Potrebna strojna oprema
- 2. korak: Razlaga metode z več stikali
- 3. korak: Primerjalna preglednica
- 4. korak: Predvajajte melodijo
Video: Izbirnik nastavitev DIP z uporabo 1 zatiča: 4 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:05
Nekaj časa nazaj sem delal na projektu "music box", ki je moral izbirati med kar 10 različnimi odrezki melodije. Naravna izbira za izbiro določene melodije je bilo 4 -polno dip stikalo, saj 4 stikala zagotavljajo 24= 16 različnih nastavitev. Vendar pa izvedba surove sile za ta pristop zahteva 4 zatiče naprave, po enega za vsako stikalo. Ker sem nameraval ATtiny85 uporabiti za razvoj, je bila izguba 4 zatičev preveč. Na srečo sem naletel na članek, ki opisuje iznajdljivo metodo uporabe 1 analognega zatiča za obdelavo več stikalnih vhodov.
Tehnika z več stikali; tehnika z enim vhodom uporablja vezje razdelilnika napetosti, da zagotovi edinstveno celoštevilsko vrednost za vsako od 16 možnih kombinacij nastavitev stikala. Ta niz 16 celoštevilčnih identifikatorjev se nato uporabi v aplikacijskem programu za povezovanje dejanja z nastavitvijo.
Ta pouk uporablja metodo več stikal za izvajanje melodije za aplikacijo glasbena skrinja. Izbrana melodija se nato predvaja s piezo zvočnikom s funkcijo Arduino tone.
1. korak: Potrebna strojna oprema
Uporaba UNO kot implementacijske platforme zmanjšuje število potrebnih komponent strojne opreme. Izvajanje vhodne metode z več stikali zahteva le 4-polno dip stikalo, 5 uporov, ki se uporabljajo za delilnik napetosti, in priključno žico za povezave. Konfiguraciji je dodan piezo zvočni signal za izvajanje izbirnika melodij glasbene škatle. Po izbiri je odvisno od vrste uporabljenega potopnega stikala koristno uporabiti 2x4 8 -polno vtičnico za priključitev potopnega stikala na ploščo, saj se zdi, da so standardni zatiči stikala za spajkanje na ploščo, ki ni priključena neposredno na ploščo. Vtičnica stabilizira povezave potopnega stikala in preprečuje enostavno dvigovanje stikala pri nastavitvi preklopnih stikal.
Ime | Možen vir | Kako uporabljeno |
---|---|---|
4-polno dip stikalo | Izbira melodije | |
2x4 -polna vtičnica (neobvezno) | Amazon | Stebri na večini dip stikal ne držijo stikala zelo dobro na plošči. Vtičnica pomaga, da je povezava bolj trdna. Druga možnost je najti dip stikalo, ki je resnično narejeno za uporabo na plošči z običajnimi zatiči IC. |
upori:
|
Namestite delilnik napetosti | |
pasivni piezo zvočni signal | Amazon | Predvajajte melodijo, kot jo poganja aplikacija, prek tonske funkcije Arduino |
2. korak: Razlaga metode z več stikali
To poglavje obravnava osnovne koncepte za metodo več stikal in razvija enačbe, potrebne za samostojen izračun edinstvenih identifikatorjev za vsako od 16 možnih konfiguracij nastavitev dip stikala. Te identifikatorje lahko nato uporabite v aplikacijskem programu za povezavo konfiguracije stikala z dejanjem. Na primer, morda želite, da nastavitev - vklopite 1, izklopite 2, izklopite 3, izklopite 4 (1, 0, 0, 0) - za predvajanje Amazing Grace in (0, 1, 0, 0) za predvajanje Lev nocoj spi. Zaradi kratkosti in jedrnatosti so konfiguracijski identifikatorji v preostalem delu dokumenta imenovani primerjalniki.
Temeljni koncept metode z več stikali je vezje razdelilnika napetosti, ki je sestavljeno iz 2 zaporednih uporov, priključenih na vhodno napetost. Kabel izhodne napetosti je povezan med upori, R1 in R.2, kot je prikazano zgoraj. Izhodna napetost delilnika se izračuna kot vhodna napetost, pomnožena z razmerjem upora R2 na vsoto R1 in R.2 (enačba 1). To razmerje je vedno manjše od 1, zato je izhodna napetost vedno manjša od vhodne napetosti.
Kot je prikazano na načrtovalnem diagramu zgoraj, je več stikalo konfigurirano kot delilnik napetosti z R2 fiksno in R1 enaka sestavljenemu/enakovrednemu uporu za 4 upornike stikala. Vrednost R1 odvisno od tega, katera dip stikala so vklopljena in zato prispevajo k sestavljenemu uporu. Ker so upori dip stikala vzporedni, je enačba izračuna enakovrednega upora prikazana v smislu vzajemnosti komponentnih uporov. Za našo konfiguracijo in v primeru, da so vsa stikala vklopljena, enačba postane
1/R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000
dajanje R.1 = 5333,33 voltov. Zaradi dejstva, da ima večina nastavitev vsaj eno stikalo izklopljeno, se stanje stikala uporablja kot množitelj:
1/R1 = s1*1/80000 + s2*1/40000 + s3*1/20000 + s4*1/10000 (2)
kjer je multiplikator stanja, sjaz, je enako 1, če je stikalo vklopljeno in enako 0, če je stikalo izklopljeno. R1 lahko zdaj uporabite za izračun razmerja upora, ki je potrebno v enačbi 1. Kot primer ponovno uporabite primer, ko so vsa stikala vklopljena
RAZMERJENJE = R2/(R1+R2) = 10000/(5333.33+10000) =.6522
Zadnji korak pri izračunu predvidene vrednosti primerjalnika je pomnoževanje RATIO z 1023, da bi posnemali učinek funkcije analogRead. Nato je identifikator za primer, ko so vsa stikala vklopljena
primerjalnik15 = 1023*.6522 = 667
Vse enačbe so zdaj na voljo za izračun identifikatorjev za 16 možnih nastavitev stikala. Povzeti:
- R1 se izračuna z enačbo 2
- R1 in R.2 se uporabljajo za izračun povezanega upora RATIO
- RATIO pomnožimo z 1023, da dobimo primerjalno vrednost
- po izbiri je mogoče napovedano izhodno napetost izračunati tudi kot RATIO*Vin
Niz primerjalnikov je odvisen le od vrednosti upora, uporabljenih za delilnik napetosti, in so edinstven podpis za konfiguracijo. Ker bodo izhodne napetosti delilnika med delovanjem (in branjem za branje) nihale, edinstveno v tem kontekstu pomeni, da čeprav dva niza identifikatorjev morda nista popolnoma enaka, sta dovolj blizu, da razlike v primerjalniku komponent padejo v majhne določen interval. Parameter velikosti intervala je treba izbrati dovolj velik, da upošteva pričakovana nihanja, vendar dovolj majhen, da se različne nastavitve stikal ne prekrivajo. Običajno 7 deluje dobro za interval pol širine.
Niz primerjalnikov za določeno konfiguracijo je mogoče dobiti na več načinov - zaženite predstavitveni program in zabeležite vrednosti za vsako nastavitev; za preglednico uporabite preglednico v naslednjem razdelku; kopirajte obstoječi niz. Kot je navedeno zgoraj, bodo vsi sklopi najverjetneje nekoliko drugačni, vendar bi morali delovati. Predlagam, da uporabite avtorjev nabor identifikatorjev za nastavitev z več stikali in preglednico iz naslednjega razdelka, če se kateri od uporov bistveno spremeni ali doda več uporov.
Naslednji demo program prikazuje uporabo primerjalnikov za identifikacijo trenutne nastavitve dip stikala. V vsakem programskem ciklu se izvede analogno branje za pridobitev identifikatorja za trenutno konfiguracijo. Ta identifikator se nato primerja na seznamu primerjalnika, dokler se ne najde ujemanje ali seznam izčrpa. Če se ujema, se izda izhodno sporočilo za preverjanje; če ni ugotovljeno, se izda opozorilo. V zanko je vstavljena 3 -sekundna zamuda, tako da okno serijskega izhoda ne bo preobremenjeno s sporočili in da je nekaj časa za ponastavitev konfiguracije dip stikala.
//-------------------------------------------------------------------------------------
// Predstavitveni program za branje izhoda delilnika napetosti in ga uporabi za identifikacijo // trenutne konfiguracije dip stikala tako, da poišče izhodno vrednost v nizu // primerjalnih vrednosti za vsako možno nastavitev. Vrednosti v iskalnem nizu lahko // pridobimo iz prejšnjega zagona za konfiguracijo ali z izračunom // na podlagi osnovnih enačb. // ------------------------------------------------ -------------------------------------- primerjalnik int [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Določimo procesne spremenljivke int dipPin = A0; // analogni pin za vhod delilnika napetosti int dipIn = 0; // hrani izhodno napetost delilnika, prevedeno z analogRead int count = 0; // števec zanke int epsilon = 7; // primerjalni interval pol širine bool dipFound = false; // res, če je v iskalni tabeli poizvedba void setup () {pinMode (dipPin, INPUT) ugotovljen izhod delilnika trenutne napetosti; // konfiguriramo zatič delilnika napetosti kot vhodni serijski.begin (9600); // omogoči serijsko komunikacijo} void loop () {delay (3000); // preprečite, da bi se izhod prehitro premikal // Inicializirajte iskalne parametre count = 0; dipFound = false; // branje in dokumentiranje izhodne napetosti toka dipIn = analogRead (dipPin); Serial.print ("izhod delilnika"); Serial.print (dipIn); // Poišči trenutno vrednost na primerjalnem seznamu while ((count <16) && (! DipFound)) {if (abs (dipIn - primerjalnik [count]) <= epsilon) {// ugotovil, da je dipFound = true; Serial.print ("najdeno ob vstopu"); Serial.print (štetje); Serial.println ("vrednost" + niz (primerjalnik [število])); prekiniti; } count ++; } if (! dipFound) {// vrednost ni v tabeli; se ne bi smelo zgoditi Serial.println ("OOPS! Not found; bolje pokličite Ghost Busters"); }}
3. korak: Primerjalna preglednica
Izračuni za 16 primerjalnih vrednosti so podani v zgornji preglednici. Priložena datoteka Excel je na voljo za prenos na dnu tega razdelka.
Stolpci preglednic A-D beležijo vrednosti uporovnega stikala in 16 možnih nastavitev stikala. Upoštevajte, da je strojno DIP stikalo, prikazano na diagramu zasnove fritzinga, oštevilčeno od leve proti desni namesto oštevilčevanja od desne proti levi, prikazanega v preglednici. Zdelo se mi je nekoliko zmedeno, vendar alternativa ne postavlja konfiguracije "1" (0, 0, 0, 1) na prvo mesto na seznamu. Stolpec E uporablja formulo 2 prejšnjega razdelka za izračun ekvivalentne upornosti razdelilnika napetosti R1 za nastavitev. Stolpec F uporabi ta rezultat za izračun povezanega upora RATIO in na koncu stolpec G pomnoži RATIO z največjo vrednostjo analogRead (1023), da dobi predvideno vrednost primerjalnika. Zadnja 2 stolpca vsebujeta dejanske vrednosti iz izvajanja demo programa skupaj z razlikami med napovedanimi in dejanskimi vrednostmi.
V prejšnjem razdelku so bile omenjene tri metode za pridobitev nabora vrednosti primerjalnika, vključno s podaljšanjem te preglednice, če se vrednosti upora močno spremenijo ali se doda več stikal. Zdi se, da majhne razlike v vrednostih upora ne vplivajo bistveno na končne rezultate (kar je dobro, saj specifikacije uporov dajejo toleranco, recimo 5%, upor pa je le redko enak dejanski navedeni vrednosti).
4. korak: Predvajajte melodijo
Za ponazoritev, kako bi lahko tehniko z več stikali uporabili v aplikaciji, je predstavitveni program za primerjavo iz razdelka "Razlaga metode" spremenjen za izvedbo obdelave izbire melodije za program glasbene škatle. Posodobljena konfiguracija aplikacije je prikazana zgoraj. Edini dodatek k strojni opremi je pasivni piezo brenčalec za predvajanje izbrane melodije. Osnovna sprememba programske opreme je dodajanje rutine za predvajanje melodije, ki je enkrat identificirana, z uporabo brenčalca in rutine tonov Arduino.
Razpoložljivi delčki melodije so v datoteki z glavo Tunes.h skupaj z opredelitvijo potrebnih podpornih struktur. Vsaka melodija je opredeljena kot niz struktur, povezanih z notami, ki vsebujejo frekvenco in trajanje note. Opombe pogostosti so v ločeni datoteki glave, Pitches.h. Datoteke programa in glave so na voljo za prenos na koncu tega razdelka. Vse tri datoteke naj bodo v istem imeniku.
Izbira in identifikacija potekata na naslednji način:
- "Uporabnik" nastavi dip stikala v konfiguracijo, povezano z želeno melodijo
- vsak cikel programske zanke identifikator trenutne nastavitve preklopnega stikala pridobi preko analogRead
- Identifikator konfiguracije 2. koraka se primerja z vsakim primerjalnikom na seznamu razpoložljivih melodij
-
Če se ujema, se pokliče rutina playTune z informacijami, ki so potrebne za dostop do seznama opomb
S tonsko funkcijo Arduino se vsaka nota predvaja skozi zvočni signal
- Če ni ujemanja, se ne ukrepa
- ponovite 1-5
Nastavitve stikala DIP za razpoložljive melodije so prikazane v spodnji tabeli, kjer 1 pomeni, da je stikalo vklopljeno, 0 izklopljeno. Spomnite se, da je način, kako je dip stikalo usmerjeno, stikalo 1 v skrajnem levem položaju (tistem, ki je povezan z uporom 80K).
NAME | Stikalo 1 | Stikalo 2 | Stikalo 3 | Stikalo 4 |
Danny Boy | 1 | 0 | 0 | 0 |
Majhen medved | 0 | 1 | 0 | 0 |
Lev nocoj spi | 1 | 1 | 0 | 0 |
Težave ne pozna nihče | 0 | 0 | 1 | 0 |
Neverjetna milina | 0 | 0 | 0 | 1 |
Prazen prostor | 1 | 0 | 0 | 1 |
MockingBird Hill | 1 | 0 | 1 | 1 |
Kakovost zvoka iz piezo zvonilnika zagotovo ni dobra, vendar je vsaj prepoznavna. Če merimo tone, so zelo blizu točni frekvenci not. Ena zanimiva tehnika, uporabljena v programu, je shranjevanje podatkov o nastavitvah v odsek pomnilnika flash/programa namesto v privzeti razdelek pomnilnika podatkov z uporabo direktive PROGMEM. V razdelku s podatki so spremenljivke za obdelavo programa in so za nekatere mikrokrmilnike ATtiny veliko manjše, okoli 512 bajtov.
Priporočena:
Priključek ICSP za Arduino Nano brez spajkane glave zatiča, vendar Pogo Pin: 7 korakov
Priključek ICSP za Arduino Nano brez spajkane glave zatiča, vendar Pogo Pin: Naredite priključek ICSP za Arduino Nano brez spajkane glave zatiča na plošči, vendar Pogo Pin. -BP75-E2 (1,3 mm stožčasta glava) Vzmetna preskusna sonda Pogo Pin
Izbirnik barv: 4 koraki
Izbirnik barv: 1. stopnja 1. korak: nabava komponent Komponente: Esp. 32 (mikrokrmilnik) Obroč brez pikslov 12 & 9 (obročna luč RGB) Barvni senzor 3,7v baterija pretvornik 3,7v v 5v izzivi: Izvajanje natančnih meritev komponent 2. korak: Materiali za kodiranje: A
Enostavna nastavitev IR daljinskega upravljalnika z uporabo LIRC za Raspberry PI (RPi) - julij 2019 [2. del]: 3 koraki
Enostavna nastavitev daljinskega upravljalnika IR z uporabo LIRC za Raspberry PI (RPi) - julij 2019 [2. del]: V prvem delu sem pokazal, kako sestaviti RPi + VS1838b in konfigurirati modul LIRC Raspbian za sprejem ukazov IR z daljinskega upravljalnika IR. Vse težave s strojno opremo in nastavitvami LIRC so obravnavane v 1. delu. Drugi del bo pokazal, kako povezati strojno opremo
Nastavitev DS3231 RTC (ura v realnem času) natančno, hitro in avtomatizirano z uporabo Java (+-1 s): 3 koraki
Nastavitev DS3231 RTC (ure v realnem času) natančno, hitro in avtomatizirano z uporabo Jave (+-1 s): Ta navodila vam bodo pokazala, kako nastaviti uro na uri DS3231 v realnem času z uporabo Arduina in majhne aplikacije Java, ki uporablja serijska povezava Arduina. Osnovna logika tega programa: 1. Arduino pošlje serijsko zahtevo
Izbirnik zvoka v kovnici: 3,5 mm Avdio stikalo: 6 korakov
Izbirnik zvoka Mint Box: 3,5 -milimetrsko zvočno stikalo: Težava: pogosto moram na namizju uporabljati slušalke za igre ali poslušanje glasbe, medtem ko so v sobi drugi ljudje, nato pa moram preklopiti na zvočnike, če želim pokazati smešno video ali vzpostavite internetni klic z oddaljenim sorodnikom. Th