Cuprins:

Utilizați 1 intrare analogică pentru 6 butoane pentru Arduino: 6 pași
Utilizați 1 intrare analogică pentru 6 butoane pentru Arduino: 6 pași

Video: Utilizați 1 intrare analogică pentru 6 butoane pentru Arduino: 6 pași

Video: Utilizați 1 intrare analogică pentru 6 butoane pentru Arduino: 6 pași
Video: How to use up to 10 push button switch with 1 Arduino input pin ANPB-V1 2024, Noiembrie
Anonim
Folosiți 1 intrare analogică pentru 6 butoane pentru Arduino
Folosiți 1 intrare analogică pentru 6 butoane pentru Arduino

M-am întrebat adesea cum aș putea obține mai multe intrări digitale pentru Arduino. Recent mi-a trecut prin minte că ar trebui să pot folosi una dintre intrările analogice pentru a introduce mai multe intrări digitale. Am făcut o căutare rapidă și am găsit unde oamenii puteau face acest lucru, dar că acestea nu permiteau apăsarea unui singur buton la un moment dat. Vreau să pot avea orice combinație de butoane care să fie apăsate SIMULTAN. Așadar, cu ajutorul CIRCUITURILOR TINKERCAD, mi-am propus să realizez acest lucru.

De ce aș dori apăsări simultane de butoane? Așa cum este ilustrat în proiectarea circuitelor TinkerCad, acesta ar putea fi utilizat pentru intrările comutatorului DIP pentru selectarea diferitelor moduri din cadrul programului.

Circuitul cu care am venit utilizează sursa de 5V disponibilă de la Arduino și folosește 7 rezistențe și 6 butoane sau comutatoare.

Pasul 1: Circuitul

Circuitul
Circuitul

Arduino are intrări analogice care acceptă o intrare de la 0V la 5V. Această intrare are o rezoluție de 10 biți, ceea ce înseamnă că semnalul este împărțit în 2 ^ 10 segmente sau 1024 numărătoare. Pe baza acestui lucru, cel mai mult pe care l-am putea introduce vreodată într-o intrare analogică, permițând simultan apăsări, ar fi de la 10 butoane la 1 intrare analogică. Dar aceasta nu este o lume perfectă. Există rezistență la conductori, zgomot din surse exterioare și putere imperfectă. Deci, pentru a-mi oferi o mulțime de flexibilitate, am planificat să proiectez acest lucru pentru 6 butoane. Acest lucru a fost, în parte, influențat de faptul că TinkerCAD Circuits avea un obiect cu comutator DIP cu 6 comutatoare, ceea ce ar face testarea mai ușoară.

Primul pas în proiectarea mea a fost să mă asigur că fiecare buton, atunci când este apăsat individual, va oferi o tensiune unică. Acest lucru a exclus că toate rezistențele au aceeași valoare. Următorul pas a fost acela că valorile rezistenței, atunci când sunt adăugate în paralel, nu pot avea aceeași rezistență ca orice valoare a rezistorului. Când rezistențele sunt conectate în paralel, rezistența rezultată poate fi calculată cu Rx = 1 / [(1 / R1) + (1 / R2)]. Deci, dacă R1 = 2000 și R2 = 1000, Rx = 667. Am speculat că, dublând dimensiunea fiecărui rezistor, nu aș vedea aceeași rezistență pentru niciuna dintre combinații.

Deci, circuitul meu până în acest punct a fost să am 6 comutatoare, fiecare cu rezistorul său. Dar, mai este necesar un rezistor pentru a finaliza acest circuit.

