Turinys:

Naudokite 1 analoginę įvestį 6 „Arduino“mygtukams: 6 žingsniai
Naudokite 1 analoginę įvestį 6 „Arduino“mygtukams: 6 žingsniai

Video: Naudokite 1 analoginę įvestį 6 „Arduino“mygtukams: 6 žingsniai

Video: Naudokite 1 analoginę įvestį 6 „Arduino“mygtukams: 6 žingsniai
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Lapkritis
Anonim
„Arduino“naudokite 1 analoginį įvestį 6 mygtukams
„Arduino“naudokite 1 analoginį įvestį 6 mygtukams

Dažnai susimąsčiau, kaip galėčiau gauti daugiau skaitmeninių įėjimų savo „Arduino“. Neseniai man pasirodė, kad turėčiau turėti galimybę naudoti vieną iš analoginių įėjimų, kad įvestų kelis skaitmeninius įėjimus. Greitai paieškojau ir radau, kur žmonės galėjo tai padaryti, tačiau tai leido vienu metu paspausti tik vieną mygtuką. Noriu turėti galimybę bet kokiu mygtukų deriniu paspausti SIMULIU. Taigi, padedamas TINKERCAD CIRCUITS, nusprendžiau tai padaryti.

Kodėl norėčiau vienu metu paspausti mygtukus? Kaip parodyta „TinkerCad Circuits“konstrukcijoje, jis gali būti naudojamas DIP jungiklio įvestims pasirinkti įvairius programos režimus.

Mano sukurta grandinė naudoja 5 V šaltinį, kurį galima įsigyti iš „Arduino“, ir naudoja 7 rezistorius ir 6 mygtukus ar jungiklius.

1 žingsnis: grandinė

Circuit
Circuit

„Arduino“turi analoginius įėjimus, kurie priima nuo 0V iki 5V įvestį. Ši įvestis turi 10 bitų skiriamąją gebą, o tai reiškia, kad signalas yra padalintas į 2^10 segmentus arba 1024 skaičius. Remiantis tuo, daugiausiai, ką galėtume įvesti į analoginį įėjimą, tuo pačiu metu leidžiant paspausti, būtų 10 mygtukų iki 1 analoginio įėjimo. Tačiau tai nėra tobulas pasaulis. Yra laidininkų atsparumas, triukšmas iš išorinių šaltinių ir netobula galia. Taigi, norėdamas suteikti sau daug lankstumo, planavau jį sukurti 6 mygtukams. Tam iš dalies įtakos turėjo tai, kad „TinkerCAD Circuits“turėjo 6 jungiklių DIP jungiklio objektą, kuris palengvintų testavimą.

Pirmasis mano dizaino žingsnis buvo įsitikinti, kad kiekvienas mygtukas, paspaudus atskirai, suteiks unikalią įtampą. Tai atmetė galimybę, kad visi rezistoriai būtų tos pačios vertės. Kitas žingsnis buvo tas, kad pasipriešinimo vertės, pridėtos lygiagrečiai, negalėjo turėti tokio paties pasipriešinimo kaip bet kuri viena rezistoriaus vertė. Kai rezistoriai prijungti lygiagrečiai, gautą varžą galima apskaičiuoti pagal Rx = 1/[(1/R1)+(1/R2)]. Taigi, jei R1 = 2000 ir R2 = 1000, Rx = 667. Spėliojau, kad padvigubinus kiekvieno rezistoriaus dydį, nematysiu tokio pat pasipriešinimo nė vienam deriniui.

Taigi, mano grandinė iki šiol turėjo turėti 6 jungiklius, kurių kiekvienas turi savo rezistorių. Tačiau norint užbaigti šią grandinę, reikia dar vieno rezistoriaus.

