3. Intrări/ieșiri

de la bekathwia

Până acum ați învățat să controlați LED-urie cu cod, ceea ce reprezintă o utilizare a ieșirilor lui Arduino. Această lecție se bazează pe ieșiri prin adăugarea de intrări. Placa dvs. Arduino poate fi programată pentru a asculta de semnale electrice și pentru a întreprinde acțiuni bazate pe acele intrări. Vom pune împreună un circuit de intrare digital, cu un întrerupător, și un circuit de intrare analogic, cu un potențiometru (rezistor variabil).

Un comutator este un dispozitiv mecanic care conectează sau întrerupe un circuit, de multe ori folosind o pârghie sau un buton. Butonul dvs. tactil mic este doar un membru al unei familii foarte mari și diverse. Pentru a afla mai multe, verificați lecția de comutatoare din clasa Instructables Electronics.

Un rezistor variabil este o componentă cu o rezistență electrică în schimbare. În plus față de potențiometrul (knob) utilizat în această lecție, puteți căuta alte rezistoare variabile pentru a încerca, incluzând, dar fără a se limita la: senzori de presiune (rezistor sensibil la forță alias FSR), rezistoare dependente de lumină (LDR alias fotorezistor), și senzori de temperatură analogici.

Consumabile

Pentru a urmări împreună cu această lecție veți avea nevoie de:

Intrare digitală

Să ne pregătim să realizăm un nou circuit. Luați niște fire pentru placă, un LED roșu, un rezistor 1K (maro-negru-roșu-auriu), un rezistor de 10K (maro-negru-portocaliu-auriu) și un mic buton din kit. Oferiți rezistorului dvs. 10K același tratament elbow+trim ca și celelalte rezistoare ordonate.

Mai întâi, conectați LED-ul la pinul Arduino 13, așa cum ați făcut în primul circuit, cu un fir de la pinul 13 la terminalul pozitiv al LED-ului dvs. și un rezistor de 1K care leagă terminalul negativ al LED-ului la masă.

Apoi, conectați butonul localizat pe linia centrală a plăcii. Ar trebui să faceți clic într-un loc confortabil. Conectați rezistorul de 10 K de la un terminal al comutatorului la șina de alimentare de 5V a plăcii de testare. Conectați un fir la același rând și conectați-l în pinul 2 Arduino.

Conectați terminalul diagonal al comutatorului la masă.
Găsiți acest circuit pe Tinkercad.

Faceți clic pe "Start Simulation" în modulul Tinkercad Circuits și încercați să faceți clic (și mențineți apăsat butonul) pentru a vedea ce face codul. Faceți clic pe butonul "Code" pentru a vedea schița.

Puteți găsi acest exemplu în software-ul Arduino navigând la File -> Examples -> 02.Digital -> Button. Deschideți-l pe computer și încărcați-l pe placa dvs. Arduino Uno. LED-ul trebuie să se aprindă, dar să se oprească ori de câte ori apăsați butonul.

Urmați-vă în timp ce explorăm codul în detaliu.

Primele linii ale acestui program introduc constante, care sunt similare cu variabilele prin faptul că stochează o parte de informație. Totuși, după cum ați putea deduce, constantele nu se schimbă pe tot parcursul programului dvs. și sunt, prin urmare, minunate pentru lucruri precum numerele de pini. Ele ocupă mai puțin spațiu de memorie decât variabilele. Linia 39 configurează pinul 2 Arduino ca intrare, astfel încât să putem "asculta" de starea electrică a butonului.

