Sisukord:
- Samm: nõutav riistvara
- 2. samm: mitme lülitiga meetodi selgitus
- 3. samm: võrdleva arvutustabel
- 4. samm: esitage lugu
Video: DIP -häälestusvalija 1 tihvti abil: 4 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
Mõni aeg tagasi töötasin "muusikakasti" projekti kallal, mille jaoks oli vaja valida koguni 10 erineva helilõigu vahel. Loomulik valik konkreetse loo valimiseks oli 4 -pin dip -lüliti, kuna 4 lülitit pakub 24= 16 erinevat seadet. Selle lähenemisviisi toore jõu rakendamiseks on aga vaja 4 seadme tihvti, üks iga lüliti jaoks. Kuna plaanisin arendamiseks kasutada ATtiny85, oli 4 tihvti kadu natuke liiga palju. Õnneks sattusin artikli juurde, mis kirjeldab geniaalset meetodit 1 analoogpinna kasutamiseks mitme lüliti sisendi haldamiseks.
Mitme lülitiga 1-sisenditehnika kasutab pingejaotusahelat, et anda ainulaadne täisarv iga 16 võimaliku lüliti seadistuse kombinatsiooni jaoks. Seda 16 täisarvu identifikaatorite komplekti kasutatakse seejärel rakendusprogrammis toimingu seadistusega seostamiseks.
See juhend sisaldab muusikakastirakenduse häälestusvaliku rakendamiseks mitme lüliti meetodit. Seejärel esitatakse valitud meloodia läbi pieso -summeri, kasutades Arduino toonifunktsiooni.
Samm: nõutav riistvara
UNO kasutamine rakendusplatvormina minimeerib vajalike riistvarakomponentide arvu. Mitme lülitiga sisendmeetodi rakendamiseks on vaja ainult 4-kontaktilist dip-lülitit, 5 takistit, mida kasutatakse pingejaguri jaoks, ja ühenduste ühendamiseks juhtmestikku. Muusikakasti häälestusvaliku rakendamiseks lisatakse konfiguratsioonile piesosummer. Valikuliselt, sõltuvalt kasutatavast dip -lüliti tüübist, on kasulik kasutada 2x4 8 -kontaktilist pistikupesa, et ühendada dip -lüliti leivaplaadiga, kuna tavalised dip -lüliti tihvtid näivad olevat mõeldud jootmiseks perfboardile, mida ei ühendata otse leivaplaadiga. Pistikupesa stabiliseerib dip -lüliti ühendusi ja hoiab lülitit lülituslülitite seadistamisel kergesti tõstmata.
Nimi | Võimalik allikas | Kuidas kasutada |
---|---|---|
4-kontaktiline dip-lüliti | Valiku häälestamine | |
2x4 -pin pistikupesa (valikuline) | Amazon | Enamiku dip -lülitite postid ei hoia lülitit leivalaual kuigi hästi. Pistikupesa aitab ühendust kindlamaks muuta. Alternatiiviks on leida dip -lüliti, mis on tõeliselt valmistatud tavaliste IC -tihvtidega leivaplaadi kasutamiseks. |
takistid:
|
Rakendage pingejagur | |
passiivne piesosummer | Amazon | Esitage meloodiat rakenduse juhituna Arduino toonifunktsiooni kaudu |
2. samm: mitme lülitiga meetodi selgitus
Selles jaotises käsitletakse mitme lüliti meetodi põhikontseptsioone ja töötatakse välja võrrandid, mis on vajalikud ainulaadsete identifikaatorite iseseisvaks arvutamiseks iga 16 võimaliku dip-lüliti seadistuse jaoks. Neid identifikaatoreid saab seejärel kasutada rakendusprogrammis, et siduda lüliti konfiguratsioon toiminguga. Näiteks võite soovida, et seade - lüliti 1 sisse, lüliti 2 välja, lüliti 3 välja, lüliti 4 välja (1, 0, 0, 0) - mängiks Amazing Grace'i ja (0, 1, 0, 0) mängiks Lõvi magab täna öösel. Lühiduse ja lühiduse huvides nimetatakse konfiguratsiooni identifikaatoreid dokumendi ülejäänud osas võrdlusvahenditeks.
Mitme lülitiga meetodi põhikontseptsioon on pingejaguri ahel, mis koosneb kahest jadamisi takistusest, mis on ühendatud sisendpingega. Väljundpinge juhe on ühendatud takistite vahele, R1 ja R2, nagu eespool näidatud. Jagaja väljundpinge arvutatakse sisendpinge korrutatuna takisti R suhtega2 summale R1 ja R2 (võrrand 1). See suhe on alati väiksem kui 1, seega on väljundpinge alati väiksem kui sisendpinge.
Nagu ülaltoodud konstruktsiooniskeemil näidatud, on multilüliti konfigureeritud pingejagajaks koos R-ga2 fikseeritud ja R1 võrdne komposiit/ekvivalentse takistusega 4 dip -lülitiga takistitel. R väärtus1 sõltub sellest, millised dip -lülitid on sisse lülitatud ja aitavad seega kaasa komposiittakistusele. Kuna dip -lüliti takistid on paralleelsed, on ekvivalenttakistuse arvutamise võrrand esitatud komponentide takistite vastastikuste väärtustega. Meie konfiguratsiooni ja kõigi lülitite sisselülitamise korral saab võrrand
1/R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000
andes R1 = 5333,33 volti. Arvestades asjaolu, et enamikul seadistustel on vähemalt üks lülititest välja lülitatud, kasutatakse kordajana lüliti olekut:
1/R1 = s1*1/80000 + s2*1/4000 + s3*1/20000 + s4*1/10000 (2)
kus oleku kordaja, si, on võrdne 1 -ga, kui lüliti on sisse lülitatud, ja võrdub 0 -ga, kui lüliti on välja lülitatud. R1 saab nüüd kasutada võrrandis 1 vajaliku takistuse suhte arvutamiseks. Kasutades näidet uuesti juhul, kui kõik lülitid on sisse lülitatud
SUHTE = R2/(R.1+R2) = 10000/(5333.33+10000) =.6522
Prognoositava võrdlusväärtuse arvutamise viimane samm on RATIO korrutamine 1023 -ga, et jäljendada funktsiooni analogRead mõju. Juhtumi, kus kõik lülitid on sisse lülitatud, identifikaator on siis
võrdleja15 = 1023*.6522 = 667
Kõik võrrandid on nüüd olemas 16 võimaliku lüliti sätte identifikaatorite arvutamiseks. Kokku võtma:
- R1 arvutatakse võrrandi 2 abil
- R1 ja R2 kasutatakse nendega seotud takistuse RATIO arvutamiseks
- võrdlusväärtuse saamiseks korrutatakse suhtarv 1023 -ga
- valikuliselt saab ennustatud väljundpinget arvutada ka kui RATIO*Vin
Komparaatorite komplekt sõltub ainult pingejaguri jaoks kasutatud takisti väärtustest ja on konfiguratsiooni jaoks ainulaadne allkiri. Kuna jagaja väljundpinged kõikuvad jooksvalt (ja lugemisel lugemiseks), varieerub selles kontekstis ainulaadne, et kuigi kaks identifikaatorite komplekti ei pruugi olla täpselt samad, on need piisavalt lähedal, et komponentide võrdluserinevused jäävad väikese eel- määratud intervall. Intervallisuuruse parameeter tuleb valida piisavalt suur, et arvestada eeldatavate kõikumistega, kuid piisavalt väike, et erinevad lüliti sätted ei kattuks. Tavaliselt töötab 7 vaheaja poole laiuse jaoks hästi.
Konkreetse konfiguratsiooni võrdluskomplekti saab hankida mitmel viisil - käivitage demoprogramm ja salvestage iga seadistuse väärtused; arvutamiseks kasutage järgmise jaotise tabelit; kopeerige olemasolev komplekt. Nagu eespool märgitud, on kõik komplektid tõenäoliselt veidi erinevad, kuid peaksid töötama. Soovitan mitme meetodi seadistamiseks kasutada meetodi autori identifikaatorikomplekti ja järgmise jaotise arvutustabelit, kui mõnda takistit on oluliselt muudetud või lisatakse rohkem takistid.
Järgmine demoprogramm illustreerib võrdlusmasinate kasutamist praeguse dip -lüliti sätte tuvastamiseks. Igas programmitsüklis viiakse läbi analogRead, et saada praeguse konfiguratsiooni identifikaator. Seejärel võrreldakse seda identifikaatorit võrdlusloendis, kuni vaste leitakse või loend ammendub. Kui vaste leitakse, väljastatakse kontrollimiseks väljundsõnum; kui seda ei leita, antakse hoiatus. Silmusesse sisestatakse 3 -sekundiline viivitus, nii et jadaväljundi aken ei jääks sõnumitega ülekoormatuks, ning anda aega lülituslüliti konfiguratsiooni lähtestamiseks.
//-------------------------------------------------------------------------------------
// Demoprogramm pingejaguri väljundi lugemiseks ja selle abil // praeguse dip -lüliti konfiguratsiooni tuvastamiseks, otsides väljundväärtust üles iga võimaliku sätte // võrdlusväärtuste massiivist. Otsingumassiivi väärtused saab // saada konfiguratsiooni eelmisest käivitamisest või arvutuste kaudu //, mis põhinevad aluseks olevatel võrranditel. // ------------------------------------------------ -------------------------------------- võrdlejas [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Töötlusmuutujate määratlemine int dipPin = A0; // analoogpinge pingejaguri sisendi jaoks int dipIn = 0; // omab jagaja pinge väljundit, mis on tõlgitud analogRead int count = 0; // silmusloendur int epsilon = 7; // võrdlusintervall poole laiusega bool dipFound = false; // tõsi, kui praegusest pingejaguri väljundist leiti otsingu tabel void setup () {pinMode (dipPin, INPUT); // seadista pingejaoturi tihvt INPUT Serial.begin (9600); // jadaühenduse lubamine} void loop () {delay (3000); // hoidke väljundit liiga kiirelt kerimisest // Otsinguparameetrite initsialiseerimine count = 0; dipFound = vale; // Voolu väljundpinge lugemine ja dokumenteerimine dipIn = analogRead (dipPin); Serial.print ("jagaja väljund"); Serial.print (dipIn); // Otsi võrdlusloendist praegust väärtust, kui ((loend <16) && (! DipFound)) {if (abs (dipIn - võrdlus [count]) <= epsilon) {// leidis selle dipFound = true; Serial.print ("leitud sisenemisel"); Serial.print (count); Serial.println ("väärtus" + string (võrdlus [loend])); murda; } loendama ++; } if (! dipFound) {// väärtus pole tabelis; ei tohiks juhtuda Serial.println ("OOPS! Ei leitud; parem helistada Ghost Busters"); }}
3. samm: võrdleva arvutustabel
Arvutused 16 võrdlusväärtuse kohta on toodud ülaltoodud arvutustabelis. Lisatud Exceli fail on allalaadimiseks saadaval selle jaotise allosas.
Arvutustabeli veerud A-D registreerivad dip-lüliti takisti väärtused ja 16 võimalikku lüliti seadistust. Pange tähele, et fritiseerimise skeemil näidatud riistvara DIP -lüliti on tegelikult nummerdatud arvutustabelis näidatud paremalt vasakule nummerdamise asemel vasakult paremale. Mulle tundus see mõnevõrra segane, kuid alternatiiv ei sea konfiguratsiooni "1" (0, 0, 0, 1) loendi esimesele kohale. Veerus E kasutatakse pingejaoturi ekvivalentse takistuse R arvutamiseks eelmise jaotise valemit 21 seadistuse jaoks. Veerg F kasutab seda tulemust seonduva takistuse suhte arvutamiseks ja lõpuks veerg G korrutab RATIO väärtuse analogRead max väärtusega (1023), et saada ennustatud võrdlusväärtus. Viimased 2 veergu sisaldavad demo programmi tegelikke väärtusi koos prognoositud ja tegelike väärtuste erinevustega.
Eelmises osas mainiti kolme meetodit võrdlusväärtuste kogumi saamiseks, sealhulgas selle arvutustabeli laiendamiseks, kui takisti väärtusi oluliselt muudetakse või lisatakse rohkem lüliteid. Näib, et takistite väärtuste väikesed erinevused ei mõjuta oluliselt lõpptulemusi (mis on hea, kuna takistite spetsifikatsioonid annavad tolerantsi, näiteks 5%ja takisti on harva võrdne selle tegeliku väärtusega).
4. samm: esitage lugu
Selleks, et illustreerida mitme lüliti tehnikat rakenduses kasutada, muudetakse jaotise "Meetodi selgitus" võrdlusdemokrogrammi, et rakendada muusikakasti programmi häälestusvaliku töötlemine. Rakenduse värskendatud konfiguratsioon on näidatud ülal. Riistvara ainus täiendus on passiivne piesosummer valitud viisi esitamiseks. Tarkvara põhimuudatus on helina ja Arduino toonirutiini abil tuvastatud viisi esitamise rutiini lisamine.
Saadaolevad viisijupid sisalduvad päisefailis Tunes.h koos vajalike tugistruktuuride määratlusega. Iga viis on määratletud kui märkmetega seotud struktuuride massiiv, mis sisaldab noodi sagedust ja kestust. Märkmete sagedused sisalduvad eraldi päisefailis Pitches.h. Programmi ja päisefailid on selle jaotise lõpus allalaadimiseks saadaval. Kõik kolm faili tuleks paigutada samasse kataloogi.
Valik ja identifitseerimine toimub järgmiselt.
- "Kasutaja" seab dip -lülitid soovitud häälestusega seotud konfiguratsiooni
- igal programmitsükli tsüklil saadakse analogRead kaudu praeguse dip -lüliti sätte identifikaator
- 2. etapi konfiguratsioonitunnust võrreldakse kõigi saadaolevate lugude loendis olevate võrdlejatega
-
Kui vaste leitakse, kutsutakse välja playTune rutiin koos vajalike andmetega, et pääseda juurde häälestusloendile
Kasutades Arduino toonifunktsiooni, esitatakse iga noot läbi summeri
- Kui vastet ei leita, ei võeta midagi ette
- korrake 1-5
Saadaval olevate lugude DIP -lüliti sätted on toodud allolevas tabelis, kus 1 tähendab lülitit sees, 0 väljalülitamist. Tuletame meelde, et see, kuidas dip-lüliti on orienteeritud, asetab lüliti 1 vasakpoolsesse asendisse (see, mis on seotud 80K takistiga).
NIMI | Lüliti 1 | Lüliti 2 | Lüliti 3 | Lüliti 4 |
Danny Boy | 1 | 0 | 0 | 0 |
Väike karu | 0 | 1 | 0 | 0 |
Lõvi magab täna öösel | 1 | 1 | 0 | 0 |
Keegi ei tea häda | 0 | 0 | 1 | 0 |
Imeline graatsia | 0 | 0 | 0 | 1 |
Tühi ruum | 1 | 0 | 0 | 1 |
MockingBird Hill | 1 | 0 | 1 | 1 |
Piesokummi helikvaliteet pole kindlasti suurepärane, kuid see on vähemalt äratuntav. Kui toonid on mõõdetud, on need nootide sagedusele väga lähedal. Üks huvitav tehnika, mida programmis kasutatakse, on salvestada häälestusandmed välk-/programmimälu sektsiooni, mitte vaikimisi andmete mälu sektsiooni, kasutades PROGMEM direktiivi. Andmete sektsioon sisaldab programmi töötlemise muutujaid ja on mõne ATtiny mikrokontrolleri puhul palju väiksem, umbes 512 baiti.
Soovitan:
ICSP pistik Arduino Nano jaoks ilma joodetud tihvti päiseta, kuid Pogo tihvt: 7 sammu
ICSP -pistik Arduino Nano jaoks ilma joodetud tihvti päiseta, kuid ilma Pogo -tihvtita: tehke Arduino Nano jaoks ICSP -pistik ilma joodetud tihvti päiseta pardal, kuid Pogo -tihvtina. Osad 3 × 2 -pin pistikupesa x1 - APitch 2,54 mm Dupont -liinijuhtmestiku pistikupesa klemmid x6 -BP75-E2 (1,3 mm kooniline pea) vedrutesti sondi Pogo tihvt
4 numbrit 7 segmenti kuva 14 tihvti Arduinoga: 3 sammu
4 numbrit 7 segmenti kuva 14 tihvti Arduinoga: alati on hea mõte testida, kas seade töötab korralikult või mitte, kui sellel komponendil on väga palju kontakte. Selles projektis olen testinud oma 4 -kohalist 7 -segmendilist 14 -pin ekraani. Kõik 7 segmenti kuvatakse korraga 0 kuni 9
3 ATtiny85 tihvti juhtimine - Nrf24L01 - võrguühendus: 7 sammu
3 ATtiny85 Pins Control of the - Nrf24L01 - التحكم بثلاثة دبابيس فى: بسم الله الرحمن الرحيم
ESP8266-01 4 tihvti kasutamine: 3 sammu
ESP8266-01 nelja tihvti kasutamine: Märkus. See projekt on põhimõtteliselt varasema juhendi laiendus, mis kasutas ainult 2 tihvti. ESP8266-01 GPIO-tihvtide piiratud arv (4) võib tunduda takistuseks tõsine rakendus. Kuid kui tihvte kasutatakse nutikalt, on see
ATtiny84/85 SPI liidese tihvti korduvkasutamine: 6 sammu
ATtiny84/85 SPI liidese tihvti korduvkasutamine: see juhend on järg "" ATtiny84/85 ahelasisesele silumisele jadaväljundiga " juhendatav ja laiendab seda riist- ja tarkvarakonfiguratsiooni, et lahendada rakendusprogrammide allalaadimisnõelte taaskasutamise probleem