Paskutinis rezistorius turi 3 tikslus. Pirma, jis veikia kaip ištraukiamas rezistorius. Be rezistoriaus, kai nepaspaudžiami jokie mygtukai, grandinė yra neišsami. Tai leistų įtampai „Arduino“analoginėje įvestyje pakilti iki bet kokio įtampos potencialo. Ištraukiamas rezistorius iš esmės sumažina įtampą iki 0 V. Antrasis tikslas yra apriboti šios grandinės srovę. Omo dėsnis teigia, kad V = IR arba įtampa = srovė, padauginta iš pasipriešinimo. Esant tam tikram įtampos šaltiniui, didesnis rezistorius reiškia, kad srovė bus mažesnė. Taigi, jei 500 voltų rezistoriui būtų taikomas 5 V signalas, didžiausia srovė, kurią galėtume matyti, būtų 0,01A arba 10mA. Trečiasis tikslas yra užtikrinti signalo įtampą. Bendra srovė, tekanti per paskutinį rezistorių, būtų: i = 5V/R (1/R5)+(1/R6)]}. Tačiau kiekvienam rezistoriui, paspaudusiam atitinkamą mygtuką, įtraukite tik 1/Rx. Iš visos srovės įtampa, tiekiama į analoginę įvestį, būtų i*Rlast arba i*500.

2 žingsnis: įrodymas - „Excel“

Įrodymas - „Excel“
Įrodymas - „Excel“

Greičiausias ir lengviausias būdas įrodyti, kad su šia grandine gausiu unikalių varžų, taigi ir unikalių įtampų, buvo „Excel“galimybių naudojimas.

Aš sukūriau visus galimus jungiklių įvesties derinius ir juos nuosekliai sutvarkiau pagal dvejetainius modelius. „1“reikšmė rodo, kad jungiklis yra įjungtas, tuščia - išjungta. Skaičiuoklės viršuje įvedu kiekvieno jungiklio ir ištraukiamojo rezistoriaus varžos vertes. Tada aš apskaičiavau ekvivalentinį pasipriešinimą kiekvienam deriniui, išskyrus tuos atvejus, kai visi rezistoriai yra išjungti, nes šie rezistoriai neturės įtakos be maitinimo šaltinio. Kad būtų lengviau atlikti skaičiavimus, kad galėčiau nukopijuoti ir įklijuoti kiekvieną derinį, į skaičiavimą įtraukiau visas kombinacijas, padaugindamas kiekvieną jungiklio vertę (0 arba 1) iš apverstos varžos vertės. Tai padarius, pasipriešinimas nebuvo pašalintas iš skaičiavimo, jei jungiklis buvo išjungtas. Gautą lygtį galima pamatyti skaičiuoklės paveikslėlyje, bet Req = Rx + 1/(Sw1/R1 + Sw2/R2 + Sw3/R3 + Sw4/R4 + Sw5/R5 + Sw6/R6). Naudodami Itotal = 5V / Req, mes nustatome bendrą srovę per grandinę. Tai ta pati srovė, kuri eina per ištraukiamąjį rezistorių ir suteikia mums įtampą mūsų analoginei įėjimui. Tai apskaičiuojama kaip Vin = Itotal x Rx. Nagrinėdami ir Req, ir Vin duomenis, galime pastebėti, kad iš tiesų turime unikalių vertybių.

Šiuo metu atrodo, kad mūsų grandinė veiks. Dabar išsiaiškinkite, kaip užprogramuoti „Arduino“.

3 žingsnis: „Arduino“programavimas

Arduino programavimas
Arduino programavimas
Arduino programavimas
Arduino programavimas
Arduino programavimas
Arduino programavimas

Kai pradėjau galvoti apie tai, kaip programuoti „Arduino“, iš pradžių planavau nustatyti atskirus įtampos diapazonus, kad nustatyčiau, ar jungiklis yra įjungtas, ar išjungtas. Tačiau vieną naktį gulint lovoje man pasirodė, kad turėčiau rasti lygtį tai padaryti. Kaip? EXCEL. „Excel“turi galimybę apskaičiuoti lygtis, kad geriausiai atitiktų diagramos duomenis. Norėdami tai padaryti, aš noriu jungiklių (dvejetainių) sveikojo skaičiaus lygties ir tą vertę atitinkančios įtampos įvesties. „Excel“darbaknygėje sveiko skaičiaus vertę įdėjau į kairę skaičiuoklės pusę. Dabar nustatykite mano lygtį.

Čia yra trumpa pamoka, kaip nustatyti „Excel“eilutės lygtį.

1) Pasirinkite langelį, kuriame nėra jokių duomenų. Jei pasirinkote langelį, kuriame yra duomenų, „Excel“bandys atspėti, ką norite pakeisti. Dėl to daug sunkiau nustatyti tendenciją, nes „Excel“retai prognozuoja teisingai.