În bucla principală, o funcție numită digitalRead (); verifică starea pinului 2 (care va fi 5V alias HIGH sau masă alias LOW) și stochează acea stare într-o variabilă numită buttonState. Linia 48 conține o instrucțiune if, care verifică dacă buttonState este HIGH (== este un operator de comparație, care nu trebuie confundat cu =, care este un operator de atribuire). Dacă condiția este îndeplinită, comanda digitalWrite (ledPin, HIGH); este executată. Dacă nu, codul conținut în the else { este executat în schimb: digitalWrite (ledPin, LOW);. Declarațiile If pot exista singure sau cu una sau mai multe declarații else.

Ați observat că circuitul pushbutton efectuează acțiunea opusă celei descrise în cod? Am făcut acest lucru cu scopul de a vă întinde mușchii mentali; hai să discutăm circuitul de comutare ceva mai mult. În repaus, terminalele comutatorului nu sunt conectate unul la celălalt. Pinul 2 este conectat printr-un rezistor de 10 K la 5V. Când butonul este apăsat, terminalele comutatorului sunt conectate, ceea ce permite ca pinul 2 să fie conectat la masă, fără rezistor. Deoarece energia electrică ia calea de cea mai mică rezistență, pinul va simți puternic legătura la masă și va ignora conexiunea slabă (10 K) la 5V. Dar când nici un alt semnal nu este prezent (atunci când comutatorul nu este apăsat), această conexiune slabă la 5V este tot ce simte pinul. Deci, rezistorul "trage pinul în sus" la 5V, și așa se numește rezistor pull-up. Fără unul, pinul 2 nu ar fi conectat la nimic până când butonul nu este apăsat. Aceasta se numește "flotare" și poate duce la zgomot aleatoriu de la electricitatea statică și interferența electromagnetică. În mod similar, un rezistor poate fi folosit pentru a lega un pin la masă, care este numit un rezistor pull-down.

Deci, pentru a schimba funcția butonului, puteți schimba cablajul circuitului sau puteți schimba codul. Acesta din urmă este mai puțin de lucru în acest caz, dar este important să rețineți că nu este întotdeauna cazul când construiți proiecte pe cont propriu. Editați liniile 47 (comentariu) și 48 (afirmația if) pentru a spune LOW în loc de HIGH:

void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed.

// if it is, the buttonState is LOW:
if (buttonState == LOW) {
// turn LED on:
digitalWrite(ledPin, HIGH);
}
else {
// turn LED off:
digitalWrite(ledPin, LOW);
}

}

Încărcați schița actualizată pe placa dvs. Arduino Uno și verificați dacă butonul acum comută LED-ul ON în loc de OFF.

Pinii Arduino au încorporate rezistoare pull-up pe mulți dintre ei (mici, în interiorul cipului doar pentru acest scop), și aveți posibilitatea să accesați unul, permițându-l în configurare:

pinMode(buttonPin, INPUT_PULLUP);

Modificați această linie de cod în schița dvs. și scoateți rezistorul din circuit.

Încărcați codul; comportamentul său ar trebui să rămână același.

Monitorul serial

Urmărirea a tot ceea ce se întâmplă în programul dvs. poate fi o luptă obositoare. Monitorul serial este o modalitate de a verifica în diferite locuri din cod prin raportarea înapoi la calculator prin cablul USB.

Găsiți acest circuit pe Tinkercad

Acest circuit utilizează aceeași configurație a butonului ca și circuitul de intrare digitală anterior, dar nu utilizează LED-ul. Încărcați codul din acest modul sau îl găsiți în software Arduino prin navigarea la File -> Examples -> 01.Basics -> DigitalReadSerial.

Încărcați acest cod pe placa dvs. și faceți clic pe butonul Serial Monitor din partea dreaptă sus a fereastrei de schiță.

De asemenea, puteți deschide monitorul serial virtual în modulul Tinkercad Circuits de mai sus (butonul din partea de jos a editorului de cod) .

Pentru a crea o conexiune serială, ar trebui să utilizați Serial.begin (); în configurația dvs. Numărul 9600 este rata de transfer sau viteza de date, în biți pe secundă (bps). În interiorul buclei principale a programului, puteți utiliza Serial.print (); pentru a trimite informații la portul serial. Serial.println(); face același lucru, dar imprimă pe o linie nouă. Linia 24 din codul nostru imprimă valoarea curentă a buttonStatr (HIGH aka 1 sau LOW aka 0) pe portul serial. Deci, cu monitorul serial deschis, avem o vizualizare în viu cu privire la orice simte Arduino la pinul 2. Monitorul serial este deosebit de util la depanare, deoarece puteți compara ușor ceea ce credeți că ar trebui să se întâmple cu ceea ce face Arduino. De asemenea, puteți utiliza comunicarea serială pentru a comunica între dispozitive și multe altele, despre care puteți citi în referințele Arduino.

Intrare analogică

Pentru a sesiza un semnal electric în continuă schimbare, vom folosi intrările analogice ale lui Arduino, aflate în partea stângă a plăcii. Acești pinii speciali sunt conectați la convertorul analogic-digital (ADC) al lui Arduino, echipat pentru a converti un semnal analog între 0V și 5V într-un interval de numere de la 0-1023 (zero contează ca valoare). O altă dimensiune putere a lui doi, 1024 este de 210 octeți, alias 1KB. Luați unul din potențiometrele albastre din setul dvs. și conectați-l pe trei rânduri de pe placa ta (cu USB deconectat). Găsiți acest circuit pe Tinkercad.

Conectați pinul central al potențiometrului la pinul analogic Arduino A0, iar ceilalți doi pini la alimentare și respectiv la masă. Mutați firul de comandă al LED-urilor de la pinul 13 la pinul 9, pentru a putea folosi PWM.

