Sisukord:

Kasutage 1 analoogsisendit 6 nupu jaoks Arduino jaoks: 6 sammu
Kasutage 1 analoogsisendit 6 nupu jaoks Arduino jaoks: 6 sammu

Video: Kasutage 1 analoogsisendit 6 nupu jaoks Arduino jaoks: 6 sammu

Video: Kasutage 1 analoogsisendit 6 nupu jaoks Arduino jaoks: 6 sammu
Video: Начало работы с QLC+ Управление цветомузыкой с компьютера. Как управлять светом. 2024, November
Anonim
Kasutage Arduino jaoks 1 analoogsisendit 6 nupu jaoks
Kasutage Arduino jaoks 1 analoogsisendit 6 nupu jaoks

Olen sageli mõelnud, kuidas saaksin oma Arduino jaoks rohkem digitaalseid sisendeid. Hiljuti tuli mulle pähe, et peaksin saama kasutada ühte analoogsisendit mitme digitaalse sisendi toomiseks. Otsisin kiiresti ja leidsin, kus inimesed seda teha saavad, kuid need võimaldavad korraga vajutada ainult ühte nuppu. Ma tahan, et mul oleks võimalik ükskõik millist nuppude kombinatsiooni korraga vajutada. Niisiis asusin ma TINKERCAD CIRCUITSi abiga selle ellu viima.

Miks peaksin soovima üheaegseid nupuvajutusi? Nagu on näidatud TinkerCad Circuits disainis, saab seda kasutada DIP -lüliti sisendite jaoks programmi erinevate režiimide valimiseks.

Minu loodud skeem kasutab Arduinost saadaolevat 5 V allikat ja kasutab 7 takistit ja 6 nuppu või lülitit.

1. samm: vooluring

Ringkond
Ringkond

Arduinol on analoogsisendid, mis aktsepteerivad 0V kuni 5V sisendit. Sellel sisendil on 10-bitine eraldusvõime, mis tähendab, et signaal on jagatud 2^10 segmendiks või 1024 loendiks. Selle põhjal oleks kõige rohkem, mida me saaksime kunagi analoogsisendisse sisestada, lubades samal ajal vajutada, 10 nuppu ühe analoogsisendiga. Kuid see pole täiuslik maailm. Juhtidel on takistus, väljastpoolt pärinev müra ja ebatäiuslik toide. Niisiis, et anda endale palju paindlikkust, plaanisin selle kujundada kuue nupu jaoks. Seda mõjutas osaliselt asjaolu, et TinkerCAD Circuitsil oli 6 lülitiga DIP Switch objekt, mis hõlbustaks testimist.

Minu disaini esimene samm oli veenduda, et iga nupp eraldi vajutades annaks ainulaadse pinge. See välistas, et kõik takistid on sama väärtusega. Järgmine samm oli see, et paralleelselt lisatud takistuste väärtustel ei saa olla sama takistust kui ühelgi takisti väärtusel. Kui takistid on ühendatud paralleelselt, saab saadud takistuse arvutada Rx = 1/[(1/R1)+(1/R2)]. Niisiis, kui R1 = 2000 ja R2 = 1000, siis Rx = 667. Oletasin, et kahekordistades iga takisti suurust, ei näe ma ühegi kombinatsiooni puhul sama takistust.

Niisiis, minu vooluahel pidi olema 6 lülitit, millest igaühel on oma takisti. Kuid selle vooluringi lõpuleviimiseks on vaja veel ühte takisti.

Viimasel takistil on 3 eesmärki. Esiteks toimib see tõmbetakistina. Ilma takisti, kui ühtegi nuppu ei vajutata, on vooluahel puudulik. See võimaldaks Arduino analoogsisendi pingel hõljuda mis tahes pingepotentsiaalini. Pull-down takisti tõmbab sisuliselt pinge alla 0 V. Teine eesmärk on piirata selle vooluahela voolu. Ohmi seadus ütleb, et V = IR või pinge = vool korrutatakse takistusega. Antud pingeallika puhul tähendab takisti seda suurem, et vool oleks väiksem. Niisiis, kui 500 oomi takistile rakendataks 5 V signaali, oleks suurim vool, mida me näeksime, 0,01A või 10mA. Kolmas eesmärk on signaali pinge tagamine. Viimane takisti läbiv koguvool oleks: i = 5V/Rkotaal, kus Rtotal = Rlast+{1/[(1/R1)+(1/R2)+(1/R3)+(1/R4)+ (1/R5)+(1/R6)]}. Sisestage siiski ainult 1/Rx iga takisti kohta, millel on vastavat nuppu vajutatud. Kogu voolust oleks analoogsisendisse tarnitud pinge i*Rlast või i*500.

2. samm: tõestus - Excel

Tõestus - Excel
Tõestus - Excel

Kiireim ja lihtsaim viis tõestada, et saan selle vooluahelaga ainulaadseid takistusi ja seega ainulaadseid pingeid, oli kasutada Exceli võimalusi.

