IoT - I/O (I)

Suntem obișnuiți ca programele pe care le scriem să primească date de intrare și să ofere rezultate (date de ieșire). Dacă vorbim despre IoT (Internet of Things - Internetul lucrurilor), intrările și ieșirile devin mult mai prezente în viața de zi cu zi. Și asta, se datorează naturii domeniului care presupune conectarea tuturor lucrurilor într-o rețea (de aici și numele de internetul lucrurilor).

Așadar, intrările și ieșirile trebuie să fie reprezentate de lucruri. De exemplu, intrarea poate fi o ceașcă de cafea al cărei nivel scade, iar ieșirea poate fi un difuzor care produce un sunet. Sunetul are rolul de a avertiza chelnerul că trebuie să umple din nou ceașca respectivă.

Senzori și actuatori

Mecanismele prin care un sistem interacționează cu un mediu poartă denumirea de senzori și actuatori. Senzorii detectează starea mediului pe care o transmit sistemului. Acesta o analizează; în urma analizei ia o decizie, decizie care trebuie să aibă un efect în afara sistemului și anume în mediul monitorizat. Actuatorii sunt uneltele prin care sistemul execută acțiuni.

IOT I-O_1

Senzori analogici

Să intrăm puțin mai în detaliu și să vedem mai exact cum funcționează un senzor. Cel mai simplu senzor este o rezistență variabilă. Un sistem care ar măsura temperatura ar arăta cam așa: o sursă de energie, să spunem 5 volți, o rezistență variabilă și un aparat de măsură. Rolul rezistenței variabile (numită și potențiometru) este de a diviza tensiunea generată de sursa de energie. Mai pe românește, dacă glisorul (verde în figura de mai jos) ar fi lângă punctul V și am măsura tensiunea între I și G am obține 5 volți (cât este și sursa de energie), dacă glisorul ar fi lângă punctul G și am măsura tensiunea între I și G am obține 0 volți, iar dacă ar fi la jumătate am obține 2,5 volți. În aceste condiții, dacă am pune o bară de cupru care se dilată liniar atunci când este încălzită să mute glisorul, putem, măsurând tensiunea între G și I să ne dăm seama de diferențele de temperatură care au dus la modificarea lungimii barei de cupru.

Ceea ce am descris este un senzor analogic. Pentru a detecta informațiile oferite de un astfel de senzor SBC-urile folosesc ceea ce se numește convertor analogic digital (ADC - analog to digital converter) care transformă tensiunea citită în numere. În funcție de modelul convertorului putem avea plaje de valori de la 0 la 1023 (0 pentru 0 volți, 1023 pentru voltaj maxim) sau chiar valori de la 0 la 65535 (0 pentru 0 volți, 65535 pentru voltaj maxim).

IOT I-O_2

 

În seria de articole referitoare la IoT ne vom referi în principal la platforma Arduino, și în special la modelul Arduino Uno.

IOT I-O_5

Așadar board-ul are 6 pini analogici și 13 pini digitali, dintre care 6 au capacitate PWM.

Un pin analogic poate fi folosit pentru a conecta un senzor analogic. "Rezoluția" convertorului analogic digital de pe Arduino este de 10 biți, iar tensiunea de referință este 5 volți, ceea ce înseamnă că pentru o valoare de 5 volți convertorul analog digital va returna valoarea 1023.

Dacă luăm în considerare diagrama cu rezistența variabilă și conectăm punctul V la pinul marcat 5V, punctul G la pinul marcat GND și punctul I la pinul marcat A0, putem folosi pinul A0 pentru a citi valorile oferite de rezistență, și prin aplicarea unor calcule matematice putem obține valoarea temperaturii care provoacă dilatarea barei de cupru. Cam așa funcționează toți senzorii analogici: au o tensiune de referință, de obicei 5V sau 3.3V. De cele mai multe ori, producătorul senzorului pune la dispoziție un tabel în care sunt indicate tensiunile care corespund anumitor valori.

În continuare, folosind mediul de dezvoltare Arduino, vom încerca să scriem un scurt progrămel care va citi valorile date de un senzor de temperatură LM35 varianta de bază (am ales acest senzor deoarece este unul relativ ieftin și ușor de procurat din orice magazin de profil).

Așadar, vom conecta cei 3 pini ai senzorului la Arduino dupa cum urmează:

  1. ținem senzorul cu partea rotunjită în jos și cu pinii în sus
  2. conectam pinul din stânga al senzorului la pinul GND de pe Arduino (oricare din ei)
  3. conectam pinul din dreapta al senzorului la pinul marca 5V de pe Arduino
  4. conectam pinul din mijloc la pinul marcat A0 de pe Arduino

În cazul în care pinii nu sunt conectați corect, putem observa că senzorul se va încălzi și dacă nu este deconectat imediat se va distruge; așadar, mare atenție!

Specificațiile senzorului (http://www.ti.com/lit/ds/symlink/lm35.pdf) spun cam așa: senzorul returnează valori între 2 și 150 grade Celsius; pentru fiecare grad, voltajul crește cu 10mV. Astfel, voltajul minim este de 20 mV, iar cel maxim de 1500 mV. După cum spuneam mai sus, convertorul analogic digital ne va returna un număr între 0 (pentru 0V) și 1023 (pentru 5V sau 5000mV); pentru a calcula voltajul în mV (milivolți) va trebui să împărțim numărul respectiv la 1023 și să înmulțim rezultatul cu 5000. Pentru a obține temperatura propriu-zisă în grade Celsius mai trebuie să împărțim voltajul la 10 (fiindcă fiecărui grad îi corespund 10mV).

Bun, să vedem cum ar arăta codul Arduino:

Va urma

În episodul următor vom discuta despre senzorii digitali și vom vedea cum putem lucra cu ei.