lucrare de licenȚĂ · de fabricație au permis producerea unor senzori ieftini și cu...
TRANSCRIPT
Olteanu Gheorghe Daniel 1
Universitatea Politehnica Bucureşti
Facultatea de Automatică şi Calculatoare
Departamentul de Automatică şi Ingineria Sistemelor
LUCRARE DE LICENȚĂ
Strategii adaptive de achiziție de date
pentru senzori de gaze
semiconductori
Absolvent
Olteanu Gheorghe Daniel
Coordonator
As.dr.ing. Grigore Stamatescu
Bucureşti, 2013
Olteanu Gheorghe Daniel 2
CUPRINS
1. Introducere
1.1. Noțiuni introductive privind senzorii de gaze semiconductori
1.2. Aspecte privind nevoia implementării strategiilor adaptive de achiziție de date
1.3. Scurt sumar al lucrării
2. Aspecte teoretice
2.1. Senzorul pentru monoxid de carbon
2.1.1. Necesitatea măsurării concentrației de monoxid de carbon
2.1.2. Efectele expunerii la monoxid de carbon
2.2. Senzorul pentru dioxid de carbon
2.2.1. Necesitatea măsurării concentrației de dioxid de carbon
2.2.2. Efectele expunerii la dioxid de carbon
2.3. Senzorul pentru ozon
2.3.1. Necesitatea măsurării concentrației de ozon
2.3.2. Efectele expunerii la ozon
2.4. Posibilitatea implementării senzorilor de gaz in structuri BMS (Building
Management System)
3. Echipamente utilizate
3.1. Microcontrollerul ADuC832
3.2. Senzorul pentru monoxid de carbon MQ – 7TH
3.3. Senzorul pentru dioxid de carbon MG811
3.4. Senzorul pentru detecția ozonului MQ131
3.5. Multimetrul UNI – T – 803
4. Implementarea strategiilor adaptive de achiziție de date
4.1. Implementarea soluției de achiziție continuă a datelor
4.2. Implementarea soluției de achiziție temporizată a datelor
4.3. Implementarea soluției de achiziție a datelor bazate pe eșantionarea adaptivă
5. Concluzii
6. Anexe
7. Bibliografie
Olteanu Gheorghe Daniel 3
1. Introducere
Senzorii de gaz semiconductori din oxizi metalici sunt utilizați într-o largă varietate de
roluri și aplicații industriale diferite, fiind relativ ieftini în comparație cu alte tehnologii,
robuști, ușori, cu durată mare de viață, având sensibilitate înaltă și timp de răspuns rapid.
Aceștia au fost folosiți în mod extensiv pentru măsurarea și monitorizarea urmelor de gaze cu
importanță pentru mediu ca de exemplu monoxidul și dioxidul de carbon. Datorită consumului
relativ mare de curent al acestor senzori, aproximativ 200mA la o tensiune de 5V, se impune
implementarea unor strategii adaptive de achiziție de date în vederea diminuării consumului
energetic și a integrării acestor senzori în rețele wireless cu autonomie sporită, bazate pe
baterie.
1.1. Noțiuni introductive privind senzorii de gaze semiconductori
Fenomenul de modificare a conductivității în acest tip de semiconductori la absorbția /
desorbția unui gaz pe / de pe suprafața unui strat de oxid metalic este cunoscut din anul 1962,
fiind prima dată demonstrat folosind straturi subțiri (Elmi, Zampolli, Cozzani, Mancarella, &
Cardinali, 2008). Sensibilitatea unei astfel de suprafețe la gaz poate fi atât de înaltă încât să atingă
și nivelul părți pe milliard (parts per billion (ppb)) (Seiyama, Kato, Fujiishi, & Nagatani, 1962).
Este de dorit ca senzorii semiconductori oxizi metalici să aibă o suprafață specifică mare astfel
încât să absoarbă cât mai mult din analitul (gazul) vizat, oferind astfel un răspuns mai puternic și
mai exact (mai ales la concentrații mici). Progresele înregistrate în cadrul metodelor moderne
de fabricație au permis producerea unor senzori ieftini și cu sensibilitate și grad de încredere
crescut față de cei obținuți prin metodele precedente (Williams, 1999). Costurile de producție
sunt menținute la un nivel scăzut datorită simplității senzorului semiconductor din oxizi
metalici. Capacitatea acestora de a putea fi produși rapid și pe scară largă printr-un proces
ușor de controlat face această tehnologie extrem de atractivă.
Detectorii de gaze convenționali folosesc elemente sensibile realizate cu straturi metalice
semiconductoare (e.g. ). Acestea trebuie inițial incălzite la o anumită temperatură,
printr-un circuit electric auxiliar (filament de incalzire care aduce la temperatura de
functionare (100 - 400 oC) materialul semiconductor aflat pe tubul ceramic ce inconjoara
acest filament), și ulterior poate fi măsurată o tensiune de ieșire proporțională cu modificarea
rezistenței stratului semiconductor in funcție de concentrația gazului analizat. Unii senzori de
gaze necesită și operare in regim parțial pentru a elimina reziduurile depuse pe stratul de oxid
metalic înainte de o nouă măsurare. (George F. Fine, 2010)
În vederea utilizării acestor senzori intr-un sistem de calcul cu autonomie sporită, vor
Olteanu Gheorghe Daniel 4
trebui propuse strategii adaptive pentru achiziția de date in vederea minimizării consumului
energetic al acestor echipamente.
Figura 1.1. – Structura unui senzor de gaz
1.2. Aspecte privind nevoia implementării strategiilor adaptive de
achiziție de date
Problema energiei in rețelele de senzori wireless rămâne una dintre barierele majore care
împiedică exploatarea completă a acestei tehnologii. Nodurile de senzori sunt de obicei
alimentate de baterii cu o durată de viață limitată, și chiar dacă se poate folosi energie
adițională din mediul exterior, aceasta rămane o resursă limitată care trebuie folosită
inteligent. De aceea managementul eficient al energiei este o cerință cheie, cele mai multe
strategii presupunând că achiziția de date consumă semnificativ mai puțină energie decat
transmisia acestora. Cand această presupunere nu este valabila, strategiile de management
eficient al energiei ar trebui să includă de asemenea politici pentru utilizarea optimală a
senzorilor care au consumul ridicat de energie.
O rețea wireless de senzori constă intr-un număr mare de senzori de dimensiuni reduse,
care sunt așezați pe o arie geografică(se mai numeste și câmp de senzori). Fiecare nod este
reprezentat de un dispozitiv care încorporează mijloace de calcul, comunicație wireless și
abilități de detecție. Nodurile sunt organizate in grupuri și rețele și coopereaza pentru a
efectua monitorizare(și/sau control). Nodurile de senzori sunt capabile să detecteze
informația din mediu, să o prelucreze atat la nivel local cât și la nivel de grup și să trimită
Olteanu Gheorghe Daniel 5
rezultatul către unul sau mai multe puncte de colectare. Aceasta poate fi vazută ca o
tehnologie distribuită de achiziție de date și poate fi utilizată in numeroase operațiuni de
monitorizare și control. De aceea, în ultimii ani ani, numărul rețelelor de senzori a crescut
semnificativ, iar tendința aceasta va rămâne constantă și in viitor.
Datorită consumului energetic ridicat, integrarea senzorilor de gaz în sisteme de calcul
pentru aplicații de monitorizare a calității aerului cu autonomie sporită și operare pe baterii,
reprezintă o provocare. Vom avea in vedere implementarea unor strategii adaptive de
achiziție de date pentru a optimiza consumul energetic și prelungirea duratei de viață a
bateriei precum măsurarea ierarhică, măsurarea activă bazată pe model și eșantionarea
adaptivă. (Cesare Alippi G. A., 2009)
Figura 1.2. – Clasificarea și organizarea strategiilor adaptive în funcție de modul de
abordare
În figura 1.2. se poate observa clasificarea strategiilor adaptive. Acestea pot fi
implementate folosind trei abordări diferite: monitorizarea ierarhică, monitorizarea activă
bazată pe model și eșantionarea adaptivă.
Tehnicile ierarhice presupun faptul că mai multi senzori sunt instalați intr-un nod și
observă evenimentul la o rezoluție diferită și deci implicit la un consum de energie diferit.
Monitorizarea activă bazată pe model oferă o prognoză a fenomenului măsurat folosind
un set inițial de date. Odată ce modelul este calculat, următorul set de date poate fi prezis de
modelul verificat de a lungul timpului în locul achiziției continue de date ceea ce
minimizează energia consumata pentru monitorizarea evenimentului și transmiterea datelor.
În final, tehnicile de eșantionare adaptivă sunt concepute in așa fel încât să schimbe
perioada de eșantionare in funcție de datele achiziționate dar si de informația referitoare la
Olteanu Gheorghe Daniel 6
energia din baterie disponibilă la acel moment.
1.3. Scurt sumar al lucrării
În cele ce urmează vor fi prezentate pe scurt principalele noțiuni care vor fi expuse in
această lucrare. În capitolul 2 vor fi prezentate aspecte teoretice despre senzorii de gaze cu
semiconductori, modul de funcționare, răspunsul senzorilor si elementele care pot perturba
acuratețea si timpul de răspuns al acestora. În particular vor fi prezentate elemente specifice
senzorilor care detectează concentrația de monoxid de carbon, dioxid de carbon și ozon. Vor
fi studiate motivele pentru care monitorizarea acestor concentrații de gaz este importantă și
efectele acestora asupra sănătații. La sfârșitul capitolului se va studia implementarea acestor
senzori intr-un BMS (Building Management System) și anume realizarea unui modul DCV
(Demand Controlled Ventilation).
Capitolul 3 descrie implementarea aplicației practice din punct de vedere hardware (vor fi
prezentate date tehnice despre cei trei senzori de gaz utilizați , și , folosirea
multimetrului UNI-T-803, date tehnice despre microcontrollerul utilizat pentru
implementarea strategiilor adaptive și nu în ultimul rând realizarea comunicației cu PC-ul) și
software (mediul de dezvoltare KEIL, metoda de stocare a datelor in fișiere și prelucrarea
acestora ulterioară in MATLAB).
În capitolul al patrulea vom trece in revistă principalele abordări ale strategiilor adaptive
în vederea minimizării consumului de energie și a sporirii autonomiei sistemului de achiziție
de date. Apoi se va prezenta implementarea acestora pentru placa de achiziție prezentată in
capitolul anterior.
Capitolul final va avea rolul de a prezenta analiza strategiilor implementate in comparație
cu modul continuu de achiziție a concentrațiilor acestor gaze.
2. Aspecte teoretice
Teoria benzilor afirmă că în cadrul unei rețele există o bandă de valență și una de
conducție. Separația dintre aceste doua benzi este în funcție de energie, în mod particular
nivelul Fermi, definit ca și cele mai înalte nivele disponibile de energie ale electronului la o
temperatură (Martin, 2004). Teoria benzilor imparte tipurile de material în trei categorii (vezi
Figura 2.1.).
Olteanu Gheorghe Daniel 7
Figura 2.1. – Clasificarea materialelor in funcție de conductivitatea electrică
Izolatorii prezintă o diferență energetică înaltă între banda de valență și cea de conducție
(de regulă de 10 eV sau mai mult), astfel încât ar fi nevoie de o cantitate foarte mare de
energie pentru promovarea electronului din banda de valență în cea de conducție, așa încât
conducția electronică nu are loc. Nivelul Fermi este cel mai înalt strat ocupat la T = 0
(Shriver, 2006). Semiconductorii au o diferență de nivel energetic suficient de mare (0.5-5.0
eV) astfel încât la energii sub nivelul Fermi conducția nu are loc. Deasupra nivelului Fermi,
electronii pot să ocupe și banda de conductie, rezultând o creștere a conductivității.
Conductorii au nivelul Fermi în interiorul benzii de conducție.
Gazul țintă interacționează cu suprafața filmului din oxid metalic (în general prin
intermediul ionilor de oxigen adsorbiți superficial), ceea ce conduce la o modificare a
concentrației de purtători de sarcină a materialului. Această modificare a concentrației de
purtători de sarcină modifică conductivitatea (sau resistivitatea) materialului. La
semiconductorii de tip n majoritatea purtătorilor de sarcină sunt electronii, astfel încât după
interacțiunea cu un gaz reducător are loc o creștere a conductivității. Dimpotrivă, un gaz
oxidant golește stratul sensibil de purtători de sarcină (electroni), rezultând o scădere a
conductivității. La semiconductorii de tip p, conducția are loc pe baza golurilor pozitive pe
post de purtători de sarcină, putându-se observa prin urmareare efectele opuse: creșterea
conductivității în prezenta unui gaz oxidant și creșterea rezistivității în prezența unui gaz
reducător (sarcina negativă introdusă în material reduce concentrația purtătorilor de sarcină).
(George F. Fine, 2010)
Clasificare Gaze oxidante Gaze reducătoare
De tip n Creșterea rezistenței Scăderea rezistenței
De tip p Scăderea rezistenței Creșterea rezistenței
Tabelul 2.1. Schimbarea rezistenței la modificările gazului din atmosferă
Există anumiți factori care pot perturba viteza de răspuns și precizia senzorilor de gaz.
Prezența altor substanțe în raza de detecție a senzorului este importantă, deoarece in mod
ideal măsurarea conductivității ar trebui să fie relevantă numai pentru modificarea
concentrației de gaz care face subiectul monitorizării.
Dacă la schimbarea concentrației de purtători de sarcina contribuie un alt gaz, atunci
datele achiziționate de senzor vor fi inexacte și măsurătoarea va avea o valoare falsă. Cele
mai importante substanțe care pot perturba achiziția datelor sunt prezentate în cele ce
urmează.
Ozonul
S-a demonstrat că atunci când numărul de goluri de oxigen este mare, concentrația
electronilor la suprafață este și ea mare (Vincenzi, et al., 2000). Acest fapt ar crește
Olteanu Gheorghe Daniel 8
conductivitatea pentru un material de tip n, dar la introducerea ozonului pe suprafață, acesta
s-ar reduce, completând golurile (considerate goluri negative) și deci micșorând
conductivitatea.
(2.1)
(2.2)
Dacă ozonul este prezent in concentrații semnificative, răspunsul materialului va fi
modificat, acest fapt putând conduce la citiri eronate cu privire la prezența și concentrația
gazului care este monitorizat.
Apa
Apa interacționeaza cu oxidul metalic și îi modifică conductivitatea peliculei (Patel,
Patel, & Vaishnav, 2003). Moleculele de apă formeaza ioni de hidroxil (grupă funcțională
formată dintr-un atom bilavent de oxigen; se notează ) pe suprafață, introducând direct
electroni care sporesc conductivitatea unui senzor de tip n (afectează doar foarte puțin un
material de tip p). Atomii de hidrogen rămași intră in reacție cu atomii de de oxigen de la
suprafață, formând goluri negative și crescând astfel conductivitatea. În lucrarea
(Korotcenkov, Blinov, Brinzari, & Stetter, 2007)s-a investigat efectul umidității asupra
răspunsului peliculei de , aceasta având o scădere a timpului de răspuns și de asemenea
un răspuns mai puternic in prezența apei. Efectul apei trebuie luat in considerare atunci când
se monitorizează gaze reducătoare.
Compuși organici volatili
Cercetările au demonstrat că răspunsul peliculei de variază atunci când intră in
contact cu diverse hidrocarburi. În (Wang & Hu, 1999) s-a arătat că semiconductorii din oxizi
metalici răspund la alcool metilic, etilic, butilic, izopropilic. Selectivitatea și controlul
răspunsului senzorului reprezintă o provocare majoră în folosirea dispozitivelor
semiconductoare din oxizi metalic deoarece in aproape toate mediile sunt prezente urme de
compusi organici volatili.
2.1. Senzorul pentru monoxid de carbon
La ora actuală, cel mai bun material semiconductor pentru detectarea monoxidului de
carbon este . Au fost testate și alte materiale precum și însă performanțele
oferite de către acestea nu se ridică la nivelul celor oferite de , deoarece oferă un
răspuns slab atunci când se măsoară concentrații scăzute de monoxid de carbon. S-a
demonstrat că, senzorii de gaz semiconductori din au un răspuns mai puternic la
concentrații scăzute decât detectoarele de gaz în infraroșu (Wiegleb & Heitbaum, 1994), acest
fapt fiind de perspectivă pentru viitor în contextul minimizării costului de măsurare a calității
aerului. Principala dificultate in calea utilizării tehnologiei MOS este reprezentată de
Olteanu Gheorghe Daniel 9
consumul mare de energie al acestui tip de senzori. Deși temperatura de functionare de
aproximativ 250 ajută la diminuarea necesarului de energie, totuși este de preferat să se
minimizeze consumul prin implementarea unor strategii adaptive de achiziții de date.
2.1.1. Necesitatea măsurării concentrației de monoxid de carbon
Monoxidul de carbon este un gaz incolor și inodor ceea ce îl face pe acesta să fie
neobservat de oameni. Acesta reprezintă cauza principală a intoxicațiilor în Statele Unite ale
Americii și este responsabil pentru peste 50% din intoxicațiile mortale în țările puternic
industrializate (Varon, Marik, Fromm, & Gueler, 1999). S-a constatat că monoxidul de
carbon se fixeaza ireversibil de nucleul de fier al hemoglobinei (molecula ce transportă
oxigenul în sânge).
Figura 2.2. – Efectul monoxidului de carbon asupra transportului de oxigen în
sânge
Fixarea ireversibilă a monoxidului de carbon face absorția oxigenului imposibilă,
expunerea la concentrații mari pe perioade îndelungate de timp putând să provoace chiar
moartea. Conform Institutului Național de Sănătate și Siguranță Ocupațională din Statele
Unite ale Americii, valoarea maximă admisă este de 35 ppm pe o durată de 8 ore. Acest gaz
este de obicei un produs al procesului ineficient de ardere al unor substanțe organice precum
petrolul, benzina și uleiul.
Deși concentrațiile de monoxid de carbon sunt in mod particular crescute în zonele
industriale în care combustibilii fosili sunt arsi în scopuri energetice și în marile orașe în care
se ating nivele extrem de ridicate de trafic, totuși acesta este în atenția opiniei publice mai
ales din cauza numărului tot mai mare de intoxicații produse acasă. Utilizarea unor boilere
defecte, alimentate cu gaz, sau a sobelor pentru încălzirea locuințelor iarna în zonele rurale,
Olteanu Gheorghe Daniel 10
produce anual un număr semnificativ de decese.
În incinta locuințelor se pot folosi senzori pentru a monitoriza concentrația de
monoxid de carbon, iar în cazul in care aceasta depășește un anumit prag, sistemul de
monitorizare să atenționeze locatarul de iminența unei intoxicații (monoxidul de carbon nu
poate fi sesizat de “sistemul senzorial” uman deoarece este un gaz incolor și inodor).
În acest sens, există două mari categorii de senzori: senzorii cu pată de cerneală și
senzorii electrici. Senzorii de tip pată de cerneala sunt în principiu constituiți de o bucată de
sare din oxid metalic. În urma interacțiunii acesteia cu monoxidul de carbon, sarea este
redusă, formându-se dioxidul de carbon. Atunci când sarea este redusă, aceasta își schimbă
culoarea, devenind neagră.
Acest sistem de detecție prezintă avantajul de a fi ieftin, insă el necesită atenția
observatorului pentru a remarca schimbarea concentrației. Având în vedere faptul că
expunerea la concentrații mari provoacă amețeală și stări de confuzie, observatorul s-ar putea
să nu fie capabil să conștientizeze în timp util pericolul iminent în care se află și să acționeze.
De aceea, folosirea acestei metode este ineficientă și periculoasă deoarece este dependentă de
factorul uman de observație.
Senzorii de monoxid de carbon sunt la rândul lor de două tipuri: senzori din oxizi
metalici de tip termistor (detectează o schimbare a temperaturii atunci când monoxidul de
carbon reacționează cu oxidul) și senzori electrolitici (detectează schimbarea purtătorilor de
sarcină din substanța electrolitică atunci când monoxidul de carbon interacționează cu
electrodul dispozitivului).
2.1.2. Efectele expunerii la monoxid de carbon
Conform Agenției de Protecție a Mediului din Statele Unite ale Americii, în mod
obișnuit concentrația de monoxid de carbon din locuință este cuprinsă între 0.5 și 5 ppm.
Totuși, expunerea îndelungată și la concentrații ridicate poate avea efecte devastatoare asupra
sănătății umane și poate conduce chiar la moarte.
Senzorii pentru monoxid de carbon sunt utilizați într-o gamă largă de aplicații, nu
numai în cele de protecție a locuințelor dar și în măsurarea concentrației din atmosferă, în
sistemul de evacuare al mașinilor dar și în monitorizarea proceselor în instalațiile industriale.
În cele ce urmează, vor fi expuse efectele inhalării îndelungate a monoxidului de
carbon în diverse concentrații. Acesta se fixează de nucleul de fier al hemoglobinei (molecula
care transporă oxigenul în sânge) și împiedică absorbția oxigenului.
Semnele și simptomele pleacă de la dureri de cap și amețeală, pierdere a capacității de
concentrare, tahicardie, stări de greața, incapacitatea de a respira și pierderea cunoștiinței iar
la concentrații mari și la perioade îndelungate de expunere, intoxicația cu monoxid de carbon
poate duce la decesul persoanei sau persoanelor aflate în zona contaminată.
Olteanu Gheorghe Daniel 11
În tabelul de mai jos, sunt sintetizate principalele efecte ale expunerii la acest gaz în
concordanță cu concentrația de monoxid de carbon din atmosferă, măsurată în parts per
million (ppm) și concentrația de monoxid de carbon din sânge, notată în tabel cu COHb și
măsurată în procente (George F. Fine, 2010).
Concentrația de monoxid de carbon din aer (ppm)
Concentrația de monoxid de carbon din sânge (%)
Semne și simptome
35 Dureri de cap și amețeală în 6 – 8
ore de expunere
100 Dureri ușoare de cap în 2 – 3 ore de
expunere
200 Dureri ușoare de cap în 2 – 3 ore de
expunere; pierderea cunoștiinței
400 Dureri puternice de cap în 1 – 2 ore
de expunere
800 Amețeală, stări de greață în 45 de
minute de expunere
1600 Dureri de cap, tahicardie, amețeală,
greață în 20 de minute de expunere;
în 30 de minute de expunere
survine moartea
3200 Dureri de cap, amețeală și greață în
5 – 10 minute de expunere; în 30
de minute de expunere survine
moartea
6400 Dureri de cap și amețeală în 1 – 2
minute, imposibilitatea de a respira
și moartea în 20 de minute
12800 Moarte în mai puțin de 3 minute
Tabelul 2.2. – Efectele expunerii la monoxid de carbon, în funcție de concentrație
2.2. Senzorul pentru dioxidul de carbon
Un număr important de materiale semiconductoare metal – oxid au fost cercetate
pentru detecția dioxidului de carbon incluzând: , , și . Dintre acestea,
s-a dovedit a fi cel mai performant. Detecția dioxidului de carbon este problematică
Olteanu Gheorghe Daniel 12
deoarece teoria de bază referitoare la structura benzilor de valență și conducție și la
concentrația purtătorilor de sarcină este insuficientă pentru a ajuta la îmbunătățirea
răspunsului gazului (George F. Fine, 2010). Astfel domeniul de detecție la care se face
referire în literatura de specialitate este cuprinsă între 2000 și 10000 de părți pe milion. La
ora actuală, elementul cel mai dificil în implementarea senzorilor pentru dioxid de carbon cu
tehnologia MOS este constituit de dezvoltarea unor tehnici cu ajutorul cărora să se poată
măsura concentrații cuprinse între 500 și 2000 părți pe milion. Senzorii bazați pe LaOCl pot
oferi un răspuns suficient de puternic la o concentrație de 2000 ppm la o temperatură de
260ºC și de aceea studierea acestui material ar putea fi în viitor de perspectivă pentru
detectarea dioxidului de carbon la concentrații relativ mici.
2.2.1. Necesitatea măsurării concentrației de dioxid de carbon
Dioxidul de carbon este prezent în atmosferă la concentrații de 338 ppm (Ianuarie
2010) (George F. Fine, 2010). Acesta este utilizat în numeroase aplicații industriale precum:
băuturile carbogazoase, aplicații pneumatice, stingătoare de incendii și este de asemenea un
ingredient esențial pentru ca fotosinteza să aibă loc. Dioxidul de carbon este de asemenea un
gaz cu efect de seră; el absoarbe energia infraroșie și o transformă în căldură pe care o
transmite mai departe, fapt ce determină creșterea temperaturii ambientale. Astfel,
temperatura crește direct proporțional cu concentrația de dioxid de carbon din atmosferă. De
aceea, senzori cu un grad ridicat de precizie și cu un domeniu de măsurare al temperaturii
adecvat ar putea fi folosiți pentru a măsura variațiile de concentrație.
Datorită activităților industriale umane precum arderea hidrocarburior, a cărbunilor, a
metanului și a altor combustibili (in condițiile prezenței oxigenului într-o cantitate suficientă,
astfel încât în urma arderii să rezulte dioxid de carbon și apă), s-a constatat o creștere liniară a
concentrației de dioxid de carbon, fapt care a condus la încălzirea globală. Senzorii pot
măsura cantitatea de dioxid de carbon degajată în urma arderii, oferind astfel informații în
timp real despre cantitatea de gaz produsă de proces. Concentrația de a crescut în mod
constant din 1950 și până în prezent și se așteaptă ca această tendință să continue și în viitor.
Figura 2.3. Evoluția concentrației de dioxid de carbon din atmosferă
2.2.2. Efectele expunerii la dioxid de carbon
Olteanu Gheorghe Daniel 13
Dioxidul de carbon poate cauza efecte negative majore asupra sănătății umane și
inlud, printre altele, stări de somnolență și, la concentrații suficient de ridicate, sufocare.
Concentrația și timpul mediu de expunere maxime recomandate de Institutul pentru
Siguranță și Sănătate Ocupațională din Statele Unite ale Americii este de 5000 de ppm pe o
perioadă de opt ore (George F. Fine, 2010).
În tabelul de mai jos este prezentată o sinteză a efectelor expunerii la diferite
concentrații de dioxid de carbon.
Concentrația de dioxid de carbon
și durata de expunere
Efectul asupra sănătății umane și simptome
ale intoxicaiei
0.035% Concentrația de dioxid de carbon din atmosferă,
nu are nici un efect observabil
3.3 – 5.4% pentru 15 minute Dificultate crescută a respirației
7.5% pentru 15 minute Senzația de imposibilitate a respirației, creșterea
pulsului, dureri de cap, amețeli, transpirație, stare
de agitație și neliniște, dezorientare și tulburări de
vede
3% la peste 3 ore de expunere Sensibilitatea la culori, scăderea capacității de a
vedea noaptea
10% pentru 1.5 minute Spasme, creșterea activității musculare
10%+ Dificultăți în respirație și în auz, stări de greață,
senzație de strangulare, transpirație și eventual
pierderea cunoștiinței
30% Pierderea cunoștiințe, convulsii și chiar moartea
Tabelu 2.3. Efectele expunerii la dioxidul de carbon în funcție de concentrație
2.3. Senzorul pentru ozon
Ozonul (O3) este un puternic gaz oxidant. Sub influenţa razelor UV, o moleculă de
dioxid de azot generează oxigen atomic.
+ h.ν→ (2.3)
Prin combinarea dintre oxigenul atomic şi oxigenul molecular rezultă o moleculă de .
(2.4)
Olteanu Gheorghe Daniel 14
Senzorii din sunt materiale semiconductoare de tip n, cu o conductivitate electronică ce
depinde de natura atmosferei din jur şi de temperatura acestora.
Cu un semiconductor de tip n, pentru care principalele încărcături sunt electronii,
adsorbţia unui gaz reducător crescând conductivitatea electrică. Pe de altă parte, un gaz
oxidant cum ar fi sau va conduce la o scădere a conductivităţii.
Senzorul pentru ozon funcționează tot pe principiul încălzirii elementului
semiconductor din oxid metalic (aproximativ 150ºC). La această temperatură devine
extrem de sensibil la ozon, iar în urma contactului dintre cele două substanțe, oxidul metalic
își va schimba rezistivitatea electrică proporțional cu cantitatea de gaz adsorbită (George F.
Fine, 2010) .
Avantaje
Poate măsura cantități mici de ozon (sub 0.1 ppm)
Tehnologie foarte ieftină
Acuratețe și durată de viață crescute
Dezavantaje
Foarte sensibil la interferența cu alte gaze
Autonomie scăzută a bateriei datorită elementului sensibil care trebuie încălzit
Prezintă neliniarități la concentrații de peste 1 ppm
2.3.1. Necesitatea măsurării concentrației de ozon
Expunerea la ozon poate declanșa o varietate de probleme de sănătate incluzând
dureri în piept, tuse, inflamații ale gâtului și congestie a căilor respiratorii. Poate de asemenea
să agraveze bronșitele, astmul și poate produce inflamarea și deci reduce capacitatea de
funcționare a plămânilor, expunerea repetată putând lăsa sechele la nivelul țesutului
pulmonar.
Poluarea cu ozon produce la degradarea vegetației ecosistemelor și conduce la
reducerea recoltelor agricole, afectează capacitatea de creștere și dezvoltare a copacilor
plantați, crescându-le susceptibilitatea la aparitie a diverselor boli și paraziți. Ozonul
afectează scoarța copacilor și cauzează uscarea accelerată a vegetației. În Statele Unite ale
Americii poluarea cu ozon duce la pierderi anuale de peste 500 de milioane de dolari în
agricultură.
2.3.2. Efectele expunerii la ozon
Ozonul (O3) este un puternic gaz oxidant. El cauzează iritaţii ale ochilor şi plămânilor,
tuse şi probleme respiratorii, contribuind de asemenea la efectul de “seră” şi degradarea
Olteanu Gheorghe Daniel 15
vegetaţiei.
În tabelul de mai jos sunt prezentate succint efectele expunerii îndelungate la diverse
concentrații de ozon în funcție de indexul de calitate a aerului. În general pentru un index de
calitate a aerului de 100, corespunde o concentrație medie măsurată pe durata a opt ore de
0.075 părți pe milion (George F. Fine, 2010).
Index de calitate a aerului Descriere a calității aerului Efectele expunerii la ozon asupra sănătății umane
0 - 50 Bună Nici un efect
51 - 100 Moderată Grupurile sensibile pot resimți efectul expunerii prelungite la ozonș dificultăți în respirație
101 - 150 Nesănătoasă pentru grupurile sensibile
Tuse, dureri atunci când se inhalează o cantitate mare de aer
151 - 200 Nesănătoasă Agravarea tusei și durerilor; diminuarea capacității de funcționare a plămânilor
201 - 300 Extrem de nesătoasă Simptome respiratorii severe; incapacitatea de a respira
Tabelul 2.4. – Efectele expunerii la diferite concentrații de ozon
2.4. Posibilitatea implementării senzorilor de gaz in structuri BMS
(Building Management System)
Utilitatea senzorilor de gaz într-o structură de tip Building Management System este
reprezentată de faptul că, aceștia pot fi integrați într-o structură de control a ventilației în
funcție de necesitate.
Pentru o companie este important să gasească compromisul optim între consumul de
energie al unei clădiri și sănătatea și bunăstarea angajaților. Vital pentru asigurarea
productivității acestora este un indice de calitate a aerului cât mai bun, fapt pentru care
ventilația corespunzătoare a clădirii este foarte importantă.
Un sistem de control al ventilației în funcție de necesitate este un sistem care
monitorizează o serie de parametrii precum temperatura ambientală, concentrația gazelor
toxice și umiditatea aerului, și în funcție de valorile măsurate, va introduce o cantitate
Olteanu Gheorghe Daniel 16
corespunzătoare de aer astfel încât să asigure un indice de calitate al aerului cât mai bun.
Acest sistem oferă un bun compromis între minimizarea consumului de energie și
asigurarea unei bune calități a aerului mai ales în condițiile în care gradul de ocupare al
incăperilor monitorizate este variabil și impredictibil. Acest lucru duce la scăderea
costurilor necesare pentru ventilație și climatizare a clădirii/încăperii cu 10 – 30%, astfel
încât costul de implementare al sistemului este amortizat în câțiva ani, depinzând de
modul de implementare și zona climatică în care se află clădirea (Demand Control
Ventilation Benefits for Your Building).
În principiu, respirația umană constă în inhalarea oxigenului și expirarea dioxidului de
carbon. Concentrația acestuia va crește într-un spațiu închis, daca acesta nu este ventilat
corespunzător. Ventilația necorespunzătoare poate provoca efecte negative asupra
sănătății atât pe termen scurt (somnolență, dureri de cap, stări de amețeală, iritări ale
căilor respiratorii, dificultăți de concentrare) cât și pe termen lung prin inhalarea
constantă a diverși poluanți precum ozon, compuși organici volatili, etc. , fapt ce
determină creșterea ratei absenteismului în rândul angajaților și costuri suplimentare
pentru îngrijiri medicale.
Pe de altă parte, folosirea permanentă a ventilației la capacitate maximă va oferi o
bună calitate a aerului, însă se va consuma multă energie, chiar dacă nu este nevoie. De
aceea este important să găsim capacitatea potrivită la care funcționeze sistemul de
ventilație pentru a realiza compromisul ideal între minimizarea consumului energetic și
un indice de calitate al aerului cât mai bun.
Figura 2.4. – Diferența dintre ventilația la o capacitate maximă predefinită și ventilația
eficientă bazată pe gradul de ocupare al clădirii/încăperii
Clădirile comerciale sunt de obicei prevăzute cu un sistem care aduce în interior aer
proaspăt printr-o serie de conducte și amortizoare (Demand Control Ventilation Benefits for
Your Building) . Pentru a economisi energia, diferite cantități de aer sunt reciclate și trimise
către circuitul de încălzire/răcire din conductă, doar o cantitate minimă de aer proaspăt fiind
Olteanu Gheorghe Daniel 17
adusă în interiorul instalației (pentru a asigura eliminarea substanțelor poluante chiar daca nu
este nimeni în încăpere).
În mod standard, în timpul perioadelor în care cladirea este de obicei ocupată la
capacitate maximă, cantitatea de aer proaspăt adusă în interior crește către un punct de maxim
predefinit și rămâne astfel până la incheierea programului chiar daca numărul ocupanților
scade; sistemul nu stie în nici un moment numărul de oameni care se află în clădire și deci nu
poate regla ventilația în concordanță.
În figura 2.5 este prezentat un sistem de control al ventilației care încorporează trei
metode complementare de pentru a determina gradul de ocupare al clădirii. O prima metodă
de predicție este cea bazată pe programul de lucru, astfel încât capacitatea la care este
efectuată ventilația este redusă în weekend, în timpul nopții și în timpul zilelor libere. Deși
această metodă duce la diminuarea consumului de energie, aceasta nu este optimă deoarece
nu poate determina în timp real necesitatea reîmprospătării aerului. De aceea, în sistemul de
control al ventilației s-au introdus senzori de prezență (pentru a verifica daca în încăpere se
află cineva în timpul programului de lucru) și senzori pentru monitorizarea concentrației de
dioxid de carbon (măsoară cantitatea de dioxid de carbon pe care oamenii o expiră).
Prin măsurarea nivelului de , modulul de control al ventilației integrat într-un
sistem de automatizare al clădirii estimează gradul de ocupare și cantitatea de aer proaspăt
care trebuie introdusă în încăpere, reglând astfel ventilația corespunzător.
Sistemul va ajusta cantitatea de aer curat introdusă astfel încât să păstreze nivelul de sub
o limită maxim admisibilă (aproximativ 550 p.p.m.). Astfel, în loc să pornească ventilația la o
capacitate prestabilită în concordanță cu numărul de persoane maxim care s-ar putea afla în
clădire la acel moment, sistemul monitorizează în timp real calitatea aerului și este capabil să
ajusteze ventilația în mod corespunzător (Demand Control Ventilation Benefits for Your
Building).
Figura 2.5. – Sistem de control al ventilației
Olteanu Gheorghe Daniel 18
Folosirea senzorilor pentru dioxid de carbon prezintă și alte avantaje care nu sunt
legate direct de minimizarea consumului energetic:
Folosirea eficientă a ventilației determină minimizarea timpilor de funcționare și deci
prelungirea duratei de viață a echipamentului
Măsurătorile pot fi introduse într-o bază de date și păstrate pentru a proteja
proprietarul de plata unor eventuale despăgubiri pentru boli cauzate de ventilația
necorespunzătoare a clădirii.
Senzorii sunt ieftini, siguri și ușor de implementat în sistemul de automatizare al
clădirii.
Un astfel de sistem de control al ventilației bazat pe gradul de ocupare al clădirii nu va
fi totuși eficient într-un mediu contaminat și de alți factori în afara de om, cum ar fi spațiile
industriale și laboratoarele.
3. Echipamente utilizate
În acest capitol va fi prezentat echipamentul utilizat pentru implementarea strategiilor
adaptive de monitorizare pentru senzorii de gaz semiconductori. Principalele componente
sunt: modul cu senzori de gaze (având ca elemente esențiale un microcontroller AduC832,
senzor monoxid de carbon MQ-7TH, senzor ozon MQ-131și senzor pentru detecția
concentrației de dioxid de carbon MG811) alimentat de la un adaptor de 5V prin conectorul
USB și multimetrul UNI-T-803 pentru a măsura și stoca în fișiere valorile de curent și putere
pentru prelucrare ulterioara. Comunicația dintre placa de achiziție si PC este realizată prin
intermediul conexiunii seriale RS232 cu ajutorul unui adaptor USB to serial.
Figura 3.1. – Modul senzori de gaze semiconductori
Olteanu Gheorghe Daniel 19
Figura 3.2. – Multimetrul UNI-T-803
3.1. Microcontrollerul AduC832
Chipul AduC832 este defapt un traductor inteligent care integrează un canal multiplu pe
12 biți ADC, canale de achiziție DAC pe 12 biți și un microcontroller pe 8 biți.
Figura 3.3. – Microcontrollerul AduC832
ADUC832 este produs de firma Analog Device pe baza unui nucleu 80C51 la care s-au
adaugat unele porturi suplimentare . Performanțele acestui controller îl recomandă în aplicații
industriale.Deosebirile față de 80C51 sunt urmatoarele (ADuC832 datasheet):
8 intrări analogice , rezoluție 12 biți, cu referință internă ,viteză achiziție 200KHz prin
DMA
2 ieșiri analogice , rezoluție 12 biți senzor de temperatură intern memorie
o 62KBytes Flash –Eprom (EE
Program Memory)
o 4 KBytes memorie de program Flash
citire/scriere
o 2 KBytes de Ram intern o 16MBytes spatiu de
date extern
o 64Kbytes spatiu de cod
extern
Olteanu Gheorghe Daniel 20
Watch dog timer intern Monitor intern serial RS232 I2C sau SPI
În figura 3.4. avem reprezentată structura internă a microcontrollerului AduC832 la
nivel de porturi: (http://www.digitalcontrol.ro/download/DCX8500.PDF)
Figura 3.4. – structura interna AduC832 la nivel de porturi
Microcontrolerul AduC832 oferă posibilitatea scrierii memoriei de program interne
prin intermediul interfeţei de comunicaţie serială asincronă. Activarea modului de scriere a
acestei memorii se realizează la iniţializarea microcontrolerului prin forţarea în “0” logic a
semnalului /PSEN(Program Store ENable).
Semnalul /PSEN al microcontrolerului poate fi conectat la masă prin intermediul unui
jumper cu 2 pini (JP2). Deoarece în timpul funcţionării normale a procesorului semnalul
/PSEN funcţionează ca o ieşire, conectarea la masă a acestuia se realizează printr-o rezistenţă
de 1KΩ astfel încît dacă se reporneşte microcontrolerul în mod normal de funcţionare să nu
fie scurtcircuitat.
Mediul de programare în care este realizată aplicația practică este Keil uVision 4 IDE.
Acesta este un mediu de dezvoltare integrat în care se pot fi realizate o gamă largă de aplicații
pentru 3 arhitecturi majore de microcontrollere:
Pe 8 biți (microcontrollere de tip 8051): au un sistem de întreruperi eficient și sunt
proiectate pentru aplicații performante în timp real. În uVision 4 sunt disponibile
peste 1000 de modele de astfel de microcontrollere cu periferice precum: I/O
Olteanu Gheorghe Daniel 21
analogic, timere, countere, PWM, interfete seriale UART, LIN, SPI, USB, CAN și
radio-transmițator integrat pentru aplicații wireless de putere mică.
Pe 16 biți (microcontrollere Infineon C166, XE166, XC2000): sunt proiectate
pentru performanță optimă a sistemului de întreruperi și aplicații în timp real. De
asemenea include un PEC (Peripheral Event Controller) similar cu DMA pentru
achiziție rapidă de date.
Pe 32 de biți (microcontrollere ARM7, ARM9 și Cortex-Mx): pentru aplicații
complexe care presupun o putere mare de procesare.
3.2. Senzorul pentru monoxid de carbon MQ-7 TH
Senzorul MQ-7 TH este un senzor stabil și cu o durată lungă de viață pentru
monitorizarea concentrației de dioxid de carbon având ca element sensibil .În tabelele
de mai jos vor fi prezentate principalele caracteristici tehnice ale acestuia, condițiile standard
de funcționare, condițiite de mediu în care senzorul funcționează normal și caracteristica de
sensibilitate (dependența rezistivității la suprafață în raport cu concentrația de monoxid de
carbon).
Simbol Denumire Valori Observații
Vc Tensiune circuit 5V±0.1 C.A. sau C.C.
VH (H)
Tensiune încălzire
(High) 5V±0.1 C.A. sau C.C.
VH (L)
Tensiune încălzire
(Low) 1.4V±0.1 C.A. sau C.C.
RL Rezistență sarcină Ajustabilă RH Rezistență încălzire 33Ω±5% Temperatura camerei
TH (H)
Timp încălzire
(High) 60±1 seconds
TH (L)
Timp încălzire
(Low) 90±1 seconds
PH Consum încălzire Aprox. 350mW
Tabelul 3.1. – Parametrii standard de funcționare
Simbol Denumire Valori Observații
Tao
Temperatură de
utilizare -20-50
Tas
Temperatură de
stocare -20-50
RH Umiditate relativă Mai puțin de 95%RH
O2 Concentrație de oxigen 21%(condiții standard) Minim 2%
Poate afecta sensibilitatea peliculei de dioxid de Sn
Tabelul 3.2. – Condițiile de mediu în care poate funcționa senzorul
Olteanu Gheorghe Daniel 22
Simbol Denumire Valori Observații
Rs Rezistența peliculei de dioxid de Sn
2-20k
а(300/100ppm)
Panta creșterii
concentrației Sub 0.5
Rs
(300ppm)/Rs(100ppm)
Tabelul 3.3. – Caracteristica de sensibilitate în condiții normale (20, RH = 65%, domeniul
de măsură 20 – 2000 ppm)
Structural, senzorul este alcătuit dintr-un microtub ceramic din , strat sensibil
din dioxid de Sn. Electrodul de măsură și încălzitorul sunt fixate într-o crustă de plastic și o
pânză din oțel inoxidabil (MQ-7 gas sensor).
Pentru conectare, senzorul are 6 pini, dintre care 4 sunt utilizați pentru transmisia
semnalelor către microcontroller și 2 pentru alimentarea circuitelor de încălzire.
Figura 3.5. – Structura fizică a senzorului MQ – 7 TH
Circuitul standard de măsură este alcătuit din două elemente și anume: circuitul de
încălzire care are funcția de control a ciclului de funcționare (tensiunea high și tensiunea low
funcționează circular) și circuitul pentru semnalul de ieșire care poat răspunde cu acuratețe la
modificările rezistenței peliculei sensibile.
Figura 3.6. – caracteristica sensitivității senzorului MQ-7 TH
Nr. Componente Materiale
1 Strat sensibil SnO2
2 Electrod Au
3 Linie electrod Pt
4 Bobină pentru încălzire aliaj Ni-Cr 5 Tub ceramic Al2O3
6 Protecție Oțel inoxidabil
7 Inel de prindere Cupru placat cu Nichel
8 Baza de rășină Bachelită (rășină sintetică) 9 Pini Cupru placat cu Nichel
Olteanu Gheorghe Daniel 23
În figura de mai sus se poate observa caracteristica sensitivității senzorului pentru câteva gaze
în condiții normale (temperatură de 20ºC, umiditate relativă de 65%, concentrație de oxigen
de 21%, rezistența de sarcină RL = 10kΩ).
3.3. Senzorul pentru dioxid de carbon MG811
Senzorul pentru dioxid de carbon MG811 este senzor ieftin, stabil și cu o durată mare
de viață, având o dependență scăzută în raport cu umiditatea și cu temperatura.
Este utilizat în aplicații pentru controlul calității aerului și controlul procesului de
fermentație.
Figura 3.7. – Structura fizică a senzorului MG811
În tabelul de mai jos sunt prezentate pe scurt principalele specificații tehnice ale
senzorului pentru monitorizarea concentrației de dioxid de carbon MG811 (HANWEI
ELECTRONICS CO).
EMF reprezintă tensiunea electromotoare pe care senzorul o oferă drept ieșire spre a
fi ulterior prelucrată de către microcontroller.
Simbol Denumire Valori Observații
VH (H) Tensiune încălzire 6V±0.1 C.A. sau C.C.
RH Rezistență încălzire 30Ω±5% Temperatura camerei IH Curent încălzire 200mA Temperatura camerei
Tao
Temperatura
funcționare -20…+50
Tas
Temperatură
depozitare -20…+70
PH Consum încălzire Aprox. 1200mW
EMF Output 30 – 50mV 350 – 10000ppm
Tabelul 3.4. – Parametrii standard de funcționare
Caracteristica de funcționare a senzorului atunci când intră în reacție cu diferite gaze,
în condiții normale de temperatură și umiditate (aproximativ 20ºC, umiditate relativă de
Nr. Componente Materiale
1 Strat sensibil
2 Electrod Au
3 Linie electrod Pt
4 Bobină pentru încălzire aliaj Ni-Cr 5 Tub ceramic Al2O3
6 Protecție Oțel inoxidabil
7 Inel de prindere Cupru placat cu Nichel
8 Baza de rășină Bachelită (rășină sintetică) 9 Pini Cupru placat cu Nichel
Olteanu Gheorghe Daniel 24
65%), la o concentrație de 21% oxigen este prezentată în figura de mai jos.
Figura 3.8. Variația EMF în funcție de concentrația de gaz
3.4. Senzorul pentru detecția ozonului MQ131
Senzorul pentru ozon MQ131 are ca material sensibil , astfel încât atunci când în
atmosferă este prezent ozonul, conductivitatea senzorului crește direct proporțional cu
concentrația gazului (MQ131 gas sensor).
MQ – 131 este extrem de sensibil la ozon dar este sensibil și la , și altele.
Caracteristici:
Sensibilitate crescută la ozon pe un domeniu larg de măsură
Durată crescută de viață și cost scăzut
Circuit simplu
Aplicații:
Detector casnic pentru depășirea concentrației de ozon
Detector industrial pentru depășirea concentrației de ozon
Detector portabil pentru depășirea concentrației de ozon
Olteanu Gheorghe Daniel 25
Specificații tehnice
Model MQ131
Tip Senzor Semiconductor
Capsulă Bachelită
Gaz detectat Ozone
Domeniu de măsură 10-1000ppm Ozone
Tensiune în buclă Vc ≤24V DC
Circuit Tensiune încălzitor VH 5.0V±0.2V AC or DC
Rezistență de sarcină
RL Adjustable
Rezistență încălzitor RH 31Ω±3Ω(Room Tem.)
Consum PH ≤900mW
încălzitor
Caracteristici
Rezistența
Rs 50KΩ-500KΩ(in 50ppm O3)
senzorului
Senzitivitate S Rs(in air)/Rs(in 50ppm O3)≥3
Pantă α (R50ppm/R10ppm O3)
Tabelul 3.5. – Specificații tehnice
Specificațiile tehnice din tabelul de mai sus sunt pentru condiții normale de
funcționare adică temperatură de aproximativ 20ºC și umiditate relativă de 65%. În figura
următoare se poate observa caracteristica senzorului în funcție de rezistivitate, unde R0 este
rezistivitatea senzorului la 50 ppm iar Rs este rezistivitatea senzorului în diferite medii
gazoase (MQ131 gas sensor).
Figura 3.9. Caracteristica senzorului MQ – 131
Olteanu Gheorghe Daniel 26
Structural, senzorul este alcătuit dintr-un microtub ceramic din , strat sensibil
din dioxid de Sn. Electrodul de măsură și încălzitorul sunt fixate într-o crustă de plastic și o
pânză din oțel inoxidabil. Pentru conectare, senzorul are 6 pini, dintre care 4 sunt utilizați
pentru transmisia semnalelor către microcontroller și 2 pentru alimentarea circuitelor de
încălzire.
Figura 3.10. Structura senzorului MQ – 131
Condiții specifice care pot afecta răspunsul senzorului:
Expunerea la silicon, latex siliconic
Expunerea la gaze corozive ca de exemplu acidul clorhidric (HCl)
Expunerea la metale alcaline și halogeni
Expunerea într-un mediu în care se formează condens
Expunerea la temperaturi scăzute (îngheț)
3.5. Multimetrul UNI-T-803
Multimetrul UNI-T-803 reprezintă o soluție extrem de fiabilă pentru măsurarea valorilor
de curent și tensiune, având ca principal avantaj capacitatea de a se conecta și la PC și de a
salva datele achiziționate în fișiere în scopul prelucrării ulterioare (UT803).
Figura 3.11. – Multimetrul UNI-T-803
Nr. Componente Materiale
1 Strat sensibil SnO2
2 Electrod Au
3 Linie electrod Pt
4 Bobină pentru încălzire aliaj Ni-Cr 5 Tub ceramic Al2O3
6 Protecție Oțel inoxidabil
7 Inel de prindere Cupru placat cu Nichel
8 Baza de rășină Bachelită (rășină sintetică) 9 Pini Cupru placat cu Nichel
Olteanu Gheorghe Daniel 27
Tabelul 3.6. – Domeniile de măsură ale multimetrului UNI-T-803
Caracteristici principale
Măsoară parametri multipli;
Înaltă acuratețe;
Afișeaza maxim până la 6000;
Scală automată;
Lățime de bandă de 100KHz;
Verificare de diode;
Verificare de tranzistori;
Închidere automată;
Beep-er de continuitate;
Indicator de descărcare baterie;
Memorare date;
Afișare MAX/MIN;
Standard serial RS-232;
Interfață USB;
Afișaj luminos LCD;
Protecție pe intrare;
Impedanță de intrare pentru DCV;
Măsurare tensiune și curent CC și CA.
Funcții de bază Domeniu de măsurare Acuratețe
Tensiune CC 600mV/6V/60V/600V/1000V (0,3%+2)
Tensiune CA 600mV/6V/60V/600V/1000V (0,6%+5)
Curent CC 600µA/6000µA/60mA/600mA/10A (0,5%+3)
Curent CA 600µA/6000µA/60mA/600mA/10A (1%+5)
Rezistență 600W/6kW/60kW/600kW/6MW/60MW (0,5%+2)
Capacitate 6nF/60nF/600nF/6µF/60µF/600µF/6mF (2%+5)
Temperatură (°C) -40°C ~ 1000°C (1%+3)
Temperatură (°F) -40°F ~ 1832°F (1,5%+5)
Frecvență 6kHz/60kHz/600kHz/6MHz/60MHz (0,1%+3)
Olteanu Gheorghe Daniel 28
Alimentare AC220V/50Hz sau baterii de 1,5V (tip R14) x 6
Dimensiuni afișaj LCD 128 x 28mm
Culoare Roșu și gri
Greutate Netă 2,4 kg
Dimensiuni 310 x 240 x 105mm
Accesorii standard
Fișe de măsurare, Cablu de alimentare 220V,Manual
în engleză, Sondă de temperatură, Clemă tip crocodil,
Priză (conector) multifuncțional, Cablu de interfață
RS232C Cablu de interfață USB, Software
Accesorii opționale Baterii de 1,5V (tip R14) x 6
Ambalare individuala Cutie cadou
Cantitatea standard pe bax 4 bucăți
Dimensiuni standard bax 685 x 370 x 325mm
Greutate bruta bax 15kg
Tabelul 3.7. – Specificații tehnice generale
În figura și tabelul de mai jos va fi realizată o scurtă descriere a panoului frontal al
multimetrului UNI-T-803
Figura 3.12. – Front Pannel UNI-T-803
Olteanu Gheorghe Daniel 29
Tabelul 3.8. – Legendă Front Pannel UNI-T-803 în conformitate cu Figura 3.12.
4. Implementarea strategiilor adaptive de achiziție de date
Pentru a putea implementa strategiile adaptive de achiziție de date pentru senzorii de gaze
semiconductori, microcontrollerul AduC832 trebuie să fie programat astfel încât să
gestioneze în mod eficient funcționarea celor trei senzori prezenți pe placa de achiziție de
date.
Principiul general este urmatorul: se alimentează un element încălzitor la 5/6V, la
atingerea temperaturii nominale de functionare, stratul electrochimic depus pe suprafața
senzorului iși modifică rezistența electrică un funcție de concentrația gazului analizat
Număr Simbol Explicație
1 Indicator pentru valoarea reală RMS;
2
Memorarea de date este activată;
3
Funcția Sleep Mode este activată;
4 Citire valori negative;
5
Indicator curent alternativ;
6 Indicator curent continuu;
7 Indicator CA + CC;
8 Afară din scala de măsurare;
9
10 Tester diode;
11 Beep-erul este pornit;
12
Indicator selecție scală (automată / manuală);
13 Afișare valoare maximă / minimă;
14 Se realizează transmisia de date;
15
Baterie descărcată;
16 Tester tranzistori.
Olteanu Gheorghe Daniel 30
(conform unor curbe specifice de selectivitate in condiții stabile de temperatură și umiditate
ambientală), ca regulă generală, rezistența scade la concentrații înalte ale gazului investigat.
Ieșirea utilă a senzorului este o valoare de tensiune provenită de la un divizor de tensiune, cu
alegerea corespunzatoare a rezistenței de sarcină.
Datorita consumului mare de curent al acestor senzori e.g. 170mA – 200mA la 5V este
necesară alimentarea externă de la un adaptor 220V -> 5V (MINI USB de tip B).
Comunicația plăcii de achiziție cu calculatorul este realizată prin intermediul conexiunii
seriale de tip RS 232. Pachetul software necesar programării și încărcării programelor pe
microcontrollerul AduC832 este compus din urmatoarele:
KEIL uVison 4 C51 care conține librăriile specifice pentru controllerul AduC832
și care permite scrierea și compilarea codului într-un limbaj adecvat (C și
Assembler).
Figura 4.1. – Mediul de programare KEIL uVision 4 C51
Este esențial pentru compilarea programului ca ținta (adică microcontrollerul) să fie
corect selectate din baza de date a dispozitivelor. Pentru acest lucru se va accesa meniul
Project și se va selecta submeniul Options for target iar din tab-ul Device se va selecta
microcontrollerul AduC832 după care se va apăsa butonul OK.
Olteanu Gheorghe Daniel 31
Figura 4.2. – Selectarea dispozitivului țintă
Se selectează tab-ul Output și se configurează opțiunile pentru fișierul rezultat în urma
compilării (nume, folder destinație – care este inițial folderul în care se află proiectul)
Figura 4.3. – Configurarea fișierului de output
După configurarea acestor opțiuni se merge în meniul Project și se selectează Build Target
și se obține următorul mesaj:
Figura 4.4. – Confirmarea compilării codului sursă și crearea fișierului .hex
Olteanu Gheorghe Daniel 32
Windows Serial Downloader pentru microcontrollere AduC8xx cu care putem
încărca efectiv programul (fișierul .hex creat). Se accesează meniul
Configuration și se setează programul ca în figură:
Figura 4.5. – Configurarea Windows Serial Downloader pentru AduC832
După configurarea Windows Serial Downloader, se fac urmatoarele: se alimentează placa
la 5V cu conectorul MINI USB de tip B, se conectează placa prin conexiunea serială RS 232
și se închide jumperul JP2. În Windows Serial Downloader se apasă butonul Reset și apoi
butonul Download. Dacă încărcarea programului a avut loc cu succes, atunci fereastra WSD
va arăta ca în figura de mai jos.
Olteanu Gheorghe Daniel 33
Figura 4.6. – Program încărcat cu succes pe AduC832 folosind WSD
După încărcarea programului pe controller, se deschide jumperul JP2 și se apasă pe
butonul de reset de pe placa de achiziție, se aprinde LED-ul roșu ED6 care semnifică cererea
de reset (adică rularea de la început a programului), iar apoi la stingerea acestuia începe
execuția efectivă a aplicației care a fost descărcată de pe calculator în memoria
microcontrollerului AduC832.
În afară de cele două programe care permit dezvoltarea propriu-zisă a aplicației,
pentru studiul datelor achiziționate și al consumului energetic al plăcii vor mai fi folosite și
următoarele două programe:
ModScan 32 cu ajutorul căreia se pot citi date achiziționate de la senzori cu
referire la concentrația de gaz măsurată. Aplicația este un slave de tip modbus pe
COM1 cu setările 9600 ,8,n,1 cu funcția 03 (holding register) cu lungime 5(5
holding register de 16 biti fiecare unsigned int) și adresa de start 1.
Olteanu Gheorghe Daniel 34
Figura 4.7. – Aplicația ModScan 32
UT803 Program Interface v1.10 pentru a facilita monitorizarea consumului de
curent al plăcii de achiziție de date. Acest program permite salvarea datelor citite
de multimetrul UNI-T 803 în fișiere Excel, făcând astfel posibilă prelucrarea
ulterioară a datelor.
Ceea ce se urmărește în această lucrare cu privire la implementarea strategiilor
adaptive de achiziție de date pentru senzorii de gaze semiconductori este monitorizarea
consumului de energie al plăcii de senzori. Pentru a realiza aceasta, în montajul experimental
a fost introdus multimetrul UNI-T-803. Placa de achiziție este alimentată la 5V printr-un
conector MINI USB de tip B a cărui structură este următoarea:
1. Cablu roșu (+5V)
2. Cablu alb (DATA+)
3. Cablu verde (DATA-)
4. Cablu identificare (permite diferențiere host connection de slave connection, dacă
conexiunea este de tip host, atunci acesta va fi legat la GND)
5. Cablu negru (GND)
Pentru a putea calcula puterea consumată de către placă, este necesară cunoașterea intensității
curentului electric care intră în consumator (modulul cu senzori de gaz). De aceea cablul a
fost parțial dezizolat iar cablul roșu (+5V) din interior a fost secționat, fiind dezizolat la
Olteanu Gheorghe Daniel 35
fiecare capat al său. Multimetrul a fost legat în serie la cablul +5V ca în figură:
Figura 4.8. – Realizarea circuitului de măsură al intensității curentului electric
Se realizează alimentarea circuitului prin conectarea la port-ul MINI USB de tip B, se
conectează la calculator prin USB multimetrul și se setează corespunzător (scala de 10A). În
utilitarul UT803 Program Interface se dă click USB Connect iar apoi butonul RS232 este
apăsat de pe panoul frontal al multimetrului UNI-T-803. Aplicația va înregistra în tabel date
achiziționate de la aparatul de măsură în funcție de perioada de eșantionare aleasă. După
terminarea măsurătorilor, UT803 Program Interface permite salvarea tabelului de măsurători
atat în format text, Excel cât și în format database (.db).
4.1. Implementarea soluției de achiziție continuă a datelor
Soluția de monitorizare continuă a concentrațiilor de gaz este extrem de importantă în
contextul implementării strategiilor adaptive de achiziție de date deoarece aceasta oferă
posibilitatea cunoașterii valorii maxime de energie consumată de placă prin funcționarea
continuă și paralelă a celor trei senzor de gaz.
Este propus următorul ciclu de funcționare:
1. Pornirea simultană a senzorilor:
Ciclu de măsură CO cu o perioadă TA_POWER_CO =390 secunde cu alimentare
la 5Vcc evidențiat de LED=ul ED4 verde.
Ciclu de măsură O3 cu o perioadă TA_POWER_O3 = 390 secunde de alimentare
la 6Vcc evidențiat de LED-ul ED1 verde.
Ciclu de măsură CO2 cu o periadă TA_POWER_CO2 = 390 secunde de
alimentare la 6Vcc evidențiat de LED-ul ED2 roșu.
Olteanu Gheorghe Daniel 36
2. Ciclu de pauză între măsurători cu o perioadă TA_PAUSE = 50 secunde evidențiat
prin aprinderea simultană a diodelor LED ED1 , ED2 ,ED4.
Figura 4.9. – Funcționarea continuă a celor trei senzori semiconductori
Mai jos este inserată o mică parte din codul aferent programului implementat pentru
monitorizarea continuă a concentrației de gaz după cum urmează:
Header-ul util.h
void ToHex(unsigned char x,unsigned char *hi,unsigned char *lo);
unsigned char ToByte(unsigned char hi,unsigned char lo);
unsigned char Lrc(unsigned char *bufx,unsigned char lb);
unsigned char FByte(float fl,unsigned char ix);
void LightOnPow(void);
void LightOffPow(void);
void Make_cicle(void);
void Power_on_CO(void);
void Power_off_CO(void);
void Cicle_on_CO(void);
void Cicle_off_CO(void);
void Power_on_O3(void);
void Power_off_O3(void);
void Power_on_CO2(void);
void Power_off_CO2(void);
void Pause_on(void);
void Pause_off(void);
#define TA_POWER_CO 390
Olteanu Gheorghe Daniel 37
#define TA_POWER_O3 390
#define TA_POWER_CO2 390
#define TA_PAUSE 50
Fragment din funcția the_main.c
T0_Set(1,TA_POWER_CO); //pornește timer CO
Power_on_CO();
T0_Set(2,TA_POWER_CO2); //pornește timer CO2
Power_on_CO2();
T0_Set(3,TA_POWER_O3); //pornește timer O3
Power_on_O3();
while(1) //repetă ciclul la infinit
Make_cicle();
Get_parameters();
if(SIsMsg) ModProceed();
Fragment din funcția util.c
void Make_cicle(void)
if (T0_Over(1)) // dacă timer CO a expirat
Power_off_CO();
if (T0_Over(2)) // dacă timer CO2 a expirat
Power_off_CO2();
if (T0_Over(3)) // dacă timer O3 a expirat
Power_off_O3();
Pause_on();
T0_Set(4,TA_PAUSE); // pornește timer pauză
if (T0_Over(4)) // dacă timer pauză a expirat atunci
// pornește din nou timerele pentru cei trei senzori de gaz
//
Pause_off();
T0_Set(1,TA_POWER_CO) ;
Power_on_CO();
Olteanu Gheorghe Daniel 38
T0_Set(2,TA_POWER_CO2) ;
Power_on_CO2();
T0_Set(3,TA_POWER_O3) ;
Power_on_O3();
După compilarea programului, se încarcă fișierul .hex generat pe microcontroller,
apoi se resetează și se conectează multimetrul în serie pe firul de +5V ca în figura 4.8. Se
pornește aplicația UT803 Program interface, se selectează USB connect și se apasă butonul
RS232 de pe panoul frontal al aparatului de măsură. Pe durata ciclului de funcționare
programul înregistrează valorile de intensitate a curentului electric la intrarea în placa de
achiziție. După terminarea celor 390s, alimentarea senzorilor este oprită și se constată o
scădere semnificativă a intensității curentului electric, iar după trecerea a încă 50s programul
reinițiază ciclul de funcționare.
Se remarcă două valori distincte ale intensității curentului electric:
I_senzori_porniți= 0.65A
I_pauză = 0.05A
Se poate deci calcula puterea, fiind produsul dintre tensiunea de alimentare a plăcii și
intensitatea curentului electric.
(4.1.)
(4.2.)
Pentru această implementare ne interesează numai calcularea energiei pe perioada în
care toți cei trei senzori sunt porniți, deci calculul energiei se face după ecuația următoare:
(4.3.)
În perioada de pauză, energia este dată de:
(4.4.)
Această metodă de implementare pune în evidența consumul maxim de energie al
plăcii de achiziție de date. Totuși, pe lângă consumul energetic ridicat, mai apare o altă
problemă funcțională legată de senzorul de monoxid de carbon MQ -7 TH deoarece acesta
necesită un ciclu de funcționare specific, măcar 30s alimentat la 5V pentru "curatare" iar apoi
100s la 1,4V - spre finalul celor 130s putându-se determina valoarea utilă.
Olteanu Gheorghe Daniel 39
Din aceste considerente, în cele ce urmează vor fi prezentate două posibile
implementări pentru a utiliza cu precizie toți senzorii și a diminua semnificativ consumul
energetic. Prima implementare este una statică, temporizată, astfel încât la orice moment de
timp să funcționeze numai un senzor, iar după ce s-a detectat concentrația de gaz cu fiecare
dintre ei urmează un ciclu de pauză. Cea de-a doua implementare este una adaptivă, în sensul
că perioada ciclului de funcționare al senzorilor va fi determinată de valorile concentrațiilor
pe care aceștia le măsoară în mod activ.
4.2. Implementarea soluției de achiziție temporizată a datelor
În vederea diminuării consumului de energie electrică, pornind de la măsurătorile
efectuate pe soluția de achiziție continuă a datelor, în acest subcapitol va fi descrisă o
strategie de achiziție temporizată a datelor de la cei trei senzri de gaze semiconductori.
Senzorii vor fi porniți și vor măsura pe rând, ciclul incluzând de asemenea o perioadă în care
alimentarea senzorilor va fi complet oprită, iar controllerul va intra în modul idle (perioadă de
pauză). Ciclurii de funcționare ai aplicației vor fi următorii:
1. Power sensor CO cu o perioadă TA_POW_CO = 30 secunde cu alimentare la 5Vcc
evidențiat de LED-ul ED4 verde
2. Ciclu de măsură CO cu o perioadă TA_CICLE_CO = 100 secunde cu alimentare la
1,4Vcc la finalul căreia canalula analogic DA_0 se updatează cu valoarea AI_0 de la
acest moment. Ciclul este evidențiat de LED-ul ED2 roșu
3. Ciclu de măsură O3 cu o periadă TA_POWER_O3 = 30 secunde de alimentare la
6Vcc evidențiat de LED-ul ED1 verde.
4. Ciclu de măsură CO2 cu o perioadă TA_POWER_CO2 = 30 secunde de alimentare la
6Vcc evidențiat de LED-ul ED2 roșu
5. Ciclu de pauză între măsurători cu o perioadă TA_PAUSE = 200 secunde evidențiat
prin aprinderea simultană a diodelor LED ED1 , ED2 ,ED4. În pauză sursa de 6Vcc și
alimentarea traductorelor de gaz este oprita pentru diminuarea consumului.
Figura 4.10. – Ciclul de funcționare al aplicației cu temporizare
Olteanu Gheorghe Daniel 40
Mai jos este inserată o mică parte din codul aferent programului implementat pentru
monitorizarea temporizată a concentrației de gaz după cum urmează:
Fragment din header-ul util.h
void ToHex(unsigned char x,unsigned char *hi,unsigned char *lo);
unsigned char ToByte(unsigned char hi,unsigned char lo);
unsigned char Lrc(unsigned char *bufx,unsigned char lb);
unsigned char FByte(float fl,unsigned char ix);
void LightOnPow(void);
void LightOffPow(void);
void Make_cicle(void);
void Power_on_CO(void);
void Power_off_CO(void);
void Cicle_on_CO(void);
void Cicle_off_CO(void);
void Power_on_O3(void);
void Power_off_O3(void);
void Power_on_CO2(void);
void Power_off_CO2(void);
void Pause_on(void);
void Pause_off(void);
#define TA_POWER_CO 30
#define TA_CICLE_CO 100
#define TA_POWER_O3 30
#define TA_POWER_CO2 30
#define TA_PAUSE 200
Fragment din funcția the_main.c
T0_Init();
UartInit();
CalibrareADC();
CO_measure = 0;
O3_measure = 0;
EA=1;
FirstRead=1; // tine de filtru ordin I
T0_Set(1,TA_POWER_CO);
Power_on_CO();
while(1)
Make_cicle();
Get_parameters();
if(SIsMsg) ModProceed();
Olteanu Gheorghe Daniel 41
Fragment din funcția util.c
void Make_cicle(void)
if (T0_Over(1))
Power_off_CO();
Cicle_on_CO();
T0_Set(2,TA_CICLE_CO);
if(T0_Over(2))
DAC0H = FCh[0]>>8; // CO catre Iris
DAC0L = FCh[0]&0x0f; // Co catre Iris
CO_measure = FCh[0];
// DAC1H = FCh[1]>>8; // O3 catre Iris
// DAC0L = FCh[1]&0x0f; // O3 catre Iris
Cicle_off_CO();
Power_on_O3();
T0_Set(3,TA_POWER_O3) ;
if(T0_Over(3))
DAC1H = FCh[1]>>8; // CO catre Iris
DAC1L = FCh[1]&0x0f; // Co catre Iris
O3_measure = FCh[1];
Power_off_O3();
Power_on_CO2();
T0_Set(4,TA_POWER_CO2) ;
if (T0_Over(4))
Power_off_CO2();
T0_Set(5,TA_PAUSE) ;
Pause_on();
if (T0_Over(5))
Pause_off();
T0_Set(1,TA_POWER_CO) ;
Power_on_CO();
După compilarea programului, se încarcă fișierul .hex generat pe microcontroller,
apoi se resetează și se conectează multimetrul în serie pe firul de +5V ca în figura 4.8. Se
pornește aplicația UT803 Program interface, se selectează USB connect și se apasă butonul
RS232 de pe panoul frontal al aparatului de măsură. Pe durata ciclului de funcționare
Olteanu Gheorghe Daniel 42
programul înregistrează valorile de intensitate a curentului electric la intrarea în placa de
achiziție. După terminarea celor 190 de secunde, alimentarea senzorilor este oprită și se
constată o scădere semnificativă a intensității curentului electric, iar după trecerea a încă 200
de secunde programul reinițiază ciclul de funcționare.
Se pot distinge următoarele valori pentru intensitatea curentului electric:
I_alim_CO = 0.20A
I_măsurare_CO = 0.11A
I_alim_O3 = 0.17A
I_alim_CO2 = 0.18A
I_pauză = 0.05A
Se poate deci calcula puterea, fiind produsul dintre tensiunea de alimentare a plăcii și
intensitatea curentului electric în fucție de ciclul de funcționare în care se află placa de
achiziție
(4.5.)
(4.6.)
(4.7.)
(4.8.)
(4.9.)
Cunoscând perioada ciclurilor de funcționare și puterea consumată de placa de achiziție în
fiecare ciclu, putem deduce cantitatea de energie electrică consumată pe perioada ciclului de
390 de secunde cu următoarea formulă:
(4.10)
Utilizarea strategiei temporizate de achiziție de date este conform calculului 4.10. extrem
de avantajoasă din punct de vedere energetic însă datorită perioadei mari de pauză introdusă,
achiziția de date făcându-se odată la 390 de secunde pentru fiecare senzor în parte, aceasta nu
ar putea să constituie o metodă bună de măsurare mai ales pentru determinarea concetrației de
monoxid de carbon care, datorită efectelor imediate, extrem de nocive, poate pune în pericol
viața celor care se bazează pe sistemul de monitorizare (conform tabelului 2.2. la o
concentrație de 12800 p.p.m. de monoxid de carbon moartea survine în mai puțin de 3
Olteanu Gheorghe Daniel 43
minute).
4.3. Implementarea soluției de achiziție a datelor bazată pe eșantionare
adaptivă
Pentru a rezolva problema duratei prea mari de timp între două cicluri de achiziție a
datelor pentru același gaz investigat, în cele ce urmează va fi propusă o strategie bazată pe
eșantionare adaptivă.
Aceasta va fi aplicată numai pe senzorii de detectare a dioxidului de carbon și a ozonului,
achiziția datelor referitoare la monoxidul de carbon fiind efectuată în mod continuu datorită
riscului sporit pe care îl presupune expunerea la acest gaz chiar și pe o perioadă scurtă de
timp.
Similar primelor două experimente, vom monitoriza energia electrică consumată pe o
perioadă totală de 390 de secunde. Descrierea ciclurilor de funcționare este prezentată mai
jos:
1. Pornirea simultană a senzorilor
Ciclu de încălzire CO cu o perioadă TA_POWER_CO =30 secunde cu alimentare
la 5Vcc evidențiat de LED=ul ED4 verde.
Ciclu de măsură O3 cu o perioadă TA_POWER_O3 = 30 secunde de alimentare la
6Vcc evidențiat de LED-ul ED1 verde.
Ciclu de măsură CO2 cu o periadă TA_POWER_CO2 = 30 secunde de alimentare
la 6Vcc evidențiat de LED-ul ED2 roșu.
2. Ciclul de măsură CO cu o perioadă TA_CICLE_CO=100 sec cu alimentare la 1.4 Vcc
evidențiat de LED-ul roșu ED2.
Dacă valoarea returnată pe canalele analogice la măsurarea concentrației de ozon
sau dioxid de carbon depășește o valoare limită impusă de programator, atunci se
continuă monitorizarea gazului sau gazelor cu o concentrație ridicată până când
TA_CICLE_CO expiră.
3. Revenire la pasul 1.
A fost deci eliminată în totalitate perioada de pauză în care nici un senzor nu măsura,
senzorul de monoxid de carbon fiind mereu activ și aflându-se în ciclul său normal de
funcționare, ciclu optim pentru o achiziție de date precisă.
Mai jos este o descriere grafică a ciclurilor de funcționare pentru cei trei senzori de gaz în
cadrul strategiei adaptive de achiziție de date.
Olteanu Gheorghe Daniel 44
Figura 4.11. – Funcționarea strategiei adaptive de achiziție de date
În continuare este inserată o mică parte din codul aferent programului implementat pentru
monitorizarea adaptivă a concentrației de gaz după cum urmează:
Olteanu Gheorghe Daniel 45
Fragment din header-ul util.h
void ToHex(unsigned char x,unsigned char *hi,unsigned char *lo);
unsigned char ToByte(unsigned char hi,unsigned char lo);
unsigned char Lrc(unsigned char *bufx,unsigned char lb);
unsigned char FByte(float fl,unsigned char ix);
void LightOnPow(void);
void LightOffPow(void);
void Make_cicle(void);
void Power_on_CO(void);
void Power_off_CO(void);
void Cicle_on_CO(void);
void Cicle_off_CO(void);
void Power_on_O3(void);
void Power_off_O3(void);
void Power_on_CO2(void);
void Power_off_CO2(void);
void Pause_on(void);
void Pause_off(void);
#define TA_POWER_CO 30
#define TA_CICLE_CO 100
#define TA_POWER_O3 30
#define TA_POWER_CO2 30
#define TA_PAUSE 50
Fragment din funcția the_main.c
T0_Init();
UartInit();
calibrareADC();
CO_measure = 0;
O3_measure = 0;
CO2_measure = 0;
EA=1;
FirstRead=1; // tine de filtru ordin I
Power_on_CO();
Power_on_CO2();
Power_on_O3();
T0_Set(1,TA_POWER_CO);
while(1)
Make_cicle();
Get_parameters();
if(SIsMsg) ModProceed();
Olteanu Gheorghe Daniel 46
Fragment din funcția util.c
void Make_cicle(void)
if (T0_Over(1))
Power_off_CO();
DAC1H = FCh[1]>>8; // O3 catre Iris
DAC1L = FCh[1]&0x0f;
O3_measure = FCh[1];
Power_off_O3();
if (O3_measure>limit_O3)
Power_on_O3();
DAC0H = FCh[2]>>8; // CO2 catre Iris
DAC0L = FCh[2]&0x0f;
CO2_measure = FCh[2];
Power_off_CO2();
if (CO2_measure>limit_CO2)
Power_on_CO2();
Cicle_on_CO();
T0_Set(2,TA_CICLE_CO);
if(T0_Over(2))
Cicle_off_CO();
T0_Set(1,TA_POWER_CO) ;
Power_on_O3();
Power_on_CO();
Power_on_CO2();
După compilarea programului, se încarcă fișierul .hex generat pe microcontroller,
apoi se resetează și se conectează multimetrul în serie pe firul de +5V ca în figura 4.8. Se
pornește aplicația UT803 Program interface, se selectează USB connect și se apasă butonul
RS232 de pe panoul frontal al aparatului de măsură. Pe durata ciclului de funcționare
programul înregistrează valorile de intensitate a curentului electric la intrarea în placa de
achiziție.
Monitorizarea se face la concentrații normale de gaz, senzorii de dioxid de carbon și
ozon fiind porniți timp de 30 de secunde, o dată la 100 de secunde, această situație
reprezentând cel mai bun scenariu posibil din punct de vedere energetic.
Olteanu Gheorghe Daniel 47
Se pot distinge următoarele valori pentru intensitatea curentului electric:
I_senzori_porniți = 0.65A
I_măsurare_CO = 0.11A
De aici rezultă următoarele valori ale puterii consumate:
(4.11.)
(4.12.)
Cunoscând perioada ciclurilor de funcționare și puterea consumată de placa de achiziție în
fiecare ciclu, putem deduce cantitatea de energie electrică consumată pe perioada ciclului de
390 de secunde cu următoarea formulă:
(4.13)
În continuare va fi studiat scenariul cel mai dezavantajos posibil din punct de vedere
energetic și anume după fiecare ciclu de măsură al dioxidului de carbon și al ozonului
microcontrollerul citește pe canalele analogice valori ale concentrației gazelor mai mari decât
limita impusă și ia decizia de a monitoriză în continuare valorile achiziționate. Se pot
aproxima următoarele valori ale curentului care intră în placa de achiziție:
I_senzori_porniți = 0.65A
I_alim_CO2_alim_O3_măsurare_CO ≈ 0.5A
I_alim_O3_măsurare_CO ≈ 0.3A
I_alim_CO2_măsurare_CO ≈ 0.3A
Având în vedere că cel mai rău scenariu posibil din punct de vedere energetic este compus
din șase cicluri și anume trei cicluri în care toți senzorii sunt alimentați timp de 30 de secunde
la tensiunile maxime și trei cicluri în care senzorii de dioxid de carbon și ozon sunt alimentați
la maxim iar senzorul de monoxid de carbon este alimentat la tensiune scăzută pentru ciclu de
măsură (1.4V) timp de 100 de secunde, atunci rezultă următoarele puteri consumate:
(4.14.)
(4.15.)
Cunoscând perioada ciclurilor de funcționare și puterea consumată de placa de achiziție în
Olteanu Gheorghe Daniel 48
fiecare ciclu, putem deduce cantitatea de energie electrică consumată pe perioada ciclului de
390 de secunde cu următoarea formulă:
(4.16)
5. Concluzii
Această lucrare reprezintă o introducere în problematica strategiilor adaptive de achiziție
de date pentru senzorii de gaz semiconductori, urmărindu-se în principal diminuarea
consumului energetic aferent achiziției prin utilizarea unor algoritmi care să permită folosirea
eficientă a senzorilor.
S-a plecat de la implementarea unui algoritm care monitorizează în permanență
concentrațiile celor trei gaze investigate, pe o perioadă de 390 de secunde și s-a obținut
următorul consum de energie electrică:
În scopul diminuării consumului s-a adoptat în continuare o strategie temporizată de
achiziție de date, aceasta reprezentând defapt o strategie adaptivă bazată pe declanșarea unor
evenimente (în cazul de față expirarea unor timere). Similar monitorizării continue, perioada
unui ciclu complet de măsură a fost de 390 de secunde și s-a obținut următorul consum de
energie electrică:
Totuși, deși avantajoasă din punct de vedere energetic folosirea acestei strategii poate fi
riscantă deoarece perioada dintre două măsurări consecutive ale aceluiași gaz ar fi de 390 de
secunde, ceea ce în contextul monitorizării concentrației de monoxid de carbon poate fi prea
mult. De aceea pentru îmbunătățirea preciziei de măsurare, se va elimina perioada de pauză,
obținându-se următorul consum de energie electrică estimat:
Această strategie temporizată, fără perioadă de pauză este mai relevantă din punctul de
vedere al preciziei de măsurare, însă dezavantajul major este că durata dintre două măsurări
alea aceluiași gaz este fixă, de 190 de secunde. Astfel s-a ajus la implementarea unei strategii
adaptive care să permită ajustarea perioadei dintre două măsurători ale aceluiași gaz în funcție
de valorile detectate. Strategia nu a fost aplicată pentru senzorul de monoxid de carbon. Pe o
Olteanu Gheorghe Daniel 49
perioadă de 390 de secunde se disting două scenarii relevante din punct de vedere al
consumului energetic:
Scenariul cel mai favorabil din punct de vedere energetic cu un consum calculat de:
Scenariul cel mai defavorabil posibil din punct de vedere energetic cu un consum
estimat de:
De aici reiese următoarea figură, care ilustrează consumul energetic al strategiilor
implementate pe durata unui ciclu de 390 de secunde.
Figura 5.1. – Grafic al tipurilor de monitorizare în funcție de consum
Olteanu Gheorghe Daniel 50
6. Anexe
Util.h
void ToHex(unsigned char x,unsigned char *hi,unsigned char *lo);
unsigned char ToByte(unsigned char hi,unsigned char lo);
unsigned char Lrc(unsigned char *bufx,unsigned char lb);
unsigned char FByte(float fl,unsigned char ix);
void LightOnPow(void);
void LightOffPow(void);
void Make_cicle(void);
void Power_on_CO(void);
void Power_off_CO(void);
void Cicle_on_CO(void);
void Cicle_off_CO(void);
void Power_on_O3(void);
void Power_off_O3(void);
void Power_on_CO2(void);
void Power_off_CO2(void);
void Pause_on(void);
void Pause_off(void);
#define TA_POWER_CO 30
#define TA_CICLE_CO 100
#define TA_POWER_O3 30
#define TA_POWER_CO2 30
#define TA_PAUSE 50
AduC832.h
/*------------------------------------------------------------------
------
ADUC832.H
Header file for Analog Devices ADuC832 controller.
Rev. 3.0 02nd July 2007
Copyright (c) 1999 - 2007 Keil - An ARM Company
All rights reserved.
--------------------------------------------------------------------
----*/
/* BYTE Register */
sfr P0 = 0x80;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr DPP = 0x84;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
Olteanu Gheorghe Daniel 51
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr P1 = 0x90;
sfr SCON = 0x98;
sfr SBUF = 0x99;
sfr I2CDAT = 0x9A;
sfr I2CADD = 0x9B;
sfr T3FD = 0x9D;
sfr T3CON = 0x9E;
sfr P2 = 0xA0;
sfr TIMECON = 0xA1;
sfr HTHSEC = 0xA2;
sfr SEC = 0xA3;
sfr MIN = 0xA4;
sfr HOUR = 0xA5;
sfr INTVAL = 0xA6;
sfr DPCON = 0xA7;
sfr IE = 0xA8;
sfr IEIP2 = 0xA9;
sfr PWMCON = 0xAE;
sfr CFG832 = 0xAF;
sfr P3 = 0xB0;
sfr PWM0L = 0xB1;
sfr PWM0H = 0xB2;
sfr PWM1L = 0xB3;
sfr PWM1H = 0xB4;
sfr SPH = 0xB7;
sfr IP = 0xB8;
sfr ECON = 0xB9;
sfr EDATA1 = 0xBC;
sfr EDATA2 = 0xBD;
sfr EDATA3 = 0xBE;
sfr EDATA4 = 0xBF;
sfr WDCON = 0xC0;
sfr CHIPID = 0xC2;
sfr EADRL = 0xC6;
sfr EADRH = 0xC7;
sfr T2CON = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;
sfr PSW = 0xD0;
sfr DMAL = 0xD2;
sfr DMAH = 0xD3;
sfr DMAP = 0xD4;
sfr PLLCON = 0xD7;
sfr ADCCON2 = 0xD8;
sfr ADCDATAL = 0xD9;
sfr ADCDATAH = 0xDA;
sfr PSMCON = 0xDF;
sfr ACC = 0xE0;
sfr DCON = 0xE8;
sfr I2CCON = 0xE8;
Olteanu Gheorghe Daniel 52
sfr ADCCON1 = 0xEF;
sfr B = 0xF0;
sfr ADCOFSL = 0xF1;
sfr ADCOFSH = 0xF2;
sfr ADCGAINL = 0xF3;
sfr ADCGAINH = 0xF4;
sfr ADCCON3 = 0xF5;
sfr SPIDAT = 0xF7;
sfr SPICON = 0xF8;
sfr DAC0L = 0xF9;
sfr DAC0H = 0xFA;
sfr DAC1L = 0xFB;
sfr DAC1H = 0xFC;
sfr DACCON = 0xFD;
/* BIT Register..... */
/* TCON */
sbit TF1 = 0x8F;
sbit TR1 = 0x8E;
sbit TF0 = 0x8D;
sbit TR0 = 0x8C;
sbit IE1 = 0x8B;
sbit IT1 = 0x8A;
sbit IE0 = 0x89;
sbit IT0 = 0x88;
/* P1 */
sbit T2EX = 0x91;
sbit T2 = 0x90;
/* SCON */
sbit SM0 = 0x9F;
sbit SM1 = 0x9E;
sbit SM2 = 0x9D;
sbit REN = 0x9C;
sbit TB8 = 0x9B;
sbit RB8 = 0x9A;
sbit TI = 0x99;
sbit RI = 0x98;
/* IE */
sbit EA = 0xAF;
sbit EADC = 0xAE;
sbit ET2 = 0xAD;
sbit ES = 0xAC;
sbit ET1 = 0xAB;
sbit EX1 = 0xAA;
sbit ET0 = 0xA9;
sbit EX0 = 0xA8;
/* P3 */
sbit RD = 0xB7;
sbit WR = 0xB6;
sbit T1 = 0xB5;
sbit T0 = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD = 0xB1;
sbit RXD = 0xB0;
Olteanu Gheorghe Daniel 53
/* IP */
sbit PSI = 0xBF;
sbit PADC = 0xBE;
sbit PT2 = 0xBD;
sbit PS = 0xBC;
sbit PT1 = 0xBB;
sbit PX1 = 0xBA;
sbit PT0 = 0xB9;
sbit PX0 = 0xB8;
/* WDCON */
sbit PRE3 = 0xC7;
sbit PRE2 = 0xC6;
sbit PRE1 = 0xC5;
sbit PRE0 = 0xC4;
sbit WDIR = 0xC3;
sbit WDS = 0xC2;
sbit WDE = 0xC1;
sbit WDWR = 0xC0;
/* T2CON */
sbit TF2 = 0xCF;
sbit EXF2 = 0xCE;
sbit RCLK = 0xCD;
sbit TCLK = 0xCC;
sbit EXEN2 = 0xCB;
sbit TR2 = 0xCA;
sbit CNT2 = 0xC9;
sbit CAP2 = 0xC8;
/* PSW */
sbit CY = 0xD7;
sbit AC = 0xD6;
sbit F0 = 0xD5;
sbit RS1 = 0xD4;
sbit RS0 = 0xD3;
sbit OV = 0xD2;
sbit F1 = 0xD1;
sbit P = 0xD0;
/* ADCCON2 */
sbit ADCI = 0xDF;
sbit DMA = 0xDE;
sbit CCONV = 0xDD;
sbit SCONV = 0xDC;
sbit CS3 = 0xDB;
sbit CS2 = 0xDA;
sbit CS1 = 0xD9;
sbit CS0 = 0xD8;
/* I2CCON */
sbit MDO = I2CCON^7;
sbit MDE = I2CCON^6;
sbit MCO = I2CCON^5;
sbit MDI = I2CCON^4;
sbit I2CM = I2CCON^3;
sbit I2CRS = I2CCON^2;
sbit I2CTX = I2CCON^1;
sbit I2CI = I2CCON^0;
/* DCON */
Olteanu Gheorghe Daniel 54
sbit D1 = DCON^7;
sbit D1EN = DCON^6;
sbit D0 = DCON^5;
sbit D0EN = DCON^3;
/* SPICON */
sbit ISPI = 0xFF;
sbit WCOL = 0xFE;
sbit SPE = 0xFD;
sbit SPIM = 0xFC;
sbit CPOL = 0xFB;
sbit CPHA = 0xFA;
sbit SPR1 = 0xF9;
sbit SPR0 = 0xF8;
Timer.h
extern void T0_Init(void);
extern unsigned char WDFlag;
extern unsigned char T0_Over(unsigned char nrt);
extern void T0_Set(unsigned char nrt,unsigned int sec);
The_main.C
#include <ADUC832.h>
#include <absacc.h>
#include <stdio.h>
#include <string.h>
#include "timer0.h"
#include "uart.h"
#include "modbus.h"
#include "util.h"
extern void Get_parameters(void);
extern int CO_measure , O3_measure, CO2_measure ;
int Ch_inst[8],FCh[9],FCh_inst[8],FChOld[8];
unsigned int DI;
unsigned char FirstRead ;
far unsigned char dummy _at_ 0x010000L; // stii bag Keil
void calibrareADC(void)
ADCCON1 = 0xAC;
ADCCON2 = 0x0B;
ADCCON3 = 0x35;//start calibrare Offset
while ((ADCCON3&0x01)!=0); // asteapta terminarea calibrarii
de offset
ADCCON2 = 0x0C;
ADCCON3 = 0x37;//start calibrare Gain
Olteanu Gheorghe Daniel 55
while ((ADCCON3&0x01)!=0); // asteapta terminarea calibrarii
Gain
void main(void)
//idata unsigned int i,j;
// idata unsigned int val_l,val_h,retai;
PLLCON=0x00; //16.777.216MHz
CFG831|=0x01; //xramu onchip im primii 2k
EA=0;
WDE=0;
T1 = 1 ;
// Power management
//P0.4 =1; //En_6Vcc
// P0.0 =0; //Power_CO
o
// P0.1 =0; //CO_Cicle
// P0.2 =1; //Power_O3
// P0.3 =1; //Power_CO2
//P0 =0x03; // reset all power suplay and
switch
P0 = 0x1e; // enable 6Vcc and Power_CO
T0_Init();
UartInit();
calibrareADC();
CO_measure = 0;
O3_measure = 0;
CO2_measure = 0;
EA=1;
FirstRead=1; // tine de filtru ordin I
Power_on_CO();
Power_on_CO2();
Power_on_O3();
T0_Set(1,TA_POWER_CO);
while(1)
Make_cicle();
//LightOffPow();
Get_parameters();
//LightOnPow();
if(SIsMsg) ModProceed();
Olteanu Gheorghe Daniel 56
UTIL.C
#include <ADUC832.h>
#include "util.h"
#include "timer0.h"
unsigned char CO_enable=0;
extern int FCh[],CO_measure, O3_measure, CO2_measure;
void ToHex(unsigned char x,unsigned char *hi,unsigned char *lo)
unsigned char z;
z=x & 0x0f;
if ( z < 0x0a) *lo='0'+z;
else *lo=z-0x0a+'A';
z=(x & 0xf0)>>4;
if ( z < 0x0a) *hi='0'+z;
else *hi=z-0x0a+'A';
unsigned char ToByte(unsigned char hi,unsigned char lo)
unsigned char lox,hix;
if (hi >='A') hix=hi-'A'+0x0a;
else hix=hi-'0';
if (lo >='A') lox=lo-'A'+0x0a;
else lox=lo-'0';
return (hix*16+lox);
/*
unsigned char Lrc(unsigned char *bufx,unsigned char lb)
unsigned char sx,cs=0,po;
for(sx=0;sx<lb;sx++)
cs+=bufx[sx];
po=255-cs;
po++;
return po;
*/
Olteanu Gheorghe Daniel 57
unsigned char *pc;
/*
unsigned char FByte(float fl,unsigned char ix)
pc=(unsigned char *)&fl;
return *(pc+ix);
*/
void LightOnPow(void)
P2 = P2&0xd;
void LightOffPow(void)
P2 = P2|0x2;
void Make_cicle(void)
if (T0_Over(1))
Power_off_CO();
DAC1H = FCh[1]>>8; // O3 catre Iris
DAC1L = FCh[1]&0x0f;
O3_measure = FCh[1];
Power_off_O3();
if (O3_measure>limit_O3)
Power_on_O3();
DAC0H = FCh[2]>>8; // CO2 catre Iris
DAC0L = FCh[2]&0x0f;
CO2_measure = FCh[2];
Power_off_CO2();
if (CO2_measure>limit_CO@)
Power_on_CO2();
Cicle_on_CO();
T0_Set(2,TA_CICLE_CO);
if(T0_Over(2))
Cicle_off_CO();
T0_Set(1,TA_POWER_CO) ;
Power_on_O3();
Power_on_CO();
Olteanu Gheorghe Daniel 58
Power_on_CO2();
/* if(T0_Over(3))
DAC1H = FCh[1]>>8; // CO catre Iris
DAC1L = FCh[1]&0x0f; // Co catre Iris
O3_measure = FCh[1];
Power_off_O3();
Power_on_CO2();
T0_Set(4,TA_POWER_CO2) ;
if (T0_Over(4))
Power_off_CO2();
T0_Set(5,TA_PAUSE) ;
Pause_on();
if (T0_Over(5))
Pause_off();
T0_Set(1,TA_POWER_CO) ;
Power_on_CO();
*/
void Power_on_CO(void)
P0 = P0&0x00 ;
LightOnPow();
void Power_off_CO(void)
P0 = P0|0x03 ;
LightOffPow();
void Cicle_on_CO(void)
P0 = P0&0x01 ;
INT0=0;
void Cicle_off_CO(void)
P0 = P0|0x03 ;
INT0=1;
void Power_on_O3(void)
P0 = P0|0x17 ;
T1=0;
void Power_off_O3(void)
P0 = P0&0x03 ;
Olteanu Gheorghe Daniel 59
T1=1;
void Power_on_CO2(void)
P0 = P0|0x1b ;
INT0=0;
void Power_off_CO2(void)
P0 = P0&0x03 ;
INT0=1;
void Pause_on(void)
INT0=0;
T1=0;
LightOnPow();
void Pause_off(void)
INT0=1;
T1=1;
LightOffPow();
//P0.4 =1; //En_6Vcc
// P0.0 =0; //Power_CO
o
// P0.1 =0; //CO_Cicle
// P0.2 =1; //Power_O3
// P0.3 =1; //Power_CO2
//P0 =0x1d;
Modbus.C
/*Mod Bus comm */
//#include <ADUC832.H>
#include <absacc.h>
#include "uart.h"
#include "timer0.h"
#include "util.h"
extern unsigned int FCh[];
#define MyAddress 0x01
unsigned char ModHex[160]; //Used for modbus
serial transfer
unsigned char ModAdr,ModFun,ModLen; //ModBus
parameters
Olteanu Gheorghe Daniel 60
unsigned int ModStart,ModNr;
void ModProceed(void);
void MakeRegister(unsigned int *FCh)
unsigned char c=0;
unsigned int gx,len=0;
c=0;
ModHex[0]=':';
ToHex(ModAdr,ModHex+1,ModHex+2);c+=ModAdr; //add
address field
ToHex(ModFun,ModHex+3,ModHex+4);c+=ModFun; //add fun
field
ToHex(ModNr*2,ModHex+5,ModHex+6);c+=(ModNr*2); //nr of
bytes
for(gx=0;gx<ModNr;gx++)
ToHex(FCh[ModStart+gx]>>8,ModHex+7+4*gx,ModHex+7+4*gx+1);
c+=(FCh[ModStart+gx]>>8);
ToHex(FCh[ModStart+gx]&0x00ff,ModHex+7+4*gx+2,ModHex+7+4*gx+3)
;
c+=(FCh[ModStart+gx])&0x00ff;
c=255-c; //checksum
c++;
ToHex(c,ModHex+7+4*gx,ModHex+7+4*gx+1);
ModHex[7+4*gx+2]='\r'; //add
final chars
ModHex[7+4*gx+3]='\n';
len=7+4*gx+4;
// LightOffPow();
UartPutb(ModHex,len);
//send them
// LightOnPow();
/*
Proceeding with any incoming message from MODBUS
*/
void ModProceed(void)
unsigned char mi,cr=0;
Olteanu Gheorghe Daniel 61
WDFlag=1;
ModLen = UartGetMsg(ModHex);
if(ModLen!=-1)
for(mi=0;mi<(ModLen/2)-1;mi++)
cr+=ToByte(ModHex[1+2*mi],ModHex[2+2*mi]);
if(cr != 0) //crc error
return;
ModAdr = ToByte(ModHex[1],ModHex[2]);
ModFun = ToByte(ModHex[3],ModHex[4]);
ModStart = ToByte(ModHex[5],ModHex[6]);
ModStart<<=8;
ModStart+=ToByte(ModHex[7],ModHex[8]);
ModNr = ToByte(ModHex[9],ModHex[10]); ModNr<<=8;
ModNr+=ToByte(ModHex[11],ModHex[12]);
if((ModFun == 0x03)&&(ModAdr == MyAddress)&&(ModNr ==
5)) //read
//compune mesaju
// trimite
MakeRegister(FCh);
AI.C
#include <ADuC832.h>
#include "util.h"
#include "timer0.h"
//extern unsigned int DI;
extern int Ch_inst[],FCh[],FCh_inst[],FChOld[];
extern unsigned char FirstRead ;
int CO_measure =0 , O3_measure =0, CO2_measure = 0 ;
unsigned int IO_ReadAi(unsigned char chn)
Olteanu Gheorghe Daniel 62
idata unsigned int val_l,val_h,retai;
ADCCON2=0x10 |chn; // 812 era 0x10
while(ADCCON3 & 0x80);
val_l = ADCDATAL;
val_h = ADCDATAH&0x0F;
retai=(val_l|(val_h<<8));
return (retai);
void Read_8_channels(void)
unsigned int ii;
for(ii=0;ii<8;ii++)
Ch_inst[ii]=IO_ReadAi(ii);
void Filtru_ordin_AI(void)
float CFP = 0.3 ; // constanta filtrului CFP E (0,1]
unsigned int ii;
Read_8_channels();
if(FirstRead)
FirstRead=0;
for(ii=0;ii<8;ii++)
FChOld[ii]=Ch_inst[ii];
for(ii=0;ii<8;ii++)
FCh[ii]=FChOld[ii] + (int)(CFP*(Ch_inst[ii]-
FChOld[ii]));
FChOld[ii]=FCh[ii];
void Get_parameters(void)
Filtru_ordin_AI();
//DI = (unsigned int)P0&0x00ff; //DI pe pozitia 0 din FCh[]
//FCh[0] = DI;
FCh[3] = CO_measure;
FCh[4] = O3_measure;
TIMER.C
Olteanu Gheorghe Daniel 63
#include <ADUC832.H>
#include <absacc.h>
unsigned int WDCounter=0;
unsigned char WDFlag=1;
unsigned char T0M=0,T0S=0,T0H=0,d50=0;
unsigned char T0Day=0, T0Month=0, T0Year=0;
/*4 independent timings */
unsigned int Flag0=0,Flag1=0,Flag2=0,Flag3=0,Flag4=0,Flag5=0;
unsigned int Cnt_0=0,Cnt_1=0,Cnt_2=0,Cnt_3=0,Cnt_4=0,Cnt_5=0;
unsigned int Max0=0,Max1=0,Max2=0,Max3=0,Max4=0,Max5=0;
unsigned int T0_Ms=0;
unsigned int tx;
unsigned char retv;
//Uart timeout message measuring
extern unsigned char SMsgIn;
extern unsigned char SIsMsg;
extern unsigned char STimerCnt;
void T0_Set(unsigned char nrt,unsigned int sec)
//unsigned int tx;
tx=sec;
ET0=0;
if(nrt==0)
Cnt_0=0;
Max0=tx;
Flag0=1;
else if(nrt==1)
Cnt_1=0;
Max1=tx;
Flag1=1;
else if(nrt==2)
Cnt_2=0;
Max2=tx;
Flag2=1;
else if(nrt==3)
Cnt_3=0;
Max3=tx;
Flag3=1;
Olteanu Gheorghe Daniel 64
else if(nrt==4)
Cnt_4=0;
Max4=tx;
Flag4=1;
else if(nrt==5)
Cnt_5=0;
Max5=tx;
Flag5=1;
TL0=0;
ET0=1;
unsigned char T0_Over(unsigned char nrt)
retv=0;
if(nrt==0)
if((Cnt_0==Max0)&&(Max0>0))
if(Flag0)
Flag0=0;
retv=1;
else if(nrt==1)
if((Cnt_1==Max1)&&(Max1>0))
if(Flag1)
Flag1=0;
retv=1;
else if(nrt==2)
if((Cnt_2==Max2)&&(Max2>0))
if(Flag2)
Flag2=0;
retv=1;
Olteanu Gheorghe Daniel 65
else if(nrt==3)
if((Cnt_3==Max3)&&(Max3>0))
if(Flag3)
Flag3=0;
retv=1;
else if(nrt==4)
if((Cnt_4==Max4)&&(Max4>0))
if(Flag4)
Flag4=0;
retv=1;
else if(nrt==5)
if((Cnt_5==Max5)&&(Max5>0))
if(Flag5)
Flag5=0;
retv=1;
return retv;
void timer0(void) interrupt 1
EA=0;
TH0=0x92; //every 20 ms 0x92
if(WDFlag==1)
WDFlag=0;
WDCounter=0;
if(WDCounter<20*60*5) // 5 minutes watch dog period
//watch dog refresh
T0=0;
T0=1;
WDCounter++;
Olteanu Gheorghe Daniel 66
if(SMsgIn)
STimerCnt++;
if(STimerCnt>=3) //la 20 -> 40-42 ms
SIsMsg=1;
SMsgIn=0;
T0_Ms++;
if(T0_Ms>=50) //trebiue pus 50
T0_Ms=0;
if(Cnt_0<Max0)
Cnt_0++;
if(Cnt_1<Max1)
Cnt_1++;
if(Cnt_2<Max2)
Cnt_2++;
if(Cnt_3<Max3)
Cnt_3++;
if(Cnt_4<Max4)
Cnt_4++;
if(Cnt_5<Max5)
Cnt_5++;
d50++;
if(d50==50)
d50=0;
T0S++;
if(T0S>=60)
T0S=0;
T0M++;
if(T0M>=60)
T0M=0;
T0H++;
if(T0H>=24)
T0H=0;
Olteanu Gheorghe Daniel 67
EA=1;
void T0_Init(void)
EA=0;
TMOD|=0x1; //0 8bit and5scaler = (clk/12)/256/(32-TH0)
//1 16 bit
//2=8 bit auto reload
//la fiecare depasire a lui TL0 , TL0 se
reincarca cu TH0
//freq = (clk/12)*(1/(256-TH0));
//ex TH0=0 ->freq=3.6KHz ;3.6 ori / msec (3600
/s)
//ex TH0=250->freq=153KHz
TL0=0x00;
TH0=0x92; // 0x4c cica 20Hz sau 50ms
T0_Ms=0;
T0S=0;
T0M=0;
T0H=0;
TR0=1; //start the timer
ET0=1; //enable timer0 interrupt
EA=1;
Uart.c
#include <ADUC832.H>
#include "string.h"
unsigned char URxBuf[255];
unsigned char URxCnt=0;
unsigned char URxMsg=0;
unsigned char UTxBuf[255];
unsigned char UTxCnt=0;
unsigned char UTxLen=0;
unsigned char UTxFree=1;
unsigned char bufs[30];
unsigned char SMsgIn=0 ;
unsigned char SIsMsg=0;
unsigned char STimerCnt=0;
sbit P3_5 = P3^5;
Olteanu Gheorghe Daniel 68
/*
.Uart interrupt handler
*/
void serial() interrupt 4
EA=0;
if(RI)
if(SBUF==0x0D) //new message
SIsMsg=1;
URxBuf[URxCnt++]=SBUF;
URxBuf[URxCnt]=0;
else if(SBUF==0x0A) //ignore 0x0A char
;
else if(SBUF==':') //start :
URxCnt=0;
URxBuf[URxCnt++]=SBUF; //save current incoming
message
else
URxBuf[URxCnt++]=SBUF; //save current incoming
message
RI=0;
if(TI)
if(UTxCnt < UTxLen)
if(UTxBuf[UTxCnt]&0x0100)
TB8=1;
else
TB8=0;
SBUF=UTxBuf[UTxCnt++];
else
UTxFree=1;
TI=0;
EA=1;
/*
.Send a buffer over the uart
*/
Olteanu Gheorghe Daniel 69
void UartPutb(unsigned char *buf,unsigned char lens)
unsigned char ux;
for(ux=0;ux<lens;ux++)
UTxBuf[ux]=buf[ux];
UTxLen=ux;
UTxCnt=0;
UTxFree=0;
TI=1;
while(!UTxFree);
/*
void UartPutStr(unsigned char *buf)
unsigned char ux=0;
while(buf[ux]!=0)
UTxBuf[ux]=buf[ux];
ux++;
UTxLen=ux;
UTxCnt=0;
UTxFree=0;
TI=1;
while(!UTxFree);
*/
/*
.Send a string zero terminated over the serial line
*/
/*
void UartPuts(char *buf)
UartPutb((unsigned char*)buf,strlen(buf));
*/
/*
void UartPutc(unsigned char c)
UartPutb(&c,1);
*/
/*
void UartPutCh(unsigned char c)
Olteanu Gheorghe Daniel 70
while(!TI);
TI = 0;
SBUF = c;
*/
/*
unsigned char UartTxFree(void)
return UTxFree;
*/
/*
,.Initialize the uart
*/
void UartInit(void)
RI=0;
TI=0;
SCON= 0x50; // SCON setup serial port
control 8,n,1
// TB8=1;
// TMOD|=0x20;
// TMOD hardware (9600 BAUD @11.059MHz)
// TH1=0xF9; //9600 default
// PCON |= 0x80;
// RCAP2H=0xFF; //9600 PE TIMERU 2
// RCAP2L=0xC9;
// RCLK = 1;
// TCLK = 1;
// TR2=1; //run timer 2
// TR1=1; //run timer 1
T3CON=0x85;
T3FD=0x2D; //9600 using timer 3
PS=1;
ES=1;
// RI=1;// testing
// TI=1;
Olteanu Gheorghe Daniel 71
/*
.Close the serial port (and go to have a drink)
*/
/*
void UartClose(void)
// TR1 = 0; //stop timer 1
ES = 0; //disable serial int
/*
/*
.Set a new baudrate
.2400,4800,9600,19200,38400
.8,E,1
.8,O,1
.8,N,2
.8,N,1
*/
/*void UartSet(unsigned int baudr,unsigned char
parity,unsigned char lstop)
EA=0;
ES=0;
TR1=0;
UParity=parity;
if(lstop==1 && ((parity=='N') || (parity=='n')) )
SCON= 0x50; // SCON setup serial port
control 8,n,1
else
SCON= 0xD0; // SCON setup serial port
control 9,n,1
PCON&=~0x80; //remove SMOD bit
if(baudr==2400)
TH1=0xE8;
else if(baudr==4800)
TH1=0xF4;
else if(baudr==9600)
TH1=0xFA;
else if(baudr==19200)
TH1=0xFD;
else if(baudr==38400)
TH1=0xFD;
PCON|=0x80;
TR1=1;
ES=1;
Olteanu Gheorghe Daniel 72
EA=1;
*/
/*
.Uart get the message.
.Return -1 if no msg
length of the msg otherwise
*/
int UartGetMsg(unsigned char *bu)
unsigned char ix;
int rv=-1;
if(SIsMsg)
SIsMsg=0;
for(ix=0;ix<URxCnt;ix++)
bu[ix]=URxBuf[ix];
rv = URxCnt;
URxCnt=0;
return rv;
Olteanu Gheorghe Daniel 73
7. Bibliografie
ADuC832 datasheet. (n.d.). Retrieved July 5, 2013, from http://www.analog.com:
http://www.analog.com/static/imported-files/data_sheets/ADUC832.pdf
Cesare Alippi, F. I. (2010). An Adaptive Sampling Algorithm for Effective Energy Management in
Wireless Sensor Networks With Energy-Hungry Sensors. IEEE TRANSACTIONS ON
INSTRUMENTATION AND MEASUREMENT, VOL. 59, NO. 2.
Cesare Alippi, G. A. (2009). Energy Management in Wireless Sensor Networks with Energy-Hungry
Sensors.
Elmi, I., Zampolli, S., Cozzani, E., Mancarella, F., & Cardinali, G. (2008). Development of ultra-low-
power consumption MOX sensors with ppb-level VOC detection capabilities for emerging
applications. In Sens. Actuat. B-Chem (pp. 135, 342–351).
George F. Fine, L. M. (2010). Metal Oxide Semi-Conductor Gas Sensors in Environmental Monitoring.
Sensors 2010.
HANWEI ELECTRONICS CO. (n.d.). Retrieved July 5, 2013, from MG811 Gas sensor:
http://www.parallax.com/Portals/0/Downloads/docs/prod/sens/MG811Datasheet.pdf
Korotcenkov, G., Blinov, I., Brinzari, V., & Stetter, J. (2007). Effect of air humidity on gas response of
SnO2 thin film ozone sensors. In Sens. Actuat. B-Chem (pp. 122, 519–526).
Martin, R. (2004). Electronic Structure: Basic Theory and Practical Methods. Cambridge.
MQ131 gas sensor. (n.d.). Retrieved July 5, 2013, from HANWEI ELECTRONICS CO:
http://www.cooking-hacks.com/skin/frontend/default/cooking/pdf/MQ-131.pdf
MQ-7 gas sensor. (n.d.). Retrieved July 5, 2013, from Hawnei electronic CO.:
https://www.sparkfun.com/datasheets/Sensors/Biometric/MQ-7.pdf
Patel, N., Patel, P., & Vaishnav, V. (2003). Indium tin oxide (ITO) thin film gas sensor for detection of
methanol at room temperature. In Sens. Actuat. B-Chem (pp. 96, 180–189).
Seiyama, T., Kato, A., Fujiishi, K., & Nagatani, M. (1962). A new detector for gaseous components
using semiconductive thin films. In Anal. Chem (pp. 34, 1502–1503).
Shriver, A. (2006). Inorganic Chemistry. Oxford University Press.
UT803. (n.d.). Retrieved July 5, 2013, from www.uni-trend.com: http://www.uni-
trend.com/UT803.html
Varon, J., Marik, P., Fromm, R. J., & Gueler, A. (1999). Carbon monoxide poisoning: A review for
clinicians. In J. Emer. Med (pp. 17, 87–93).
Olteanu Gheorghe Daniel 74
Vincenzi, D., Butturi, M., Guidi, V., Carotta, M., Martinelli, G., Guarnieri, V., et al. (2000). Gas-sensing
device implemented on a micromachined membrane: A combination of thick-film and very
large scale integrated technologies. In J. Vac. Sci. Technol (pp. 2441–2445).
Wang, Z., & Hu, X. (1999). Fabrication and electrochromic properties of spin-coated TiO2 thin films
from peroxo-polytitanic acid. In Thin Solid Films (pp. 352, 62–65).
Wiegleb, G., & Heitbaum, J. (1994). Semiconductor gas sensor for detecting NO and CO traces in
ambient air of road traffic. In Sens. Actuat. B-Chem (pp. 17, 93–99).
Williams, D. (1999). Semiconducting oxides as gas-sensitive resistors. In Sens. Actuat. B-Chem (pp.
57,1–19).