Seadistasin kõik lülitite sisendite võimalikud kombinatsioonid ja korraldasin need järjestikku binaarsete mustrite järgi. Väärtus "1" näitab, et lüliti on sisse lülitatud, tühi näitab, et see on välja lülitatud. Arvutustabeli ülaosas sisestasin iga lüliti ja allalaaditava takisti takistuse väärtused. Seejärel arvutasin iga kombinatsiooni jaoks samaväärse takistuse, välja arvatud juhul, kui kõik takistid on välja lülitatud, kuna need takistid ei mõjuta ilma toiteallikata. Arvutuste hõlbustamiseks ja igale kombinatsioonile kopeerimiseks ja kleepimiseks lisasin arvutusse kõik kombinatsioonid, korrutades iga lüliti väärtuse (0 või 1) selle vastupidise väärtusega. See kõrvaldas selle takistuse arvutusest, kui lüliti oli välja lülitatud. Saadud võrrandit saab näha arvutustabeli pildil, kuid Req = Rx + 1/(Sw1/R1 + Sw2/R2 + Sw3/R3 + Sw4/R4 + Sw5/R5 + Sw6/R6). Kasutades Itotal = 5V / Req, määrame vooluahela koguvoolu. See on sama vool, mis läbib tõmbetakistit ja annab meile analoogsisendile pinge. See arvutatakse kui Vin = Itotal x Rx. Uurides nii Reqi andmeid kui ka Vini andmeid, näeme, et meil on tõepoolest ainulaadsed väärtused.

Sel hetkel tundub, et meie vooluring töötab. Nüüd mõtleme välja, kuidas Arduino programmeerida.

Samm: Arduino programmeerimine

Arduino programmeerimine
Arduino programmeerimine
Arduino programmeerimine
Arduino programmeerimine
Arduino programmeerimine
Arduino programmeerimine

Kui hakkasin mõtlema, kuidas Arduino programmeerida, plaanisin esialgu seadistada individuaalsed pingevahemikud, et teha kindlaks, kas lüliti on sisse või välja lülitatud. Kuid ühel õhtul voodis lamades tuli mulle pähe, et peaksin leidma selle jaoks võrrandi. Kuidas? EXCEL. Excelil on võimalus arvutada võrrandeid nii, et need sobiksid kõige paremini diagrammi andmetega. Selleks soovin lülitite (binaar) täisarvuväärtuse võrrandit sellele väärtusele vastava pingesisendiga. Panin oma Exceli töövihikusse täisarvu väärtuse arvutustabeli vasakusse serva. Nüüd määrake minu võrrand.

Siin on kiire õpetus, kuidas Excelis rea võrrandit määrata.

1) Valige lahter, mis ei sisalda andmeid. Kui olete valinud lahtri, millel on andmed, proovib Excel ära arvata, mida soovite trendida. See muudab trendi seadistamise palju keerulisemaks, sest Excel ennustab harva õigesti.

2) Valige vahekaart "Insert" ja valige diagramm "Scatter".

3) Paremklõpsake diagrammikastis ja klõpsake "Valige andmed …". See avab akna "Valige andmeallikas". Andmete valimise jätkamiseks valige nupp Lisa.

4) Andke sellele seeria nimi (valikuline). Valige X-telje vahemik, klõpsates ülesnoolt ja seejärel valides pingeandmed. Valige Y-telje vahemik, klõpsates ülesnoolt ja seejärel valides täisarvude andmed (0–63).

5) Paremklõpsake andmepunkte ja valige "Lisa trendijoon …" Aknas "Trendline'i vormindamine" valige nupp Polynomial. Vaadates trendi, näeme, et järjekord 2 ei vasta päris hästi. Valisin tellimuse 3 ja tundsin, et see on palju täpsem. Märkige ruut "Kuva võrrand diagrammil". Lõplik võrrand kuvatakse diagrammil.

6) Valmis.

OKEI. Tagasi Arduino programmi juurde. Nüüd, kui meil on võrrand, on Arduino programmeerimine lihtne. Lüliti positsioone esindav täisarv arvutatakse 1 koodireal. Funktsiooni "bitread" abil saame haarata iga üksiku biti väärtuse ja seega teada iga nupu olekut. (VAATA FOTOD)

4. samm: TinkerCADi ahelad

TinkerCAD vooluringid
TinkerCAD vooluringid

Kui te pole TinkerCADi ahelaid kontrollinud, tehke seda kohe. OOTA !!!! Lõpetage minu Instructable'i lugemine ja seejärel vaadake seda. TinkerCAD Circuits muudab Arduino vooluahelate testimise väga lihtsaks. See sisaldab mitmeid elektriobjekte ja Arduinosid, võimaldades isegi Arduino testimiseks programmeerida.

Ahela testimiseks seadistasin DIP -lülitipaketi abil 6 lülitit ja sidusin need takistite külge. Tõestamaks, et minu Exceli arvutustabeli pingeväärtus oli õige, kuvasin Arduino sisendil voltmeetri. See kõik töötas ootuspäraselt.

Et tõestada, et Arduino programmeerimine töötas, väljastasin lülitite olekud LED -idele, kasutades Arduino digitaalseid väljundeid.

Vahetasin siis iga lüliti iga võimaliku kombinatsiooni vastu ja ütlen uhkusega, et "IT WORKS" !!!

5. samm: "Nii kaua ja tänan kõiki kalu." (viide 1)

Ma ei ole seda veel päris seadmete abil proovinud, kuna reisin praegu töö tõttu. Kuid pärast TinkerCAD Circuits'i abil tõestamist usun, et see töötab. Väljakutse seisneb selles, et minu määratud takistite väärtused ei ole kõik takistite standardväärtused. Sellest vabanemiseks kavatsen vajalike väärtuste saamiseks kasutada potentsiomeetreid ja takistite kombinatsioone.

Tänan, et lugesite minu juhendit. Loodan, et see aitab teid teie projektides.

Palun jätke kommentaarid, kui olete proovinud sama takistust ületada ja kuidas olete selle lahendanud. Mulle meeldiks rohkem teada saada, kuidas seda teha.

6. samm: viited

Kas te ei arvanud, et esitan hinnapakkumise, ilma et viitaksin selle allikale?

viide 1: Adams, Douglas. Nii kaua ja aitäh kõigile kaladele. (Galaktika autostopi juhendi triloogia 4. raamat)

Soovitan: