In acest tutorial iti voi explica ce inseamna analogic, digital si cum se poate folosi un buton pe post de intrare.

Ce inseamna analogic?

Un semnal analogic este un semnal continuu sinusoidal. Avand un microcontroler de 5V, acest semnal ia aproximativ orice valoare intre 0 si 5V.

De exemplu un senzor de umiditate de sol. La umiditate maxima (in apa) el trimite pe pinul de intrare o valoare de 5V iar intr-un mediu uscat complet (in aer) va trimite 0V, dar in sol unde umiditatea nu este nici maxima si nici minima asfel va trimite pe pin orice valoare intre 0 si 5V , sa zicem 3.5V.

Ce inseamna digital?

Spre deosebire de semnalul analogic un semnal digital nu poate lua decat valoarea logica 1 sau 0. Folosind ca exemplu tot un microcontroler de 5V, un semnal digital va avea valoare 1 la 5V si valoare 0 la 0V.

Totusi pe un pin nu se vor putea primi doar valor de 0 si 5V, de aceea microcontrolerul interpreteaza astfel valorile primite:

Undeva la mijloc este o valoare pe care microcontrolerul nu o baga in seama (intre 2 si 3V). Daca depaseste 3V atunci semnalul digital ia valoare 1, iar daca scade sub 2V ia valoare 0.

Digital vs Analogic?

Desi pare mai usor de folosit si mai util un semnal analogic, deoarece ia orice valoare intre 0 si 5 nu doar sus/jos, un senzor digital este mai precis deoarece elimina zgomotul pe care senzorul analogic l-ar putea capta.

Un senzor digital este mai precis, dar de cele mai multe ori mai scump iar ca programare necesita o librarie sau o programare mai complexa.

Pentru exemplficare voi alege un buton (intrare digitala) si un senzor de lumina (intrare analogica).

Buton

In imaginea de mai sus se poate vedea montajul unui buton monostabil pe o placa test (breadboard) si conectarea acestuia la Arduino.

CreativeChip buton

Se poate observa o rezistenta legata intre buton si GND. Acesta ajuta la tinerea butonului deschis. Prin apasare acest buton se inchide  si pinul digital 2, la care este legat va citi valoarea 1 (HIGH). Daca rezistenta ar fi fost pe VCC atunci butonul ar fi fost inchis si apasarea butonul l-ar fi deschis, pinul digital citind 0 (LOW).

Voi prezenta un software care prin apasarea butonului va aprinde led-ul 13 de pe placa Arduino, iar la eliberarea acestuia il va stinge.

const int buttonPin = 2;
const int ledPin =  13;      

int buttonState = 0;     

void setup() {

    pinMode(ledPin, OUTPUT);      

   pinMode(buttonPin, INPUT);     

}

void loop(){

    buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH) {     

    digitalWrite(ledPin, HIGH);  

  } 

  else {

    digitalWrite(ledPin, LOW); 

  }

}


Prima data definim pinii pe care sunt conectati butonul si ledul.

const int buttonPin = 2;
const int ledPin =  13;  

int buttonState = 0;  –> este o variabila integer care va citi starea butonului in orice moment. 0 fiind LOW si 1 HIGH.

In partea de setup se defineste butonul ca intrare si ledul ca iesire.

In ciclul repetitiv:

 buttonState = digitalRead(buttonPin); –> se citeste starea pinului digital pe care este butonul. Dupa cum am explicat mai sus acesta poate avea doar valoriile 0 sau 1, valori pe care le ia variabila buttonState.


Daca aceasta variabila are valoarea 1  atunci pinul ledului va deveni HIGH, alimentand ledul si aprinzand-ul. La valoarea 0 ledul se va stinge.

if (buttonState == HIGH) {     

    digitalWrite(ledPin, HIGH);  

  } 

  else {

    digitalWrite(ledPin, LOW); 

  }

Senzor analogic de lumina

Calculatorul transmite informatii Arduino-ului printr-o conexiune seriala. De asemenea tot prin aceeasi conexiune si Arduino poate trimite informatii inapoi.

IDE-ul pe care il folosim pentru realizarea soft-ului are un Serial Monitor, acesta afisand pe ecran informatiile primite de la Arduino.

In programul urmator vom citi un senzor analogic de lumina si il vom afisa pe Serial Monitor.

void setup() {

    Serial.begin(9600);

}

void loop() {  

  int sensorValue = analogRead(A0);  

  Serial.println(sensorValue);

  delay(100);        

}


In partea de setup avem o singura linie de cod:

Serial.begin(9600); –> asa spunem microprocesorului ca vom folosi clasa Serial in acest program si o initializam pe 9600 baud rate. Avem mai multe valori, dar 9600 este cea mai utilizata.

In bucla definim sensorValue ca integer

 int sensorValue = analogRead(A0);  

si acesta va lua la fiecare ciclu valoarea citita pe pinul analog A0. Aceasta numar va fi intre 0 si 1024 in functie intensitatea luminoasa.

Pentru a putea vedea aceasta informatie, trebuie sa trimitem aceasta informatie pe serial.

Serial.println(sensorValue)


si punem si un delay de 100 de milisecunde pentru a nu primi un numar foarte mare de informatii pe care nu le putem citi.

delay(100).