
-----------------------------------
Remus Boldis
03 Dec 2020 11:16


-----------------------------------
Am sa continui micul serial cu cateva comenzi noi.

analogRead() 
- pe placile Arduino avem un numar de pini asa numiti analogici, de fapt niste convertoare analog-digitale cu rezolutie de 10 biti. Cu alte cuvinte semnalul analogic de la 0 la 5V va fi convertit in semnal digital pe 10 biti (1024 de nivele). In acest fel rezolutia de conversie e de 4.9 mV. Cu comanda analogRead(), de pe un pin analogic, arduino va converti valoarea tensiunii de intrare (intre 0 si 5V) in semnal digital pe 10 biti. Arduino Zero, Due, MKR Family boards, dispun de convertoare pe 12 biti si o plaja de intrare 0 - 3,3V

analogWrite() 
- cu aeasta comanda spunem microcontrolerului sa trimita la un pin PWM (aici avem pini PWM in functie de tipul de arduino - https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/) ,desemnat ca OUTPUT, un semnal PWM cu factor de umplere dependent de numarul introdus intre paranteze. Numarul poate fi intre 0 si 255, 0 insemnand ca pinul sta tot timpul pe 0 iar 255, pinul sta tot timpul pe 5V. Numerele intermediare produc semnale dreptunghiulare cu factor de umplere tot mai mare pe masura ce ne apropiem de 255. Frecventa semnalului dreptunghiular depinde de tipul de Arduino si pinul folosit si poate fi intre 490Hz si 1000Hz. Puteti gasi frecventele aici : https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/
Vedem ca nu avem de a face cu cu o iesire analogica reala, dar printr-un grup de rezistente condensatoare putem indulci pantele semnalului dreptunghiular, transformandul intrun semnal pseudo-analogic. Cum teoria spune ca pentru a caracteriza o anumita frecventa avem nevoie de o frecventa de esantionare de cel putin de 2 ori frecventa, la arduino vom avea doar cateva sute de herti la dispozitie.

Exemple sketchuri

1 Citirea valorii tensiunii de la cursorul unui potentiometru. Potentiometrul are legat un capat la 5V, celalat capat la GND si cursorul la pinul A3

int analogPin = A3; // declaram pinul A3 ca variabila analogPin
int val = 0;  // declaram variabila val
void setup() {
  Serial.begin(9600);           //  pornim o comunicare seriala
}
void loop() {
  val = analogRead(analogPin);  // citeste tensiunea de pe analogPin
  Serial.println(val);          // trimite valoarea val la un port serial
}

2 Reglarea intensitaii luminoase a unui LED cu ajutorul unui potentiometru. Cursorul potentiometrului e legat la pinul 3 si ledul la pinul 9

int ledPin = 9;      // declaram pinul 9 ledPin
int analogPin = 3;   // declaram pinul 3 analogPin
int val = 0;         // declaram variabila val 
void setup() {
  pinMode(ledPin, OUTPUT);  // setam ledPin ca OUTPUT
}
void loop() {
  val = analogRead(analogPin);  // citeste analogPin si aloca catre val
  analogWrite(ledPin, val / 4); // trimite catre ledPin valoarea val impartita la 4 (ca sa se incadreze intre 0 si 255)
}

Avem si aici cateva exemple cu analogWrite : https://www.youtube.com/watch?v=6CRhpUV92ww&t=14s         https://www.youtube.com/watch?v=YfV-vYT3yfQ