Puteți obține codul din modulul Tinkercad Circuits așa cum aveți pentru lecțiile anterioare sau găsiți exemplul navigând la File -> Examples -> 03.Analog -> AnalogInOutSerial.

Conectați cablul USB și încărcați schița în placa dvs. Arduino Uno. Deschideți monitorul serial și observați și LED-ul în timp ce acționați potențiometrul.

Valorile citite de intrarea analogică sunt tipărite în prima coloană, iar valorile de luminozitate aplicate LED-ului sunt imprimate în a doua coloană.

Să aruncăm o privire mai atentă la bucla principală a acestui program:

Această schiță utilizează funcția map(); pe linia 39, care ia un interval de numere și îl maschează într-un alt interval. Este nevoie de cinci argumente: valoarea care trebuie modificată, limita inferioară a intervalului curent al valorii, limita superioară a intervalului curent al valorii, limita inferioară a intervalului țintă și limita superioară a intervalului țintă. Deci, această linie de coduri stabilește o variabilă outputValue la un număr între 0 și 255 în funcție de poziția potențiometrului.

Comenzile de tipărire serială de pe liniile 44-47 imprimă etichete de text (în interiorul citatelor) și valorile primite de la senzor și ieșite la LED. Văzând că aceste numere se schimbă împreună în monitorul serial vă pot ajuta să înțelegeți cu adevărat cum funcționează funcțiile precum map();. Țineți cont de acest lucru atunci când compuneți și remediați propriile schițe!

Un moment pentru motoare

Același cod utilizat pentru a lumina și a diminua LED-ul din circuitul anterior poate fi de asemenea utilizat pentru a controla viteza unui motor DC simplu. Acest motor de bază are nevoie de câteva componente suplimentare pentru a putea fi controlat: un rezistor mic (utilizați 1K sau încercați un maro-negru-maro-auriu marcat cu 100 ohm), un tranzistor NPN (folosim un PN2222) și o diodă (1N4001). Rezistorul este folosit pentru a proteja pinul Arduino de consum excesiv de curent. Dioda apără tranzistorul să scape de orice tensiune inversă de străpungere (ceva ce motoarele sunt predispuse să facă). Tranzistorul acționează ca o supapă electronică, permițând curentului să curgă între colectorul său și emitor (pinii exteriori ai PN2222) proporțional cu semnalul pe care îl primește în bază (pinul central al PN2222). Tranzistoarele sunt la îndemână pentru a controla o componentă consumatoare de putere cu un pin de microcontroler, care nu poate livra, direct, suficient curent.
Găsiți acest circuit pe Tinkercad

Deconectați cablul USB și construiți circuitul conform diagramei, având în vedere partea plată a tranzistorului dvs. (cu fața dinspre Arduino în acest circuit), precum și banda de pe dioda dvs. (pe partea cea mai îndepărtată de tranzistor). Dacă utilizați un tranzistor NPN diferit (cum ar fi 2N2222), conexiunile pentru pinul tranzistorului pot fi diferite de cele prezentate, deci căutați fișa tehnică pentru a vă asigura că faceți următoarele conexiuni:

  • Arduino pin 9 la baza tranzistorului prin rezistor

  • 5V la colectorul tranzistorului prin diodă

  • Masa la emitorul tranzistorului

  • Firele de la motor la colectorul tranzistorului și 5V (oricare orientare)

Alimentați placa și vedeți ce efect are rotirea butonului asupra vitezei motorului (utilizați o bucată de bandă pentru a facilita vizualizarea rotirii arborelui motorului).

Motorul recomandat pentru acest circuit consumă mai puțin de 250mA, dar unul mai mare ar putea necesita mai multă putere decât poate livra portul USB al computerului dvs. Pentru a alimenta motoare mai mari, multe LED-uri și alte circuite care folosesc mai multă putere, va trebui să folosiți o sursă de alimentare externă, cum ar fi un adaptor AC sau un acumulator. În plus, pentru orice motor mai mare, ai nevoie și de un tranzistor mai mare. Vom învăța cum să calculați nevoile de alimentare ale circuitului dvs. în următoarea lecție, dar la cerere populară, aici este același circuit de motor alimentat de un acumulator extern de 6V (șine de putere separate, masă comună):

Găsiți acest circuit pe Tinkercad

Pentru a afla mai multe despre tranzistoare și pentru a le folosi într-un proiect, verificați lecția de tranzistoare din Clasa electronică Instructables. Pentru a afla mai multe despre motoare și pentru a le folosi pentru a construi mai mulți roboți distractivi, verificați Instructables Robots Class.

Acum cunoașteți blocurile de bază ale majorității programelor Arduino și ați construit câteva circuite care să demonstreze utilitatea acestora. Bună treabă!