Ultimul rezistor are 3 scopuri. În primul rând, acționează ca un rezistor pull-down. Fără rezistor, când nu sunt apăsate butoane, circuitul este incomplet. Acest lucru ar permite tensiunii de la intrarea analogică a lui Arduino să plutească la orice potențial de tensiune. Un rezistor Pull-Down Trage în esență tensiunea la 0 V. Al doilea scop este de a limita curentul acestui circuit. Legea lui Ohm afirmă că V = IR sau Tensiunea = Curentul înmulțit cu Rezistența. Cu o sursă de tensiune dată, cu cât rezistorul este mai mare înseamnă că curentul ar fi mai mic. Deci, dacă un semnal de 5V ar fi aplicat unui rezistor de 500ohm, cel mai mare curent pe care l-am putea vedea ar fi 0,01A sau 10mA. Al treilea scop este de a furniza tensiunea semnalului. Curentul total care curge prin ultimul rezistor ar fi: i = 5V / Rtotal, unde Rtotal = Rlast + {1 / [(1 / R1) + (1 / R2) + (1 / R3) + (1 / R4) + (1 / R5) + (1 / R6)]}. Cu toate acestea, includeți doar 1 / Rx pentru fiecare rezistor care are butonul corespunzător apăsat. Din curentul total, tensiunea furnizată intrării analogice ar fi i * Rlast sau i * 500.

Pasul 2: Dovadă - Excel

Dovadă - Excel
Dovadă - Excel

Cea mai rapidă și mai ușoară modalitate de a demonstra că aș obține rezistențe unice și, prin urmare, tensiuni unice cu acest circuit a fost să folosesc capacitățile Excel.

Am configurat toate combinațiile posibile de intrări de comutare și le-am organizat secvențial urmând modele binare. O valoare „1” indică faptul că comutatorul este pornit, iar golul indică faptul că este oprit. În partea de sus a foii de calcul, am introdus valorile rezistenței pentru fiecare comutator și pentru rezistența verticală. Am calculat apoi rezistența echivalentă pentru fiecare dintre combinații, cu excepția cazului în care toate rezistențele sunt oprite, deoarece aceste rezistențe nu vor avea un efect fără să aibă o sursă de alimentare care să o furnizeze. Pentru a face calculele mai ușoare, astfel încât să pot copia și lipi în fiecare combinație, am inclus toate combinațiile în calcul, înmulțind fiecare valoare a comutatorului (0 sau 1) cu valoarea sa de rezistență inversată. Acest lucru a eliminat rezistența sa din calcul dacă comutatorul a fost oprit. Ecuația rezultată poate fi văzută în imaginea foii de calcul, dar Req = Rx + 1 / (Sw1 / R1 + Sw2 / R2 + Sw3 / R3 + Sw4 / R4 + Sw5 / R5 + Sw6 / R6). Folosind Itotal = 5V / Req, determinăm curentul total prin circuit. Acesta este același curent care trece prin rezistența de tragere și ne oferă tensiunea la intrarea noastră analogică. Acesta este calculat ca Vin = Itotal x Rx. Examinând atât datele Req, cât și datele Vin, putem vedea că avem într-adevăr valori unice.

În acest moment, se pare că circuitul nostru va funcționa. Acum pentru a afla cum să programați Arduino.

Pasul 3: Programare Arduino

Programare Arduino
Programare Arduino
Programare Arduino
Programare Arduino
Programare Arduino
Programare Arduino

Când am început să mă gândesc cum să programez Arduino, inițial am planificat setarea unor intervale individuale de tensiune pentru a determina dacă un comutator a fost pornit sau oprit. Dar, în timp ce zăceam în pat într-o noapte, mi-a trecut prin minte că ar trebui să pot găsi o ecuație pentru a face acest lucru. Cum? EXCELA. Excel are capacitatea de a calcula ecuațiile pentru a se potrivi cel mai bine datelor într-o diagramă. Pentru a face acest lucru, voi dori o ecuație a valorii întregi a comutatoarelor (binară) față de tensiunea de intrare corespunzătoare valorii respective. În registrul meu de lucru Excel, am pus valoarea Integer în partea stângă a foii de calcul. Acum, pentru a determina ecuația mea.

Iată un tutorial rapid despre cum să determinați ecuația unei linii în Excel.

