Popa Marius Vasile Licenta 2016 [307394]

REZUMAT

Proiectul presupune monitorizarea locurilor dintr-o parcare, dar si accesul in zonă. în acest proiect voi prezenta modul de comandă a [anonimizat] : [anonimizat].

Pentru această aplicație am ales o metodă care folosește fototranzistori pentru detecția mașinii atât înaintea barierei (zona de detecție) cât și după ce trece de aceasta (numită zona de protecție). Bariera este comandată de un servomotor programat de un microcontroler PIC16F690. În momentul în care este detectată o mașină, iar „șoferul” [anonimizat], locuri ce sunt afișate pe un afișaj alfanumeric. După ce mașina a [anonimizat]. [anonimizat] „Parcare ocupată”.

[anonimizat]. This project will present how to control two actuators according to information received from the phototransistors and the use of an LCD screen that will display useful information: [anonimizat] a possible message if wherein parking is full.

For this application i chose a method that uses both phototransistors for detecting machine before the barrier (detection area) and after passing by it (called the protection zone). The barrier is driven by a servomotor programmed PIC16F690 microcontroller. When a [anonimizat] "driver" [anonimizat], places that are displayed on an alphanumeric display. [anonimizat]. [anonimizat] "Parking busy".

CAPITOLUL 1. INTRODUCERE

1.1. Prezentarea temei

1.1.1. Aplicabilitate

In cadrul acestei lucrări se dorește realizarea unui sistem de monitorizare a [anonimizat]. Acest sistem de monitorizare poate fi folosit atât pentru o simplă parcare cat și pentru o parcare privată sau cu plată. Am ales această aplicație deoarece consider ca este interesantă și des intalnită in viața nostră de zi cu zi. Sunt mai multe metode de monitorizare a unei parcări auto ( [anonimizat], [anonimizat]).

Figura 1.1. Barieră de acces cu cartelă

Figura 1.2. Parcare cu senzori pentru fiecare loc

Figura 1.3. Detecția mașinii

Figura 1.4. Detecția, butonul și motorul în acțiune

Figura 1.5. Zona de siguranță și afișarea locurilor

În imaginile de mai sus este prezentat sistemul de acces gândit de mine. În prima poza (Fig.1.3) este ilustrat mecanismul pe care o sa-l folosesc, cât și detecția unei mașini. În a doua poză (Fig.1.4), [anonimizat] a putea trece mașina.În ultima poză (Fig.1.5) [anonimizat] a trecut mașina.

1.1.2. Obiectivele lucrării

Obiectivele pentru realizarea proiectului de față sunt următoarele:

-Studiul microcontrolerului PIC16F690

-Programarea microcontrolerului PIC16F690

-Studiul servomotorului SG90

-Programarea servomotorului SG90

-Proiectarea schemei electronice

-Realizarea PCB-ului

-Realizarea practică a sistemului de monitorizare a unei parcări auto

Principalele componente ale sistemului de monitorizare a unei parcări auto:

-Microcontroller PIC16F690

-Servomotor SG90

-Fototranzistor SFH300FA

-Afișaj alfanumeric

CAPITOLUL 2. SISTEME PENTRU GESTIONAREA PARCĂRILOR

2.1. Controlere logice programabile

Noțiunea de PLC vine de la Programmable Logic Controller (Controller Logic Programabil) și este un computer digital folosit la automatizarea proceselor industriale, dar si la controlul mașinilor dintr-o fabrică industrială ce utilizează linii de asamblare.

PLC are mai multe porturi de intrare și ieșire, acesta fiind bazat pe o arhitectură de tip RISC (Reduced Instruction Set Computer) și este proiectat pentru a rezista la condiții mai severe, unele foarte critice cum ar fi : praf, umezeală, caldură, limite de temperatură mari, frig).

Controlerul logic este alcătuit dintr-un microprocesor programabil și este programat folosind un limbaj de programare specializat. Unul dintre cele mai importante limbaje de programare putem spune ca este „ladder logic” , urmat de limbajul C. De obicei programul este scris intr-un mediu de dezvoltare pe PC, iar dupa ce programul a fost scris complet, este descărcat in PLC printr-un cablu de conexiune. Programele de control ale masinii sunt, de regulă, stocate intr-o memorie nevolatilă. Pe scurt, un PLC este un automat ce folosește intrările pentru a monitoriza un proces și ieșirile pentru a controla un proces, utilizând un program.

Structura unui Controler Logic programabil, din punct de vedere funcțional cuprinde:

-modulele de intrare –acestea preiau semnalele din sistemul controlat prin intermediul senzorilor și apoi sunt convertite în semnale logice pentru a putea fi prelucrate de CPU;

-unitatea centrală de prelucrare (CPU) –aceasta procesează semnalele primite pe baza instrucțiunilor unui program, ia decizii și emite semnale numerice pe modulele de ieșire în conformitate cu strategia de control;

– modulele de ieșire – aceste module sunt folosite să convertească semnalele de la CPU în semnale de comandă cu ajutorul cărora se poate realiza acționarea diferitelor echipamente prin intermediul actuatorilor.

Principiul de functionare a unui PLC

Funcționarea unui PLC se bazează pe scanarea programată a intrărilor și ieșirilor sale.

Procesul de scanare este format din 3 pași de bază

Pasul 1 -Stadiul de testare a intrărilor. La inceput, PLC-ul scanează fiecare intrare pentru a stabili stările ON sau OFF pe care acesta le potate prezenta. Altfel spus, putem verifica dacă senzorii sau switch-urile conectate în intrări sunt activate sau nu. Informația percepută pe parcursul acestui pas se stochează în memorie, urmând a fi utilizată în pasul următor.

Pasul 2 -Execuția programului. În acest stadiu, PLC-ul execută un program în mod secvențial (instrucțiune după instrucțiune). Ca rezultat, putem activa una sau mai multe ieșiri, sau se pot stoca informații în zone specifice în memorie, urmând ca acestea sa fie utilizate în pasul următor.

Pasul 3 -Verificarea si setarea ieșirilor. În final, PLC-ul verifică stările ieșirilor si dacă este cazul le modifică. Aceste modificări se bazează pe stările intrărilor citite pe durata primului pas si pe rezultatele execuției programului din pasul doi. După execuția pasului 3, PLC-ul reia ciclul incepând de la pasul 1.

Sistemul de evidență automată a locurilor într-o parcare folosind PLC

Programarea PLC-ului

Logica circuitului este stabilită în interiorul PLC-ului prin intermediul unui program software. Acest program poate decide care ieșiri sunt energizate și sub ce condiții de intrare. Chiar dacă programul însuși pare a fi o diagramă logică, cu simboluri pentru relee și comutatoare, în realitate nu există astfel de dispozitive în interiorul PLC-ului. Acestea sunt doar contacte și bobine imaginare sau virtuale. Programul este introdus și vizualizat prin intermediul unui PC conectat la portul PLC-ului (programming port).

Identificarea numărului de intrări și de ieșiri pentru PLC

Avem 2 intrări pentru PLC

– un senzor ultrasonic pentru detecția ieșirilor (OUT)

– un senzor ultrasonic pentru detecția intrărilor (IN)

Total intrări PLC este de minim 2.

Avem 2 ieșiri pentru PLC

– comanda pentru afișaj parcare plină – "FULL".

– comanda pentru afișaj parcare goală – "EMPTY".

Total ieșiri PLC este de minim 2.

2.2. Senzori de proximitate

Denumirea de senzori vine din latină de la cuvântul ”senus” care înseamnă simț, și a fost și este folosit pentru a desemna capacitățile organelor de simț, abia după anii `70 acest cuvânt a fost într-un final introdus în dicționar. Apariția acestui cuvânt s-a datorat dezvoltării microelectronicii, adaugând o noțiune nouă unei terminologii tehnice având o anumită redundanță.

Senzorii în genereal sunt niște sisteme care transformă o mărime ne electrică intr-o marime electrică de diferite forme(analogică sau binară). De cele mai multe ori senzori sunt folosiți pentru monitorizarea unor factori externi sistemului pe care sunt montați. Unul din exemplu cel mai concret ar fi senzori care vin montați pe reflectoarele de iluminat. Acești senzori observă mișcarea și trimit comanda, cel mai adesea, unui controler care la rândul lui dă comandă becului să se aprindă.

Senzorul poate fi de două tipuri

– Activ, care este un consumator de energie.

– Pasiv, spre exemplu fotorezistorul cu ajutorul căruia putem măsura intensitatea luminii.

La ora actuală senzori au ajuns la un nivel ridicat de acuratețe a măsurări mărimilor ne electrice foarte mare, se pot evidenția circa 2000 de tipuri de senzori oferiți în 100000 de variante, pe plan mondial. Datorită numărului mare de tipuri de senzori și multitudinea sitemelor unde pot fi implementați acestia, o să mă axez doar pe senzorii de proximitate. Prin urmare o definiție referitoare la senzorii de proximitate ar suna așa:

Senzorii de proximitate sunt dispozitive capabile să detecteze și semnalizeze prezența unor obiecte în campul lor de acțiune fară a lua contact fizic cu obiectul care este în raza lui de acțiune.

Principalele avanataje ale folosirii senzorilor de proximitate ar fi:

Siguranță în funcționare

Posibilite de reglaj, aici ne referim la reglaje interne(ex:lungimea la care senzorii să acționeze ) precum și externe(modificarea poziție unui senzor)

Fiabilitate destul de ridicată

Dimensiuni extrem de reduse(odată cu dezvoltarea de tehnologii noi și în funcție de costul de achiziție)

O clasificare a senzorilor de proximitate se poate face în funcție de principiul de funcționare și aici amintim:

INDUCTIVI

CAPACITIVI

MAGNETICI

OPTICI

2.2.1. Senzori inductivi

Figura 2.1. Principiul unui senzor inductiv

Principiul acestor senzori inductivi constă intr-o bobină înfașurată în jurul miezului de ferită care este situat în zona de acțiune al senzorului. Dacă aplicăm o frecvență înaltă, se generează un câmp magnetic oscilant în jurul câmpului de sesizare. Câmpul magnetic este monitorizat de un circuit intern, în momentul în care un obiect metalic intră în câmpul magnetic, câmpul induce curent electric în obiectul de detectat. Cu cât apropriem mai mult obiectul de suprafața frontală a senzorului, valoarea curentului indus v-a crește.

Figura 2.2. Semnalul unui senzor inductiv

Ca urmare, datorită curentului care crește, atât energia cât și oscilația scad în bobină. Pe masura apropierii obiectului oscilația încetează complet. Circuitul intern are rolul de a sesiza încetarea oscilației și comută ieșirea. Având în vedere că funcționarea se bazează pe un câmp electromagnetic, efectele de mediu influențează mai puțin funcționarea senzorilor de proximitate în comparație cu senzorii fotoelectrici. Datorită funcționării pe bază de câmp electromagnetic măsurătoarea nu este așa influențabilă de mediu față de un senzor optic. Funcționarea senzorului de proximitate nu este afectată de apă, ulei și alte impurități.

2.2.2. Senzori capacitivi

Figura 2.3. Principiul unui senzor capacitiv

Senzorii capacitivi sunt destul de asemănători cu senzorii inductivi, deosebirea majoră este aceea că în loc să avem o bobină avem un electrod de formă cilindrică. Practic ia naștere între electrod și pământ un câmp capacitiv, deci și între pământ și electrod. În momentul în care obiectul este în apropierea senzorului, sarcina pozitivă și cea negativă a obiectului se separă. Sarcinile pozitive ale obiectului din raza de acțiune a senzorului sunt atrase de către pământ iar sarcinile negative ale obiectului sunt atrase de sarcinile pozitive ale electrodului. Datorită faptului că sarcinile negative sunt mai aproape de electrod crește capacitatea electrostatică a electrodului și astfel senzorul detectează obiectul aflat în raza lui de acțiune.

Figura 2.4. Semnalul unui senzor capacitiv

Un mare avantaj pe care îl prezintă acest tip de senzori se referă la faptul că reușesc să detecteze și obiecte nemetalice. Problema cea mai mare pe care o ridică acest tip de senzori este aceea că nu poate fi montat în orice loc, capul de detecție este sensibil la murdărie sau factori externi perturbatori. Datorită capacității de detecție a obiectelor nemetalice sunt folosite într-un domeniu mai deosebit, monitorizarea de încărcare în containere.

2.2.3. Senzori magnetici

Principiul acestor senzori de proximitate se bazează pe detecția lor la câmpurile magnetice produse de magneți sau electromagneți, aceștia pot fi de mai multe tipuri:

Senzorul magnetic de tip „REED” are un principiu foarte simplu de funcționare, el constă în două lamele, închise ermetic într-un tub de sticlă din care ies spre exterior doi electrozi cu scopul de a realiza legatura electrică. Între lamele apare o forță de atracție magnetică.

Când forță este suficient de puternică pune în contact lamelele și închide contactul electric.

Figura 2.5. Senzor magnetic

Senzorii magnetici REED de uz industrial au în construcție un LED care indică starea de operare. În figura de mai jos sunt prezentate conexiunile interne și externe. Diodele electroluminoscente conectate în serie cu rezistorul R, au rolul de circuit de protecție pentru sarcina inductivă.

Figura 2.6. Senzor magnetic REED

Senzorii de proximitate magnetici sunt niste senzori care sunt mai greu influențabili de mediul exterior de aceea pot fi montați în locuri în care temperatura este foarte ridică, distanța mare de sesizare la o carcasă redusă, detecția magneților permanenți prin materiale non-magnetice (aluminiu, plastic, inox sau lemn).

Acest tip de senzori pot fi folosiți în aplicații cum ar fi:

-măsurarea vitezei de rotație a unei piese fabricată din orice material;

-detecția sfârșitului de cursă a unui cilindru

-poate fi folosit ca și contor dacă este amplasat în apropierea unei benzi transportoare

-poziționarea unui piston într-un cilindru

2.2.4. Senzori optici

Senzorii optici pentru detecția obiectelor folosesc dispozitive optice și electronice. Principiul de funcționare a acestor senzori optici se bazează pe prelucrarea unui semnal electric provenit de la un dispozitiv electroluminiscient, care este întrerupt sau reflectat de obiectul care intră în raza lui de acțiune. Acest tip de senzor este folosit in proiectul prezentat, atât la intrarea parcării cât si la ieșirea din parcare, dar și după bariere pentru ca bariera să se inchidă in siguranță.

Senzorul cu fascicol luminos:

Fig. 2.4.Senzor cu fascicol luminos

Un senzor cu fascicol luminos este alcătuit din două componente. Emițătorul (cel din partea stangă a desenului) care emite un fascicol luminos către receptor (partea dreaptă a desenului). De cele mai multe ori emițătorul este un tranzistor sau o diodă, în momentul în care obiectul pătrunde în raza de acțiune a fascicolului luminos semnalul de pe ieșirea receptoului se va modifica și astfel detectăm apariția unui obiect în raza de acțiune a senzorului. În cazul de față pe post de emițător am folosit un LED infraroșu, iar pentru receptor am ales sa folosesc un fototranzistor tot infraroșu.

Senzorul retroreflexiv:

Principiul acestui tip de senzor constă în faptul ca un led emite un semnal luminos care este reflectat în receptor. În momentul în care un corp intersectează fascicolul luminos la emițător nu mai ajunge fascicolul și astfel se consideră că obiectul a intrat în raza de acțiune a acestuia. Trebuie specificat faptul că în momentul defectării emițătorului senzorul se comportă exact ca în situația în care există corp în dreptului lui și de aceea trebuie luate măsuri de precauție. În momentul montării acestui tip de senzor trebuie să avem grijă la montarea părții reflectorizante astfel încat semnalul luminos să ajungă la receptor.

Senzori de difuzie:

Figura 2.9. Senzor de difuzie

Diferența între acest tip de senzori și ceilalti tipi de senzori optici constă în faptul că receptorul și emițătorul se găsesc în aceeași capsulă ceea ce înseamnă că nu mai e nevoie de fire de legatură între receptor și emițător. Se emite un semnal luminos care este reflectat de obiect și la receptor ajunge doar o parte din semnalul emis. Diferența dintre semnalul emis și semnalul care ajunge la receptor depinde de mai mulți factori cum ar fi mărimea obiectului, densitatea, forma, culoarea și de aici rezultă și o distantă mai mare sau mai mică la care senzorul reactionează.

Fototranzistorul

Fototranzistorul este un tranzistor bipolar a cărui jonțiune colector-bază este expusă iluminării prin intermediul unei capsule transparente sau a unei ferestre transparente din componența capsulei, funcționând astfel ca fotodetector.

Pentru a putea funcționa, acesta trebuie polarizat astfel încât să se afle în regimul activ normal, adică joncțiunea emitor-bază polarizată direct iar joncțiunea colector-bază invers. În această situație joncțiunea colector-bază se comportă ca o fotodiodă în regim fotoconductiv iar fotocurentul care o străbate, ajungând în baza tranzistorului, joacă rolul curentului de bază aplicat unui tranzistor clasic, fiind în continuare amplificat de β ori, β fiind factorul de amplificare al tranzistorului.

Practic, fototranzistorul poate fi construit ca un tranzistor bipolar clasic ce are conectată în paralel cu joncțiunea colector-bază o fotodiodă, tranzistorul amplificând semnalul fotodiodei, curentul de colector al acestuia fiind proporțional cu fluxul fotonic incident:

Figura 2.10. FT = Tranzistor + Fotodiodă

Fototranzistorul prezintă ca avantaj față de fotodiodă, o sensibilitate de β+1 ori mai mare, iar ca dezavantaj o viteză de răspuns mai redusă, o liniaritate mai proastă și o dependență mult mai accentuată a caracteristicii de temperatura ambiantă, prin intermediul curentului rezidual numit și curent de întuneric, fapt ce limitează domeniul aplicațiilor în care poate fi utilizat la cele care nu necesită determinări cantitative ale fluxului luminos ci simpla detectare a prezenței sau absenței acestuia.

2.3. Sisteme de acționare

2.3.1. Servomotoare

Figura 2.11. Servomotor

Servomotorul este un element component al unui sistem care funcțional implică poziții relative reglabile între anumite elemente componente ale sale.

Denumirea de servomotoare cuprinde motoarele electrice executate special pentru a fi utilizate în sistemele automate de poziționare și care în general sunt de puteri reduse (până la puteri de ordinul câtorva [kW]). Pentru puteri mai mari se folosesc motoarele electrice convenționale,care sunt elemente de execuție mai lente, cu constante de timp mai mari dar și cu randament mai bun.

Servomotoarele sunt motoare electrice speciale, de curent continuu sau curent alternativ cu viteză de rotație reglabilă într-o gamă largă în ambele sensuri având ca scop deplasarea într-un timp prescris a unui sistem mecanic (sarcina) de-a lungul unei traiectorii date, realizând totodată și poziționarea acestuia la sfârșitul cursei cu o anumită precizie.

Sistemele de reglare automată moderne impun servomotoarelor următoarele performanțe:

gamă largă de modificare a vitezei în ambele sensuri;

funcționare stabilă la viteză foarte mică;

constante de timp cât mai reduse;

fiabilitate și robustețe ridicate;

raport cuplu/moment de inerție cât mai mare;

suprasarcină dinamică admisibilă mare;

caracteristici de reglare liniare.

Servomotoarele electrice se folosesc în cele mai diverse aplicații cum ar fi:acționarea roboților industriali universali, a mașinilor unelte cu comandă numerică, a perifericelor de calculator, în acționarea imprimantelor rapide, în tehnica aerospațială, instalații medicale etc.

2.4. Microcontrolere

Un controller este un sistem folosit pentru a comanda și a prelua stări de la un proces sau un aspect al mediului înconjurător. La început un controller era un echipament de mari dimensiuni. După apariția microprocesoarelor dimensiunile controller-elor s-au redus. Se pot lua în calcul multe criterii de clasificare a microcontrolerului, de exmplu aplicațiile in care este folosit, după interfețele care le au incluse în configurație, după furnizor, etc.

Clasificarea în funcție de compatibilitate software

Microcontrolere CISC

– Compatibile 8051

– Motorola 68xx

– Compatibile x86

– COP 8 (National Semiconductor)

– TMS 370 (Texas Instrument)

– ST (Thomson)

Microcontrolere RISC

– Super H

– PIC

– Atmel

Obiectul urmărit în alegerea microcontrolerului este obținerea calității dorite cu un cost cât mai scăzut. Calitățiile dorite sunt fiabilitatea, performanța și compatibilitatea electromagnetică cu mediul inconjurător.

Am ales sa lucrez cu un microcontroler PIC de la firma Microchip, mai exact PIC16F690. Am făcut această alegerea deoarece are suficienti pini de I/O, atât memoria RAM cât și memoria ROM sunt suficiente pentru sistemul creat de mine. Este ieftin și usor de configurat.

2.4.1. Descrierea hardware

Un microcontroller este un circuit realizat pe un singur chip care conține tipic:

unitatea centrală;

generatorul de tact (la care trebuie adăugat din exterior un cristal de cuarț sau în aplicații mai puțin pretențioase, un circuit RC);

memoria volatilă (RAM);

memoria nevolatilă (ROM/PROM/EPROM/EEPROM);

dispozitive I/O seriale și paralele;

controller de întreruperi, controller DMA, numărătoare/temporizatoare (timers), covertoare A/D și D/A, etc.;

periferice.

Microcontrolerele sunt încapsulate in diferite forme, in funcție de necesitatea consumatorului, astfel se ajunge la două mari si importante categorii: SMD (surface mount device) sau THT (thru hole technology).

Figura 2.12. Microcontroler PIC16F690 SMD(stânga) și THT(dreapta)

2.4.2. Microprocesorul (CPU)

Microprocesorul este elementul central al structurii, responsabil cu aducerea din memorie, decodificarea și execuția instrucțiunilor mașină, codificate binar.

Unitatea centrală de prelucrare este compusă din :

-unitatea aritmetică și logică (UAL)

-unitatea de control.

Unitatea aritmetică și logică este secțiunea responsabilă cu efectuarea operațiilor aritmetice și logice asupra operanzilor ce îi sunt furnizați.

Unitatea ce control este responsabilă cu decodificarea codului operației conținut de codul unei instrucțiuni.

Unitatea centrală de prelucrare conține un set de registre interne, similare unor locații de memorie, folosite pentru memorarea unor date des apelate sau pentru programarea unor anumite funcții.

Arhitectura de tip „Von Neumann”

Cele mai multe microcontrolere folosesc arhitectura de tip „Von Neumann”.Această arhitectură este un standard pentru microprocesoarele de uz general, aceasta fiind mai lentă, datorită faptului ca există un singur bus de date care este folosit pe rand pentru preluarea si executarea instrucțiunilor și a datelor. Microcontrolerele bazate pe această arhitectură dețin o unitate centrală (CPU) caracterizată de existența unui singur spațiu de memorie utilizat pentru memorarea atât a codului instrucțiunilor cât și a datelor ce fac obiectul prelucrării.

Arhitectura de tip „Harvard”

Microprocesoarele ce folosesc structura „Harvard” au memoria distribuită in spații de memorie separată pentru program si date. Astfel ele au bus-uri de date separate pentru fiecare tip de memorie, prelucrarea si executarea instrucțiunilor poate fi simultană, rezultând o scădere a timpului de execuție. Codul unei instrucțiuni poate fi luat din memorie în timpul executării operațiilor cu datele aferente instrucțiunii anterioare. Această arhitectură este standardă pentru procesoarele numerice de semnal (DSP).

2.4.3. Programarea microcontrolerului

Abilitatea de a cominca este tot mai importantă in orice domeniu. Această comunicare nu ar fi posibilă dacă amandoi partenerii nu ar cunoaște același limbaj. Limbajul pe care microcontrolerul si omul il folosesc pentru a cominca este numit limbaj de asamblare. Programele scrise în limbaj de asamblare trebuie traduse într-un limbaj de zero-uri și unu-uri pentru ca un microcontroler să-l înțeleagă.

Figura 2.13. Procesul comunicării dintre un om si microcontroler

Există mai multe categorii de limbaje care vor fi utilizate în programarea memoriei unui microcontroller.

– limbaje de generația I : limbaje cod – mașină

– limbaje de generația II : limbaje de asamblare

– limbaje de generația III : limbaje de nivel înalt

Pentru executarea unui program scris într-un limbaj oarecare, există, în principiu, două abordări: compilare sau interpretare. La compilare, compilatorul transformă programul sursă în totalitate într-un program echivalent scris în limbaj mașină, care apoi este executat. La interpretare interpretorul ia prima instrucțiune din programul sursă, o transformă în limbaj mașină și o execută; apoi trece la instrucțiunea două și repetă aceleași acțiuni.

Sunt multe tipuri de limbaje de asamblare cum ar fi: C++ , C, Visual Basic, Java, Java Script, Matlab, Pascal etc.

Pentru programarea microcontrolerului PIC16F690 am ales sa folosesc limbajul de asamblare C, utilizând programul MikroC.

Unitatea de memorie

Figura 2.14. Memoria microcontrolerului

Memoria este o parte a microcontrolerului a cărei funcție este de a înmagazina date. Astfel, instrucțiunile necesare pentru funcționarea sistemului trebuie înmagazinate într-o memorie nevolatilă, unde informațiile nu se pot pierde după oprirea tensiunii de alimentare.

Memoria este caracterizată prin 2 parametri de bază

– capacitatea (nr. de locații pe care le conține)

– latența (timpul de acces)

Memoria program este necesară imediat după resetarea sistemului. După inițializare se realizează o verificare a configurației hardware a microsistemului, teste de memorie ș.a.m.d.

Memoriile pot fi de diferite tipuri:

Memoria RAM (Random Acces Memory) – memorie care poate fi citită sau scrisă de CPU, volatilă. Aceasta ocupă mult spațiu și astfel costurile de implementare sunt mai mari

Memoria ROM (Read Only Memory) – este o memorie simplă și ieftină, utilizată pentru a stoca programele în faza de fabricație.

Memoria EPROM (Erasable PROM) – poate fi ștearsă prin expunere la raze UV. Memoria poate fi ștearsă și apoi rescrisă de un număr finit de ori.

EEPROM (Electrically Erasable Programmable ROM) – este un tip de memorie nevolatilă folosită în calculatoare și alte echipamente electronice pentru a stoca date ce trebuie să se păstreze și după întreruperea alimentării cu curent. Memoria EEPROM este formată dintr-o matrice de celule de memorie care, la rândul lor, sunt formate din perechi de tranzistori ce au între ei un strat subțire de oxid izolator. Un tranzistor este numit poartă flotantă (floating gate), iar celălalt poartă de control (control gate).

FLASH – memoria flash este o memorie electronică, nevolatilă care poate fi ștearsă si reprogramată. Memorile de tip flash au acees aleator.

Bus-ul

Figura 2.15. Bus-ul Microcontrolerului

El reprezintă un grup de 8, 16, sau mai multe fire. Sunt două tipuri de bus-uri:

-bus de adrese, este unidirecțional de tip tree state (TS).

-bus de date, este bidirecțional de tip tree state (TS).

Primul constă din atâtea linii cât este cantitatea de memorie ce dorim să o adresăm, iar celălalt este atât de lat cât sunt datele.

Bus-ul de adrese efectuează transmiterea de date de la CPU la memorie, iar bus-ul de date ajută la conectarea tuturor blocurilor din interiorul microcontrolerului.

Unitate intrare-ieșire

Figura 2.16. Unitatea I/O

Dispozitivele I/O sunt reprezentate de porturi pentru Unitatea Centrală. Acestea realizează un transfer serial sau paralel de date, operații de conversie analog/numerică, funcții speciale de comandă, etc. Există o gamă largă de dispositive de intrare/ieșire, care conduc operații generale de comunicație, funcții generale de timp (generare de semnal), operații de conversie analog-numerică, funcții de protecție, funcții speciale de comandă.

Unitatea timer

Figura 2.17. Unitatea timer

Timerul este un sistem integrat în microcontroler care are rolul de a măsura intervale de timp fixe și de a genera întreruperi la expirarea intervalului măsurat. Timer-ele nu sunt doar circuite cu funcții de temporizare. In modulul timer sunt implementate mecanisme care pun la dispoziția utilizatorului funcții specifice.

Functiile oferite de un timer sunt

Captura la intrare

Comparare la iesire

Intreruperi in timp real

Acumulare de pulsuri

Modulul PWM

Termenul de PWM vine din limba engleză de la Pulse Witdh Modulation și înseamnă că avem un semnal modulat în lătimea impulsurilor de comandă. Ca sa fiu mai explicit putem spune că un astfel de semnal PWM constă în codarea informației în lățimeă impulsului obținut.

Această metodă schimbă foarte rapid tensiunea oferită dispozitivului respectiv din ON în OFF și invers. Perioada de timp corespunzătoare valorii ON dintr-un ciclu ON-OFF se numește factor de umplere (duty cycle) și reprezintă, in medie, ce tensiune va primi dispozitivul electronic.

Astfel, se pot controla circuitele analogice din domeniul digital. Practic, asta înseamnă că un LED acționat astfel se va putea aprinde / stinge gradual, iar în cazul unui motor acesta se va învârti mai repede sau mai încet.

Factorul de umplere al unui semnal PWM se calculează cu relația D(fu)=Ti/T, unde Ti este durata impulsului și T perioada semnalului.

Principiul fundamental al PWM-ului spune că factorul de umplere a unui semnal PWM crește, iar puterea si tensiunea medie furnizate de PWM cresc în mod liniar.

Figura 2.18. Semnal PWM cu diferiți factori de umplere

Convertor analog-digital

Figura 2.19. Convertorul analog-digital

Convertorul analog-numeric este un circuit care trasformă un semnal analogic aplicat la intrarea sa într-unul digital, obținut la ieșire, prin intermediul proceselor de eșantionare și cuantizare.

Figura 2.20. Convertorul analog – numeric

Indiferent de tipul convertorului (cu comparare, tensiune timp, tensiune frecvență) mărimea analogică de la intrare este discretizată într-un număr de trepte. Acest număr de trepte este dat de numărul de biți pe care se obține rezultatul conversiei, adică 2N.

Treapta elementară q (cuanta) este cea mai mică valoare convertită diferită de zero.

unde: N= numărul de biți pe care se obține rezultatul

Astfel rezultă că două valori consecutive diferă între ele ca valoare cu „q”, cuanta reprezintând rezoluția convertorului.

Pentru a obține o rezoluție cât mai bună, q trebuie să fie cât mai mic. Valoarea lui N este însă invers proporțională cu valoarea lui q pentru aceeași tensiune de referință UR. Însă o data cu creșterea numărului de biți va crește și timpul necesar realizării conversiei.

Așadar trebuie făcut un compromis între precizie și viteza de realizare a conversiei în funcție de aplicație.

Schema bloc a modului A/D

Figura 2.21. Schema bloc a modului A/D

Schema microcontrolerului

Schema bloc a unui microcontroller este prezentată în figura urmatoare:

După cum se vede și în schemă, interiorul microcontrolerului este alcătuit dintr-o unitate centrală , un spațiu de memorie pentru programe, un spațiu de memorie pentru date, dispozitive I/O și un oscilator.

Figura 2.22. Schema bloc a microcontrolerului

2.5. Concluzii

Gestionarea parcărilor este tot mai importantă pe zi ce trece. Acest sistem pentru gestionarea parcărilor este foarte util deoarece putem sa lasăm mașina intr-un loc sigur, să scapăm de marile aglomerații din oraș. Dacă nu ar mai exista astfel de parcări, traficul ar fi foarte greu de suportat deoarece toată lumea v-a căuta un loc de parcare liber. Există parcări atât subterane cât și supra etajate.

Acest sistem generează si informații utile pentru șofer, dacă mai sunt locuri libere sau nu. Sunt multe parcări cu plată de tip RFID la care șoferul la sosire scanează un card de acces, iar la ieșire același card este scanat, de data aceasta pentru a putea fi plătită taxa de parcare.

Concluzia finală este că fară aceste parcări spațiul de pe străzi va fi tot mai puțin la dispoziție, fiecare șofer v-a căuta un loc de parcare inclusiv locuri improvizate, cum ar fi trotuarul pentru pietoni sau pistele de bicilete. De aceea un astfel de sistem pentru gestionarea unei parcări este foarte util.

CAPITOLUL 3. PROIECTAREA UNUI SISTEM DE MONITORIZARE A UNEI PARCĂRI

3.1. Configurația hardware

În continuare este prezentat proiectul fizic și schmea bloc a sistemului

Figura 3.1. Macheta proiectului

Figura 3.2. Schema bloc a sistemului

3.2. Microcontrolerul PIC16F690

Am ales să folosesc acest microcontroler pentru sistemul meu datorită numărului scăzut de pini(20 pini), costului redus și a consumului mic de curent. Este un microcontroller de la firma Microchip, pe 8 biți, cu 4 KBytes de memorie Flash și 256 Bytes memorie RAM. Este dotat cu 3 timere , unul de 16 biți și doua de 8 biți. Numărul pinilor de I/O este de 18, iar oscilatorul intern este de 8 MHz.

Generalități

-RISC CPU:

35 instrucțiuni single-word.

Toate instrucțiunile sunt „single-cycle”, exceptând instrucțiunile de salt (program branch) care sunt „two-cycle”.

Frecvența maximă de funcționare: DC – 20MHz clock input; DC – 200ns ciclul de instrucțiune.

Memorie program (flash) 4Kx14 words. 4K de cuvinte a câte 14 biți pentru codificarea instrucțiunilor, ceea ce înseamnă o memorie program de 7K.

Memorie de date (RAM) 256×8 bytes. Adică, 265 de bytes (octeți) a câte 8 biți fiecare, memorie folosită pentru salvarea variabilelor.

Configurația pinilor compatibilă fie pentru capsulă de 20 pini PDIP, fie pentru SOIC, SSOP și QFN.

-Periferice digitale:

Timer 0: 8-bit timer/counter cu pre-scalar pe 8 biți.

Timer 1: 16-bit timer/counter cu pre-scalar. Numărătorul (counter) poate fi incrementat și în modul Sleep.

Timer 2: 8-bit timer/counter cu registru de perioadă pe 8 biți, pre-scalar și post-scalar.

Două module Enhanced Capture/Compare/PWM: Capture pe 16 biți cu rezoluție maximă 12.5ns; Compare pe 16 biți cu rezoluție maximă 200ns; PWM cu rezoluție pe 10 biți și frecvență maximă de 20KHz.

Comunicare serial sincron prin SPI (Master mode sau Slave mode) și I2C (Master/Slave mode).

Comunicare serial asincron/sincron prin UART/SCI cu posibilitatea de detecție 9-bit address mode. Suportă modul RS-232, RS-485 și LIN2.0.

Memorie de date EEPROM 256×8 bytes. 256 de bytes a câte 8 biți pentru salvarea datelor in EEPROM.

Circuit de detecție Brown-out detection pentru Brown-out Reset (BOR).

-Periferice analogice:

Convertor analog-digital (A/D) pe 10 biți, pe 12 canale.

Brown-out Reset.

Două comparatoare analogice cu tensiune de referință programabilă și intrările selectabile printr-un multiplexor.

-Caracteristici specifice:

100.000 de cicli erase/write pentru memoria de program (flash).

1.000.000 de cicli erase/write pentru memoria de date EEPROM.

Memoria EEPROM menține datele nealterate (data retention) > 40 de ani.

Programare In-circuit-serial-programming (ICSP) via doi pini.

Necesită o singură tensiune de alimentare de 5V pentru ICSP.

Watch Dog Timer (WDT) cu propriul circuit de oscilație on-chip de tip RC.

Cod de protecție programabil.

Sleep mode pentru reducerea consumului de energie.

Diverse surse selectabile pentru oscilator.

In-circuit-debug (ICD) via doi pini.

Semnificația pinilor

În continuare este prezentat rolul fiecărui pin în parte.

Figura 3.3. Semnificația pinilor

Numărul total de pini este de 20, îl putem găsi în formă pătrată sau în formă dreptunghiulară cu cate 10 pini pe cele două laturi. Pentru proiectul meu am ales o capsulă de tip 20- pin PDIP(THT).

Pinul 1(VDD) – Alimentarea pozitivă

Pinul 2(RA5) – Pin general de intrare-ieșire / Intrare de ceas extern/ Oscilator RC.

Pinul 3(RA4) – Pin general de intrare-ieșire / Pin de ieșire frecventa Fosc/4.

Pinul 4(RA3) – Pin general de intrare-ieșire / Pin de RESET general cu pull-up intern.

Pinul 5(RC5) – Pin general de intrare-ieșire / Ieșire PWM.

Pinul 6(RC4) – Pin general de intrare-ieșire / Ieșire PWM.

Pinul 7(RC3) – Pin general de intrare-ieșire / Ieșire PWM.

Pinul 8(RC6) – Pin general de intrare-ieșire

Pinul 9(RC7) – Pin general de intrare-ieșire / Pin de ieșire date SPI.

Pinul 10(RB7) – Pin general de intrare-ieșire / Ieșire asincronă EUART.

Pinul 11(RB6) – Pin general de intrare-ieșire

Pinul 12(RB5) – Pin general de intrare-ieșire / Intrarea asincronă EUART.

Pinul 13(RB4) – Pin general de intrare-ieșire / Pin de date intrare/ieșire I2CTM.

Pinul 14(RC2) – Pin general de intrare-ieșire / Ieșire PWM.

Pinul 15(RC1) – Pin general de intrare-ieșire

Pinul 16(RC0) – Pin general de intrare-ieșire

Pinul 17(RA2) – Pin general de intrare-ieșire

Pinul 18(RA1) – Pin general de intrare-ieșire / Ceas pentru ICSP.

Pinul 19(RA0) – Pin general de intrare-ieșire / ICSP DATA I/O.

Pinul 2(VSS) – Pin general de intrare-ieșire

Diagrama bloc a microcontrolerului PIC16F690

În schema următoare este prezentată diagrama bloc a microcontrolerului PIC16F690. Diagramă în care putem observa în partea dreaptă porturile microcontrolerului. Mai exact portul A format din 6 pini I/O, portul B format din 4 pini I/O și portul C care este format din 8 pini I/O. Se observă și cele 3 timere prezentate mai sus, cât și convertorul analog-digital.

Figura 3.4. Diagrama bloc a microcontrolerului PIC16F690

3.3. Alimentarea sistemului

Figura 3.5. Alimentarea circuitului

Prin conectorul X1 alimentăm circuitul cu ajutorul unei baterii de 9V. Condensatorul C1 de 100n este folosit pentru filtrarea eventualelor spike-uri produse la inițializarea circuitului. Condensatorul C7 este folosit pentru filtrarea eventualelor spike-uri mari, iar C2 folosit pentru filtrearea intrării în microcontroler, iar pe placă este montat foarte aproape de pinul de alimentare al controlerului.

Regulator de tensiune LM7805

Regulatorul de tensiune se mai numește si stabilizator de tensiune deoarece ne permite să avem o tensiune pe care noi o dorim și care este și stabilă.

Deoarece in schemă este folosit si un microcontroler, tensiune pe microcontroler nu poate fi mai mare de 5V. Pentru acest motiv am ales sa folosesc acest regulator numit LM7805 care poate să scoată o tensiune stabilă la ieșire de la 5V până la 12V.

Semnificația pinilor

-pinul 1 este pinul de intrare (input) – 9 V

-pinul 2 este pinul de ground(GND)

-pinul 3 este pinul de ieșire(output) – 5V

Figura 3.6. Stabilizatorul LM7805

Curentul maxim de ieșire pana la 1 A

Tensiunea de ieșire de 5, 6, 8, 9, 10, 12, 15, 18, 24V

Protecție de scurt-circuit

Protecție la temperaturi ridicate

3.4. Sistem de monitorizare a puterii

Figura 3.7. Power monitoring system

Pentru a putea monitoriza în permanență tensiunea care o primește circuitul am recurs la un sistem de monitorizare a bateriei. Mai exact un divizor de tensiune care la ieșire mă ajută să primesc maxim 5V cât este limita microcontrolerului. Tensiunea de intrare este de 9V, iar valoarea celor doua rezistențe este de 10kΩ.

Am ajuns la această valoare pentru rezistențe cu ajutorul formulei divizorului de tensiune, care spune așa

adică

unde valoare tensiunii se modifică pe parcurs in funcție de cum se descarcă bateria. Pe scurt, dacă bateria scade atunci tensiunea către microcontroler scade și ea.

Figura 3.8. Tensiunea după divizor (9V)

Tensiunea de ieșire este transmisă microcontrolerului prin pinul CLK (pinul 18) care dacă nu mai primește tensiunea necesară îi transmite mai departe LCD-ului. Atunci când bateria este descărcată, pe ecranul LCD-ului va apărea un mesaj de genul „BATERIE DESCĂRCATĂ!”.

Pragul de tensiune minimă pe care l-am setat este de 7,2 – 7,1 V, tensiune la care sistemul se inchide si nu mai face nimic decât să afișeze pe LCD mesajul respectiv.

Figura 3.9. Tensiunea după divisor (7.1V)

3.5. Servomotor SG90

Acest servomotor are o rotație de 180 de grade , 90 de grade în ambele direcții. Este destul de simplu de comandat, cu ajutorul unui cod sursă. În acest cod generăm un semnal PWM care are perioada de 20ms, iar duty cycle de 1-2ms.

Figura 3.10. Servomotor

Date tehnice :

Tensiunea nominală : 5V

Viteza de rotație : 0.1s /60 grade

Greutate : 9

Pentru poziția din mijloc( 0 grade) duty-cycle este de 1.5ms

Pentru 90 de grade către partea dreaptă duty-cycle este de 2ms

Pentru 90 de grade către partea stangă duty-cycle este de 1ms

Figura 3.11. Semnalul PWM pentru servomotor

Pentru comanda servomotorului avem nevoie de semnalul PWM, semnal generat de timerul 1 care este de 16 biți și de timerul 2 care este pe 8 biți. Cele două timere au câte un registru separat pentru configurarea lor în limbajul de programare.

Registrul de control pentru timer 1

Bitul 7: T1GINV: Timer 1 gate invert bit

1= Timer 1 gate is active-high

0= Timer 1 gate is active-low

Bitul 6: TMR1GE: Timer 1 gate enable bit

1= Timer 1 counting is controlled by the timer 1

0= Timer 1 is always counting

Bitul 5-4: T1CKPS<1:0> Timer 1 clock prescaler

11= 1:8 prescaler

10= 1:4 prescaler

01= 1:2 prescaler

00 = 1:1 prescaler

Bitul 3: T1OSCEN

1= Oscilator enable for timer 1

0= Oscilator off

Bitul 2: T1SYNC: Timer 1 external clock input synchronization

1= Do not synchronize external clock

0= Synchronize external clock

Bitul 1: TMR1CS: Timer 1 clock source select

1= External clok from T1CKI

0= Internal clock (FOSC/4)

Bitul 0: TMR1ON

1= Enable timer1

0= Disable timer1

În codul sursă acest registru l-am setat initial pe 0 , deoarece folosesc un prescaler 1:1 și vreau să fie pornit după ce întreruperile si timerul 2 au fost pornite.

Registrul de control pentru timer 2

Bitul 7: neimplementat

Bitul 6-3: TOUTPS<3:0> Timer 2 output postscaler select

0000= 1:1 Prescaler

0001= 1:2Prescaler

0010= 1:3 Prescaler

0011= 1:4 Prescaler

0100= 1:5 Prescaler

0101= 1:6 Prescaler

0110= 1:7 Prescaler

0111= 1:8 Prescaler

1000= 1:9 Prescaler

1001= 1:10Prescaler

1010= 1:11 Prescaler

1011= 1:12 Prescaler

1100= 1:13Prescaler

1101= 1:14 Prescaler

1110= 1:15Prescaler

1111= 1:16Prescaler

Bitul 2: TMR2ON

1= Timer 2 on

0= Timer 2 off

Botul 1-0: T2CKPS<1:0> Timer 2 clock presclare select

00= prescaler=1

01=prescaler=4

1x=prescaler=16

În program, configurația pentru acest registru este următoarea

T2CON=0b00000011;

Timer 2 este setat pe on, iar prescaler-ul este de 16.

3.6. Fototranzistorul SFH300FA ¾

Figura 3.12. Fototranzitor

Caracteristici

– Sensibilitatea spectrală:730 -1120 nm

– Tensiunea colector-emitor: 35 V

– Curent colector: 50 mA

Figura 3.13. Sensibilitatea spectrală a fototranzistorului

Acest fototranzistor se poate folosi în industria electronică, în comanda si acționarea circuitelor electrice. Se mai folosește si pe post de întrerupere. Această întrerupere se poate realiza cu ajutorul unui LED infraroșu care emite semnalul, iar fototranzistorul recepționează semnalul. Pentru o funcționare bună, LED-ul trebuie să aibă sensibilitatea spectrală între limitele fototranzistorului 730 – 1120 nm.

Tipul LED-ului: LL-503SIRC2E-2AE

Caracteristicile LED-ului:

– Sensibilitatea spectrală: 940 nm

– Curentul de trecere maxim: 100mA

– Unghiul de vizualizare: 20°

Figura 3.14. Sensibilitatea spectrală a LED-ului și raportul curent/tensiune

Pentru sistemul creat de mine, am folosit această combinație pentru detectarea mașinilor înainte de bariere , atât bariera de la intrare cât și cea de la ieșire. Atât timp cât LED-ul emite semnal înseamnă că nu detectează nimic, iar fototranzistorul este activ și conectat la masă.Deci, pe pinul setat la microcontroler avem 0 logic. Dacă fototranzistorul nu mai primește semnal de la LED, atunci senzorul este întrerupt. Când senzorul detectează mașina, fototranzistorul este tras la 5 V cu ajutorul unei rezistențe de pull-up de 10k Ω .

De asemenea acest tip de senzor format dintr-un LED și un fototranzistor l-am folosit și după bariere. Am făcut această alegere pentru siguranță, mai exact pentru a nu se închide bariera decât atunci când mașina a trecut de acest senzor. Atât timp cât semnalul emis este intrerupt bariera ramâne ridicată, până în momentul în care fototranzistorul recepționează din nou semnalul de la LED, moment în care bariera poate să revină la starea inițială, adică coborâtă. După ce bariera este coborâtă, pe ecranul LCD-ului numărul locurilor libere din parcare o să scadă. Acest lucru se repetă și la ieșirea din parcare, doar că după ce bariera este coborâtă, numarul locurilor libere din parcare o să crească.

LED

Acest LED l-am ales pentru iluminare de fiecare dată când sistemul senzor-servomotor este în funcțiune. Mai exact de fiecare dată când vine sau pleacă o mașină din parcare. Este un LED simplu de culoare verde ce are căderea de tensiune de 2,1 V. Acesta este alimentat cu 5 V, curentul prin led este de 7mA , iar rezistența am calculat-o cu ajutorul legii lui OHM.

3.7. Sistemul display

Figura 3.15. Afisaj alphanumeric

Pentru proiectul gândit de mine am ales să folosesc un afișaj alphanumeric 16×2. Acest Lcd este alcătuit din 16 pini cu următoarele specificații:

Pinul 1(GND) –Ground.

Pinul 2(VCC) –Alimentare pozitivă.

Pinul 3(VO) –Contrast.

Pinul 4(RS) –Register Select.

Pinul 5(R/W) –Read/Write.

Pinul 6(E) –Enable.

Pinul 7(D0) –Data bit 0.

Pinul 8(D1) –Data bit 1.

Pinul 9(D2) – Data bit 2.

Pinul 10(D3) –Data bit 3.

Pinul 11(D4) –Data bit 4.

Pinul 12(D5) – Data bit 5.

Pinul 13(D6) –Data bit 6.

Pinul 14(D7) – Data bit 7.

Pinul 15(A) –Anode

Pinul 16(K) –Katode

După cum se observă in schema electrică, R1 este o rezistență variabilă cu ajutorul căruia vom regla contrastul ecranului.

Acest LCD oferă o posibilitate de manipulare a luminii ambientale a acestuia prin pinul 15 si 16 respectiv Anode si Katode. Datorită faptului că alimentarea întregului circuit este dată de o baterie de 9 V am decis să fac un sistem de power saving pentru lumina ambientală a LCD-ului. Pentru acest sistem voi folosi un tranzistor PNP (T6) după cum se observă in schema electrică și un fotorezistor LDR07 pentru prezența luminii.

Tranzistorul T6 este alimentat prin Emitor cu 5 V , iar Colectorul este conectat la pinul + (Katode) al LCD-ului. Baza transistorului este conectată la pinul 11 al microcontrolerului.

Fotorezistorul LDR07 este folosit pentru prezența luminii. În circuit fotorezistorul este conectat la pinul 12 al microcontrolerului,pin care beneficiază de convertor ADC.Valoarea masurată de fotorezistor este transmisă microcontrolerului cu ajutorul convertorului ADC.

Atât timp cât avem prezentă lumina soarelui, cu ajutorul fotorezistorului LDR07 și a tranzistorului T6 lumina ambientală a LCD-ului este oprită. Când lumina soarelui dispare atunci lumina ambientală a LCD-ului este aprinsă.

Acest sistem de Power Saving ajută foarte mult deoarece elimină consumul mare de curent. Dacă lumina ambientală a LCD-ului este aprinsă mereu consumul este unul destul de mare pentru intreg circuitul și mai ales pentru bateria de 9 V care s-ar epuiza foarte repede.

Pentru configurarea convertorulului analog / digital folosit de microcontrolerul PIC16F690 trebuie să avem în vedere anumite criterii

– configurarea portului

– canalul selectat

– selecția tensiunii de referință

– controlul intreruperilor

Diagrama bloc a convertorului analog – digital

Convertorul analog-digital permite conversia unui semnal analogic într-un semnal reprezentat pe 10 biți. Modulul de conversie folosește intrări analogice, intrări care sunt multiplexate într-un singur circuit după cum se vede și în figura de mai sus. Convertorul generează un rezultat binar de 10 biți prin aproximări successive și stochează rezultatul conversiei în regiștrii ADRESL și ADRESH.

Modulul ADC poate fi folosit atât pentru conversia semnalelor analogice cât și a semnalelor digitale. Atunci când se realizează conversia analogică, dispozitivele I/O trebuie configurate pentru semnal analogic prin setarea registrului TRIS și ANSEL.

Registrul ANSEL

Bitul 7-0: ANS<7:0> analog select bit

1 = intrare analogică

0 = digital I/O

Registrul ANSELH

Bitul 7-4: neimplementați , setați ca 0

Bitul 3-0: ANS<11:8> analog select bit

1= intrare analogical

0 = digital I/O

În codul sursă acești regiștri au urmatoarea configurație :

ANSEL = 0b00000010; deoarece AN1 corespunde cu pinul RA1, pin unde este conectată ieșirea de la divizorul de tensiune.

ANSELH = 0b00001000; deoarece AN11 corespunde cu pinul RB5, pin care este conectat la fotorezistor.

3.8. Realizarea layoutului

Pornind de la schema electrică anterior prezentată, s-a realizat proiectarea layoutului urmat de realizarea cablajului. Pentru a fi cât mai robust si ușor de realizat, am ales proiectarea pcb-ului in două straturi, Top si Bottom. Fiind componente sensibile, traseele trebuie sa fie cât mai scurte, pentru a nu apărea inductanțe parazite. Componentele trebuie amplasate dupa specificațiile oferite de producător, funcționând totul corespunzător.

Atunci când realizăm un cablaj trebuie să ținem cont de unele aspecte. În primul rând trebuie stabilite dimensiunile fizice ale plăcii și forma acesteia. Apoi urmează plasarea componentelor pe blocuri funcționale și trasarea planului de masă. După o să rutăm componentele urmărind schematicul, iar dacă amplasarea componentelor se face cât mai profesional, rutarea merge foarte repede.

Figura 3.16. Stratul de top și bottom

Figura 3.17. Stratul de top

Figura 3.18. Stratul de bottom

3.8.1. Realizarea cablajului

Pentru realizarea fizică, cablajul va fi expus la ultraviolet (UV). După realizarea layout-ului în programul de proiectare Eagle, acesta se printează pe o hârtie de retroproiector (transparentă), stratul de sus (top) este listat in oglindă (mirror), iar stratul de jos este printat normal.

Se decupează foaia transparentă și se suprapune peste cablajul dublu strat cu fotorezist, apoi se expune la stația UV. Expunerea se face pe rând, începând cu top-ul, timpul de expunere este de 6 minute pentru fiecare strat.

Figura 3.19. Stație de expunere UV

După terminarea procesului de expunere, placuța trebuie developată. Se folosește o soluție ce are în componență sodă caustică și apă.

Ultimul pas este corodarea, aici placuța este introdusă în clorură ferică și se lasă până aceasta este gata.

Figura 3.20. Recipient sodă

Figura 3.21. Clorură ferică

După ce placuța este corodată, aceasta se curată cu un alcool izopropilic, pentru îndepărtarea stratului de fotorezist, apoi se dă cu un smirghel foarte fin, pentru înlăturarea porozităților. Mai departe se dau găurile pentru fixarea componentelor.

Figura 3.22. Rezultatul după corodare

Programarea sistemului

Pentru început am ales să fac o schemă bloc a programului ce v-a fi scris în microcontroler.

Schema bloc este descrisă mai jos

Figura 3.23. Schema bloc a programului

După cum se vede și în schemă, programul începe cu inițializarea microcontrolerului, a LCD-ului și automat a întregului circuit. Primul pas este acela de a măsura tensiunea circuitului. Dacă este mai mică de 7.1 V atunci apare pe ecranul display-ului mesajul BATERIE DESCĂRCATA! , și circuitul este oprit. Următorul pas este acela de ai transmite LCD-ului dacă aprinde sau nu lumina. Acest lucru se realizează cu ajutorul fotorezistorului LDR07 și al convertorului analog – digital care convertește valoarea măsurată de fototranzistor . Dacă afară este lumină atunci lumina LCD-ului este stinsă, iar dacă este întuneric atunci lumina LCD-ului se aprinde. Următorul pas este detectarea mașinii atât la intrarea în parcare cât și la ieșirea din parcare. Dacă este detectată mașina, bariera se va ridica. Se așteaptă ca mașina să treacă de zona de siguranță, iar apoi bariera se închide, iar pe ecran locurile libere de parcare cresc sau descres. Dacă mașina nu a trecut de zona de siguranță bariera rămâne ridicată. În cazul în care nu este detectată nici o mașină, circuitul intră într-o buclă de așteptare până detectează senzorul o mașină. Acest cod l-am scris în programul MikroC, program ce este foarte cunoscut în domeniul microcontrolerelor. În continuare am să explic cum am realizat proiectul în acest program.

Am început cu un proiect nou astfel.

Din bara de meniu am selectat Project–> New project–>Next

Figura 3.24. Proiect nou

După ce am dat Next , trebuie să facem câteva setări cum ar fi numele proiectului, folderul unde v-a fi salvat proiectul, dar și numele microcontrolerului care îl folosim și frecvența.

Figura 3.25. Setări proiect

După ce am facut setările necesare și am dat Next, următorul pas ne întreabă dacă vrem să adăugăm alte fișiere proiectului. Dacă nu avem nimic de adăugat apăsăm butonul Next.

Figura 3.26. Setări proiect 2

Următorul pas este de a include librăriile , avem de ales două variante. Să includem toate librăriile sau să nu include nimic. Bifăm să adăugăm toate librăriile și dăm Next.

Figura 3.27. Adăugarea librăriilor

Ultimul pas ne spune dacă proiectul a fost finalizat cum trebuie. Apăsăm Finish și putem scrie codul sursă.

Figura 3.28. Finalizare proiect nou

După ce am scris codul sursă pentru microcontroler, programul a generat un fișier de tip HEX. Acest fișier l-am importat în programul Mplab IPE v3.20 pentru a putea fi programat microcontrolerul cu ajutorul programatorului PICKIT 3.

Figura 3.29. Programul Mplab IPE și Pickit 3

APLICAȚII ȘI EXPERIMENTE

Un prim experiment efectuat asupra sistemului meu a fost acela de a măsura cu ajutorul osciloscopului, semnalul PWM pentru servomotoare, atât la coborârea barierei cît și la urcarea acesteia.

Figura 4.1. Semnal PWM pentru bariera în coborâre

Figura 4.2. Semnal PWM pentru bariera în urcare

Următoarea măsurătoare pe care am efetuat-o pe circuitul realizat de mine a fost pe fototranzistorul LDR07 pentru a vedea trecerea de la lumină la întuneric.

Figura 4.3. Semnal fotorezistor

Semnalul cu roșu este semnalul măsurat pe fototranzistor atunci când acesta nu vede lumina, adică este întuneric. Celălalt semnal, cel cu albastru este semnalul generat când fototranzistorul detectează lumina.

După cum se observă în figură, când este întuneric este un semnal sinosidal, iar când este lumină semnalul este continuu.

Un ultim experiment efectuat pe acest circuit a fost vizualizarea semnalului de trecere a fototranzistorului din 1 în 0 logic. Adică atunci când recepționează semnalul de la LED și atunci când acest semnal este intrerupt de o mașină.

Figura 4.4. Semnal fototranzistor

Când semnalul este 0 atunci fototranzistorul recepționeză semnalul de la LED, iar când semnalul este 1 adică 5 V datorită rezistenței de pull-up , semnalul este interrupt de mașină.

CONCLUZII

Scopul acestui proiect, mai exact al sistemului de monitorizare a unei parcări auto a fost atins. Proiectul în sine a fost o adevărată provocare pentru mine deoarece este primul proiect de dimensiunea asta, iar pentru a-l realiza m-am confruntat cu probleme legate atât de parte hardware cât și cea software. Am fost pus în dificultate deoarece a trebuit să modific sistemul de alimentare al circuitului, în loc de bateria de 9 V am folosit o sursă de tensiune continuă. Am recurs la această alegere pentru că, circuitul consumă un curent destul de mare , curent la care nu mă așteptam.

Pot spune că realizarea fizică a proiectului a decurs binișor, a fost finalizat în timpul pe care mi l-am propus, iar costul total pentru partea practică a fost unul destul de mic aproximativ 100 lei.

Am întâmpinat probleme la realizarea fizică a cablajului, mai exact la partea corodării cablajului unde am fost nevoie să schimb 2 plăcuțe.

Cunoștințele mele în legătură cu dispozitivele care le-am folosit pentru realizarea sistemului au fost îmbunătățite datorită acestui proiect. La finalizarea proiectului, abilitatea de lucru în programele folosite cum ar fi Eagle sau MikroC a crescut față de început. În programul Eagle am realizat atât schema electrică cât și layoutul, iar codul sursă a fost scris în MikroC. Cu ajutorul unui site pentru scheme bloc am reușit să alcătuiesc schema bloc a sistemului, dar și schema bloc a programului.

Ca dezvoltare ulterioară, sistemul de monitorizare a parcării auto poate fi realizat și la scală mare, cu mici modificări în alegerea componentelor și a alimentării acest sistem poate fi folosit în viața reală. Adăugarea unui sistem RFID ar putea funcționa în combinație cu proiectul creat de mine.

Tabel de figuri

Figura 1.1. Barieră de acces cu cartelă 4

Figura 1.2. Parcare cu senzori pentru fiecare loc 4

Figura 1.3. Detecția mașinii 5

Figura 1.4. Detecția, butonul și motorul în acțiune 5

Figura 1.5. Zona de siguranță și afișarea locurilor 6

Figura 2.1. Principiul unui senzor inductiv 11

Figura 2.2. Semnalul unui senzor inductiv 12

Figura 2.3. Principiul unui senzor capacitiv 12

Figura 2.4. Semnalul unui senzor capacitiv 13

Figura 2.5. Senzor magnetic 14

Figura 2.6. Senzor magnetic REED 14

Figura 2.7. Senzor cu fascicol luminos 15

Figura 2.8.Senzor retroreflexiv 16

Figura 2.9. Senzor de difuzie 16

Figura 2.10. FT = Tranzistor + Fotodiodă 17

Figura 2.11. Servomotor 18

Figura 2.12. Microcontroler PIC16F690 SMD(stânga) și THT(dreapta) 20

Figura 2.13. Procesul comunicării dintre un om si microcontroler 22

Figura 2.14. Memoria microcontrolerului 23

Figura 2.15. Bus-ul Microcontrolerului 24

Figura 2.16. Unitatea I/O 25

Figura 2.17. Unitatea timer 25

Figura 2.18. Semnal PWM cu diferiți factori de umplere 27

Figura 2.19. Convertorul analog-digital 27

Figura 2.20. Convertorul analog – numeric 27

Figura 2.21. Schema bloc a modului A/D 28

Figura 2.22. Schema bloc a microcontrolerului 29

Figura 3.1. Macheta proiectului 30

Figura 3.2. Schema bloc a sistemului 30

Figura 3.3. Semnificația pinilor 32

Figura 3.4. Diagrama bloc a microcontrolerului PIC16F690 34

Figura 3.5. Alimentarea circuitului 35

Figura 3.6. Stabilizatorul LM7805 36

Figura 3.7. Power monitoring system 36

Figura 3.8. Tensiunea după divizor (9V) 37

Figura 3.9. Tensiunea după divisor (7.1V) 38

Figura 3.10. Servomotor 39

Figura 3.11. Semnalul PWM pentru servomotor 39

Figura 3.12. Fototranzitor 42

Figura 3.13. Sensibilitatea spectrală a fototranzistorului 43

Figura 3.14. Sensibilitatea spectrală a LED-ului și raportul curent/tensiune 44

Figura 3.15. Afisaj alphanumeric 46

Figura 3.16. Stratul de top și bottom 50

Figura 3.17. Stratul de top 51

Figura 3.18. Stratul de bottom 52

Figura 3.19. Stație de expunere UV 53

Figura 3.20. Recipient sodă 53

Figura 3.21. Clorură ferică 54

Figura 3.22. Rezultatul după corodare 54

Figura 3.23. Schema bloc a programului 55

Figura 3.24. Proiect nou 56

Figura 3.25. Setări proiect 56

Figura 3.26. Setări proiect 2 57

Figura 3.27. Adăugarea librăriilor 57

Figura 3.28. Finalizare proiect nou 58

Figura 3.29. Programul Mplab IPE și Pickit 3 58

Figura 4.1. Semnal PWM pentru bariera în coborâre 59

Figura 4.2. Semnal PWM pentru bariera în urcare 59

Figura 4.3. Semnal fotorezistor 60

Figura 4.4. Semnal fototranzistor 61

Bibliografie

[1] ADRIAN DUMITRU – Bazele sistemelor mecatronice, Universitatea „Transilvania” din Brașov catedra de mecanică fină și mecatronică, 2006

[2] ADRIAN FLOREA – Notițe curs, Arhitectura microprocesoarelor, Sibiu, 2015

[3] CRĂCIUNAȘ GABRIELA – Notițe curs, Servomotoare, Sibiu, 2015

[4] IOAN P. MIHU – Dispozitive și circuite electronice, Volumul I,II, Editura Alma Mater, Sibiu, 2004

[5] ILIE BERILIU – Microcontrolere Aplicații, Editura Universitatii „ Lucian Blaga” Sibiu, Sibiu, 2008

[6] ILIE BERILIU – Notițe curs, Microcontrollere, Sibiu, 2015

[7] LAUREAN BOGDAN – Notițe curs, Automatizari, Sibiu, 2016

[8] LUCIAN N. VINȚAN – Notițe curs, Sisteme incorporate, Sibiu, 2016

[9] MILAN VERDE – Pic Microcontrollers-Programming in basic,Editura Mikroelectronika, 2010

[10] NEBOJSA MATIC – The Pic Microcontroller, Editura Mikroelectronika, 2000

[11] NISTOR FLAVIUS, TUDOR ORLANDEA – Sisteme incorporate in exemple simple, Editura Universitatii „ Lucian Blaga” Sibiu, Sibiu, 2012

[12]https://ro.wikipedia.org/wiki/PLC

[13]http://www.robotics.ucv.ro/flexform/aplicatii/ite/Popescu%20Cristiana%20-%20Evidenta%20automata%20a%20locurilor%20intr-o%20parcare/programarea%20PLC.html

[14]http://www.electromatic.ro/senzori/item/31-senzorideproximitate

[15]https://en.wikipedia.org/wiki/Sensor

[16]https://en.wikipedia.org/wiki/Photodiode#Other_modes_of_operation

[17]https://en.wikipedia.org/wiki/Pulse-width_modulation

[18]https://learn.sparkfun.com/tutorials/pulse-width-modulation

[19]http://blog.proembsys.in/microcontroller-based-automatic-car-parking-system/

[20]https://www.scribd.com/doc/93204860/SERVOMOTOARE-ELECTRICE

[21]https://ro.wikipedia.org/wiki/Microcontroler

[22]http://web.ulbsibiu.ro/laurean.bogdan/html/Microcontrolere%20introducere.pdf

[23]http://webspace.ulbsibiu.ro/lucian.vintan/html/Organizarea.pdf

[24]https://ro.wikipedia.org/wiki/Memorie_flash

[25]https://ro.wikipedia.org/wiki/EEPROM

ANEXE

Schema electrică

Codul sursă

// LCD module connections

sbit LCD_RS at RA2_bit;

sbit LCD_EN at RC7_bit;

sbit LCD_D4 at RC5_bit;

sbit LCD_D5 at RC4_bit;

sbit LCD_D6 at RC6_bit;

sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISA2_bit;

sbit LCD_EN_Direction at TRISC7_bit;

sbit LCD_D4_Direction at TRISC5_bit;

sbit LCD_D5_Direction at TRISC4_bit;

sbit LCD_D6_Direction at TRISC6_bit;

sbit LCD_D7_Direction at TRISB7_bit;

// End LCD module connections

// Servomotors

#define SERVO_1 RC3_bit

#define SERVO_2 RC2_bit

// Setting value for motor open or close

#define OPEN 125

#define CLOSE 240

// Button

#define BUTTON RA3_bit

// IR led and phototranzistor

#define DET_IN RA4_bit

#define SIG_IN RC0_bit

#define DET_OUT RA5_bit

#define SIG_OUT RC1_bit

// LCD light

#define LCD_light RB6_bit

// IR LEDS

#define SENSORS RA0_bit

// Green Led

#define LED RB4_bit

#define BUTTON_PRESS 0

#define SENSOR_ACTIVE 1

#define ON 1

#define OFF 0

// Setting photorezistor value

#define LIGHT 500

// Setting parking slots

#define MAX_CARS 8

// Declaring variables

const char character[] = {8,12,14,15,14,12,8,0};

unsigned char ascii[16];

unsigned char servo = 0;

unsigned char servo_status[2] = {CLOSE, CLOSE};

unsigned int cars = 0;

unsigned char in_busy = 0;

unsigned char out_busy = 0;

// Function for checking battery

void CheckBatt()

{

if(ADC_get_sample(1) <= 723)

{

GIE_bit=0;

PEIE_bit=0;

TMR1ON_bit=1;

TMR2ON_bit=1;

LCD_Cmd(_LCD_CLEAR);

LCD_Out(1, 1, "Baterie");

LCD_Out(2, 1, "descarcata!");

}

}

// Function for servomotors

void motor_control(char motor, char angle)

{

char i;

servo = motor;

if(angle > servo_status[motor-1])

for(i=servo_status[motor-1]; i<angle; i++)

{

PR2 = i;

Delay_ms(10);

}

else

for(i=servo_status[motor-1]; i>angle; i–)

{

PR2 = i;

Delay_ms(10);

}

servo_status[motor-1] = angle;

servo = 0;

}

void init()

{

// Frequency setup at 8 MHz

IRCF0_bit = 1;

IRCF1_bit = 1;

IRCF2_bit = 1;

// Setting analog registry

ANSEL = 0b00000010; // Setting bit 1 analog

ANSELH = 0b00001000; // Setting bit 11 analog

TRISC = 0b00000011; // Setting input/output port C

TRISA = 0b11111110; // Setting input/output port A

TRISB = 0b00101111; // Setting input/output port B

TMR1H=0x63;

TMR1L=0xC0;

T1CON=0; // Timer 1 off

TMR1IF_bit=0; // Timer 1 interrrupt flag 0

TMR1IE_bit=1; // Timer 1 interrrupt enable 1

PR2=240; // Registrul PR2 fot servomotors

T2CON=0b00000011; // Timer 2 on and prescaler 16

TMR2IF_bit=0; // Timer 2 interrrupt flag 0

TMR2IE_bit=1; // Timer 2 interrrupt enable 1

GIE_bit=1; // Global interrupt enable 1

PEIE_bit=1; // Peripheral interrupt enable 1

TMR1ON_bit=1; // Timer 1 on

TMR2ON_bit=1; // Timer 2 on

ADC_init(); // ADC initialization

LCD_init(); // LCD initialization

Lcd_Cmd(_LCD_CLEAR);

Lcd_Cmd(_LCD_CURSOR_OFF);

servo = 3;

Delay_ms(2000);

servo = 0;

}

void interrupt() // Interruptions

{

{

TMR1L = 0xC0;

TMR1H = 0x63;

switch(servo)

{

case 1: SERVO_1 = 1; SERVO_2 = 0; break; // Servo 1 open , servo 2 close

case 2: SERVO_1 = 0; SERVO_2 = 1; break; // Servo 1 close , servo 2 open

case 3: SERVO_1 = 1; SERVO_2 = 1; break; // Servo 1 open , servo 2 open

}

TMR1IF_bit = 0; // Timer 1 interrrupt flag 0

TMR2ON_bit=1; // Timer 2 on

}

if ((TMR2IE_bit == 1) && (TMR2IF_bit==1))

{

SERVO_1 = 0; // Servo close

SERVO_2 = 0; // Servo close

TMR2ON_bit=0; // Timer 2 off

TMR2IF_bit=0; // Timer 2 interrrupt flag 0

}

}

void main()

{

init();

SENSORS = ON; // IR LEDS ON

LCD_Out(1, 1, "Locuri libere:"); // Displaying free slots

while(1)

{

CheckBatt(); // Checkbatt funtion call

// ADC fotorezitor to LCD

if(ADC_get_sample(11) < LIGHT)

LCD_light = ON;

else

LCD_light = OFF;

// Display free slots on row 2

inttostr(MAX_CARS – cars, ascii);

LCD_Out(2, 1, ascii);

// exit module parking

if(cars < MAX_CARS)

{

if((DET_IN == SENSOR_ACTIVE) && (BUTTON == BUTTON_PRESS) && (servo_status[1] == CLOSE))

{

LED = ON;

motor_control(2, OPEN);

in_busy = 1;

}

if((SIG_IN == SENSOR_ACTIVE) && (in_busy == 1))

in_busy = 2;

if((SIG_IN != SENSOR_ACTIVE) && (in_busy == 2))

{

cars++;

motor_control(2, CLOSE);

LED = OFF;

in_busy = 0;

}

}

// Parking entrance module

if(cars > 0)

{

if((DET_OUT == SENSOR_ACTIVE) && (servo_status[0] == CLOSE))

{

LED = ON;

motor_control(1, OPEN);

out_busy = 1;

}

if((SIG_OUT == SENSOR_ACTIVE) && (out_busy == 1))

out_busy = 2;

if((SIG_OUT != SENSOR_ACTIVE) && (out_busy == 2))

{

cars–;

motor_control(1, CLOSE);

LED = OFF;

out_busy = 0;

}

}

// Free slots 0 , parking is full

if(MAX_CARS – cars == 0)

LCD_Out(1, 1, "Parcare ocupata!");

else

LCD_Out(1, 1, "Locuri libere: ");

}

}

Similar Posts