Documente Academic
Documente Profesional
Documente Cultură
DOMENIUL: ELECTRONICĂ
CALIFICAREA: TEHNICIAN ELECTRONIST
ELECTRONICĂ INDUSTRIALĂ
PROIECT
CONTROLUL, MONITORIZAREA ȘI
AFIȘAREA TEMPERATURII CU O
APLICAȚIE BAZATĂ MICROPROCESOR
Coordonator: Autor:
2018
CUPRINS
I.MICROCONTROLERE
I.1 CE ESTE UN MICROCONTROLLER …………………...………………………. 3
MICROCONTROLLER ……………………………………………………………..… 7
BIBLIOGRAFIE …………...…………………………... 28
2
I. MICROCONTROLLERE
Rolul unui microcontroller într-un circuit electronic este identic cu rolul jucat de creier într-un
organism biologic: controlul majorităţii funcţiilor pe care acel sistem le poate realiza. Există foarte
multe tipuri de microcontroller-e, fiecare oferind un set diferit de funcţii şi de nivele de perfomanţă.
Cu toate acestea, toate tipurile de microcontrollere au o serie de caracteristici comune care înţelese,
fac mai uşoară utilizarea lor.
3
Fig. 1.1 Structura simplificată a unui microcontroller
În chenarul gri - închis sunt reprezentate blocurile funcționale din interiorul unui microcontroller,
iar în chenarele gri - deschis sunt figurate principalele categorii de pini prin care microcontroller-
ul comunică cu exteriorul.
În continuare, vom prezenta fiecare dintre aceste elemente.
1. Procesorul
Este componenta care execută instrucţiunile cuprinse în firmware, adică:
• preia date de la pinii configuraţi ca pini de intrare, apoi
• prelucrează aceste date conform instrucţiunilor scrise în firmware şi în cele din urmă,
• oferă semnale de ieşire corespunzătoare, cu ajutorul pinilor configuraţi ca pini de
ieşire.
Spre deosebire de PC-uri şi laptopuri, care sunt destinate lucrului cu mai multe programe în acelaşi
timp (multitasking), microcontroller-ele sunt destinate unor aplicaţii individuale, adică rulează
mereu un singur program (firmware-ul). Asta înseamnă că procesoarele din microcontrollere nu au
de muncit la fel de mult ca cele de pe PC-uri şi din acest motiv producătorii de microcontroller- e
le-au dotat cu procesoare a căror frecvenţă de lucru rar depăşeşte 100 – 200 MHz (faţă de 2 - 3
Ghz cât are un PC/ laptop obişnuit). Reducerea de performanţă la strictul necesar a permis
microcontrollerelor să aibă un preţ mic, ceea ce argumentează gradul de răspândire pe care îl putem
observa astăzi.
2. Memoria RAM
Atunci când realizăm niste calcule ceva mai complexe, nu putem face totul „în cap”, ci avem nevoie
să notăm temporar anumite rezultate pe o bucată de hârtie. În mod similar şi procesoarele au nevoie
să-şi noteze temporar nişte rezultate, numai că ele nu o fac pe o bucată de hârtie ci în ceea ce se
numeşte memorie RAM. RAM este prescurtarea de la Random Access Memory - memorie cu
acces aleator, adică o memorie din care datele pot fi accesare (citite sau scrise) individual
(spre deosebire de alte tipuri de memorie în care procesorul este nevoit să citească sau să scrie şi
alte locaţii de memorie, în afară de cele care îl interesează în acel moment).
Recapitulând, memoria RAM este deci o „ciornă” pe care procesorul o foloseşte pentru a-şi face
4
calculele. Ea este o memorie volatilă, adică datele memorate în ea se şterg atunci când alimentarea
microcontroller-ului este întreruptă, această memorie neputând fi folosită pentru salvarea
permanentă a datelor.
Reducerea performanţelor la necesităţi, face ca resursele de RAM ale unui microcontroller să fie
cu mult inferioare celor din componenţa unui PC. De regulă, microcontroller-ele dispun de
memorii RAM de zeci sau sute de kilobiţi (kb, mai rar megabiți).
8
I.4 Programarea microcontrollerelor
Noi oamenii suntem obişnuiți cu limbaje ce conțin litere, semne de punctuaţie şi cifre, dar
firmware-ul şi implicit microcontroller-ul foloseşte limbajul digital (nu ştie decât de 0 şi de 1 logic
iar firmware-ul este şi el o listă de instrucţiuni de lucru care nu conţine altceva decât şiruri de 0 şi
de 1). Programarea la nivel de bit, sau altfel spus în cod maşină, este deosebit de dificilă, din acest
motiv cercetătorii în informatică au dezvoltat nişte utilitare ajutătoare:
o limbaje de programare, care sunt colecţii de cuvinte speciale care pot fi utilizate pentru
a scrie firmware-ul. Fişierul sau fişierele în care este scris firmware-ul poartă denumirea
de Cod sursă;
o compilatoare, care sunt nişte programe care au funcţie de translator – traduc codul sursă
într-un limbaj pe care microcontroller-ul îl poate înţelege (limbaj denumit şi cod maşină).
Cele două utilitare de mai sus se regăsesc în componenţa unor programe sau set-uri de programe
care au denumirea generică de medii de dezvoltare integrate (Integrated Development
Environment - IDE).
Pentru fiecare familie de microcontrollere, şi există pe piață o foarte mare varietate de tipuri de
microcontrollere şi de firme producătoare, există medii de dezvoltare recomandate. Iată câteva din
cele mai întâlnite:
AVR studio - este un mediu de dezvoltare profesional creat pentru familia AVR de
microcontrollere produse de ATMEL (începând din 1996), optimizat spre a fi utilizat cu
uşurinţă şi de amatori. AVR a fost una dintre primele familii de microcontrolere care a
utilizat o memorie flash on-chip pentru stocarea programelor, spre deosebire de alte tipuri:
ROM, EPROM, sau EEPROM, utilizate de alte microcontrolere la momentul respectiv.
Pentru microcontrolerele AVR se găsesc o multitudine de aplicații, ele fiind de asemenea,
utilizate în linia Arduino de sisteme open source.
10
Fig. 1.3 Structura unui program simplu în format .bin conţinut într-o memorie program
Lumea de azi este complet diferită de cea de acum 100 de ani. Acest lucru se datorează în principal
avansului tehnologic fără precedent, unul din pilonii ce susţine şi stimulează continuu acest avans
fiind sistemele embedded controlate de microcontrollere. Ele oferă o modalitate simplă, versatilă
şi ieftină de exprimare a creativităţii tehnice.
11
II. PLĂCI DE DEZVOLTARE BAZATE PE
MICROCONTROLERE – ARDUINO
2.1 Arduino – scurt istoric, genealităţi
Arduino este o companie open-source care produce plăci de dezvoltare bazate pe microcontrolere
și partea de software destinată funcționării și programării acestora. Pe lângă acestea, mai include
și o comunitate uriașă ce se ocupă cu crearea și distribuirea de proiecte care au ca scop concepția
de dispozitive care pot sesiza și controla diverse activități sau procese în lumea reală.
Aceste plăci de dezvoltare pun la dispoziția utilizatorului pini I/O digitali și analogici, care pot fi
interfațați cu o gamă largă de plăcuțe hard numite shield-uri (scuturi) și cu tot felul de alte circuite.
Ele au interfețe de comunicații seriale, inclusiv USB, pentru încărcarea programelor din PC-uri.
Pentru programarea microcontrolerelor, Arduino vine cu un mediu de dezvoltare integrat (IDE)
bazat pe proiectul Processing, care include suport pentru limbaje de programare ca C și C++.
Primul Arduino a fost lansat în 2005, având ca țintă asigurarea unei soluții ieftine și simple pentru
începători și profesioniști spre a crea dispozitive capabile să interacționeze cu mediul, folosind
senzori, actuatori și sisteme de acționare. De exemplu, dispozitive pentru utilizatorii începători
precum: roboți simpli, dimmere, termostate, detectoare de obstacole sau de mișcare.
Plăcile de dezvoltare Arduino sunt disponibile comercial sub formă preasamblată sau sub forma
unor kituri de asamblat acasă (do-it-yourself). Specificațiile schemelor sunt disponibile pentru
orice utilizator, permițând oricui să fabrice plăcuțe Arduino. Adafruit Industries estimase la
mijlocul anului 2011 că au fost produse deja peste 300.000 de plăci oficiale Arduino, iar în 2013,
700.000 de plăcuțe oficiale erau în posesia utilizatorilor.
Arduino a început în 2005 ca un proiect al unui student al Institutului de Interacțiune a Designului
din Ivrea, Italia. La acea vreme studenții foloseau o plăcuță de dezvoltare BASIC Stamp care costa
100 de dolari, ceea ce era considerat foarte scump pentru studenți. Numele "Arduino" provine de
la un bar din Ivrea, unde o parte din fondatori obișnuiau să se întâlnească.
Studentul columbian Hernando Barragán a creat platforma de dezvoltare Wiring care a servit ca
bază pentru Arduino. După finalizarea platformei Wiring, mai multe versiuni, mai light și mai
ieftine, au fost create și puse la dispoziția comunităților open-source. Din echipa inițială Arduino
au făcut parte Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino și David Mellis.
Arduino este un dispozitiv uimitor, care îţi permite să realizezi aproape orice proiect ai în minte,
de la tele-automatizări interactive, la roboţi compecşi. Astfel, cu puţin entuziasm pentru a învăţa
cum să programezi un Arduino pentru a-l face sa interacţioneze cu mediul, şi cu puţină imaginaţie,
poţi construi cam orice doreşti!
O placă de dezvoltare Arduino poate fi considerată un mic computer, un sistem interactiv, care
încorporând părţi software adecvate, poate interacţiona cu mediul prin interfeţele I/O. Ea este
alcătuită de regulă dintr-un microprocesor, cu un clock de 8 sau 16 MHz, un regulator liniar de 3
sau 5 volti, eventual un conector USB, pentru a permite conectarea la PC. În funcţie de varianta
sau tipul de Arduino, placa poate dispune de interfeţe I/O analogice, digitale şi PWM, cu câte un
anumit număr de pini, prin intermediul cărora să poată fi conectatată la alte circuite (senzori, LED-
uri, motoare, etc.), sau interfaţă de reţea, ca să poată transmite pe internet datele obţinute, de
exemplu, de la un senzor.
Pentru programare, proiectul Arduino oferă un mediu integrat de dezvoltare (IDE - Integrated
Development Environment), care este o aplicație scrisă în Java. Acesta își are originile în mediul
12
de dezvoltare pentru limbajul de programare Processing și în proiectul Wiring. Este proiectat
pentru a introduce programarea în lumea celor nefamiliarizați cu dezvoltarea software. Include un
editor de cod cu funcții ca: evidențierea sintaxelor, potrivirea acoladelor și spațierea automată,
oferind mecanisme simple cu un singur click, pentru a compila și a încărca programele în Arduino.
Un program scris în IDE pentru Arduino se numește sketch (schiţă).
Arduino IDE suportă limbajele de programare C și C++ folosind reguli speciale de organizare a
codului. Un sketch tipic Arduino scris în C/ C++ este compus din două funcții care sunt compilate
și legate într-un program executabil cu o execuție ciclică:
setup(): o funcție care este rulată o singură dată la începutul programului, când se
inițializează setările.
loop(): o funcție apelată în mod repetat până la oprirea alimentării cu energie a plăcuței.
Arduino IDE permite scrierea sketch-ului pe calculator, iar apoi încărcarea lui în Arduino. După
încărcarea programului pe placa de dezvoltare, Arduino va rula sketch-ul şi va interacţiona cu
mediul.
Plăcile originale Arduino erau produse iniţial de compania italiană Smart Projects. O parte dintre
acestea, cu brandul Arduino au fost proiectate de companiile americane SparkFun Electronics și
Adafruit Industries. Până la această dată, 16 versiuni de hardware Arduino au fost produse în scop
comercial. Iată câteva variante: Arduino Uno, RedBoard, Pro, Mini, Micro, Nano, Ethernet,
Leonardo, Mega, Due. Câteva dintre ele se pot vedea mai jos, în figura 2.1.
13
II.2 Tipuri de plăci de dezvoltare Arduino
Un Arduino este compus dintr-un microcontroler de 8, 16, sau 32 de biți şi componente externe
complementare care facilitează programarea și încorporarea în diverse alte sisteme. Un aspect
important la Arduino este că acesta dispune de conectori standard, care permit utilizatorului să-l
conecteze la senzori, actuatori, afişaje, sau cu diverse module interschimbabile numite shield-uri.
Unele dintre aceste dispozitive comunică cu Arduino direct prin pinii digitali, analogici, sau PWM,
iar altele sunt adresabile individual prin magistralele seriale I2C sau SPI, permițând conectarea
multor module pe o magistrală (de exemplu, la interfaţa I2C, cele 4 fire de magistrală sunt: GND,
+5V sau +3.3V, SCL – serial CLOCK şi SDA – serial DATA).
Până în anul 2015 plăcuțele Arduino oficiale au folosit cipuri Atmel din seria MegaAVR, în special
ATmega 8, ATmega 168, 328, 1280 și ATmega 2560, iar în 2015 au fost adăugate cipuri de la alți
producători. O multitudine de alte procesoare au fost folosite de dispozitive neoficiale/ compatibile
Arduino.
Cele mai multe plăci Arduino includ un regulator liniar de 5 V și un oscilator cu cuarț de 8 sau 16
MHz (sau un rezonator ceramic, în unele variante), dar sunt unele plăcuțe, cum ar fi LilyPad, care
nu au regulator, datorită restricțiilor de formă.
Bootloader-ul microcontrollerului Arduino este un mic program care ruleaza in interiorul său,
atunci când urmează a fi programat, imediat ce punem sub tensiune placa Arduino, sau imediat
după de apăsăm butonul de reset al placii. Rolul său este de a comunica cu mediul Arduino IDE
pentru a încarca sketch-uri şi de a verifica la fiecare pornire, sau după un eventual reset dacă este
vreun program în memorie pentru a-l lansa în execuţie. Microcontrollerul de tip ATmega 328
instalat pe Arduino UNO, are trei tipuri de memorii: memoria Flash de 32KB, 2 KB de RAM şi
un EEPROM de 1 KB. Bootloader-ul se afla încarcat în Flash şi ocupă 0.5 KB (512 Bytes) din cei
32KB. Arduino Uno vine preprogramat cu un bootloader care simplifică încărcarea programelor
pe memoria flash a chipului, în comparație cu alte dispozitive ce necesită programatoare externe.
Acest aspect face din Arduino o soluție simplă, permițând programarea de pe orice computer. În
prezent, optiboot instalat pe UNO, este bootloader implicit.
Toate plăcile Arduino au un lucru în comun: ele sunt programate prin intermediul Arduino IDE.
Acesta este software-ul care ne permite să scriem și să încărcăm cod. Dincolo de soft, pot exista o
mulțime de diferențe. Numărul de intrări și ieșiri (cât de mulți senzori, LED-uri și butoane putem
utiliza pe o singură placă), viteza, tensiunea de operare și factorul de formă/ dimensiuni, aspect,
sunt doar câteva dintre aceste deosebiri.
Programarea tuturor plăcilor se face prin conexiune USB, Arduino având integrate cipuri de
conversie USB-serial, cum ar fi FTDI FT232. Implementarea diferă în funcție de versiunea
hardware. Unele modele UNO, mai noi, folosesc un cip AVR separat programat să funcționeze ca
un convertor USB-serial, care poate fi reprogramat printr-un port ICSP dedicat. Alte plăci sunt
proiectate pentru a fi integrate și nu au nici o interfață de programare (hardware), care ar trebui
cumpărată separat. Unele pot rula direct de la o baterie de 3.7 V, altele au nevoie de cel puțin 5 V.
Există plăci Arduino care au implementate convertoare de nivele logice pentru a realiza conversia,
de exemplu, între nivelele logice RS-232 și TTL, sau între componente alimentate la 3.3 V şi 5 V.
Înainte de a concepe un proiect, ar trebui să consultăm tabelul 2.1, încercând să găsim varianta
potrivită de Arduino. Pentru o comparație rapidă încrucișată a variantelor de Arduino disponibile,
acest tabel ne poate fi de mare ajutor, având în vedere varietatea lor. Plăcile sunt clasificate în
funcție de microcontrolerul lor principal, care este ceea ce definește majoritatea caracteristicilor
pentru fiecare dintre ele.
14
Tab. 2.1 Comparație între plăci Arduino disponibile
USB via
5V 14 6 6 1
ATMega16U2
Arduino Uno - R3
USB via
5V 14 6 6 1
ATMega16U2
RedBoard
FTDI-
3.3V 14 6 6 1 Compatible
Header
Arduino Pro 3.3V/8MHz
FTDI-
5V 14 6 6 1 Compatible
Header
Arduino Pro 5V/16MHz
FTDI-
5V 14 8 6 1 Compatible
Header
Arduino Mini 05
FTDI-
3.3V 14 8 6 1 Compatible
Header
Arduino Pro Mini
3.3V/8MHz
FTDI-
5V 14 8 6 1 Compatible
Header
Arduino Pro Mini
5V/16MHz
FTDI-
5V 14 6 6 1 Compatible
Header
Arduino Ethernet
FTDI-
Compatible
3.3V 14 8 6 1 Header or
Wirelessly via
XBee†
Arduino Fio
FTDI-
3.3V 14 6 6 1 Compatible
Header
LilyPad Arduino 328
Main Board
FTDI-
3.3V 9 4 5 0‡ Compatible
Header
LilyPad Arduino Simple
Board
ATmega32U4 Boards — 32kB Program Space // 1 UART // 5-7 PWM // 12 Analog Inputs // 9-20 Digital I/O
5V 20 12 7 1 Native USB
Arduino Leonardo
5V 12 12 5 1 Native USB
5V 9 12 5 0 Native USB
USB via
5V 54 16 14 4
ATMega16U2
FTDI-
3.3V 54 16 14 4 Compatible
Header
Mega Pro 3.3V
FTDI-
5V 54 16 14 4 Compatible
Header
Mega Pro 5V
FTDI-
3.3V 54 16 14 4 Compatible
Header
Mega Pro Mini 3.3V
Arduino Due
1. /*
2. Blink
3. Turns on an LED on for one second, then off for one second, repeatedly.
4.
5. This example code is in the public domain.
6. */
7.
8. void setup() {
9. // initialize the digital pin as an output.
10. // Pin 13 has an LED connected on most Arduino boards:
11. pinMode(13, OUTPUT);
12. }
13.
14. void loop() {
15. digitalWrite(13, HIGH); // set the LED on
16. delay(1000); // wait for a second
17. digitalWrite(13, LOW); // set the LED off
18. delay(1000); // wait for a second
19. }
După cum putem vedea, codul este cât se poate de simplu şi inteligibil:
• Au fost definite două funcţii, setup() (liniile 8-12) şi loop() (liniile 14-19). Aceste
două funcţii trebuie să fie prezente în orice program;
• Funcţia setup() este executată o singură dată, la iniţializarea plăcii (de fiecare
dată când este alimentată, de fiecare dată când încărcăm un program nou şi atunci
când resetăm placa);
• Funcţia loop() se execută apoi la infinit, fără pauză. Dacă avem nevoie de pauze,
trebuie să le introducem în program, în mod explicit;
• În programul nostru, funcţia setup() face un singur lucru: declară pinul 13 (adică
pinul digital 13) ca pin de ieşire;
• Funcţia loop() face următoarele:
− linia 15: scrie "1" la pinul 13 (adică din acest moment pinul 13 va fi alimentat cu
5V);
− linia 16: aşteaptă 1000 de milisecunde, adică o secundă (pinul 13 fiind alimentat,
deci
LED-ul de pe placă – aprins);
− linia 17: scrie "0" la pinul 13 (adică din acest moment pinul respectiv nu va
mai fi alimentat);
− linia 18: aşteaptă din nou o secundă (dar de data asta pinul 13 nu mai este alimentat,
deci
LED-ul este stins).
Putem modifica valorile de temporizare de la liniile 16 şi 18 (evident, după fiecare
modificare trebuie să încărcăm din nou programul în Arduino, folosind File > Upload în
meniu).
În mod asemănător, putem rula în Arduino price program, sa-i modificăm setările inițiale,
obțiunile şi funcționalitățile.
III. TERMOMETRU DIGITAL CU
TERMOSTAT, RELEU ȘI ALARMĂ DE
DEPĂȘIRE A TEMPERATURII
III.1 Părti componente:
2. Buzzer Activ de 5 V
Dispozitive ce pot produce un sunet atunci cand se află sub influența unei tensiuni variabile.
Acestea au o construcție mult mai simplă decât difuzoarele din boxele audio.
Buzzerele active preiau energia de la o sursă (precum pinul de 5 V de pe placuța Arduino, care
poate genera o putere mai mare decât un pin obișnuit) și sunt acționate prin intermediul unui
element comutor.
Figura 3.9 Imagine proiect alimentat la sursă ce semnalizează acustic și vizual depășirea
temperaturii setate