Arduino – Citirea valorilor analogice ( Folosirea intrărilor analogice )

By user, martie 12, 2019

Semnale Analogice și Digitale

Dacă vrem să conectăm dispozitivul( placa arduino ) nostru cu anumiți senzori ne vom întâlni, mai mut ca sigur, cu senzori analogici sau mai bine spus cu dispozitive ce vor genera ca răspuns semnal analogic.

Până acum ne-am jucat și, în același timp, învățat să lucrăm cu led-uri și anume să aprindem ledul, de exemplu: la apăsarea unui push-button. Un push-button are două stări: închis și deschis; 1 sau 0 ca și un semnal digital ( format din 0 și 1 ).

În figura de mai jos sunt prezentate cele două semnale :

În partea stângă avem semnalul digital care variază între două valori: 0 și 5V, ca și push-buttonul pe care l-am folosit în articolul : Arduino-Folosirea unui push-button. În partea dreaptă este un semnal cosinuidal, în care de asemenea limitele sunt 0 și 5 volți dar între aceste limite acest semnal ia o infinitate de valori cuprinse între aceste limite.

Un calculator nu va putea măsura o infinitate de valori zecimale pentru un semnal analogic deoarece memoria și puterea calculatorului sunt finite. În aceste condiții vin cu întrebarea: Cum putem interfața placa Arduino cu senzori analogici?. Răspunsul este : Convertorul analog-Digital, care poate converti valoarea analogică într-o reprezentare digitală cu o precizie și viteză finită.

Conversia unui semnal analogic în semnal Digital

Să începem cu un exemplu:

Presupunem că vrem să măsurăm luminozitatea unei camere ( cât de luminoasă este camera ) și mai presupunem că un senzor de lumină bun produce o varietate de tensiuni la ieșire în funcție de luminozitatea camerei. Când camera este întunecată dispozitivul ( senzorul ) va produce 0V la ieșire iar când camera este maxim luminoasă senzorul va scoate 5V la ieșire. Aceste valori de la ieșirea senzorului le vom citi cu ajutorul convertorului analog-digital de pe placa Arduino.

Acuratețea unui convertor Analog-Digital este determinată de rezoluție. În cazul unei plăci Arduino Uno, rezoluția este de 10 biți, însemnând că, convertorul A-D poate subdiviza un semnal analogic în \(2^{10} \) valori. Aplicând puțină matematică vom afla că \( 2^{10} = 1024 \) ceea ce înseamnă că Arduino Uno poate asigna o valoare de la 0 la 1024 pentru orice semnal Analogic dat.

Ne mai trebuie și tensiunea de referință, aceasta determină tensiunea maximă așteptată de la senzor. În cazul nostru vom lua ca tensiune de referință 5V, asta înseamnă că 5V analogic = 1024 în digital.

Conform informațiilor de mai sus avem :

0V =0 digital

2,5V = 512 digital

5V = 1023 digital

Dacă utilizăm un convertor A-D cu rezoluția de 3 biți, vom avea :

\(2^{3} = 8 \Rightarrow \) 0V = 0 digital ; 2,5V = 4 digital ; 5V = 7 digital.

În figura de mai jos vă prezint conversia pe o rezoluție de 3 biti a valori analogice de 5V:

Sper ca ați înțeles , în mare, cum se face conversia din analog în digital. Acum veți putea folosi această conversie în proiectele dumneavoastră. Plăcile de dezvoltare Arduino fiind de mai multe tipuri, din punct de vedere a construcției, înseamnă că au mai mulți sau mai puțini pini de intrare analogici dar citirea lor se va face la fel indiferent de placa Arduino și anume utilizând comanda :

analogRead ( pin )

Descriere: citește valoarea de la un pin analogic specificat. Aceasta înseamnă că va mapa tensiunile de intrare cuprinse între 0 și 5V în valori întregi cuprinse între 0 și 1023.

Parametri: pin = numărul pinului analogic

Ce returnează : o valoare întreagă cuprinsă între 0 și 1023.

Vrem să citim tensiunea de la un pin analogic, de la un potențiometru sau de la un senzor ce are ca ieșire ( răspuns ) o tensiune cuprinsă între 0 și 5V. Folosind următoarea schemă com citi tensiunea de la un potențiometru și o vom afișa pe ecran.

Programul Arduino:

\( const \ int \ pinIntrare = A3; \\ void \ setup() \\ \left\{ \\ Serial.begin(9600); \\ Serial.println(Volti :); \\ \right\} \\ void \ loop() \\ \left\{ \\ int \ citire = analogRead(pinIntrare); \\ float \ volt = citire/204.6; \\ Serial.print(volt); \\ Delay(200 ); \\ \right\} \)

Descriere program :

Programul utilizează funcția analogRead() pentru a citi tensiunea de la potențiometru. Un potențiometru are 3 pini : 2 pini sunt conectați la un material rezistiv iar al treilea ( cel mai adesea din mijloc ) este conectat la un ax care se rotește dând posibilitatea să facă contact oriunde pe materialul rezistiv de care sunt legați cei 2 pini ( extremele ). Axul rotindu-se rezistența dintre pinul din mijloc și un pin din extremități să crească și rezistența dintre pinul din mijloc și cealaltă extremitate să scadă.

În funcția setup() începem comunicarea serială:

Serial.begin() ,

iar apoi trimitem mesajul ”Volți: ” la portul serial prin comanda :

Serial.println ( ”Volti: ”);

Atenție!!!! Nu uitați să deschideți portul serial pentru a vedea mesajele trimise de program, placa Arduino.

În funcția loop() utilizăm analogRead() pentru a citi valoarea tensiunii de la potențiometru. Dacă avem 0V la pinul A3 valoarea citită va fi 0, dacă avem 5V la pinul A3 valoarea citită va fi 1023. Această valoare va fi memorată în variabila citire.

Pentru a transforma vom împărți valoarea citită, memorată în variabila citire, la 204,6 și vom avea rezultatul în volți. Fără această împărțire rezultatul va fi un număr cuprins între 0 și 1023.

What do you think?

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert