lOMoARcPSD|35406810
Lucrarea 1. Principii de bază în utilizarea unei
plăci de dezvoltare
1. Descrierea lucrării
1.1. Obiectivele lucrării
- Cunoașterea principalelor caracteristici ale plăcii Arduino Uno
R3.
- Cunoașterea modului de utilizare/programare a porturilor de
intrare/ieșire analogice sau digitale al plăcii Arduino Uno R3.
- Crearea și testarea de circuite simple ce utilizează senzori și
traductoare.
1.2. Descriere teoretică
Introducere
Arduino Uno R3 este o placă open-source de dezvoltare ce folosește
un microcontroler ATMEL pe 8 biți de tip ATmega328. Cu ajutorul ei se
pot realiza nenumărate proiecte electronice cu aplicații în aproape orice
domeniu, beneficiind și de suport din partea unei comunități online din ce în
ce mai mare.
Caracteristicile unei plăci Arduino sunt următoarele [1]:
- Tensiune de operare: 5 V
- Tensiune de alimentare recomandată: 7-12 V
- Port USB 2.0
- Pini intrare/ieșire digitală: 14 (dintre care 6 pot funcționa în mod
PWM)
- Pini intrare analogică: 6
- Curent de ieșire pentru un pin digital: 40 mA
- Curent de ieșire pentru pinul de 3,3 V: 50 mA
- Memorie flash (ATmega328): 32 KB (0,5KB pentru boot loader)
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
SENZORI, TRADUCTOARE ȘI ACHIZIȚII DE DATE CU ARDUINO UNO.
10 LUCRĂRI PRACTICE
- Memorie SRAM (ATmega328): 2 KB
- Memorie EEPROM (ATmega328): 1 KB
- Frecvența ceasului: 16 MHz
Placa poate fi alimentată fie prin portul USB, fie dintr-o sursă
externă prin conectorul de alimentare. Poziționarea și denumirea tuturor
porturilor și pinilor plăcii se pot vedea în figura următoare.
Figura 1. Placa de dezvoltare Arduino Uno R3
Figura 2. Porturi ale plăcii de dezvoltare Arduino Uno R3
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
Lucrarea 1. Principii de bază în utilizarea unei plăci de dezvoltare 11
În cadrul lucrării vor fi utilizate următoarele porturi:
- Pin de alimentare 5 V: tensiune furnizată de sursa internă a plăcii
(a se evita utilizarea acestui pin pentru alimentarea unor module
externe mari consumatoare de curent).
- GND: pin de masă.
- Pin intrare analogică
- Pin intrare/ieșire digitală: 5 V, maxim 40 mA.
- Pin ieșire digitală PWM: 5 V, maxim 40 mA. PWM (engl. Pulse-
Width Modulation) presupune variația controlată a formei
tensiunii de ieșire prin schimbări rapide ale valorii logice din 1 în
0 (frecvența semnalului este de aprox. 490 Hz), în funcție de un
factor de umplere (valoarea acestuia poate lua valori între 0 și
255). Astfel se poate genera un semnal de putere variabilă și
simula obținerea unor tensiuni analogice între 0 și 5 V folosind
un port digital [2].
Figura 3. Variații ale tensiunii la o ieșire de tip PWM
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
SENZORI, TRADUCTOARE ȘI ACHIZIȚII DE DATE CU ARDUINO UNO.
12 LUCRĂRI PRACTICE
Placa Arduino poate fi extinsă prin atașarea unor module numite
shield ce se pot conecta direct la pinii externi ai plăcii (module GPS, Wi-Fi,
LCD - Figura 4, touchscreen, control motoare, etc.), aceștia putând fi
accesați în continuare deoarece majoritatea modulelor shield au extensii ale
lor.
Figura 4. Utilizarea unui shield LCD pe o placă de tip Arduino Uno R3
Pentru realizarea montajelor electronice ce necesită componente
externe (și dacă nu se dorește utilizarea componentelor montate pe un
cablaj, de exemplu în cazurile prototipurilor) se poate folosi o placă de
testare numită breadboard (Figura 5 – în partea din dreapta sunt simbolizate
legăturile electrice între pini).
Figura 5. Breadboard-ul și conexiunile interne
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
Lucrarea 1. Principii de bază în utilizarea unei plăci de dezvoltare 13
Programarea microcontrolerului se face într-un limbaj derivat din
C++. Programul necesar se numește Arduino IDE și se poate descărca de pe
web-situl producătorului [3]. După conectarea plăcii și instalarea și lansarea
programului asigurați-vă că este selectată placa Arduino și portul
corespunzător (în meniul Tools, sub-meniurile Board și Port).
Figura 6. Interfața grafică a programului Arduino IDE
Cele mai utilizate butoane din aplicația software vor fi butonul de
compilare (verificarea de erori a programului), butonul de încărcare
(încărcarea programului în microcontrolerul plăcii Arduino) și butonul
pentru Serial Monitor (afișarea datelor trimise de placă către calculator).
Figura 7. Butoane și meniuri ale programului Arduino IDE
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
SENZORI, TRADUCTOARE ȘI ACHIZIȚII DE DATE CU ARDUINO UNO.
14 LUCRĂRI PRACTICE
Descrierea aplicațiilor
În cadrul acestei lucrări vor fi realizate cinci aplicații practice.
Aplicația 1. LED comandat de un buton
Această aplicație va folosi un pin de intrare digitală pentru
conectarea unui buton și un pin de ieșire digitală pentru conectarea unui
LED. Scopul este de a realiza schimbarea stării LED-ului din stins în aprins
în momentul sesizării apăsării butonului.
Aplicația 2. LED clipitor
Această aplicație va folosi un pin de ieșire digitală pentru conectarea
unui LED. Scopul este de a aprinde și stinge succesiv LED-ul, pe o durată
de timp nelimitată, pre-definind perioadele de timp cât LED-ul stă aprins
sau stins.
Aplicația 3. LED pulsator
Această aplicație va folosi un pin de ieșire digitală PWM pentru
conectarea unui LED. Scopul este de a aprinde și stinge LED-ul, pe o durată
de timp nelimitată, variind intensitatea luminii emise de acesta între 0 și
maxim într-o anumită perioadă de timp predefinită.
Aplicația 4. Utilizarea unui port analogic
Această aplicație va folosi un pin de intrare analogică pentru
conectarea unui potențiometru în configurație de divizor rezistiv de tensiune
reglabil. Scopul este de a afișa pe ecran (pe Serial Monitor) valorile digitale
furnizate de placa Arduino proporțional cu tensiunea de la intrarea
analogică.
Aplicația 5. Citirea gradului de apăsare
Această aplicație va folosi un pin de intrare analogică pentru
conectarea unui traductor de presiune. Scopul este de a afișa pe ecran (pe
Serial Monitor) valorile măsurate de traductor proporțional cu apăsarea
exercitată asupra acestuia, la intervale de timp predefinite.
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
Lucrarea 1. Principii de bază în utilizarea unei plăci de dezvoltare 15
2. Componente hardware
Componentele și modulele electronice utilizate în cadrul lucrării sunt
cele din următorul tabel:
Componentă sau Număr
Caracteristici Imagine
modul bucăți
Arduino Uno 1
Modul LED LED + rezistor 1
Fir de legătură Tată-Tată 5
Modul Buton Buton + rezistor 1
Potențiometru 50 kΩ liniar 1
Modul Traductor de FSR 406 +
1
presiune rezistiv rezistor
Observații
Modulul LED conține pe lângă un LED și un rezistor corect
dimensionat (modul de dimensionare este prezentat în Lucrarea 2).
Modulul Buton este folosit pentru a sesiza apăsarea și a comanda, în
acest caz, starea unui LED. Acest traductor se poate înlocui și cu orice alt
tip de buton împreună cu o rezistență de 10 kΩ, așa cum se va vedea în
paragraful următor.
Potențiometrul este folosit pentru a crea un divizor rezistiv de
tensiune reglabil, cu scopul de a aplica pe intrarea analogică a plăcii
Arduino o tensiune variabilă în domeniul 0 … VCC. Ca urmare, valoarea
măsurată de placă va fi disponibilă sub forma unei valori digitale ce variază
în domeniul 0 … 1023, proporțional cu tensiunea aplicată.
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
SENZORI, TRADUCTOARE ȘI ACHIZIȚII DE DATE CU ARDUINO UNO.
16 LUCRĂRI PRACTICE
Figura 8. Divizor rezistiv de tensiune reglabil
Domeniul de valori digitale se obține în urma conversiei tensiunii
analogice într-un semnal digital, lucru realizat de placa Arduino cu ajutorul
convertorului analogic-digital intern pe 10 biți.
Valoarea tensiunii analogice se poate măsura cu un voltmetru sau se
poate aproxima în funcție de valoarea digitală furnizată de placă, astfel:
𝑣𝑎𝑙_𝑑𝑖𝑔
𝑈 =𝑉 (1)
1023
Tensiunea de alimentare VCC este teoretic de 5 V. Deoarece valoarea
reală diferă, va fi necesară o calibrare. Astfel, se va măsura tensiunea VCC
furnizată de placă, folosind un voltmetru, iar valoarea măsurată se va scrie
în program la declararea variabilei VCC.
Modulul traductor de presiune rezistiv sesizează gradul de
apăsare, bazându-se pe utilizarea unui rezistor sensibil la presiune (FSR
406), valoarea măsurată de placa Arduino fiind disponibilă sub forma unei
valori digitale ce variază între 0 și 1023.
Figura 9. Construcția internă a senzorului de presiune
Senzorul de presiune este realizat din trei substraturi (vezi Figura 9),
având o rezistență foarte mare între electrozi (>10 MΩ) atunci când nu se
exercită nici o presiune. Creșterea presiunii aplicate senzorului are ca efect
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
Lucrarea 1. Principii de bază în utilizarea unei plăci de dezvoltare 17
realizarea unui contact electric între substraturile conductoare și determină
astfel scăderea valorii rezistenței la bornele acestuia (vezi Figura 10).
Valoarea rezistenței depinde nu numai de forța aplicată ci și de
flexibilitatea, dimensiunile și forma obiectului care aplică presiunea [4].
Figura 10. Variația rezistenței senzorului de presiune în raport cu forța de
apăsare [4]
Traductorul se va alimenta cu tensiunea VCC = 5 V.
Atât modulul traductor de presiune cât și modulul buton conțin, pe
lângă senzor, și un rezistor R conectat între pinul de ieșire al modulului
(OUT) și masă (GND).
Pentru buton R se numește rezistor de coborâre la 0 (engl. Pull down
[5], vezi Figura 11) și are rolul de a păstra valoarea logică 0 la ieșirea
modulului atunci când nu se exercită presiune pe senzor sau nu este apăsat
butonul. Stabilirea unui nivel logic sigur (0 în acest caz) împiedică apariția
aleatorie a unei valori 0 sau 1 la intrarea digitală a plăcii Arduino datorită
unor eventuale zgomote electrice [6].
Pentru traductorul de presiune (Figura 11) R îndeplinește atât funcția
de rezistor de coborâre la 0 (pentru cazul în care nu se exercită nici o forță
asupra senzorului, deci la bornele acestuia rezistența este foarte mare) cât și
de componentă a unui divizor rezistiv de tensiune (cu ajutorul acestuia se
generează la ieșire o tensiune analogică proporțională cu rezistența
senzorului în momentul exercitării unei forțe).
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
SENZORI, TRADUCTOARE ȘI ACHIZIȚII DE DATE CU ARDUINO UNO.
18 LUCRĂRI PRACTICE
Figura 11. Utilizarea rezistorului R
3. Componente software
int variabilă = valoare stabilește o valoare pentru o variabilă de tip
întreg pe 16 biți, cu semn (de la -32.768 până la 32.767).
const are semnificația de constantă modificând comportamentul unei
variabile. Variabila va deveni de tip Read-only adică valoarea ei nu va putea
fi schimbată.
unsigned int variabilă = valoare stabilește o valoare pentru o
variabilă de tip întreg pe 16 biți, fără semn (de la 0 până la 65.535).
boolean variabilă = valoare stabilește o valoare pentru o variabilă de
tip logic.
float variabilă = valoare stabilește o valoare pentru o variabilă de tip
real în virgulă mobilă pe 32 de biți, cu semn (de la -3.4028235E+38 până la
3.4028235E+38). Numărul total de digiți afișați cu precizie este 6 – 7
(include toți digiții, nu doar cei de după virgulă).
void setup() este o funcție (care nu returnează date și nu are
parametri) ce rulează o singură dată la începutul programului. Aici se
stabilesc instrucțiunile generale de pregătire a programului (setare pini,
activare porturi seriale, etc.).
void loop() este principala funcție a programului (care nu returnează
date și nu are parametri) și este executată în mod continuu atâta timp cât
placa funcționează și nu este resetată.
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
Lucrarea 1. Principii de bază în utilizarea unei plăci de dezvoltare 19
pinMode(pin, mod) configurează pinul digital specificat ca intrare
sau ca ieșire.
if(condiție) {instrucțiune/i} else {instrucțiune/instrucțiuni} testează
îndeplinirea sau nu a unei condiții.
for(inițializare, condiție, increment) {instrucțiune/ instrucțiuni }
repetă un bloc de instrucțiuni până la îndeplinirea condiției.
digitalWrite(pin, valoare) scrie o valoare HIGH sau LOW pinului
digital specificat.
digitalRead(pin) citește valoarea pinului digital specificat.
analogRead(pin) citește valoarea pinului analogic specificat.
analogWrite(pin, valoare) scrie o valoare (între 0 și 255), a
factorului de umplere pentru semnalul de tip PWM, pinului digital de tip
PWM specificat.
delay(ms) pune în pauză programul pentru o durată de timp
specificată în milisecunde.
[Link](viteză) stabilește rata de transfer a datelor pentru portul
serial în biți/secundă (BAUD).
[Link](valoare sau variabilă, sistem de numerație) tipărește
date sub formă de caractere ASCII folosind portul serial.
[Link](valoare sau variabilă, sistem de numerație) tipărește
date sub formă de caractere ASCII folosind portul serial, adăugând după
datele afișate și trecerea la o linie nouă.
== semnifică egal cu.
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
SENZORI, TRADUCTOARE ȘI ACHIZIȚII DE DATE CU ARDUINO UNO.
20 LUCRĂRI PRACTICE
4. Aplicația 1. LED comandat de un buton
4.1. Realizarea montajului electronic
Figura 12. Schema de principiu pentru aplicația 1
Figura 13. Realizarea conexiunilor electrice pentru aplicația 1
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
Lucrarea 1. Principii de bază în utilizarea unei plăci de dezvoltare 21
Se realizează următoarele conexiuni:
- Pinul digital 8 de pe placa Arduino se conectează cu un fir la
pinul IN al modulului LED;
- Pinul GND (digital) de pe placa Arduino se conectează cu un fir
la pinul GND al modulului LED;
- Pinul digital 7 de pe placa Arduino se conectează cu un fir la
pinul OUT al modulului Buton;
- Pinul GND (power) de pe placa Arduino se conectează cu un fir
la pinul GND al modulului Buton;
- Pinul 5V (power) de pe placa Arduino se conectează cu un fir la
pinul VCC al modulului Buton.
4.2. Schema logică și secvența de cod
const int buton = 7;
//definirea variabilei buton corespunzătoare portului digital 7 unde va fi
conectat pinul OUT al modulului buton
const int led = 8;
//definirea variabilei led corespunzătoare portului digital 8 unde va fi
conectat pinul IN al modulului LED
void setup() {
pinMode(buton, INPUT);
//se declară pinul buton ca fiind de intrare
pinMode(led, OUTPUT);
//se declară pinul led ca fiind de ieșire
}
void loop() {
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
SENZORI, TRADUCTOARE ȘI ACHIZIȚII DE DATE CU ARDUINO UNO.
22 LUCRĂRI PRACTICE
boolean stareButon = digitalRead(buton);
//se declară variabila de tip boolean stareButon ce ia valoarea logică a
stării pinului buton
if (stareButon == HIGH) {
//daca starea pinului buton este 1 logic (buton apăsat)
digitalWrite(led, HIGH);
//atunci scrie valoarea 1 logic pe pinul led (aprinde led)
}
else {
//altfel
digitalWrite(led, LOW);
//scrie valoarea 0 logic pe pinul led (stinge led)
}
}
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
Lucrarea 1. Principii de bază în utilizarea unei plăci de dezvoltare 23
5. Aplicația 2. LED clipitor
5.1. Realizarea montajului electronic
Figura 14. Schema de principiu pentru aplicația 2
Figura 15. Realizarea conexiunilor electrice pentru aplicația 2
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
SENZORI, TRADUCTOARE ȘI ACHIZIȚII DE DATE CU ARDUINO UNO.
24 LUCRĂRI PRACTICE
Se realizează următoarele conexiuni:
- Pinul digital 8 de pe placa Arduino se conectează cu un fir la
pinul IN al modulului LED;
- Pinul GND (digital) de pe placa Arduino se conectează cu un fir
la pinul GND al modulului LED.
5.2. Schema logică și secvența de cod
Definire port led
Aprindere led
Păstrare led aprins un timp t
Stingere led
Păstrare led stins un timp t
const int led = 8;
//definirea variabilei led corespunzătoare portului digital 8 unde va fi
conectat pinul IN al modulului LED
void setup() {
pinMode(led, OUTPUT);
//se declară pinul led ca fiind de ieșire
}
void loop() {
digitalWrite(led, HIGH);
//scrie valoarea 1 logic pe pinul led (aprinde led)
delay(1000);
//întârzie 1000ms (păstrează led aprins 1 secundă)
digitalWrite(led, LOW);
//scrie valoarea 0 logic pe pinul led (stinge led)
delay(1000);
//întârzie 1000ms (păstrează led stins 1 secundă)
}
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
Lucrarea 1. Principii de bază în utilizarea unei plăci de dezvoltare 25
6. Aplicația 3. LED pulsator
6.1. Realizarea montajului electronic
Figura 16. Schema de principiu pentru aplicația 3
Figura 17. Realizarea conexiunilor electrice pentru aplicația 3
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
SENZORI, TRADUCTOARE ȘI ACHIZIȚII DE DATE CU ARDUINO UNO.
26 LUCRĂRI PRACTICE
Se realizează următoarele conexiuni:
- Pinul digital 10 (PWM) de pe placa Arduino se conectează cu un
fir la pinul IN al modulului LED;
- Pinul GND (digital) de pe placa Arduino se conectează cu un fir
la pinul GND al modulului LED.
6.2. Schema logică și secvența de cod
const int led = 10;
//definirea variabilei led corespunzătoare portului digital PWM 10 unde
va fi conectat pinul IN al modulului LED
void setup() {
pinMode(led, OUTPUT);
//se declară pinul led ca fiind de ieșire
Downloaded by Raluca Rob (robraluca2@[Link])
lOMoARcPSD|35406810
Lucrarea 1. Principii de bază în utilizarea unei plăci de dezvoltare 27
}
void loop() {
for (int x=0; x<255; x=x+1) {
//variază valoarea lui x crescător de la 0 până la 254
analogWrite(led, x);
//scrie valoarea analogică cu factorul de umplere x pe pinul led
delay(20);
//întârzie 20ms
}
for (int x=255; x>0; x=x-1) {
//variază valoarea lui x descrescător de la 255 pana la 1
analogWrite(led, x);
//scrie valoarea analogică cu factorul de umplere x pe pinul led
delay(20);
//întârzie 20ms
}
}
Downloaded by Raluca Rob (robraluca2@[Link])