1) Selectați o celulă care nu conține date. Dacă ați selectat o celulă care conține date, Excel va încerca să ghicească la ce doriți să vă orientați. Acest lucru face mult mai dificilă stabilirea unei tendințe, deoarece Excel prezice rareori corect.

2) Selectați fila „Insert” și selectați o diagramă „Scatter”.

3) Faceți clic dreapta în caseta graficului și faceți clic pe „Selectare date…”. Aceasta va afișa fereastra „Selectați sursa de date”. Selectați butonul Adăugați pentru a continua să selectați datele.

4) Dă-i un nume de serie (opțional). Selectați gama pentru axa X făcând clic pe săgeata sus și apoi selectând datele de tensiune. Selectați domeniul pentru axa Y făcând clic pe săgeata sus și apoi selectând datele întregi (0-63).

5) Faceți clic dreapta pe punctele de date și selectați „Adăugați linia de tendință …” În fereastra „Formatează linia de tendință”, selectați butonul Polinom. Privind tendința, vedem că Ordinul de 2 nu se potrivește deloc. Am selectat un ordin de 3 și am considerat că acest lucru este mult mai precis. Bifați caseta de selectare pentru „Afișați ecuația pe diagramă”. Ecuația finală este acum afișată pe grafic.

6) Gata.

BINE. Înapoi la programul Arduino. Acum că avem ecuația, programarea Arduino este ușoară. Numărul întreg care reprezintă pozițiile comutatorului este calculat într-o linie de cod. Folosind funcția „bitread”, putem prelua valoarea fiecărui bit individual și astfel cunoaștem starea fiecărui buton. (VEZI FOTOGRAFII)

Pasul 4: Circuite TinkerCAD

Circuite TinkerCAD
Circuite TinkerCAD

Dacă nu ați verificat circuitele TinkerCAD, faceți-o acum. AȘTEPTA!!!! Termină de citit instructable-ul meu, apoi verifică-l. TinkerCAD Circuits face testarea circuitelor Arduino foarte ușoară. Acesta include mai multe obiecte electrice și Arduino, permițându-vă chiar să programați Arduino pentru testare.

Pentru a-mi testa circuitul, am configurat 6 comutatoare folosind un pachet de comutatoare DIP și le-am legat de rezistențe. Pentru a demonstra că valoarea tensiunii din foaia mea de calcul Excel a fost corectă, am afișat un voltmetru la intrarea în Arduino. Totul a funcționat așa cum era de așteptat.

Pentru a dovedi că programarea Arduino a funcționat, am transmis stările comutatoarelor la LED-uri, folosind ieșirile digitale ale Arduino.

Apoi am comutat fiecare comutator pentru fiecare combinație posibilă și sunt mândru să spun „FUNCȚIONEAZĂ” !!!

Pasul 5: „Atât de mult și vă mulțumim pentru toți peștii”. (ref.1)

Încă nu am încercat acest lucru folosind echipamente reale, deoarece în prezent călătoresc pentru serviciu. Dar, după ce am demonstrat-o cu TinkerCAD Circuits, cred că va funcționa. Provocarea este că valorile rezistențelor pe care le-am specificat nu sunt toate valori standard pentru rezistențe. Pentru a evita acest lucru, intenționez să folosesc potențiometre și combinații de rezistențe pentru a obține valorile de care am nevoie.

Vă mulțumesc că mi-ați citit instructivul. Sper că te ajută cu proiectele tale.

Vă rugăm să lăsați comentarii dacă ați încercat să abordați același obstacol și cum ați rezolvat-o. Mi-ar plăcea să învăț mai multe modalități de a face acest lucru.

Pasul 6: Referințe

Nu credeați că voi oferi o ofertă fără a furniza o referință la sursa sa, nu-i așa?

ref. 1: Adams, Douglas. Atat de mult, si multumesc pentru toti pestii. (Cea de-a patra carte a „trilogiei” Ghidului Autostopistului la Galaxie)

Recomandat: