Proiect MicroControlere
Cuprins:
1.1 …….. Senzori de temperatura
1.2 …….. Metode de control a temperaturii
1.3 …….. Display LCD
1.4 …….. Tastatura
1.5 …….. Schematics
1.6 …….. Cod
Page 1 of 24
Proiect MicroControlere
1.1 Senzori de temperatura
Tipuri de senzori
*Senzori de contact – acest tip de senzori au nevoie de contact fizic cu obiectul, si
folosesc conductia caldurii pentru a monitoriza schimbarile de temperatura. Pot fi folositi la
solide, lichide sau gaze cu o mare paleta de temperaturi.
*Senzori ce nu au nevoie de contact – folosesc convectia si radiatia pentru a masura
temperatura. Sunt folositi pentru a detecta lichide sau gaze ce emit energie (exemplu: camerele
cu infrarosu)
Termostatul
Termostatul este un senzor de tip electro-mecanic
care joaca rolul unui switch.
In principiu este alcatuit din doua straturi diferite
de metal (cupru, nichel, thungste sau aluminiu) care sunt
sudate impreuna pentru a forma un strat Bi-Metalic.
Diferenta liniara de expansiune dintre cele doua metale
produce o miscare de curbura mecanica.
In imaginea de pe pagina anterioara este prezentat modul de lucru al termostatului.
Dupa cum am spus acesta lucreaza doar ON/OFF.
Sunt foarte ieftini, dar dezavantajul principal este ca au o curba de histerezis destul de
mare. Ca de exemplu poate fi setat la o temperatura de 20* si sa fie pe ON doar la 22* sau OFF
la 18* => diferenta de 4* grade, ceea ce il face un candidat slab pentru proiect.
Termistorul
Este al II-lea tip de senzor, numele lui deriva de la THERM(-ally, termal) si (res-)ISTOR.
Este un tip de rezistor care schimba rezistenta in functie de temperatura.
In general sunt fabricati din materiale ceramice ca NiO 2 (dioxid de nichel). Marele
avantaj, fata de termostat este ca raspunde la temperatura mult mai repede si mai sensibil.
Majoritatea au un coeficient de temperatura negativ, inseamna ca rezistenta SCADE cu
CRESTEREA temperaturii, dar exista si vice-versa,
Termistorii sunt evaluati in general la temperatura camerei, timpul necesar reactiei la
schimbarea de temperatura, si puterea nominala. Exista o mare varietate de rezistori, de la 10
MΩ pana la cativa Ω.
Un exemplu in care se poate folosi termistorul:
Urmatorul termistOr are o rezistenta de 10KΩ la 25*, si o
valoare de 100Ω la 100*
La 25*C
Page 2 of 24
Proiect MicroControlere
La 100* C
Este de notat insa ca termistorii sunt deviceuri non-linIare, si ca valoare lor standard
variaza => ca au o constanta de temperatura care poate fi utilizata pentru a calcula rezistenta
pentru o anumita temperatura.
Termistorul este un candidat bun, asa ca va fi luat in considerare.
Detectorii Rezistivi de Temperatura
Resistive Temperature Detectors (RTD)
Un alt tip de senzori termali sunt RTD-urile care masoara precis temperatura, si sunt
construiti din metale conductoare de inalta puritate ca platina, cupru sau nichel, invelite intr-un
strat protector, si fucntioneaza similar cu termistorul, se schimba temperatura, se schimba si
rezistenta.
RTD-urile au un coeficient de temperatura pozitiv, dar diferenta fata de termistori este
ca au o iesire liniara (temperatura/rezistenta).
Totusi rezistenta lor creste putin, cu aproximativ 1Ω/*C. Cei mai comuni detectori sunt cei din
platina care au o rezistenta de 100Ω la 0*C. O temperatura de operare de la -200 la +600 *C.
Termocuplul
Este pe departe cel mai folosit pentru a masura temperatura datorita simplicitatii,
usurintei de folosire, si vitezei de raspuns la schimbarile de temperatura, si mai ales ca sunt de
dimensiuni reduse.
El are de asemenea o varietate de raspuns mare la temperatura, intre -200 si mult peste
2000*C.
Termocuplurile sunt senzori termoelectrici construiti din doua metalie nesimilare, ex
cupru si constanta, care sunt sudate sau presate impreuna. O jonctiune este tinuta la o
temperatura constanta (Jocntiunea Rece) in timp ce joctiunea celalata (Jonctiunea Calda)
masoara temperatura. Cand cele doua sunt la temperaturi diferite se produce o tensiune in
lungul joctiunii, tensiune folosita in a masura temperatura, la fel ca in imaginea de pe pagina
urmatoare.
Principiu de operare este foarte simplu,
cand sunt imbinate, jonctiunea dintre cele
doua metale produce un efect termo-
electric care ia nastere constant un
potential energetic numit “Seebeck effect” de
cativa milivolti. Daca jonctiunile sunt la aceeasi temperatura
potentialul din lungul celor doua jonctiuni este zero.
Senzorii din seria LM35/235/335 (Texas Instruments)
Acesti senzori sunt precisi, usor de calibrat si opereaza cu doar 2
terminale. Cand este calibrat la 25*C, LM135, in general are o eroare
Page 3 of 24
Proiect
de 1*CMicroControlere
la o paleta de 100*C. Lucreaza intr-un domeniu de -55* pana la 100*C. Punct forte este
pretul scazut.
1.2 Metode de control a temperaturii
Controlul temperaturii este un proces in care “schimbarea temperaturii unui spatiu sau
obiect este masurata sau detectata”[1].
1) Loop Control:
Un termostat de camera este exemplul cel mai concret de loop control. El constant
preia temperatura camerei si are starea de ON/OFF pentru aparatul de aer conditionat, sau
pentru centrala termoenergetica.
2) Bananta Energetica
Daca exista o diferenta de temperatura asupra unui sistem/obiect/spatiu, atunci
automat exista si o diferenta de miscare moleculara in sistem si anume:
*daca temperatura creste => cresterea miscarii moleculare si atomice; si vice-versa.
“Energia termica “pluteste” de la un punct la altul, intotdeauna de la un punct mai inalt
la unul mai scazut”[2] prin unul din cele trei procese: conductie, convectie si radiatie.
Asadar LM335 functioneaza pe baza miscarii moleculare pentru a furniza o tensiune de
iesire in functie de temperatura ambientala.
Mai jos sunt diagramele de raspuns la temperatura a senzorului LM335 in functie de
asezarea acestuia: in aer cu umiditate standard 65% si in mediu cu umiditate mai crescuta
(exemplu: sauna, baie, sala de piscina).
Metoda PID
(proportional, integral, derivator)
In care puterea sistemului de incalzire este regulata pentru a ajunge la temperatura
ambientala dorita, si controlul acesteia se poate rafina pentru a fi cat mai precis.
1
[Link]
2
[Link]
Page 4 of 24
Proiect MicroControlere
“Aceasta rafinare poate fi obtinuta in forma functiilor proportionale (P), integratoare(I),
sau derivatoare(D).”[3] Aceste functii se refera la termenii utilizati combinati in functie de
cerintele sistemului.
Pentru a obtine optimul de control al temperaturii trebuie luati in calcul urmatorii
factori:
1)Senzorul de temperatura este in contact cu sistemul ce trebuie controlat
2)Un bun transfer energetic intre senzor si sistem
3)Plaja de temperaturi adecvata
4)Sursa adecvata de caldura
Practic
-Simulare Proteus ISIS
Am construit circuitul de amplificare al iesirii LM335, in care am folosit pentru
amplificare binecunoscutul LM741, rezistente, un osciloscop, surse, markeri de tensiune, si
sensorul de temperatura.
Asta este modul in care au fost conectate componentele. Dupa care am simulat modul
de lucru al circuitului.
3
[Link]
Page 5 of 24
Proiect MicroControlere
Dupa cum se poate observa, ambele tensiuni de iesire, atat cea a amplificatorului cat si
cea a sensorului de temperatura cresc constant in functie de energia termica existenta in
sistem.
Rezistentele : R1 R2 R3 R4 au fost dimensionate dupa urmatoarele calcule:
Dar stim ca:
R R
1 3 Asadar:
Proiectarea in ISIS Proteus a releului
Pentru a proiecta un releu de comanda am folosit un rezistor, switch, tranzistor 2N3904
si o bobina.
Pentru a exemplifica modul de lucru al releului, l-am redus la un switch si am proiectat
urmatarea simpla schema formata dintr-o sursa de tensiune alternativa, o rezistenta si switch.
1.3 Metode de control a temperaturii
1. Introducere
Cristalele lichide – sunt o stare stabila a materiei caracterizata prin proprietati
antroscopice fara existenta unui cristal in 3 dimensiuni, de obicei cristalele lichide “stau”
intre starea solida si lichida.
Principiul de baza al LCD-urilor este manipularea luminii polarizate. Acesta este
folosit in majoritatea aplicatiilor existente, de la masini de spalat, monitoare LCD,
telefoane, aproape orice are un mod vizual de a interactiona cu utilizatorul.
Page 6 of 24
Proiect MicroControlere
LCD-ul utilizat este format din 2 straturi de sticla iar intre ele se afla cristalele
lichide. Sticla este supusa la un tratament special pentru ca orientarea moleculelor sa
fie mai manipulabila.
2. LCD
S-a ales LM 016. Este un LCD de 16 caractere*2 linii (2x16), are un
pret acceptabil, si totodata are indeajuns de multe caractere afisabile
pentru a comunica interactiv cu utilizatorul.
LM 016 de la HITACHI Electronics are urmatoarele proprietati fizice
Dimensiuni: 61x15.8 mm
Culori: alb si negru.
Dimensiune caracter: 2.96x4.86 mm4
Rolul pinilor este prezentat in tabelul din stanga. Si
functionalitatea lor urmeaza a fi descrisa pe pagina urmatoare.
In tabelul de jos este sunt prezentate tensiunile de alimentare si
temperaturile optime de operare.
Tab. 1 Pini display
4
[Link]
Page 7 of 24
Proiect MicroControlere
Dupa cum scrie in datasheet , LCDul are integrat un microControler, HD44780.
Mai sus sunt instructiunile impreuna cu codul lor, instructiuni existente in LM 016.
[Link] UML (Universal Modelling
Language)
*Se apasa butonul de pornire
Page 8 of 24
Proiect MicroControlere
*Pentru a confirma pornirea, ca sa se evite pornirea din greseala (poate fi introdus un
sistem aditional de securitate)
*Dupa validarea alegerii, se actioneaza codul de pornire propriu-zisa a termostatului prin
senzorul de temperatura. Dupa atingerea temperaturii dorite sistemul se opreste.
Dupa cum se vede in imaginea din
stanga, displayul suporta o multitudine de
caractere, nefiind un display doar alfa
numeric, are si posibilitatea simbolurilor, a
semnelor de puctuatie, a literelor romane,
si a unor structuri chinezesti.
Setarea functiilor:
LD B,1 ; one mS delay
CALL INSTR ;o/p instruction to module
function set
LD B,4 ;four modes
MODSET; CALL BUSY ;check for not busy
INC HL ;inc table pointer
LD A,(HL) ;get data
LD (WRINST),A ;and sent to module
DJNZ MODSET ;next mode
Page 9 of 24
Proiect MicroControlere
3. Schema electrica pentru displayul LCD
1.4 Tastatura
Tastaura va fi formata din patru switchuri, pentru demonstratia practica am ales
tastatura de 16 butoane(switchuri), din care am folosit doar 6. Adica am ales o matrice de
2x3.
Butoanele vor avea urmatoarelele roluri
*Buton <Validare>
*Buton <Inapoi/Cancel>
*Buton <+> ;pulseaza inainte
*Buton <-> ;pulseaza inapoi
5
[Link]
Page 10 of 24
Proiect MicroControlere
*Buton iluminare LCD (optional)
*Buton <hold>
Butonul de hold are rolul de a bloca celelalte butoane, pana la apasarea acestuia
timp de 3 secunde.
Meniul urmeaza a fi construit din:
*Meniu principal din care se poate alege
*Submeniu1=> Cu reglarea temperaturii
*Submeniu2=> Setare mod “Plecat de acasa”
*Submeniu3=> Afişaj ceas
Modul “Plecat de acasa” va tine centrala intr-un regim de low consumption energy,
util in cazul temperaturilor joase, si are rolul de a mentine o temperatura de cel putin 6*C,
pentru a evita inghetarea lichidului de incalzire in tevi, centrala sau calorifere.
Schema electrica
Page 11 of 24
Proiect MicroControlere
Imagini cu viitorul meniul
Page 12 of 24
Proiect MicroControlere
Codul in C pentru primirea comenzilor de la butoane si schema UML
Start 1 Start
Setare porturi pentru
tastatura Setarea porturilor pe Citirea porturilor
nivelul LOW
NU
Exista buton apasat?
Citirea porturilor
DA
Toate butoanele neapasatee?
NU
Asteapta Delay
Sau asteapta
urmatoarea apasare
DA
1 Start
Stop
1.5 Schematics
Schema completa a Termostatului de camera
Page 13 of 24
Proiect MicroControlere
Page 14 of 24
Proiect MicroControlere
1.6 Codul implementat in C
/*********************************************\
Proiect MicroControlere
©Nechiti Andras Mihai
Grupa 2031
Indrumator proiect: Etz Radu
/********************************************/
//Date tehnice:
//Senzorul functioneaza intre 8-30*C
//Microcontrolerul AT89c51
//DAC AD0804
//Crystal Frequency 11.0592 MHz
//Ultima modificare: 27/04/2013
#include <reg51.h>
#define port P3
sfr adc_input = 0x90; //port1
sfr lcddatasend_pin = 0xA0; //port2
Page 15 of 24
Proiect
//LCD MicroControlere
sbit rs = P3^2; //Bitul de RS
sbit rw = P3^1; //--||-- RW
sbit e = P3^0; //--||-- E(nable, de la LCD)
//ADC
sbit wr = port^5; //
sbit cs = port^3; //
sbit rd = port^4; //
sbit intr= P3^6; //Intreruperea de la ADC
//Butoane
sbit menu = P0^2; //Menu buton
sbit up = P0^0; //Buton Crestere Temp
sbit down = P0^1; //Buton Coborare temp
sbit ok = P0^3; //Buton OK
sbit CC = P3^7; //Comanda Centrala
//Declarare variabile
int rezultat_conversie=0,k;
unsigned char adc_val;
unsigned char read,value,lcd;
double x;
int t,treshold=20;
void conv_adc();
void read_adc();
void shape();
unsigned char pos,pos1; //<pos> reprezinta locatia
unde urmeaza a fi afisat numarul convertit cu conv
(conversie)
//Functia Delay
void delay(unsigned int msec)
{
int i,q ;
for(i=0;i<msec;i++)
for(q=0;q<500;q++);
}
Page 16 of 24
Proiect MicroControlere
//Functia de comanda a LCD-ului
void lcdcomm(unsigned char comm)
{
lcddatasend_pin= comm;
rs = 0;
rw = 0;
e = 1;
delay(1);
e = 0;
return;
}
//Functia de trimitere a datelor catre LCD
void lcddatasend(unsigned char comm)
{
lcddatasend_pin = comm;
rs = 1;
rw = 0;
e = 1;
delay(1);
e = 0;
return;
}
//Functia afisare a mesajelor cu ajutorul pointerilor
void lcdshow(unsigned char *str)
{
int i=0;
while(str[i]!='\0')
{
lcddatasend(str[i]);
i++;
delay(1);
}
return;
}
//Functia care converteste var integer to
Page 17 of 24
Proiect
//ASCII MicroControlere
pentru a putea fi afisata valoare primita de a
ADC 0804
void conv(unsigned int val)
{
unsigned char flg=0;
lcdcomm(pos);
if(val==0)
lcddatasend('0'); //daca = 0 trimite 0
while(val>0)
{
lcd=val%10; //Se returneaza restul impartirii
val=val/10; //Se returneaza partea intreaga
lcdcomm(pos-flg);//Pozitia in care se afiseaza
lcddatasend(lcd+48);
flg++;
}
if(flg==1) //Validarea pozitiilor
{ //Se modifica pozitia a.i.
lcdcomm(pos-1);//in cazul in care se coboara
lcddatasend(' '); //de la 10* la 9*
lcdcomm(pos-2); //sa nu ramana 19*
lcddatasend(' ');//se inlocuieste cu ' ' (space)
}
if(flg==2)
{
lcdcomm(pos-2);
lcddatasend(' ');
}
}
//Functie de initializare a LCDului
void lcdinit()
{
lcdcomm(0x01);
lcdcomm(0x38); //LCD utilizat in 2 randuri pe
8biti
delay(2);
Page 18 of 24
Proiect MicroControlere
lcdcomm(0x0E); //Avem cursor
delay(2);
}
// Function de creare a formei de grad (°)
void shape()
{
lcdcomm(64);
lcddatasend(2);
lcddatasend(5);
lcddatasend(2);
lcddatasend(0);
lcddatasend(0);
lcddatasend(0);
lcddatasend(0);
lcddatasend(0);
lcdcomm(pos1);
lcddatasend(0);
delay(10);
}
//Functia MAIN
void main()
{
lcdinit(); //Apelarea functiei lcdinit
shape(); //Apelarea functiei shape-forma
k=0;
while(1)
{
//Conversia
conv_adc(); //Pornire conversie
read_adc(); //Citeste valoare ADC
x=rezultat_conversie*0.02;
//x reprezinta tensiunea pe care o ofera senzorul
//fiind valoarea dupa conversia de la ADC
Page 19 of 24
Proiect MicroControlere
//Vref/2^8=5/256=~0.02,DAC pe 8 biti
t=8+4.4*x;
//ecuatia senzorului care este in functie de
//tensiunea de iesire a senzorului,x, si este
liniara intre 8 si 30 grade
if(k==0)
{
lcdcomm(0x83);//Afiseaza pe randul 1 de la caract 3
lcdshow("Termostat");
lcdcomm(0xC2);//Afiseaza pe randul 2 de la caract 2
lcdshow("Temp:");
lcdcomm(0xCB);
lcdshow("C");
pos=0xC9; //Pozitia unde se afiseaza pe lcd
temperatura citita de la senzor
conv(t); //Afisarea temperaturii cu functia conv
(conversie)
}
//Valoare prag si comanda centralei
if(treshold>t)
//Daca valoarea de prag mai mare decat temperatura
{
CC=1; //Atunci CC (comanda centrala) enable
}
if (treshold<=t)
//Daca valoarea de prag mai mica decat temperatura
{
CC=0;
//Atunci CC (comanda centrala) disable
}
//Buton Menu
if(menu==0)
//Daca buton "Menu" apasat"
{
Page 20 of 24
Proiect MicroControlere
lcdcomm(0x01);//Sterge
ecran
k++; //incrementeaza flag
delay(30);
}
if(k==2)
//daca flag = 2
{
lcdcomm(0x01); //Sterge ecran
k=0; //fa flag 0
}
//Buton OK
if(ok==0)
//Daca butin "OK" apasat = 0
{
lcdcomm(0x01); Sterge ecran
k=0;
}
if(k==1) //Daca flag este 1
{
lcdcomm(0x80); //Scrie de la pozitia 0
lcdshow("T actuala:");
pos=0x8C;
conv(t); //Scrie temperatura
pos1=0x8D;
shape();
lcdcomm(0x8E);
lcdshow("C");
lcdcomm(0xC0);
lcdshow("T dorita:");
pos=0xCC;
conv(treshold);
pos1=0xCD;
shape();
lcdcomm(0xCE);
lcdshow("C");
//Buton UP
if(up==0)
{
Page 21 of 24
Proiect MicroControlere
treshold++;
//Mareste prag temperatura
}
//Buton DOWN
if(down==0)
{
treshold--;
//Scade prag temperatura
}
}
}
//Functia de conversie
void conv_adc()
{
cs = 0; //Face CS low
wr = 0; //Face WR low
delay(1);
wr = 1; //Face WR high
cs = 1; //Face CS high
while(intr);
intr=1;
//Asteapta intrerupere pentru a te duce in low
}
//Functia citire ADC
void read_adc()
{
cs = 0; //Face CS low
rd = 0; //Face RD low
delay(1);
rezultat_conversie = adc_input; //Citeste
portul ADC
rd = 1; //Face RD high
Page 22 of 24
Proiect MicroControlere
cs = 1; //Face CS high
}
BIBLIOGRAFIE
1. [Link]
2. [Link]
3. [Link]
4. [Link]
Resistance
Sensor type Thermistor Thermopile Temperature Thermocoupl Integrat
Detector(RTD) e Circuit
-Low cost -Wide -High -Widest -Low po
Advantages -Fast temperature accuracy temperature consum
range -Wide range -Very lin
-Non-contact temperature
measurement range
-Non-linear -High cost -High cost -Low -Limited
Disadvantage -Self- -Color of -Slow accuracy tempera
s heating target can response time range
affect -More
accuracy expensi
than
Page 23 of 24
Proiect MicroControlere
thermist
Page 24 of 24