Analogni ulazi i izlazi na Arduino mikrokontrolerima

Za početak definišimo analogni signal u elektronici. Analogni signali su naponski ili strujni signali koji predstavljaju kontinualnu vrednost neke spoaljšnje veličine. Na primer: 1.342 V nije digitalna vrednost i može da bude vrednost koju daje temperaturni senzor kada je temperatura 15.3 ⁰C.

ANALOGNI IZLAZI NA ARDUINO MIKROKONTROLERU

Svi mikrokontroleri rade sa digitalnim (binarnim) signalima, tako da se pojavljuje pitanje kako ćemo na izlazu dobiti vrednost između 0 i 1, tj. na Arduinu između 0 i 5V? Problem se rešava na mnogo različitih načina od kojih ćemo ovde diskutovati PWM (Pulse Width Modulation) s obzirom da se to rešenje može pronaći na Arduinu. PWM je način formiranja analognih vrednosti brzim prekidanjem između 0 i 1, i menjajući odnos trajanja 0 i 1 u toku jednog ciklusa prekidanja. Ideja je da se dovoljno brzim prekidanjem uređaj koji tu vrednost prima (LED dioda, elektromotor, zvučnik) zavara da ne vidi binarne vrednosti već da vidi samo srednju vrednost signala. Zato je bitan odnos između 0 i 1. Ako stalno puštamo vrednost 0, onda je analogna vrednost jednaka 0 V. Ako puštamo pola ciklusa 0, a drugu polovinu 1, u tom slučaju će izlazna vrednost biti na polovini opsega 0 – 5V tj. na 2.5V. U slučaju Arduino Uno mikrokontrolera vrednosti PWM izlaza su u opsegu od 0 do 255, gde je 255 isto što i visok naponski nivo od 5V. Na slici ispod dat je prikaz izgleda PWM signala za različite vrednosti.

Što se tiče konkretnih pinova na Arduino mikrokontrolerima, pinovi koji podržavaju PWM su označeni talasom pored broja na pločici (UNO: 3, 5, 6,9, 10, 11).

Dobar primer rada sa analognim izlazom je Fade LED diode – aplikacija koja postepeno smanjuje intenzitet svetla LED diodi.

Potrebni su nam:

Na slici ispod prikazana je šema povezivanja.

Ako sada u okviru setup() unesemo sledeću liniju koda:

pinMode(9, OUTPUT);

podesili smo da pin 9, za koji je povezana LED dioda, izlazni pin tj. da će se sa njega slati signali, a ne primati informacije spolja. Ovo je isto kao i kod formiranja digitalnog izlaza.
Dalje u okviru loop() unesemo sledeće 4 linije koda:

for ( int fadeValue = 0 ;  fadeValue <= 255;  fadeValue +=5) {
analogWrite(9, fadeValue);
delay(30);
}

gde smo kroz for petlju koja prolazi kroz vrednosti od 0 do 255 sa korakom 5 i te vrednosti šalje na PWM pin 9 pomoću analogWrite komande omogućili da se menja intenzitet svetla na LED diodi. Za svaku vrednost koju pošaljemo diodi stavimo pauzu pomoću delay da bi se uočio efekat.

ANALOGNI ULAZI NA ARDUINO MIKROKONTROLERU

Svi mikrokontroleri rade sa digitalnim (binarnim) signalima, tako da se ova analogna vrednost pretvara u digitalnu pomoću posebnog elementa koji može biti i ugrađen u sam mikrokontroler – analogno digitalnog konvertora (A/D konvertora). Šta on zapravo radi? Dve osnovne odlike A/D konvertora su brzina i rezolucija. Brzina definiše koliko često će mikrokontroler moći da čita analgonu vrednost, dok rezolucija opisana brojem bita (10obitni, 5obitni i sl.) definiše koliko će različitih vrednosti moći da se čita sa tog analognog ulaza.
Na Arduinu, A/D konvertor je 10obitni i namenjen je za rad sa naponima od 0 do 5V. To što je 10obitni nam govori da će mikrokontroler da vidi analogne vrednosti u opsegu 0 – (2^10 - 1), tj. 0 – 1023. Ako na pin sa kojeg čitamo analognu vrednost ima napon od 5V Arduino očitava 1023, ako ima 2.5V, očitava 512 i slično.
U zavisnosti od konkretnog Arudino mikrokontrolera, položaj i broj analognih ulaza se razlikuje. Na Arduino Uno mikrokontroleru imamo 6 analognih ulaza označenih sa A0 – A5.
Dobar primer rada sa analognim ulazom je potenciometar za upravljanje LED diodom – aplikacija koja prati stanje potenciometra (promenljivog otpornika) i u zavisnosti od toga menja jačinu svetla na LED diodi.

Potrebni su nam:

  • Jedna LED dioda,
  • Jedan trimer potenciometar,
  • Jedan Arduino Uno / Leonardo / Fio / Due mikrokontroler,
  • set kratkospojnika,
  • protobord ploča

Na slici ispod prikazana je šema povezivanja.

Ako sada u okviru setup() dodamo sledeću liniju koda:

pinMode(2, INPUT);

podesili smo da je pin 2, za koji je povezan taster, ulazni pin tj. da ćemo sa njega čitati signale.

Dalje loop() promenimo u sledeće 4 linije koda:

int sensorValue = analogRead( 2 );
analogWrite( 9 , sensorValue / 4 );

Ovde smo u prvom redu preuzeli vrednost sa A/D konvertora sa pina 2. Zatim smo tu vrednost podeljenu sa 4 (čime smo je skalirali sa 0-1023 na 0-255) poslali na PWM izlaz na pinu 9 na koji je povezana LED dioda.