2) Pasirinkite skirtuką „Įterpti“ir pasirinkite „Scatter“diagramą.

3) Dešiniuoju pelės mygtuku spustelėkite diagramos laukelį ir spustelėkite „Pasirinkti duomenis…“. Pasirodys langas „Pasirinkti duomenų šaltinį“. Jei norite toliau pasirinkti duomenis, pasirinkite mygtuką Pridėti.

4) Suteikite serijos pavadinimą (neprivaloma). Pasirinkite X ašies diapazoną spustelėdami rodyklę aukštyn ir tada pasirinkę įtampos duomenis. Pasirinkite Y ašies diapazoną spustelėdami rodyklę aukštyn ir tada pasirinkdami sveikųjų skaičių duomenis (0-63).

5) Dešiniuoju pelės mygtuku spustelėkite duomenų taškus ir pasirinkite „Pridėti tendencijos liniją …“Lange „Formatuoti tendencijų liniją“pasirinkite daugiakampį mygtuką. Žvelgdami į tendenciją, matome, kad 2 užsakymas ne visai atitinka. Aš pasirinkau 3 užsakymą ir maniau, kad tai daug tiksliau. Pažymėkite žymės langelį „Rodyti lygtį diagramoje“. Galutinė lygtis dabar rodoma diagramoje.

6) Atlikta.

GERAI. Grįžkime prie „Arduino“programos. Dabar, kai turime lygtį, „Arduino“programavimas yra lengvas. Sveikasis skaičius, reiškiantis jungiklio pozicijas, apskaičiuojamas 1 kodo eilutėje. Naudodamiesi „bitread“funkcija, galime paimti kiekvieno atskiro bitų vertę ir taip žinoti kiekvieno mygtuko būseną. (ŽR. NUOTRAUKAS)

4 žingsnis: TinkerCAD grandinės

TinkerCAD grandinės
TinkerCAD grandinės

Jei nesate patikrinę „TinkerCAD Circuits“, padarykite tai dabar. LAUKTI!!!! Baikite skaityti mano „Instructable“ir patikrinkite. „TinkerCAD Circuits“labai palengvina „Arduino“grandinių testavimą. Jį sudaro keli elektros objektai ir „Arduinos“, netgi leidžiantys užprogramuoti „Arduino“testavimui.

Norėdami išbandyti savo grandinę, naudodamas DIP jungiklių paketą nustatiau 6 jungiklius ir pririšau juos prie rezistorių. Norėdami įrodyti, kad įtampos vertė mano „Excel“skaičiuoklėje buvo teisinga, įvestyje į „Arduino“parodžiau voltmetrą. Visa tai veikė taip, kaip tikėtasi.

Norėdami įrodyti, kad „Arduino“programavimas veikė, išvedžiau jungiklių būsenas į šviesos diodus, naudodamas „Arduino“skaitmeninius išėjimus.

Tada perjungiau kiekvieną jungiklį kiekvienam įmanomam deriniui ir didžiuojuosi galėdamas pasakyti „IT VEIKIA“!!!

5 žingsnis: „Taip ilgai ir ačiū už visas žuvis“. (1 nuoroda)

Aš dar neturėjau to išbandyti naudodamas tikrą įrangą, nes šiuo metu keliauju dėl darbo. Bet, įrodęs tai naudodami „TinkerCAD Circuits“, tikiu, kad tai veiks. Iššūkis yra tas, kad mano nurodytos rezistorių vertės nėra visos standartinės rezistorių vertės. Norėdami tai išvengti, planuoju naudoti potenciometrus ir rezistorių derinius, kad gautumėte man reikalingas vertes.

Ačiū, kad perskaitėte mano instrukciją. Tikiuosi, kad tai padės jums įgyvendinti jūsų projektus.

Palikite komentarus, jei bandėte įveikti tą pačią kliūtį ir kaip ją išsprendėte. Norėčiau sužinoti daugiau būdų tai padaryti.

6 žingsnis: nuorodos

Ar nemanėte, kad pateiksiu citatą nenurodydamas šaltinio?

ref. 1: Adamsas, Douglasas. Taip ilgai ir ačiū už visas žuvis. („Trilogijos“4 -oji „Autostopininko vadovas galaktikai“knyga)

Rekomenduojamas: