Fotodetectori Pentru Detectie Perimetrala In Caz de Efractie

Fotodetectori pentru detecție perimetrală în caz de efracție

Proiect de diplomă

Cuprins

Listă tabele

Listă figuri

Introducere

Proiectul de față propune studiul soluțiilor existente pentru realizarea unui sistem de detecție perimetrală cu ajutorul fotodetectorilor. Perimetrul este un prim inel de detecție a intrușilor. Detecția încercărilor de pătrundere ilegală în obiectiv permite reacția în timp util a proprietarului sau a forțelor de intervenție, înainte ca intrusul să își poată atinge obiectivul.

Studiile recente indică o creștere a ratei efracțiilor în locuințe peste tot de-a lungul globului. Amenințările existente în lumea de astăzi conduc la dezvoltarea unor soluții de securitate din ce în ce mai sofisticate, iar în scopul de a asigura funcționarea atât în condiții meteorologice dificile, cât și în cazul unor evenimente neprevăzute, uneori se folosesc sisteme bazate pe principii diferite de detecție(pentru a nu ieși simultan din funcțiune). Datorită scăderii nivelului securității, a devenit aproape necesară utilizarea unui sistem personal de protecție, fiind cel mai eficient mod de a proteja proprietatea individului.

Am ales această temă deoarece îmbină două domenii ce prezintă un interes ridicat pentru mine, într-un mod pe care îl consider plăcut și practic. Abordarea acesteia a fost realizată cu plăcere, reușind la final să aprofundez optoelectronica și să îmi dezvolt cunoștințele legate de programarea microcontrollerelor. Pe parcursul acestei lucrări vom discuta în linii mari despre proprietățile generale ale fotodetectorilor, fotoconductivitate, fotorezistori, fotodiode, diode laser, noțiuni de bază despre sisteme de detecție perimetrală și microcontrollere, intrând în detaliu în cazul fototranzistorilor.

Conceptele folosite nu sunt nici pe departe noi, având în vedere că există alte variante de realizare mai performante, însă soluția constructivă aleasă, fiind una ieftină și cu toate acestea, fiabilă și eficientă, va îndeplini funcția dorită cu succes. Trebuie precizat că microcontrollerul folosit în modulul electronic de comandă(centrala de alarmă) lasă loc unei dezvoltări/îmbunătățiri ulterioare a sistemului, despre care vom discuta mai târziu.

Sistemul de detecție va fi alcătuit dintr-un număr de patru bariere optice, folosind drept emițătoare diode laser ce emit lumină roșie, iar ca receptoare, fototranzistori. Când un fascicul emis de către o diodă laser este întrerupt, centrala de alarmă va primi semnalele de la dispozitivele din teren și va anunța proprietarul prin intermediul unei avertizări sonore. Pe display-ul LED se va indica ce barieră a declanșat alarma, precum și momentul la care a avut loc evenimentul. Se vor memora evenimentele ce au avut loc în ultimele 48 ore.

Alegerea fototranzistorilor drept element receptor a fost făcută datorită faptului că aceștia elimină necesitatea alimentării la o tensiune ridicată, sunt mai puțin sensibili la fluxul luminos de fond și sunt o soluție ieftină pentru detecție în apropierea spectrului infraroșu.

Chiar dacă fasciculele laser emise sunt vizibile ochiului uman, fiind totuși aproape de spectrul infraroșu, aplicabilitatea montajului este una ridicată. Pentru a utiliza la maxim potențialul oferit și pentru obținerea unor rezultate optime, acesta va putea fi folosit atât drept sistem de alarmă antiefracție (de exemplu activându-se atunci când este deschisă o ușă, în spatele căreia este montată una dintre bariere), fie în diverse scopuri de monitorizare. Adaptarea sistemului la nevoile individului se poate face ușor, software-ul de programare al microcontrollerului fiind unul relativ ușor de utilizat, iar dimensiunea barierelor putând fi modificată fără a conduce la probleme cum ar fi detecția eronată atât timp cât se respectă aliniamentul emițător-receptor.

GOL

CAPITOLUL 1. Noțiuni teoretice

1.1 Fotodetectori

Fotodetectorii sunt senzori de lumină sau energie electromagnetică. Rolul acestora în sistemele optice de comunicație și detecție a căpătat o importanță din ce în ce mai mare odată cu trecerea timpului. Mecanismul fizic care definește un fotodetector este absorbția fotonilor. Acest fenomen va produce schimbări ale proprietăților electrice ale sistemului electronic (generare de fotocurent într-un fotoconductor sau generare tensiune într-un detector fotovoltaic). În funcție de transportul purtătorilor, al interacției cu sistemul de circuite, sau al procesului de absorbție optică, performanțele unui fotodetector pot varia. [1]

Cele trei procese de bază realizate de către un fotodetector sunt:

generarea purtătorilor de sarcină folosind lumina incidentă

transportul purtătorilor și/sau multiplicarea acestora

extracția purtătorilor sub formă de curent de ieșire

Fotodetectorii sunt importanți în aplicațiile ce utilizează spectrul 0.8 – 1.6 μm. Aceștia demodulează semnalele optice, adică transformă variațiile optice în variații electrice, ce sunt apoi amplificate și prelucrate. [2]

Tipuri de fotodetectori

Există mai multe tipuri de fotodetectori, divizate în două clase – detectori termici si detectori fotonici. În cazul detectorilor termici, temperatura crește atunci când lumina cade pe suprafața lor detectoare. Tehnic vorbind, funcționează ca niște senzori termici. Detectorii fotonici se bazează pe efectul fotoelectric cuantic – un foton excită un purtător de sarcină, ce va contribui la fotocurent.

Senzori cu pixeli activi (APS) – Folosiți in procese CMOS și cunoscuți sub numele de senzori CMOS de imagine. Aceștia sunt folosiți adesea în camerele telefoanelor mobile, camerelor web, precum și in unele aparate foto DSLR

Senzori CCD – Folosiți pentru înregistrarea imaginilor în astronomie, fotografie digitală etc.

Detectoare de particule – Folosite în fizica experimentală a particulelor, pentru identificarea și urmărirea comportamentului particulelor elementare

Detectori criogenici – Suficient de sensibili pentru a măsura energia unei singure raze X, a fotonilor vizibili/din spectrul infraroșu

LED-uri – Folosite drept fotodiode. Aplicațiile in care pot fi folosite sunt detecția luminii ambientale si comunicațiile bidirecționale

Detectori optici

-dispozitive cuantice, care presupun producerea unui efect discret de către un foton individual.

-termometre, care răspund la efectul de incălzire produs de radiație(bolometre, detectori piroelectrici, celule Golay, termocupluri, termistori etc.)

Fotorezistori – Își modifică rezistivitatea în funcție de intensitatea luminoasă.

Celule fotovoltaice/Celule solare – Produc tensiune/curent electric atunci când sunt iluminate

Fotodiode – Pot opera în mod fotovoltaic sau fotoconductiv

Tuburi fotomultiplicatoare – Conțin un fotocatod, care emite electroni atunci când este iluminat. Electronii sunt apoi amplificați de către un lanț de dinode

Fototuburi – Conțin un fotocatod, care emite electroni atunci când este iluminat, astfel încât tubul conduce un curent proporțional cu intensitatea luminoasă

Fototranzistoare – Funcționează ca niște fotodiode ce amplifică

Fotoconductori cuantici – Lucrează cu lungimi de undă în spectrele vizibil și infraroșu. [3]

1.1.1 Noțiuni generale

Pentru a înțelege avantajele fiecărui fotodetector, discutăm performanța metrică a acestora. Întrucât efectul fotoelectric este bazat pe energia fotonică hν, lungimea de undă de interes depinde de energia de tranziție ∆E, folosind relația:

unde λ este lungimea de undă, c este viteza luminii, iar ∆E este tranziția nivelelor energetice.

Deoarece de obicei o energie fotonică hν > ∆E poate produce excitație, ecuația de mai sus este minimul lungimii de undă detectate. Energia de tranziție ∆E este, în majoritatea cazurilor, decalajul de energie al semiconductoarelor. Tipul fotodetectorilor și al materialului semiconductor este ales și optimizat pentru lungimea de undă dorită.

Absorbția luminii într-un semiconductor este indicată de coeficientul de absorbție. Acesta determină nu doar dacă lumina poate fi absorbită pentru fotoexcitație, ci și unde este lumina absorbită. O valoare ridicată a coeficientului de absorbție indică faptul ca lumina este absorbită aproape de suprafața unde aceasta cade pe fotodetector. O valoare mai mică arată faptul că lumina poate penetra mai adânc in semiconductor.

Eficiența cuantică a fotodetectorului, numărul de purtători produși de un foton este definită prin următoarea formulă:

unde Iph este fotocurentul, Φ este fluxul de fotoni, iar Popt este puterea optică. Eficiența cuantică ideală este unitatea.

Reducerea eficienței cuantice este dată de pierderea curentului prin recombinare, absorbție incompletă, reflexie etc. Altă mărime importantă, ce utilizează puterea optică drept referință este responsivitatea:

A/W

Viteza fotodetectorilor este importantă, în special pentru sistemele de comunicație ce folosesc fibră optică. Răspunsul unui fotodetector trebuie să fie suficient de rapid în comparație cu rata de transmisie digitală a datelor(>40 Gb/s). Pentru a ne atinge acest scop, timpul de viață al purtătorilor va fi mai mic, oferind un răspuns mai bun, dar vom avea un curent de întuneric mai mare. Trebuie făcute sacrificii pentru a obține optimizarea dorită.

Tabelul 1. Valori ale căștigului și timpului de răspuns pentru fotodetectorii comuni[2]

Curentul de întuneric este curentul scurs atunci când fotodetectorul este sub tensiune, dar nu este expus unei surse luminoase.

Timpul de viață este definit drept intervalul de timp dintre actul generării și cel al recombinării, pe parcursul căruia fiecare purtător de sarcină participă la creșterea conductivității electrice a materialului semiconductor.

Pentru a îmbunătăți și mai mult semnalul, unii fotodetectori au un mecanism intern de câștig. Câștigul mare va provoca însă obținerea unui nivel de zgomot ridicat. Pe lângă obținerea unui semnal mare, un zgomot cât mai redus este important, întrucât va determina puterea semnalului minim detectabil. Aici vorbim despre raportul semnal-zgomot.

O limitare a dispozitivului este dată de temperatură, mai exact energia termală trebuie să fie mai mică decât energia fotonică (kT < hν). Altă sursă de zgomot o constituie radiația de fond, cum ar fi radiația corpului negru, dată de carcasa detectorului la temperatura camerei, atunci când nu este răcit. Zgomotul intern include zgomotul termal (Johnson), care este dat de agitația termală aleatoare a purtătorilor în orice dispozitiv rezistiv. Zgomotul procesului de generare-recombinare este datorat fluctuațiilor acestui eveniment. Întrucât toate tipurile de zgomot sunt evenimente independente, pot fi însumate, obținând zgomotul total. Astfel, vom obține puterea zgomotului echivalent (NEP), care corespunde puterii optice necesare producerii unui raport semnal-zgomot unitate într-o bandă de 1Hz. Aceasta este puterea luminoasă minim detectabilă.

Într-un final, detectivitatea este definită folosind formula:

unde A este suprafața, iar B este lărgimea de bandă. Acesta este raportul semnal-zgomot atunci când o putere luminoasă de un Watt este incidentă pe un detector având o suprafață de 1cm2, iar zgomotul este măsurat într-o bandă de 1 Hz. Detectivitatea depinde de sensibilitatea detectorului, răspunsul spectral și zgomot. Este o funcție de lărgime de bandă, frecvență de modulație si lungime de undă. [2]

Dispozitivele fotoelectrice pot fi intrinseci sau extrinseci. Semiconductoarele intrinseci au proprii purtători de sarcină și nu sunt eficiente(un exemplu bun ar fi siliconul). În acest tip de dispozitive avem electroni disponibili doar în banda de valență, deci fotonul va trebui sa aibă suficientă energie pentru a excita electronul pe toată banda de goluri.

Dispozitivele extrinseci conțin impurități adăugate, acest lucru oferindu-le o energie statică mai apropiată de banda conductoare. Deoarece electronii nu trebuie sa facă salturi mari, fotonii cu energie mai mică (ceea ce se traduce prin lungimi de undă mai mari si frecvențe joase) permit declanșarea dispozitivului. [4]

1.1.2 Fotoconductispozitivului. [4]

1.1.2 Fotoconductivitatea

Mișcarea purtătorilor de sarcină (electroni și goluri), este motivul apariției conducției. Fotoconducția reprezintă o creștere a conducției unui material (fie că este metal sau semiconductor) datorită generării în exces a purtătorilor de sarcină sub influența radiației luminoase.

Vom considera un semiconductor de tip p, dopat uniform. Dacă vom aplica o tensiune V asupra acestuia, prin el va trece un curent electric slab, numit curent de întuneric. Acest curent va crește odată cu iluminarea(vezi Fig.1.1). Intensitatea fotocurentului depinde de durata iluminării, temperatura, precum și de tensiunea electrică aplicată.

Conductibilitatea electrică totală σt este datorată electronilor (de concentrație n) și

golurilor (de concentrație p), având mobilitățile μn, respectiv μp .

σt = eμn n + eμpp

În lipsa iluminării, expresia conductibilității va depinde de purtătorii de sarcină de echilibru (mai exact electroni de concentrație n0 și goluri de concentrație p0), și va purta numele de conductibilitate de întuneric σ0 .

σt|intuneric = eμnn0 + eμpp0

În condiții de iluminare, concentrația golurilor va crește de la cea inițală n0 la n, iar cea de goluri de la p0 la p.

σt|iluminare = eμnn + eμpp = eμn (n0 + n – n0) + eμp( p0 + p – p0) = σ0 + σf

Cu σf este notată fotoconductibilitatea, și este datorată creării excesului de purtatori. Știind că este definită drept diferența dintre valoarea conductivității când există o injecție optică și cea a conductivității de întuneric, putem să scriem expresia sa în modul următor:

σf= σt – σ0 = e(μn n + μpp)

Fig.1.1 Fotoconductor simplu cu o tensiune externă de polarizare V[1]

Timpul de viață este definit drept intervalul de timp dintre actul generării și cel al recombinării, pe parcursul căruia fiecare purtător de sarcină participă la creșterea conductivității electrice a materialului semiconductor.

Principalele mecanisme de recombinare întâlnite sunt:

– recombinarea de suprafață (legături chimice nesatisfăcute, defecte structurale, impurități)

– recombinarea bandă-bandă

– recombinarea pe nivele locale de captură (este mecanismul care apare cu probabilitatea cea mai mare)

Timpul de viață al purtătorilor de sarcină electrică (electroni sau goluri) în cazul recombinării pe nivele locale de captură va avea relația:

, unde:

= concentrația centrilor de captură;

= coeficientul de captură

Pentru un semiconductor uniform având o tensiune continuă de polarizare V, cum este ilustrat in Fig.1.1, densitățile de curent de electroni și goluri sunt date doar de componentele de drift, deoarece nu există niciun curent de difuzie care să depindă de gradientul concentrației de impurități.

Densitatea totală de curent este:

Curentul total I este dat de produsul dintre densitatea de curent J și aria transversală Awd.

,unde câmpul electric EV/l, l fiind lungimea probei.

Fotocurentul I este definit ca fiind diferența dintre curentul total în prezența unei excitații optice și curentul de întuneric. [1]

Fotorezistorul

Acest dispozitiv electronic își va modifica rezistența electrică în momentul în care un flux luminos va cădea pe suprafața sensibilă a acestuia. Fotorezistorul este format dintr-o peliculă de material semiconductor, depusă la randul ei prin evaporare în vid pe un grătar metalic (ce este fixat pe o placă izolatoare). Pelicula va fi prevăzută la capete cu contacte ohmice (acestea reprezintă terminalele) și protecția acesteia va fi asigurată prin acoperire cu un strat de lac sau prin încapsulare în material plastic.

Rezistența electrică a fotorezistorului va scădea odată cu creșterea intensității fluxului luminos. Odată conectat într-un circuit electric, va modifica intensitatea curentului din circuit. Această intensitate va crește proporțional cu scăderea rezistenței electrice a fotorezistorului (deci proporțional cu creșterea intensitații fluxului luminos).

Fig.1.2 Simboluri întâlnite în literatură pentru fotorezistor

Un fotorezistor este fabricat dintr-un semiconductor cu rezistență mare. Dacă lumina căzută pe dispozitiv are frecvența destul de mare, fotonii absorbiți de semiconductor dau electronilor de legătură destulă energie pentru a sări pe banda conductoare. Electronul liber rezultat (și partenerul său, golul) conduce electricitatea, astfel micșorând rezistența. [5]

Fig.1.3 Exemplu de fotorezistor

În funcție de necesități și de circuite, fotorezistorul poate fi activat în consecință, fie de lumină, fie de întuneric. Rezistența la întuneric poate fi de câțiva Megaohmi, pe când în cazul expunerii la lumină, de câteva sute de ohmi. Fotorezistorii sunt puternic afectați de fluxul luminos de fond.

Funcționarea fotorezistorilor depinde de 3 parametri:

timpul de răspuns

detectivitatea/fotosensibilitatea

eficiența cuantică [2]

Fotodioda

Fotodioda reprezintă un dispozitiv optoelectronic, realizat folosind o joncțiune p-n fotosensibilă, ce funcționează în polarizare inversă. Capsula fotodiodei prezintă o fantă transparentă (mai exact o fereastră plană sau lentilă), ce permite pătrunderea fluxului luminos către joncțiunea p-n.

Structura fotodiodei constă din:

materialul de bază, siliciu dopat n

un strat subțire p, creat prin implantare ionică sau difuzie termică, la suprafața stratului n

un strat subțire de protectie, antireflectorizant, ce poate fi monoxid sau bioxid de siliciu. Acesta va acoperi suprafața activă a fotodiodei.

Intre substraturile p și n se va forma joncțiunea p-n. Regiunea care se va forma în vecinătatea acesteia se numește “regiune sărăcită de purtători”(datorită faptului că în această zonă, siliciul nu va conține purtători de sarcină liberi).

Fig.1.4 Simboluri întâlnite în literatură pentru fotodiodă

Această regiune are o importanță majoră în funcționarea fotodiodei, întrucât își va modifica adâncimea în funcție de valoarea tensiunii inverse ce va fi aplicată la terminalele fotodiodei. Capacitatea joncțiunii p-n va depinde de grosimea regiunii fără purtători.

Odată cu creșterea tensiunii de polarizare inversă a fotodiodei, va scădea capacitatea joncțiunii p-n și adâncimea regiunii va crește. Astfel, curentului electric produs de către radiațiile luminoase i se va permite sa traverseze joncțiunea.

Fig.1.5 Exemplu de fotodiodă

Atunci când în aria activă a fotodiodei este absorbită lumina, în regiunea golită se va genera termic o pereche electron-gol. Prin polarizare inversă a fotodiodei, electronii vor trece în regiunea n, pe când golurile vor trece în regiunea p. Definim această separare de sarcini “efect fotovoltaic” și “curent de lumină”, curentul corespunzător.

Curentul care trece prin diodă este proporțional cu intensitatea luminoasă. Dacă asupra joncțiunii nu se efectuează iluminare, curentul va avea o valoare neglijabilă, având denumirea de “curent de întuneric”. Trebuie menționat faptul că la conectarea într-un circuit, fotodioda se conectează întotdeauna în serie cu un rezistor care va limita curentul printr-aceasta. [5]

Fig.1.6 Structură fotodiodă[6]

– Terminalul lung al fotodiodelor este anodul (+), iar terminalul scurt este catodul (-)

– În cazul fotodiodelor în capsulă metalică, terminalul aflat langă cheiță este anodul

– Anodul fotodiodelor în capsulă din plastic transparent este electrodul mai subțire [3]

Fototranzistorul

Un tranzistor a cărui joncțiune bază-colector este fotosensibilă poartă numele de fototranzistor. La fel ca în cazul diodelor, toți tranzistorii sunt sensibili la radiație luminoasă. Fototranzistorii sunt realizați special pentru a profita de acest lucru.

Varianta regăsită cel mai comun în practică este tranzistorul bipolar NPN cu baza expusă. În acest caz, lumina incidentă bazei va înlocui ceea ce în mod normal ar fi fost curentul aplicat bazei. Se poate spune că un fototranzistor amplifică variațiile de lumină incidentă. [5]

Fototranzistorii pot sau nu avea o bază conductoare (în cazul în care există, prin intermediul acesteia se poate regla sensibilitatea la lumină). Putem privi fototranzistorii drept exemple de combinații fotodiode-amplificator integrate într-un singur fragment de silicon. Folosind această combinație, vom inlătura defectul major al fotodiodelor, transferul uniform.

Un număr mare de aplicații vor necesita un semnal mai puternic de la fotodetector decât cel generat de fotodiodă. Un amplificator operațional extern poate fi folosit pentru a amplifica semnalul fotodiodei, dar această abordare nu este de obicei suficient de practicată în raport cu folosirea unor fototranzistori.

Fototranzistorul poate fi văzut drept o fotodiodă, al cărei fotocurent de ieșire este transmis bazei unui tranzistor de mică putere:

Fig.1.7 Fototranzistor văzut drept fotodiodă[7]

Fototranzistorii pot fi folosiți drept detectori de lumină ambiantă. Când sunt folosiți împreună cu o sursă de lumină controlabilă, devin elementul detector în optoizolatoare, întrerupătoare optice, retro-senzori, senzori de mișcare etc. [2]

1.1.5.1 Funcționare și structură

Fototranzistorii sunt fotodetectori în stare solidă care posedă declanșare internă. Ei pot fi folosiți pentru a genera semnal analog sau digital.

Avem două variante constructive:

– cu două terminale

– cu trei terminale

Configurația cu trei terminale va asigura o stabilitate mai bună a punctului static de funcționare(PSF) față de variațiile temperaturii, datorită faptului că baza se conectează în circuit.

În cazul configurației cu două terminale nu putem accesa baza, iar în această situație, semnalul de intrare în fototranzistor este exclusiv lumina.

Capsula fototranzistorului va fi prevăzută cu o fereastră, în care este plasată o lentilă ce va focaliza fluxul luminos asupra regiunii fotosensibile. [6]

Fototranzistorul are o sensibilitate mult mai mare, în comparație cu fotodioda, dar viteza de răspuns va lăsa de dorit(există o diferență de mai multe ordine de mărime). În cazul proiectului nostru, întrucât lungimea de undă a fasciculelor laser va fi aproape de regiunea infraroșie, este de dorit o sensibilitate ridicată, precum și posibilitatea de a amplifica semnalul în caz de nevoie, acestea fiind motivele alegerii fototranzistorilor drept elemente receptoare ale barierelor.

Figurile ce urmează vor prezenta structura și simbolurile tipice ale fototranzistorului:

Fig.1.8 Structură fototranzistor[6] Fig.1.9 Simboluri întâlnite în literatură

Caracteristicile curent-tensiune ale unui fototranzistor sub diferite intensități luminoase sunt similare cu cele ale tranzistorului bipolar, cu excepția faptului că curentul de bază este înlocuit cu diverse intensități luminoase. Un dezavantaj al fototranzistorilor este dat de inconsistența câștigului în raport cu intensitatea luminoasă, întrucât cea din urmă afectează potențialul bazei, liniaritatea fiind astfel compromisă.

Fig.1.10 Exemplu de fototranzistor

Fabricarea unui fototranzistor este mai complicată decât cea a unei fotodiode, zona fotosensibilă de arie mai mare reducând performanțele acestuia la frecvențe înalte. În cazul fototranzistorilor homojoncțiune, se obțin câștiguri având valori între 50 și câteva sute. Pentru cei heterojoncțiune, aceste valori ating chiar pragul de 104.

Fig.1.11 Structură fototranzistor

Versiunea tranzistor cu heterojoncțiune, al cărui emitor are o energie de tranziție mai mare decât a bazei, poate include structuri AlGaAs/GaAs, InGaAs/InP sau CdS/Si. Emitorul cu o bandă de tranziție mai largă are o eficiență mai bună de injecție, conducând la un câștig mai bun și permițând bazei să fie mai puternic dopată pentru o rezistență a bazei mai mici.

Viteza fototranzistorilor este dată de către timpii de încărcare ai emitorului, respectiv colectorului. În dispozitivele homojoncțiune, timpul de răspuns variază între 1-10μs, limitând frecvența de operare la aproximativ 200 kHz, pe când cele heterojoncțiune pot funcționa la peste 2GHz. Viteza crește atunci când semnalul luminos este mai puternic. În aplicații în care viteza este un element important, dispozitivul are un contact la bază(varianta cu trei terminale), unde o tensiune aplicată va crește curentul de colector. Dezavantajul va fi că vom obține un câștig redus al fotocurentului. În cel de-al doilea rând, viteza este invers proporțională cu câștigul. Din acest motiv, domeniul câștigului este folosit pentru a măsura performanța fototranzistorilor. [2]

1.1.5.2 Caracteristici fototranzistori

Răspunsul spectral

Semnalul de la ieșirea unui fototranzistor este dependent de lungimea de undă a razei incidente.

Aceste dispozitive răspund unui domeniu spectral larg, iar răspunsul oferit de fototranzistori este în general de o lungime de undă mai mică decât cel dat de o fotodiodă. În mod normal, răspunsul spectral de vârf este la aproximativ 840nm, o valoare oarecum mai mică decât în cazul fotodiodei tipice.

Fig.1.12 Grafic răspuns spectral în funcție de lungimea de undă[7]

Fotosensibilitatea

Pentru o sursă de lumină având un nivel de iluminare dat, semnalul de la ieșirea unui fototranzistor este definit de către aria joncțiunii colector-bază și de către câștigul în curent al acestuia. Această joncțiune funcționează ca o fotodiodă ce furnizează fotocurent în bază.

La fel ca în cazul fotodiodelor, dublarea mărimii regiunii bazei va dubla și fotocurentul generat. Acest fotocurent înmulțit cu factorul de amplificare în curent va da valoarea curentului de colector.

Factorul de amplificare în curent(câștigul) variază cu temperatura și tensiunea. La nivele de iluminare slabă, câștigul va fi mic, dar va crește odată cu creșterea intensității luminoase, până când este atins un maxim, după care va începe să scadă. Caracteristica curent-tensiune a tranzistorului obișnuit va demonstra acest efect, dupa cum se poate observa în Fig.1.13. Se vor aplica fluxuri luminoase de intensități diferite(reprezentate prin curbele H1 și H2) asupra aceluiași fototranzistor.

Fig.1.13 Caracteristica Ic(Vce)[7]

Tensiunea de străpungere

Fototranzistorii trebuie polarizați corect pentru a funcționa. Când aplicăm tensiune pe fototranzistor trebuie să fim atenți să nu depașim tensiunea de străpungere. Odată depășit acest prag, putem cauza daune permanente fototranzistorului.

Liniaritatea

Spre diferență de fotodiodă, a cărei ieșire este liniară pe 7-9 decade ale intensitații luminoase, curentul de colector al unui fototranzistor va fi liniar pe un interval mult mai mic, de 3-4 decade. Motivul principal al acestei limitări este că factorul de amplificare în curent depinde de curentul de colector, care la rândul său depinde de fotocurentul din bază, sau de lumina incidentă.

Fig.1.14 Grafic curent ieșire – iluminare[7]

Fototranzistoarele sunt folosite in aplicații în care avem nevoie ca fotodetectorul să se comporte drept un întrerupător. Când avem iluminare, fototranzistorul se consideră deschis, iar când aceasta este oprită, este închis.

Tensiunea de saturație Colector-Emitor

Prin definiție, prin saturație ințelegem condiția în care joncțiunile bază-emitor si bază-colector sunt în stare de conducție. Din punct de vedere practic, tensiunea de saturație colector-emitor VCE(SAT) este parametrul care ne arată cât de bine aproximează fotodetectorul un întrerupător închis. Acest lucru se datorează faptului că VCE(SAT) reprezintă căderea de tensiune de-a lungul detectorului, în starea „on” (deschisă).

Tensiunea de saturație este de obicei tensiunea maximă admisă între colector și emitor, la o anumită intensitate luminoasă și un curent de colector dat. Aceasta poate varia între 0.25V – 0.55V.

Curentul de întuneric

Cand fototranzistorul este plasat într-o zonă fără iluminare și aplicăm o tensiune între colector și emitor, va începe să curgă curent prin acesta. Acest curent poartă numele de curent de întuneric (ID) și constă din curentul scurs din joncțiunea bază-colector, înmulțit cu factorul de amplificare în curent al tranzistorului. Prezența acestui curent nu permite fototranzistorului să devină complet închis, sau un întrerupător deschis ideal. Depinde de tensiunea colector-emitor aplicată și de temperatura ambientală.

Viteza răspunsului(timpul de răspuns)

Această caracteristică depinde aproape în totalitate de capacitatea joncțiunii colector-bază și de valoarea rezistenței de sarcină. Efectul Miller apărut va duce la multiplicarea constantei de timp cu câștigul fotodetectorului. Astfel, vom ajunge la concluzia că odată cu creșterea amplificării, vom obține un timp de răspuns mai lent. [7]

Tabelul 2. Variația parametrilor în funcție de mărimea chipului detector[7]

Tabelul 3. Variația parametrilor în funcție de valoarea amplificării[7]

Avantaje ale folosirii fototranzistorilor:

– Soluție ieftină pentru detecție în spectrul vizibil și în apropierea celui infraroșu

– Timpi de răspuns moderați-rapizi

– Factori de amplificare ce variază de la 100 până la 1500

– Disponibil într-o mare varietate de modele: acoperit cu rășină epoxidică, modelat prin transfer, turnat, pachet ermetic, sub formă de chip integrat.

– Utilizabil cu aproape orice sursă vizibilă sau în infraroșu, cum ar fi DLI (diodă luminescentă în infraroșu), neoane, tuburi fluorescente, lămpi cu incandescență, lasere, surse de scânteie, lumina soarelui etc.

– Au aceleași caracteristici electrice generale ca și tranzistorii de semnal obișnuiți.

– Pot fi aleși pentru a întruni cerințele unor aplicații particulare

Dezavantaje ale folosirii fototranzistorilor:

– Inconsistența câștigului în raport cu intensitatea luminoasă [8]

Aplicații ale fotodetectorilor

Fotodetectorii sunt considerați una dintre cele mai întâlnite ramuri ale tehnologiei aflate în folosință în ziua de astăzi. Pot fi utilizați în dispozitive simple, folosite pentru deschiderea ușilor supermarketurilor, drept elemente receptoare ale telecomenzilor, dar pot forma și matrici imense, folosite de către astronomi pentru a detecta radiațiile din spațiul cosmic. Sunt prezenți într-o gamă largă de dispozitive ce servesc în comerț, industrie, cercetare sau divertisment.

În lucrarea de față discutăm în sens larg despre fotodetectorii ce lucrează în apropierea spectrului infraroșu, sau într-acesta. Aceștia pot fi împărțiți în două categorii – folosiți în comunicații sau în aplicații de teledetecție. În comunicații, radiația este purtătoarea semnalului codat, pe când în diversele forme ale teledetecției, radiația constituie semnalul, oferind informații despre un obiect sau o scenă.

Spre exemplu, sistemele de comunicații cu fibre optice, ce operează în general în spectrul infraroșu, recepționează semnale la viteză înaltă. Acești detectori nu necesită sensibilitate ridicată, ci un răspuns extrem de rapid, fiabilitate sporită și un cost scăzut. Fotodiodele, în special cele bazate pe Indiu-Galiu-Arsen(InGaAs) sunt folosite în comunicațiile optice, atingând viteze de transmisie a datelor de până la 2.5 Gbits/s.

Cele mai simple aplicații de teledetecție implică detecția sau absența unui obiect sau a unei condiții pentru monitorizarea siguranței și securității. Aceste aplicații vor utiliza de obicei fotoconductori, datorită simplității și costului redus. Sistemele mai avansate vor folosi fotodiode sau chiar fototranzistori ce includ filtre optice pentru reducerea erorilor în detecție si creșterea fiabilității.

Aplicațiile comune ale acestui domeniu sunt senzorii de mișcare infraroșii, din sistemele de securitate cu uz domestic. Alte exemple din ce în ce mai întâlnite în practică includ detectori de coliziune în industria automobilă, iar în fabrici, detectori de siguranță sensibili la lungimi de undă vizibile sau UV detectează prezența arcurilor electrice.

Fig.1.15 Exemple de aplicații ale fotodetectorilor(bariere laser și senzori de mișcare)

Cei mai avansați detectori tind a fi folosiți în domenii specializate, cum ar fi biomedicina, cercetare, apărare, monitorizarea mediului înconjurător, astronomie etc. Termografia, măsurarea căldurii radiate de corpul uman, este de mult timp un test de diagnoză de rutină și utilizează detectori infraroșii. Folosind senzori CCD de viteză foarte mare, biologii pot observa reacțiile biochimice rapide. Camerele utilizate pentru a urmări difuzia chimică în celule au până la 10000 cadre pe secundă. În aplicații spectroscopice, sensibilitatea înaltă a tuburilor fotomultiplicatoare (PMT-uri) le face preferate în fața celorlalte soluții de detectare. Indubitabil, aplicațiile ce au împins cel mai mult dezvoltarea fotodetectorilor, în special în domeniul infraroșu, sunt cu siguranță cele din domeniul militar, ajungându-se la folosirea detectorilor de infraroșii în realizarea rachetelor, sistemelor de apărare etc. [9]

1.2 Dioda laser

Americanul Theodore Meiman a construit in 1960 primul laser funcțional pe rubin, declanșând ulterior descoperirea altor familii de lasere. Trebuie menționați compatriotul său, Charles Townes și rușii Alexander Prokhorov și Nikolay Basov, care au oferit baza teoretică si practică pentru realizarea acestuia. De-a lungul anilor, diodele laser au suferit îmbunătățiri, impunându-se drept tehnologie preferată de generare a efectului laser, datorită costului și mărimii reduse, eficienței ridicate și simplității de fabricare. Folosirea acestora a revoluționat o multitudine de domenii precum medicina, comunicațiile, aplicațiile militare etc.

1.2.1 Principiul de funcționare

Acronimul LASER provine din limba engleză și înseamnă „Light Amplification by Stimulated Emission of Radiation”. Contradictoriu cu ceea ce sugerează numele, un laser nu este un amplificator, ci un generator de lumină. Mai exact, este un dispozitiv ce va genera lumină prin emisie stimulată de radiație.

Putem vorbi despre două tipuri de radiație – spontană sau stimulată.

Radiația spontană presupune lipsa stimulilor externi. În cazul LED-urilor, de exemplu, electronii excitați din banda de conducție cad în banda de valențe, producând radiația propriu-zisă.

Emițătoarele LED sunt inutilizabile pentru comunicații optice la mare distanță, întrucât puterea de ieșire a acestora este redusă, radiația emisă este necoerentă si împrăștiată spațial.

Celălalt proces va avea loc în momentul în care un foton extern lovește un electron excitat (precum în Fig.1.16). Interacțiunea dintre aceștia include o tranziție și o radiație de nou foton. În acest caz, emisia indusă este stimulată de către fotonul extern. Prin urmare, vom numi acest tip de radiație stimulată.

Fig.1.16 Radiația stimulată[10]

Proprietăți ale radiației stimulate:

un foton extern forțează emisia unui foton având o energie Ep similară. Altfel spus, fotonul extern va stimula radiație având aceeași lungime de undă ca a lui. Lățimea spectrală a luminii va fi mai îngustă datorită acestei proprietăți. În cazul laserelor, lățimea spectrală este în jur de 1nm, atât la 1300nm, cât și la 1550nm.

întrucât toți fotonii se vor propaga în aceeași direcție, vor contribui cu toții la puterea luminoasă. Eficiența conversiei curent-lumină rezultată va fi una mare, drept consecință și puterea de ieșire va fi la fel. În comparație cu puterea de ieșire a unui LED, de exemplu 1mW pentru un curent direct de 150mA, o diodă laser este capabilă sa radieze 1 mW pentru un curent de doar 10mA.

fotonii stimulați se vor propaga în aceeași direcție cu fotonii care i-au stimulat. Drept urmare, lumina stimulată va fi bine direcționată.

un foton stimulat este radiat doar atunci când un foton extern va iniția această acțiune, deci putem spune că fotonii sunt sincronizați. Ambii fotoni sunt în fază, deci radiația stimulată este coerentă.

Pentru a radia lumină stimulată de o putere semnificativă, vom necesita milioane de milioane de fotoni. Pentru a realiza acest lucru, se plasează o oglindă la un capăt al regiunii active, ca în modelul din Fig.1.17.

Fig.1.17 Reacția optică pozitivă[10]

Cei doi electroni, cel extern și cel stimulat, sunt reflectați inapoi spre regiunea activă. Acești doi electroni vor prelua acum rolul de radiație externă și vor stimula emisia altor doi fotoni. Cei patru fotoni rezultați vor fi reflectați de cea de-a doua oglindă, poziționată la celălalt capăt al regiunii active. Cei patru fotoni vor trece prin regiunea activă, vor stimula emisia a alți patru fotoni și procesul va continua la infinit.

În consecință, cele două oglinzi realizează o reacție optică pozitivă. Se numește reacție pozitivă deoarece reacția adună fotonii stimulați(ieșirea) la intrare(fotonii externi). Aceste două oglinzi formează un rezonator.

Trebuie observat cât de repede crește numărul fotonilor stimulați în reacția pozitivă. Pentru a susține procesul, vom avea nevoie de un număr mare de electroni excitați disponibili în banda de conducție. Dacă folosim energie externă(curent direct pentru un LED) este posibil să excităm un număr de electroni. În laser însă, golirea benzii de conducție se face mult mai repede decât într-un LED. Drept urmare, va trebui să excităm electroni la o viteză cu mult mai mare decât o facem într-un LED. De fapt, într-un laser trebuie să avem mai mulți electroni în banda de conducție decât în banda de valență.

Această situație poartă numele de inversiune de populație, deoarece, în mod normal, banda de valență este mult mai populată decât banda de conducție. Pentru a crea această inversiune de populație, se trece o densitate mare de curent printr-o regiune activă îngustă.

Inversiunea de populație se va dovedi a fi o condiție necesară pentru a obține efectul laser, deoarece cu cât este mai mare numărul de electroni excitați, cu atât va fi mai mare numărul de fotoni stimulați ce pot fi radiați. Altfel spus, numărul de electroni excitați determină câștigul diodei laser. Bineînțeles, o diodă laser introduce și anumite pierderi. Avem două mecanisme principale și anume absorbția și transmisia fotonilor stimulați. O parte din fotonii stimulați sunt absorbiți în semiconductor înainte de a scăpa sub formă de radiație. În cel de-al doilea rând, oglinzile nu reflectă fotonii incidenți in proporție de 100%.

La începutul procesului, numărul de fotoni crește, liniar, cu o viteză foarte mare. Pe măsură ce trece timpul, cu cât sunt mai mulți fotoni stimulați, cu atât sunt mai mulți fotoni pierduți. Pierderea este constantă pentru o diodă dată, în timp ce câștigul poate fi modificat. Creșterea câștigului se va obține prin creșterea curentului direct.

La un moment dat, câștigul va deveni egal cu pierderile, situație denumită condiție de prag.

Fig.1.18 Condiția de prag[10]

Peste condiția de prag, dioda va incepe să se comporte ca o diodă laser. Dacă vom crește curentul direct(câștigul propriu-zis), vom obține o creștere a puterii luminoase. Obținem astfel o diodă semiconductoare ce emite o lumină monocromatică, foarte intensă și coerentă, bine direcționată. Pentru ca o diodă laser să genereze lumină, câștigul trebuie să depășească pierderile.

1.2.2 Efectul laser și caracteristica intrare-ieșire

O diodă semiconductoare va funcționa ca un laser dacă și numai dacă sunt intrunite următoarele condiții:

Emisie stimulată

Reacție optică pozitivă

Inversiune de populație

Pentru a construi o caracteristică intrare-ieșire a unei diode laser, vom reprezenta caracteristica P-I. Intrarea va fi curentul direct (I), iar ieșirea puterea luminoasă (P). Când este aplicat un curent direct mic, dioda radiază ca un LED. Când densitatea de curent va deveni suficientă pentru a crea inversiunea de populație și va atinge valoarea de prag, dioda va începe să funcționeze ca un laser.

Fig.1.19 Caracteristica intrare-ieșire

Analiza luminii diodelor laser

O diodă laser emite lumină ce poate fi caracterizată drept:

– monocromatică – lățimea spectrală a radiației este foarte îngustă, zeci, sute de pm.

– bine direcționată – fasciculul emis este îngust, bine direcționat, acesta putând fi ușor lansat printr-o fibră.

– foarte intensă și eficientă – o diodă laser de ultimă generație poate radia 1mW la 10mA curent direct, având astfel o conversie curent-lumină de 10 ori mai eficientă decât la un LED.

– coerentă – toate oscilațiile undei sunt în fază.

Doar combinația dintre un mediu activ și un rezonator produce lumină cu aceste proprietăți.

1.2.3 Structura de bază a unei diode laser

Diodele laser au devenit treptat o componentă cheie în tehnologiile fotonice moderne datorită unui număr mare de caracteristici care le diferențiază de alte sisteme laser.

Diodele laser sunt constituite dintr-o diodă p-n cu o regiune activă unde electronii și golurile se recombină, rezultând emisia luminii. În plus, acestea conțin o cavitate optică, în care are loc emisia stimulată. Cavitatea laser este realizată dintr-un ghid de undă, capetele diodei laser având suprafețe clivate pentru a funcționa drept oglinzi.

În mod normal, grosimea regiunii active a unei diode laser este foarte mică, de ordinul 100nm. În scopul de a face acțiunea laser cât mai eficientă posibil, se folosește uneori o tehnică de fabricare ce permite realizarea unor regiuni active foarte înguste, între 4 – 20 nm grosime.

Indicele de refracție al GaAs, materialul din care este realizată uzual regiunea activă, are o valoare comună de 3,6. Datorită acestui fapt, mai mult de 30% din lumina incidentă va fi reflectată înapoi spre regiunea activă la interfața dintre aer și GaAs. Toate caracteristicile enumerate mai sus ajută la descrierea unui laser de arie largă.

Pentru a izola mai bine purtătorii de sarcină în interiorul regiunii active se folosește un contact metalic. Această soluție va restricționa curgerea curentului în interiorul regiunii definite de către banda metalică. Acest tip de laser este numit în literatură laser cu câștig ghidat. [10]

Fig.1.20 Structura diodei laser[10]

Avantaje ale folosirii diodelor laser:

– compacte, realizate pe un singur cip ce conține toate componente necesare

– eficiență mare

– direct excitabile cu surse mici de curent

– posibilitatea modulației directe

– rază mică a undei emise

– costuri scăzute și fiabilitate

Dezavantaje ale folosirii diodelor laser:

– sensibilitate crescută față de temperatură

– undă cu un grad ridicat de divergență [11]

1.3 Detecția perimetrală. Sisteme de securitate

Amenințarea poate fi definită drept orice pericol exterior care, dacă se materializează, poate avea ca efect consecințe grave. Aceasta se va reduce analizând punctele vulnerabile care pot fi exploatate. Înainte de a implementa un sistem de securitate este necesară realizarea unei analize de risc în funcție de importanța obiectivelor pe care dorim să le protejăm.

Structura unui sistem de securitate este formată din mai multe subsisteme, care fie funcționează independent, fie sunt interconectate, gestionate și monitorizate de o unitate centrală. Aceasta este monitorizată la rândul său de către unul sau mai multe dispecerate specializate în monitorizarea sistemelor de securitate. În funcție de tipul obiectivelor ce necesită protecție, se poate adopta structura sistemului de securitate. [12]

Componentele principale ale unui sistem antiefracție:

Centrala de alarmă, mai exact echipamentul hardware al cărui pachet software permite primirea și analizarea datelor trimise de către detectorii(senzorii) conectați la aceasta și va decide starea de alarmare, declanșând diverse mecanisme de avertizare. Unele modele avansate permit memorarea evenimentelor in detaliu.

Detectorii de mișcare – Aceștia sunt folosiți pentru detecția pătrunderii în perimetrul supravegheat. Sensibilitatea de detecție se va putea seta în funcție de necesități. Aceștia pot fi de interior sau de exterior, de tip PIR(infraroșu), MW(microunde), ultrasunete, sau alte combinații realizate între acestea.

Detectorii de șoc – Vor detecta unda de șoc produsă de către lovirea sau dislocarea ușilor, ferestrelor.

Detectorii acustici – Detectează în spectrul acustic zgomotul produs la spargerea geamului.

Bariere – Sunt un ansamblu de două elemente de comunicare, emițător-receptor, folosite în general la exterior ca „poarta de trecere” în spațiul protejat. Putem întalni bariere ce folosesc infraroșii, lasere, microunde.

Consola de comandă – Echipamentul folosit pentru a comanda sistemul de alarmă, mai exact prin armarea sau dezarmarea acestuia, pentru programarea centralei, sau citirea evenimentelor petrecute într-un anumit interval de timp. Adesea se identifică sub forma unei tastaturi, împreună cu un ecran LCD/LED, uneori fiind folosite și telecomenzi.

Module de extensie

Mecanismele de avertizare – Acestea sunt de obicei de tip sonor(sirene de avertizare) sau luminos.

Comunicator digital – Transmite la distanță starea/datele furnizate de catre centrala de alarmă, fie către proprietar, fie catre un centru de monitorizare.

Acumulatori – Folosiți pentru a menține sistemul de alarmă în stare de funcționare, în cazul unei decuplări accidentale sau intenționate de la rețeaua de energie electrică. [13]

Sistemele de protecție perimetrală au rolul de a asigura limitarea accesului neautorizat într-o zonă protejată. Spre deosebire de sistemele de securitate de interior, sistemele de detecție perimetrală sunt proiectate să opereze în orice tip de mediu extern (variații ale temperaturii, umiditate, curenți de aer, radiații solare), cât și în prezența unor factori perturbatori. Aceste sisteme au rolul de a răspunde prompt și precis în realizarea detecției și evaluarea stării de alarmă, de a realiza întarzierea pătrunderii în spațiul protejat (construirea gardurilor, zidurilor etc.).

Pentru o proiectare cât mai eficientă a sistemului de detecție perimetrală trebuie să realizăm o analiză de risc, în funcție de importanța obiectivelor pe care dorim să le protejăm. Se va porni de la analizarea evaluărilor pierderilor potențiale, acestea putând fi de tip material, informațional sau de altă natură. Trebuie luați în considerare factorii de risc și mediu. Înainte de a realiza un sistem pentru detecție perimetrală este necesar să identificăm factorii externi și cine/ce reprezintă amenințarea (pentru a evita eventualele alarme false).

In funcție de acești parametri, se va delimita perimetrul protejat, ce va forma o fașie de protecție unde se vor instala echipamentele. De asemenea, în funcție de gradul de risc, se selectează una sau mai multe tehnologii de detecție, adecvate tipului de mediu. [12]

1.4 Microcontrollere

Scopul proiectului este de a realiza un sistem perimetral de protecție format din bariere laser, care se va activa în momentul întreruperii unuia dintre fasciculele laser. Această acțiune poate lua loc în orice moment dat, putând fi catalogată drept eveniment aleator. Drept urmare, se face simțită nevoia folosirii unui sistem capabil să analizeze în timp real semnalele de la ieșirea fototranzistorilor. De asemenea, este necesară prelucrarea ulterioară a acestora, în vederea memorării si afișării pe un ecran LCD a momentului la care s-a realizat efracția, determinării barierei cu pricina etc. Pentru realizarea acestor cerințe, vom folosi un microcontroller ATmega328, ce este încorporat într-o platformă de dezvoltare Arduino Uno.

Scurt Istoric

Conceptul de microcontroller a apărut în cadrul companiei Intel în anul 1969, când o companie japoneză le-a cerut acestora să realizeze circuite integrate pentru calculatoare. Marcian Huff și-a folosit experiența avută pe platforma PDP-8 pentru a propune o soluție alternativă, circuitul integrat programabil. Frederico Faggin a transformat această idee în realitate, iar Intel a cumpărat licența de la compania japoneză BUSICOM pentru a crea microprocesorul pe 4 biți 4004, capabil de 6000 operații pe secundă. Acesta a fost urmat la scurt timp, în anul 1972, de microprocesorul pe 8 biți 8008. Eforturile făcute de Intel au fost urmate de către alt gigant, Motorola, cu varianta lor pe 8 biți, seria 6800, împreună cu dezvoltarea tehnologiei MOS, care a făcut posibilă realizarea modelelor 6501 și 6502, pentru doar 25$ fiecare. Din acel moment, prețurile au continuat să scadă, în timp ce performanțele au crescut exponențial.

1.4.1 Caracteristici generale

Posibilitatea simulării – Deoarece programarea se realizează printr-un software, putem realiza în avans anumite simulări detaliate pentru a se asigura corectitudinea codului și performanța sistemului.

Flexibilitate – Abilitatea de a reprograma folosind memorii de tip Flash, EEPROM sau EPROM asigură posibilitatea de a modifica direct codul programului.

Integrare pe scară mare – Majoritatea microcontrollerelor sunt în esență computere integrate într-un singur chip(single-chip), dispunând de procesare realizată în interiorul chip-ului, memorie si porturi de intrare/ieșire. Unele dintre acestea conțin periferice pentru comunicare serială și citirea semnalelor analogice (folosind un convertor analog-digital, numit și ADC). Aceste periferice vor diferenția un microcontroller de un microprocesor. Microprocesoarele necesită componente adiționale pentru a îndeplini aceste funcționalități.

Costul avantajos – Reducerea costurilor provine din mai multe motive. Costurile de dezvoltare sunt scăzute cu mult, datorită avantajelor de design si flexibilitate menționate anterior. Datorită numărului mare de componente incluse într-un microcontroller, este posibilă reducerea dimensiunilor plăcii de dezvoltare, precum și a costurilor aferente componentelor suplimentare.

Utilizare facilă – Dacă în trecut, programarea presupunea utilizarea limbajului mașină, greoi pentru programator, în ziua de astăzi, compilatoarele în limbajul C sunt disponibile pentru implementarea majorității microcontrollerelor. Acestea folosesc in general o alimentare de 5V, ce va oferi ușurință în utilizare.

1.4.2 Structura unui microcontroller

Arhitectura unui microcontroller reprezintă un aspect important, ce dictează modul în care sunt dispuse resursele acestuia. O simetrizare și standardizare a structurii, funcționalității și realizării accesului la acestea va conduce la reducerea numărului de instrucțiuni ale microcontrollerului. Un număr mic de instrucțiuni va crește viteza de execuție a programelor.

Microcontrollerele cu set redus de instrucțiuni (RISC), în categoria cărora se încadrează și ATmega328, prezintă un chip mic, având un mic redus de pini, consum redus și o viteză mare. Instrucțiunile acestora sunt simple și simetrice, putând fi folosite în orice mod de adresare sau cu orice registru, fără excepții sau restricții.

Celălalt concept de arhitectură, cu set complex de instrucțiuni(CISC) prevede existența unui număr mare de instrucțiuni, în general peste 80, având scopul de a face mai ușoară munca programatorului. Unele dintre aceste instrucțiuni pot fi specializate, fiind folosibile doar în anumite moduri de adresare sau cu anumite registre.

Fig.1.21 Arhitectură Atmega328[14]

Memoria

Memoria unui microcontroller poate fi folosită pentru stocarea datelor și a programelor ce urmează a fi rulate. Sunt mai multe tipuri de memorie în structura unui microcontroller:

Memorie de acces aleator (RAM)

Memorie ROM

Memorie ROM programabilă(PROM)

Memorie PROM ce permite ștergere(EPROM)

Memorie EPROM ce permite ștergerea electronică(EEPROM)

Memorie Flash – un tip de EEPROM

Memoria RAM poate fi atât scrisă, cât și citită, aceste operații fiind realizate foarte rapid. Datele stocate pe un microcontroller sunt reținute adesea de către RAM. Memoria RAM este însă volatilă, ceea ce înseamnă că datele stocate pe aceasta sunt pierdute când este intreruptă alimentarea cu curent. Memoria ROM este nevolatilă, dar nu permite scrierea, doar citirea.

Memoria PROM poate fi văzută drept un compromis între primele două. Aceasta este nevolatilă și permite utilizatorului să o programeze cel puțin o dată, iar uneori să o și șteargă. Unele modele de PROM permit ștergerea datelor prin expunere la lumină UV, dar cea mai comună variantă este memoria EEPROM. Aceasta permite citirea și scrierea, fiind de asemenea nevolatilă, sacrificiul făcut fiind viteza de transfer a datelor, mai lentă decât în cazul RAM cu câteva ordine de mărime.

Memoria Flash este un tip de EEPROM. Memoria de program(unde sunt stocate programele propriu-zise) este pe microcontrollerul ATmega328 stocată în memoria Flash. Este aceeași memorie folosită în cazul camerelor digitale și a telefoanelor mobile. Transferul de date realizat utilizând acest tip de memorie este mult mai rapid decât cel în cazul EEPROM, deoarece se lucrează în blocuri de bytes.

Ceasul

Microcontrollerul ATmega328 folosește un oscilator de cristal ce rulează la o frecvență maximă de 16 MHz. Execuția instrucțiunilor este sincronizată cu acest ceas. Trebuie reținut însă că nu toate instrucțiunile pot fi executate într-un ciclu de ceas, durata de execuție variind de la caz la caz.

Procesorul

Acesta este “creierul” microcontrollerului, cel care realizează instrucțiunile de adunare, multiplicare, salt etc. Pentru a efectua aceste operații, procesorul își va procura instrucțiunile, respectiv datele necesare execuției acestora, prin intermediul magistralelor de date, din memorie.

Porturile de intrare/ieșire

Microcontrollerul nostru oferă 23 linii programabile de intrare/ieșire, cu 4 porturi a câte 8 biți. Folosind anumiți regiștri specifici, aceste linii pot servi drept intrare, ieșire sau altă funcție secundară.

Timere

Timerele sunt ceasuri interne, în cazul nostru existând două a câte 8 biți, pe lângă un al treilea

de 16 biți. Fiecare timer poate fi modificat, prin scalare față de ceasul sistemului. Rolul principal al acestora este de a indica durata, deosebit de important în cazul proiectului nostru. Timerele de 8 biți pot număra de la 0 la 255, iar cel de 16 biți de la 0 la 65535.

Microcontrollerul ATmega328 are un sistem de întreruperi încorporat, care se va ajuta de timere pentru a-și indeplini cu succes funcția. O întrerupere poate fi definită drept o bucată de cod, a cărei execuție este declanșată de către un eveniment particular. Acel eveniment poate fi un overflow, sau atingerea unei anumite valori a timerului.

Convertorul analogic-digital (ADC)

În majoritatea cazurilor, semnalele din viața de zi cu zi sunt analogice. Citirea nivelului intensității luminoase ce cade pe un fototranzistor din sistemul nostru de detecție se va reduce la a obține o tensiune de ieșire dată de acesta. Cum microcontrollerul nu poate prelucra un semnal analogic, această tensiune trebuie convertită în format digital. ADC-ul este componenta ce va îndeplini acest rol. Numărul de biți al convertorului ne va da rezoluția acestuia. [14]

CAPITOLUL 2. Realizarea sistemului de detecție perimetrală

2.1 Prezentarea montajului experimental

Așa cum s-a explicat anterior, scopul final al proiectului este realizarea unui sistem antiefracție ce utilizează bariere optice pentru detecție. Acesta efectuează alarmarea acustico-optică, dispune de un ceas și permite memorarea momentelor în care s-au produs evenimentele din ultimele 48 ore. Odată armat sistemul, la întreruperea unuia dintre fascicule, centrala de alarmă va declanșa un semnal sonor, concomitent cu afișarea pe display a cărei bariere a declanșat alarma și a momentului de timp la care a avut loc evenimentul.

Perimetrul protejat va fi de formă pătratică, având laturi de 90 cm, pentru realizarea acestuia folosindu-se patru diode laser de culoare roșie. Cei patru fototranzistori ce vor servi drept receptori nu necesită amplificare, întrucât fluxul luminos emis de diodele laser este concentrat si puternic. În această aplicație este important să reducem pe cât posibil probabilitatea unei detecții eronate.

Fig.2.1 Schema bloc a montajului

Componente:

LASER x – Diodă LASER culoare roșie

FTR x – Fototranzistor NPN

Modul electronic – Centrala de alarmă propriu-zisă

Intrare date – Tastatură ABCD1234567890*#

Ieșire date – Display LED și difuzor avertizare/sirenă

2.2 Descrierea blocului de emisie

Diodele laser folosite emit un fascicul luminos având lungimea de undă de 650 nm. Orice lumină reflectată sau emisă având lungimea de undă cuprinsă în intervalul spectral 620 – 750 nm este percepută de către ochiul uman drept roșie. Puterea de ieșire, fiind de 1 mW, va defini clasa de apartenență a laserului(clasa 2). Avem de-a face cu un laser ce emite lumină vizibilă. Nu există riscuri majore de deteriorare a vederii, în afară de cazul în care o persoană privește deliberat în rază. Fiecare dintre cele patru diode este protejată cu o carcasă de plastic.

Comanda se face cu porți buffer inversoare, care dau un curent suficient pentru laserele din aplicația noastră. Circuitul integrat 74HC14 care va realiza acest lucru conține 6 buffere, dar nu va fi utilizat la capacitate maximă, întrucât montajul utilizează doar 4 lasere.

Tabelul 4. Descriere pini circuit integrat 74HC14[15]

Fig.2.3 Dioda laser LM01RDD[16]

Tabelul 5. Date tehnice diodă laser LM01RDD[16]

Fig.2.4 Schema funcțională a blocului de emisie intern

Legătura cu fiecare diodă în parte se realizează prin mufa SV3(corespondent X3 de tip DB9), având ieșirea conectată la centrala de alarmă. Alimentarea circuitului integrat 74HC14 se face standard, legând pinul 7 la GND si pinul 14 la 5Vcc. În Fig.2.4 se poate observa cu ușurință conexiunea dintre placa Arduino Uno și circuitul integrat 74HC14. Placa va trimite impulsuri de activare către buffere prin intermediul pinului A0. Când vor recepționa semnalul de activare a laserelor, porțile buffer vor furniza la ieșire un curent de 20 mA, necesar pentru funcționarea fiecărei diode în parte. De observat că două dintre porțile buffer rămân nefolosite, întrucât așa cum am menționat anterior, avem doar 4 diode laser de comandat. Diodele propriu-zise au un terminal legat la alimentarea de 5V(+), iar celălalt la ieșirea porții buffer corespunzătoare(-).

Fig 2.5 Schema funcțională a blocului de emisie extern

2.3 Descrierea blocului de detecție

Detecția fasciculului luminos provenit de la diodele laser este realizată folosind fototranzistori model L-53P3BT, de tip NPN cu bază expusă. Aceștia au o configurație cu 2 terminale, iar lungimea de undă a fotosensibilității maxime oferite este de 940nm. Curentul de întuneric al fototranzistorilor este 100nA. Fiecare dintre cele patru elemente din componența sistemului de detecție este protejat cu o carcasă de plastic, montată pe o suprafață fixă. Întrucât aplicația se bazează pe tandemul emisie-recepție, va fi necesară alinierea emițătorului cu receptorul în cazul fiecărei bariere. [17]

Motivele alegerii fototranzistorilor drept receptori sunt:

– elimină necesitatea alimentării la o tensiune ridicată precum și zgomotul ridicat asociat efectului avalanșă al unei fotodiode, furnizând totuși o amplificare rezonabilă a fotocurentului

– fototranzistorul este mai puțin sensibil la fluxul luminos de fond, fiind astfel preferat și utilizat în cadrul acestui proiect, în detrimentul unei fotodiode

– fotorezistențele au latență mare și nu pot detecta impulsuri rapide, spre deosebire de fototranzistori, unde comutarea se face rapid

Circuitul de adaptare prag detecție fototranzistor se realizează folosind rezistențe de pull-down a câte 4,7 KΩ fiecare. Acestea asigură starea dorită de lipsă semnal, „0” logic.

Fig.2.6 Schema de principiu a blocului de detecție Fig.2.7 Fototranzistorul L-53P3BT[17]

Fig.2.8 Schema funcțională a blocului de detecție extern

Ieșirea către circuitele din teren se face prin mufa SV2 (corespondent X1 mufă de tip DB9). Atât timp cât diodele laser bat în suprafațele fotosensibile ale fototranzistorilor, aceștia se vor afla în conducție, iar placa Arduino Uno va recepționa patru semnale de „1” logic. Atunci când unul sau mai multe fascicule sunt întrerupte, tranzistorii cu pricina se vor închide, placa recepționând unul sau mai multe semnale de „0” logic. Mai exact, pinii A2 – A5 ai acesteia vor monitoriza dacă se realizează sau nu detecția fasciculului luminos emis de către diodele laser. Când pe unul dintre acești pini avem semnal „0” logic, se va trece în starea de alarmare. Transformarea semnalului din analog în digital este realizată de către ADC-urile din microcontroller.

Fig.2.9 Schema funcțională a blocului de detecție intern

Protocol de eliminare a erorilor la detecții false

Pentru creșterea siguranței, am ales să modulăm fasciculele laser în impulsuri temporizate la minim 6,25 μs, timp în care sunt scanate cele 4 porturi la care avem conectați fototranzistorii. După citirea celor 4 porturi, impulsul trimis pe portul A0 este adus în „0” logic, după care ciclul se reia. Am încercat astfel sa evităm câteva din posibilele probleme care pot apărea la recepția de flux luminos a tranzistorului.

2.4 Descrierea blocului central – centrala de alarmă

Placa de bază presupune corelarea mai multor module pentru a obține un efect unitar. Astfel, aceasta va realiza legătura dintre LCD, tastatură, periferice și platforma Arduino Uno R3, creând centrala propriu-zisă.

Pe aceasta vom regăsi:

Platforma Arduino, ce încorporează microcontroller-ul ales, Atmel Atmega328

Două porturi complexe ce se cuplează cu platforma Arduino

Un port pentru LCD, realizat folosind registrul de shiftare 74HC164, cu ajutorul căruia se emulează protocolul de comunicare cu ecranul – pe 4 biți (pentru comunicarea cu LCD-ul folosim un protocol 3-wire de tip serial).

Un port pentru emiterea semnalului către lasere – SV3

Un port pentru recepția semnalului de la fototranzistori – SV2

Diverse circuite integrate ce ajută la funcționarea celorlalte blocuri

Fig.2.10 Placa de bază a aplicației

Display-ul LCD

În cadrul aplicației curente, vom folosi modelul LCD1602 (acronimul în engleză pentru LCD este “Liquid Crystal Display”). Caracteristicile principale ale acestuia sunt următoarele:

– dispunere a informației pe 2 rânduri, a câte 16 caractere fiecare

– memorie cu 8 caractere custom (CGRAM)

– alimentare la 5V

– retroiluminare LED

– folosirea a 3 pini specifici pentru comenzile “enable”,”reset” și “read/write”

– magistrală de date multiplexată pe 4 biți

– portul de 8 biți pentru date permite încărcarea cu două fluxuri a câte 4 biți fiecare, ce se transmit consecutiv [18]

Fig.2.11 LCD-ul folosit în aplicație

Compatibilitatea cu controller-ul de display Hitachi HD44780(vezi Fig.2.12 dreapta) este asigurată datorită interfeței standard cu 16 pini. Acesta este cel mai comun controller folosit în practică, având o interfață simplă ce poate fi conectată la un microcontroller de uz general. Utilizând această combinație display-controller, putem afișa caracterele ASCII dorite. [19]

Tabelul 6. Descrierea pinilor controller-ului HD44780[19]

Circuitul 74HC164(vezi Fig.2.12 stânga) este un registru de shiftare amintit anterior, ce aparține familiei logice 74xx și nu poate controla în mod direct un curent foarte mare (se folosesc curenți de 16-20 mA). HC indică faptul că este un dispozitiv CMOS de viteză mare, ce va rula la voltaje mici. Modelul chip-ului este 164, viteza tipică a acestuia fiind de 78 MHz, în cazul de față utilizându-se la 400 KHz. [20]

Fig.2.12 Funcționarea in modul 3-wire

Pentru a restrânge numărul de porturi utilizate ale microcontroller-ului, alocate funcției de afișare, se utilizează comunicarea cu LCD-ul în mod serial. Se folosesc pinii denumiți generic:

– DATA – pe care se trimit datele în mod serial

– CLK – pentru sincronizarea datelor trimise

– Enable – pentru activarea comenzilor

Funcționarea se realizează în modul următor:

Placa Arduino trimite registrului de shiftare datele corespunzătoare afișării anumitor caractere ASCII prin pinul DATA și semnalul de sincronizare CLK

Registrul de shiftare prezentat trimite datele concatenate prin intermediul porturilor D4 – D7, valoarea registrului de selecție modificându-se utilizând pinul RS.

Controller-ul display-ului va decoda mesajele/comenzile primite prin magistrala paralelă a LCD-ului și va realiza sau nu afișarea. Modificarea contrastului LCD-ului se realizează utilizând potențiometrul R4. Pinul Enable dictează efectuarea afișării. Rezistența R2 se alege optim în funcție de modelul LCD-ului. Aici am ales o valoarea a acesteia de 240Ω.

Tastatură multiplexată cu 16 butoane(4 linii și 4 coloane)

Tastatura este o matrice multiplexată de 16 butoane (4 linii și 4 coloane). Fiecare combinație de pini corespunde unui simbol ASCII, respectiv 0123456789ABCD*#. Citirea multiplexată se realizează software, utilizându-se o bibliotecă specializată în acest scop(Keypad.h). Semnalele sunt trimise de la tastatură către placa Arduino prin intermediul pinilor AR_02 – AR_09.

Fig.2.13 Conexiunile tastaturii Fig.2.14 Tastatura folosită

Placa Arduino Uno R3

Arduino Uno este o placă de dezvoltare bazată pe microcontrollerul folosit în cadrul proiectului nostru, Atmel ATmega328, și conține toate elementele necesare pentru a-i oferi un suport optim acestuia. Programarea se face ușor, prin conectare la un calculator folosind un cablu USB și alimentând placa cu un adaptor AC-DC sau o baterie.

Fig.2.15 Platforma Arduino Uno R3[21]

Microcontrollerul integrat este bazat pe o arhitectură de tip RISC și combină:

– un procesor AVR pe 8 biți, având o frecvență de operare de maxim 16MHz, dată de un rezonator ceramic

– set de 131 instrucțiuni performante

– 32KB de memorie flash ISP, 1KB EEPROM, 2KB SRAM

– 32 regiștri de uz general a câte 8 biți

– 3 timere/countere cu moduri de comparație

– sistem de întreruperi

– bootloader-ul ocupă maxim 512 KB în memoria SRAM

– convertor ADC pe 10 biți cu 6 canale

– watchdog timer programabil cu un oscilator intern

Toate caracteristicile de mai sus îi permit microcontroller-ului sa atingă o viteză de procesare de 1 MIPS/MHz, suficient pentru proiectul nostru.

Fig.2.16 Microcontrollerul ATmega328[21]

În plus, platforma oferă următoarele facilități:

– conexiune USB

– buton de reset

– 14 pini de intrare/ieșire digitali

– 6 pini de intrare analogici

– cinci moduri software de economisire a energiei

– dispozitivul operează cu o tensiune de 5V [21]

Avantaje ale folosirii platformei Arduino:

set de periferice complet

set de instrucțiuni foarte bine pus la punct, eficient

utilitar software de programare prietenos cu utilizatorul

ieftin

Dezavantaje ale folosirii platformei Arduino:

arhitectura procesorului veche, există variante pe 16/32 biți, mult mai rapide [22]

Fig.2.17 Porturile de intrare/ieșire ale ATmega328[22]

Fiecare dintre cei 14 pini de I/O digitali (notați PD0 – PD7, PB0 – PB5) operează la 5V, oferind un curent maxim de 40mA și o rezistență tip pull-up de 20-50 KΩ. Avem practic 3 porturi (B,C,D) a câte 8 biți. Aceștia sunt, în fond, porturi bidirecționale, programabile în funcție de necesități. Unii dintre pini au funcții specializate:

Serial – pinii PD0 și PD1 – folosiți pentru a primi și transmite date TTL pe portul serial

Întreruperi externe – pinii PD2 și PD3 – folosiți pentru a declanșa o întrerupere

PWM – pinii PD3, PD5, PD6, PB3, PB2, PB1 – oferă o ieșire PWM pe 8 biți

SPI – pinii PB3, PB4, PB5 – aceștia suportă comunicare SPI

LED – pinul PB5 – când valoarea pinului este “HIGH”, LED-ul este aprins iar când aceasta devine “LOW”, va fi stins

Intrările analogice, notate PC0 – PC5 pe schema din Fig.2.17, oferă fiecare o rezoluție de 10 biți. În mod normal, pot măsura o tensiune de la 0 – 5V, deși este posibil să modificăm limita superioară folosind pinul AREF.

Fiecare microcontroller mai dispune de alți pini, fiecare dintre aceștia având o funcție bine definită ce nu poate fi modificată:

RESET – pinul ce permite resetarea microcontrollerului

VCC – pinul legat la sursa de tensiune/ alimentare

GND – masa

AVCC – conectare la alimentare pentru convertorul A/D

AREF – referința de tensiune pentru convertorul A/D

XTAL – pinii PD5 și PD6 – intrarea/ieșirea din oscilator și accesul la ceasul intern [21]

Fig.2.18 Conectarea pinilor la ATmega328

2.5 Descrierea blocului de alarmare acustică

Activarea sirenei este comandată de către placa Arduino Uno prin intermediul pinului A1, folosind un tranzistor BD139. Dioda 1N4004 are rol de protecție, iar rezistența de 240Ω polarizează baza tranzistorului, deschizându-l. Când se declanșează alarma, microcontrollerul va trimite un semnal de 5V(“1” logic) în baza tranzistorului, acesta se va deschide și va permite alimentarea sirenei. Drept rezultat, se va declanșa avertizarea sonoră.

Fig.2.19 Schema funcțională a blocului de alarmare acustică Fig.2.20 Sirena PS-523AQ

2.6 Descrierea blocului de alimentare

Alimentarea se va realiza pe baterii sau folosind un alimentator extern (9-12V), tensiunea fiind stabilizată la 5V intern cu un circuit L7805. Acesta este un regulator de tensiune simplu, cu 3 pini, ce oferă protecție contra scurtcircuitelor și supraîncălzirii. Va prelua tensiunea de la intrare (12V) și va oferi la ieșire o tensiune constantă, de 5V.

Fig.2.21 Schema funcțională a blocului de alimentare

Odată introdus jack-ul de alimentare J1, se vor decupla bateriile și vom folosi doar alimentarea externă.

Rolul diverselor componente:

Dioda D2 – protecția bateriilor la curent invers ce poate să apară datorită alimentării în paralel

Dioda D4 – protecție pentru respectarea polarității alimentării

Condensatoarele C3 și C4 – destinate filtrării tensiunii de riplu și pentru utilizarea la frecvențe înalte

Condensatorul C1 – destinat netezirii tensiunii de alimentare

Condensatoarele C2 și C5 – buffere acumulatoare de energie pentru alimentarea montajului

Dioda D5 – protecție la curenti inverși ce pot apărea

Alimentarea plăcii Arduino Uno se face prin main-board, la pinii ICSP. ICSP este un port folosit exclusiv pentru programare, prin protocol SPI.

Fig.2.22 Alimentarea plăcii Arduino Uno

2.7 Funcționarea sistemului

Dupa realizarea logării, setării orei și a datei, sistemul intră în starea de supraveghere. Odată întrerupt unul dintre fasciculele laser, sistemul avertizează acustic și afișează pe display un caracter în dreptul porții la care a avut loc efracția. Evenimentul se va înregistra în memoria EEPROM. Anularea alarmei se face introducând codul de anulare “#” + primele trei cifre din parolă.

Logarea se realizează introducând parola de administrator, formată din patru digiți.

Fig.2.23 Logarea în sistem

Imediat dupa logare, sistemul trece în modul de schimbare a parolei, utilizatorul fiind interogat cu privire la schimbarea acesteia. Dacă se modifică parola, aceasta rămâne stocată la adresa 991 din memoria EEPROM.

Fig.2.24 Schimbarea parolei

A treia stare principală din inițializarea sistemului este reglarea orei, minutului și a datei curente în format zz/ll/aa, introducerea acestora făcându-se de la tastatură, formând efectiv cifrele. Sistemul ne va atenționa în cazul eventualelor erori de introducere.

Fig.2.25 Setarea datei și orei

Dupa setarea inițială, sistemul trece în starea de monitorizare, activându-se cele 4 bariere laser. În caz de alarmare, pe display va fi indicat evenimentul ce a apărut pe poarta respectivă, printr-un simbol “!”.

Fig.2.26 Exemplu de alarmare

Pentru interogarea și accesarea opțiunilor, se apasă “#” și codul opțiunii respective, după care se vor urma instrucțiunile afișate pe display.

Opțiunile existente sunt:

– “01” – reintroducere parolă sistem

– “05” – schimbare parolă

– “20” – setare dată

– “40” – monitorizare sistem

– “60” – interogare memorie alarme(verificarea momentelor evenimentelor ce au avut loc)

Totodată, pentru activarea sau dezactivarea barierelor laser, putem folosi codurile următoare:

-“A0”,”B0”,”C0”,”D0” – pentru dezactivare

-“A1”,”B1”,”C1”,”D1” – pentru activare

În timpul setărilor, pentru revenirea la pasul anterior opțiunii respective utilizăm caracterul “*”.

2.8 Descrierea codului microcontroller-ului

Programarea se realizează utilizând mufa USB-B care se găsește pe platforma Arduino Uno. Soft-ul utilizat este Atmel Studio 6.1, cu sketch integrat de Arduino Uno.

Prima parte a codului o constituie secțiunea de setup(void setup()), în care sunt inițializate cu valori:

– variabilele globale (ora, minut, secunda, optiune, an, luna, ziua, al_activa, ee_parola)

– regiștrii întreruperilor de ceas(TCCR1A și TCCR1B)

– string-uri mesaje(șiruri de caractere)

– inițializări porți serial(Serial.begin, srlcld.begin). Portul serial al microcontroller-ului este inițializat la viteza de transmisie de 9600baud, iar LCD-ul este setat la 16 coloane și 2 rânduri.

A doua parte a codului o constituie funcția void_loop(), în care microcontroller-ul ciclează cu o frecvență de 16 MHz stările finite ale automatului și condițiile de funcționare ale acestuia.

Stările automatului sunt descrise cu ajutorul variabilei globale optiune, care ia valori de tip întreg (int). Stările principale caracterizate de următoarele valori ale variabilei optiune sunt:

– optiune = 0 apelează o funcție care afișează pe ecran numele temei, după care se trece la următorul pas.

– optiune = 1 apelează o funcție care citește parola din memoria EEPROM și o compară cu ceea ce utilizatorul introduce de la tastatură.

– optiune = 5 oferă posibilitatea schimbării parolei de sistem, afișând după caz încheierea cu succes a operației.

– optiune = 20 setează data, ora și minutul sistemului, corectând pe parcursul interogărilor utilizatorului datele introduse pentru acești parametri. Pe parcursul acestor pași, se pot da comenzi de anulare a setării, apăsând caracterul “B” sau de revenire la un pas anterior, apăsând caracterul “*”.

– optiune = 40 pune sistemul în starea de monitorizare a celor 4 bariere laser. Acestea pot fi activate folosind comenzile aferente descrise anterior. Totodată, sistemul înregistrează în memoria EEPROM evenimentul apărut pe poartă, incluzând simbolul porții(A,B,C,D), ora și data. Același mesaj poate fi transmis și pe portul serial, setat la 9600baud, în cazul în care variabila serial_ON are valoarea 1.

– optiune = 60 interoghează memoria EEPROM pentru a citi evenimentele apărute. Navigarea prin evenimentele înregistrate în memorie se face cu ajutorul butoanelor “C”(înainte) și “D”(înapoi).

Bibliotecile folosite:

– Sketch.h inițializează bootloader-ul Arduino și permite folosirea funcțiilor și macro-urilor predefinite, specifice acestei platforme.

– Keypad.h ne oferă o interfață simplă pentru folosirea unei matrici de butoane. Aceasta suportă combinații multiple de butoane.

– ShiftRegLCD123.h poate conecta un LCD compatibil Hitachi HD44780, bazându-se pe un registru de shiftare 74HC164, folosind doar 3 pini digitali ai platformei Arduino.

Bibliotecile standard de la AVR folosite sunt delay.h, interrupt.h, pgmspace.h, eeprom.h.

2.9 Modalități de îmbunătățire a sistemului

Folosirea unor bariere laser cu mai multe fascicule, amplasate orizontal pe înălțime

Folosirea laserelor de culoare albastră, mai greu de detectat de către ochiul uman

Modificarea trenului de impulsuri cu un cod îmbunătățit, pentru reducerea erorilor la detecție

Folosirea unor fototranzistori ce oferă o curbă de răspuns mai bună

Folosirea unui circuit de ceas RTC(real-time clock), ce are un consum optimizat low-power

Implementarea unui modul GSM ce va permite trimiterea unui SMS proprietarului, în momentul în care se realizează efracția

Folosirea unei platforme mai performante ce oferă viteză mai bună, mai multe porturi și RAM de capacitate mai mare

Display mai mare pentru afișarea mai multor date, va facilita o utilizare mai ușoară a sistemului

Concluzii

Prezenta lucrare de licență tratează fotodetectorii cu aplicații în detecția perimetrală. Structurarea a fost realizată în două capitole principale, ce evidențiază și delimitează într-un mod precis părțile teoretică, respectiv practică.

În capitolul teoretic am realizat o introducere în lumea fotodetectorilor, prezentând pe scurt caracteristicile generale ale acestora și tipurile utilizate cel mai des în practică. S-a realizat o scurtă descriere a fotoconductivității, ce stă la baza dispozitivelor despre care discutăm. A urmat enunțarea unor noțiuni generale ale fotorezistorilor și fotodiodelor. Discuția despre fototranzistori a fost una mai cuprinzătoare, intrând în detalii constructive și insistând pe caracteristicile/proprietățile definitorii ale acestora. Acest lucru este datorat întâlnirii foarte dese a fototranzistorilor în domeniul ce prezintă interes pentru această lucrare. Un subcapitol scurt prezintă diversele aplicații în care pot fi utilizați fotodetectorii. Noțiuni generale ale diodelor laser și microcontrollerelor au fost introduse, dată fiind folosirea acestor componente în montajul experimental. Capitolul ce cuprinde prezentarea acestuia descrie în detaliu blocurile componente ale sistemului realizat, modul de funcționare și nu în cele din urmă, prezintă succint codul folosit la programarea microcontrollerului.

Contribuția proprie la această lucrare constă în studiul, respectiv sistematizarea unui amplu material bibliografic referitor la funcționarea diverselor tipuri de fotodetectori, diode laser și microcontrollere, precum și în realizarea fizică a unui sistem de detecție perimetrală performant, ce poate fi cu ușurință îmbunătățit și modificat după dorința proprietarului, diverse modalități de a realiza acest lucru fiind prezentate în subcapitolul 2.9.

Singurul dezavantaj al fototranzistorilor este dat de inconsistența câștigului în raport cu intensitatea luminoasă. Aceștia sunt în consecință ideali pentru utilizarea drept întrerupătoare optice. Fototranzistorii nu oferă câștigul fotoconductorilor, nici timpii de răspuns ai fotodiodelor, ci mai degrabă o cale de mijloc. Funcționează însă cu un zgomot redus, oferă o amplificare rezonabilă și cel mai important, o sensibilitate redusă la fluxul luminos de fond. Spre deosebire de fotorezistențe, care nu pot detecta impulsuri rapide, fototranzistorii permit comutarea rapidă. Toate acestea, la care se adaugă și alimentarea la tensiuni mici, lucru de dorit în aplicații de detecție perimetrală, fac evidente motivele alegerii fototranzistorilor drept elemente receptoare în montajul experimental.

Fotodetectorii reprezintă una dintre ramurile aflate în continuă dezvoltare ale tehnologiei din ziua de astăzi, utilizări noi ale acestora apărând periodic. Diversitatea acestora, atât în modalitatea de realizare, cât și în caracteristici, a grăbit introducerea lor într-o gamă largă de dispozitive, ce servesc într-o multitudine de domenii. Folosirea lor în detecția perimetrală este de cele mai multe ori cea mai bună variantă existentă pe piață, fiind superioare multor altor tipuri de sisteme ce utilizează alte principii de funcționare, dar având ca scop final împiedicarea efracțiilor.

Anexă

Codul sursă folosit la programarea microcontroller-ului

/*

* Main.cpp

*/

#ifndef SKETCH_H_

#include "Sketch.h"

#endif

#include "Keypad.h"

#include <util/delay.h>

#include <avr/interrupt.h>

#include <avr/pgmspace.h>

#include <avr/eeprom.h>

#include "ShiftRegLCD123.h"

#define stanga 24

#define dreapta 30

#define TRUE 1

#define FALSE 0

#define BAUD 9600

//Variabile globale––––––––

int optiune,inc,ct_1,ct_2,ct_3;

int secunda,minut,ora,ziua,luna,anul,bisect,print_ceas;

int ziua_nr, set_ora_dvi;

unsigned char tasta,nr_tasta,ascii_nr[4],key_combo[5];

char parola[5];

char v_opti[2];uint8_t optos;

char cmd[4];

int serial_ON;

int lcd_blink_pct[3];// [0]=coloană, [1]=rând, [2] = enable/disable

int al_activa ;// 0b00 nici una activă, 0b1111 = toate active

//varibile stocate în EEPROM

uint8_t ee_parola[5], ee_alarma[4], ee_cont;

//–––––––––––––-

const byte dataPin = 11; // SR Data from Arduino pin 10

const byte clockPin = 12; // SR Clock from Arduino pin 11

const byte enablePin = 10; // LCD enable from Arduino pin 12

// Instantiate an LCD object using ShiftRegLCD123 wiring.

// LCD enable directly from Arduino.

ShiftRegLCD123 srlcd(dataPin, clockPin, enablePin, SRLCD123);

//KEYPAD–––––––––––-

const byte numRows= 4; //number of rows on the keypad

const byte numCols= 4; //number of columns on the keypad

//keymap defines the key pressed according to the row and columns just as appears on the keypad

char keymap[numRows][numCols]=

{

{'D', 'C', 'B', 'A'},

{'#', '9', '6', '3'},

{'0', '8', '5', '2'},

{'*', '7', '4', '1'}

};

//Code that shows the the keypad connections to the arduino terminals

byte rowPins[numRows] = {9,8,7,6}; //Rows 0 to 3

byte colPins[numCols]= {5,4,3,2}; //Columns 0 to 3

//initializes an instance of the Keypad class

Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

//––––––––––––––

void lcdintro1();

void ora_zero();

void lcd_crs_blink_at(uint8_t col,uint8_t rind);

void lcdscroll(uint8_t nrscroll, uint8_t directie);

void lcd_2int(uint8_t col, uint8_t rind,uint8_t st);

void lcd_ch(uint8_t col, uint8_t rind,char *c );

void lcd_print_data(uint8_t col, uint8_t rind);

void lcd_print_ceas(uint8_t col, uint8_t rind);

void lcd_blink_puncte( uint8_t col, uint8_t rind,uint8_t enbl);

void lcd_crs_off();

void sistem_init();

void sistem_set_time();

void sistem_set_user();

void sistem_init_alarm();

void sistem_set_alarm();

void sistem_watch();

void calculeaza_data();

// S E T U P

void setup()

{

// inițializare LCD și setarea mărimii display-ului

// LCD cu 16 coloane x 2 linii, font normal

srlcd.begin(16,2);

Serial.begin(9600);

//srlcd.backlightOn();

// inițializări Timer1

cli(); // disable global interrupts

TCCR1A = 0; // set entire TCCR1A register to 0

TCCR1B = 0; // same for TCCR1B

// set compare match register to desired timer count:

OCR1A = 15624;

// turn on CTC mode:

TCCR1B |= (1 << WGM12);

// Set CS10 and CS12 bits for 1024 prescaler:

TCCR1B |= (1 << CS10);

TCCR1B |= (1 << CS12);

// enable timer compare interrupt:

TIMSK1 |= (1 << OCIE1A);

sei(); // enable global interrupts

//INIȚIALIZARE pini IMPULS , ACUSTIC, FOTOTRANZISTORI

sistem_init_alarm();

// inițializări variabile globale

optiune = 0; //stare finită

inc = 0 ; //contor

ct_1 = 0;ct_2 = 0;ct_3 = 0;//contoare

secunda = 0; minut = 34; ora = 22;

ziua = 19; luna = 6; anul = 2014;

//bariera 1 = 0b0001 , bariera 2 = 0b0010 , bariera 3 = 0b0300 , bariera 4 = 0b000

al_activa = 0b0000;//toate barierele active

ee_parola[1] ='7';ee_parola[2] ='7';ee_parola[3] ='7';ee_parola[4] ='7';

eeprom_update_block ((const void*) ee_parola,(void *)991,5);

// eeprom_read_block (( void *) ee_parola , ( const void *) 10, 5 ) ;

//eeprom_update_block (( const void *) ee_parola , ( void *) 10, 5);

}

//–––––––––––––––

void lcdscroll(uint8_t nrscroll, uint8_t directie)

{uint8_t i;

//Shift entire display left=24 , right =30

for(i=0;i < nrscroll ; i++){

srlcd.command(directie);

_delay_ms(300);

}

}

void ora_zero(){ora=0;minut=0;secunda=0;}

void lcdintro1()

{

srlcd.clear();

srlcd.setCursor(7,0);

srlcd.print ("SISTEM DE ALARMARE PERIMETRALA");

_delay_ms(200);

lcdscroll(28,stanga);

srlcd.clear();

/* srlcd.setCursor(12,1);

srlcd.print("4 BARIERE LASER ");

_delay_ms(200);

lcdscroll(30,stanga);

*/

srlcd.clear();

srlcd.setCursor(0,0);

optiune = 1;//exit intro

}

void lcd_crs_blink_at(uint8_t col,uint8_t rind)

{

//Display on Cursor blinking

srlcd.setCursor(col,rind);

srlcd.command(15);

}

//Display on Cursor off

void lcd_crs_off()

{

srlcd.command(12);

}

//––––––––––––-

void lcd_2int(uint8_t col, uint8_t rind,uint8_t st)

{

ascii_nr[0] = st%10 ; //unități

ascii_nr[1] = (st%100 – st%10)/10 ; //zeci

//ascii_nr[2] = (st%1000-st%100)/100 + 48; //sute

//ascii_nr[3] = (st%10000-st%1000)/1000 + 48;//mii

//if(ascii_nr[0]=='0')ascii_nr[0]=' ';

//if((ascii_nr[0]=='0')&&(ascii_nr[1]=='0'))ascii_nr[1]=' ';

//srlcd.command(1);

srlcd.setCursor(col,rind);

//if(ascii_nr[0] != '0'){srlcd.print(ascii_nr[0]);}

//if((ascii_nr[0] != '0')&&(ascii_nr[1] != '0')){srlcd.print(ascii_nr[1]);}

srlcd.print(ascii_nr[1]);

srlcd.print(ascii_nr[0]);

}

void lcd_ch(uint8_t col, uint8_t rind,char *c )

{ //print șir de caractere la coloană și rând

srlcd.setCursor(col,rind);

srlcd.print (c);

}

void lcd_print_data(uint8_t col, uint8_t rind)

{

//print data

lcd_2int(col,rind,ziua);

lcd_ch(col+2,rind,"/");

lcd_2int(col+3,rind,luna);

lcd_ch(col+5,rind,"/");

lcd_2int(col+6,rind,anul%2000);

}

void lcd_print_ceas(uint8_t col, uint8_t rind)

{ //print ceas

lcd_2int(col,rind,ora);lcd_2int(col+3,rind,minut);

}

void lcd_blink_puncte( uint8_t col, uint8_t rind,uint8_t enbl)

{

lcd_blink_pct[0] = col;

lcd_blink_pct[1] = rind;

lcd_blink_pct[2] = enbl;

}

// T I M E R E

ISR (TIMER1_COMPA_vect) // action to be done every 1 sec

{

if(print_ceas == 1){ lcd_print_ceas(0,0);print_ceas = 0;}

secunda=secunda + 1;

if(secunda%20 == 0){calculeaza_data();}

if(secunda >= 60){ minut = minut+1; secunda = 0;}

if(minut >= 60){ora=ora+1; minut=0;secunda=0;}

if((ora >= 24)){ora_zero(); ziua=ziua+1;} //corecție +3 secunde

if((ziua>31)&&((luna==1)||(luna==3)||(luna==5)||(luna==7)||(luna==8)||(luna==10))) {ziua=1;luna=luna+1;ora_zero();}

if((ziua>31)&&(luna==12)){ziua=1;luna=1;anul=anul+1;ora_zero();}

if((ziua>30)&&((luna==4)||(luna==6)||(luna==9)||(luna==11))) {ziua=1;luna=luna+1;ora_zero();}

if(ziua > 29 && luna == 2 && bisect == 1 ){luna=luna+1;ziua=1;ora_zero();}

if(ziua > 28 && luna == 2 && bisect == 0 ){luna=luna+1;ziua=1;ora_zero();}

//print ceas

if(optiune == 41){

if(secunda%2 == 0 ){lcd_ch( 2,0,":");}

if(secunda%2 != 0 ){lcd_ch( 2,0," ");}

if(secunda == 59 ){lcd_print_ceas(0,0);}

if(secunda == 59 && minut == 59){lcd_print_data(8,0);}

}

}

//–––––––––

void sistem_set_user()

{

lcd_ch(0,0,"Sistem users ");

lcd_ch(0,1,"Nr USR ");

}

//OPTIUNE 10 – 23 –––-

void sistem_set_time()

{

}

//INITALIZARE PORTURI SENZORI

void sistem_init_alarm()

{

DDRC = (1<<PINC0)| //Setare port digital out

(1<<PINC1)| //Setare port digital out

(0<<PINC2)| //Setare port analog input

(0<<PINC3)| //Setare port analog input

(0<<PINC4)| //Setare port analog input

(0<<PINC5); //Setare port analog input

PORTC = 0x00; // Activare Pull-Up

}

//C A L C U L E C A L E N D A R

void calculeaza_data()

{

uint8_t i;

int day_code,d1, d2, d3;// cu a câta zi din săptămână începe anul 0=Duminica, 1=Luni,..6=Sâmbătă

int zi_lu,d_day,nr_zile;zi_lu=0;

int days_in_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

// calcul an bisect

if((anul% 4 == FALSE && anul%100 != FALSE )||( anul%400 == FALSE)){bisect = 1;

days_in_month[2]=29; }//daca anul e bisect luna are 29 de zile

else{bisect = 0;}

// calcul ziua săptămânii

d1 = (anul – 1.)/ 4.0;

d2 = (anul – 1.)/ 100.;

d3 = (anul – 1.)/ 400.;

day_code = (anul + d1 – d2 + d3) %7;

for(i=1;i<luna;i++){zi_lu = days_in_month[i]+zi_lu;}

nr_zile=(zi_lu + ziua – 1);//câte zile din an au trecut

if((ziua<7)&&(luna==1)){d_day=(day_code+ziua)%7;}

d_day=((nr_zile%7)+day_code+7)%7;

//return d_day = ziua curenta;

ziua_nr = d_day;

// ora de vara / iarna

//ultima duminică din martie (ora 03:00 devine 04:00),

// și ultima duminică din octombrie (ora 04:00 devine 03:00).

if((luna == 3) && (ziua > 24) &&(set_ora_dvi==0)&&(ora == 3)&&(d_day == 0) && (minut == 0) )

{

//scroll_to_lcd("CEASUL TRECE LA ORA DE VARA");

ora = ora+1;

set_ora_dvi = 1;

}

if((luna == 10) && (ziua > 24) &&(set_ora_dvi==0) && (ora == 4)&&(d_day == 0) && (minut == 0) )

{

//scroll_to_lcd("CEASUL TRECE LA ORA DE IARNA ");

ora = ora-1;

set_ora_dvi = 1;

}

if((luna == 4 || (luna == 11)) && (ziua >1) ){set_ora_dvi = 0;}

}

––––––––––––––-

//L O O P

void loop()

{

char keypressed = myKeypad.getKey();

if(optiune == 0){ lcdintro1();srlcd.clear();optiune = 1;}

//––––––––––––––

// parola + inițializare ora / data sistem

//*****************************************

if(optiune == 1) {

srlcd.clear();

eeprom_read_block (( void *) ee_parola , ( const void *) 991, 5 ) ;

lcd_ch(0,0,"Parola sistem: ");

lcd_ch(6,1,"–-");

lcd_crs_blink_at(6 ,1);

optiune = 2;

}

if(optiune == 2){

if(ct_1 > 0){lcd_ch(5+ct_1,1,"*");}

lcd_crs_blink_at(6+ct_1 ,1);optiune = 3;}

if(optiune == 3){

if (keypressed != NO_KEY){

parola[ct_1] = tasta;

optiune = 2;

ct_1 = ++ct_1 ;

}

if(ct_1 > 4 ){

if (parola[1] == ee_parola[1] &&

parola[2] == ee_parola[2] &&

parola[3] == ee_parola[3] &&

parola[4] == ee_parola[4] ){ct_1 = 0;

// Verificare Sunet OK

PORTC =1<<PINC1; _delay_ms(100);

PORTC =0<<PINC1; _delay_ms(200);

PORTC =1<<PINC1; _delay_ms(100);

PORTC =0<<PINC1; _delay_ms(100);

optiune = 5;} //PAROLA OK !!!

else{lcd_ch(0,0,"Parola gresita ");_delay_ms(1000);

ct_1 = 0;

optiune = 1;}

}

}

//SCHIMBARE PAROLA

//**************************

if(optiune == 5) {

srlcd.clear();

lcd_ch(0,0,"Schimbare Parola");

lcd_ch(0,1,"DA= A / NU= B ");

lcd_crs_blink_at(14 ,1);

optiune = 6;tasta = 0;

}

if(optiune == 6) {

//if (keypressed != NO_KEY){

if(tasta == 'A'){optiune = 7;}

if(tasta == 'B'){optiune = 20;}

//}

}

if(optiune == 7){

srlcd.clear();

lcd_ch(0,0," Parola noua :");

_delay_ms(1000);

lcd_ch(6,1,"–-");

lcd_crs_blink_at(6 ,1);

optiune = 9;

tasta = 0;

ct_1=0;//resetăm contorul

}

if(optiune == 8){

if(ct_1 > 0){lcd_ch(5+ct_1,1,"*");}

lcd_crs_blink_at(6+ct_1 ,1);optiune = 9;

}

if(optiune == 9){

if (keypressed != NO_KEY){

if(tasta >47 && tasta < 58)

{ee_parola[ct_1] = tasta;

optiune = 8;

ct_1 = ct_1 + 1;}

}

if(ct_1 > 4) {lcd_ch(0,0,"PAROLA SCHIMBATA");

eeprom_update_block ((const void*) ee_parola,(void *)991,5);

_delay_ms(1000);

optiune = 1;}

}

//–––––––––––––-

// SISTEM SETARE DATA , ORA , MINUT //

//****************************************

if(optiune == 20) {

lcd_ch(0,0,"Sistem SET TIME");

lcd_ch(0,1,"hh:mm zz/ll/an");

lcd_crs_blink_at(0 ,1);

ct_1 = 0;

delay(1000);

lcd_print_ceas(0,1);

lcd_print_data(8,1);

optiune = 21;

}

//––––-Seteaza ORA ––––––

if(optiune == 21){

if( keypressed == 'B'){optiune = 40;}

lcd_crs_blink_at(0,1);

if(keypressed >47 && keypressed <51 && keypressed != NO_KEY){

keypressed = keypressed -48;

ora =keypressed*10;

//ora =ora*10;

lcd_print_ceas(0,1);

optiune = 22;

}

}

if(optiune == 22){

lcd_crs_blink_at(1,1);

if( keypressed == 'B'){optiune = 40;}

if(keypressed >47 && keypressed <58 && keypressed != NO_KEY){

keypressed = keypressed-48;

ora = ora -ora%10 + keypressed ;

if(ora > 23 ){ora = keypressed; }

lcd_print_ceas(0,1);

optiune = 23;

}

}

//––––-Setează MINUTUL ––––-

if(optiune == 23){

if( keypressed == 'B'){optiune = 40;}

lcd_crs_blink_at(3,1);

if(keypressed >47 && keypressed <54 && keypressed != NO_KEY ){

keypressed =keypressed – 48;

minut = keypressed * 10;

optiune = 24;

lcd_print_ceas(0,1);

}

}

if(optiune == 24){

lcd_crs_blink_at(4,1);

if(keypressed >47 && keypressed <58 && keypressed != NO_KEY){

keypressed = keypressed – 48;

minut = minut – minut%10 + keypressed;

lcd_print_ceas(0,1);

optiune = 25;}

}

//–––––Setează Ziua –––––-

if(optiune == 25){

lcd_crs_blink_at(8,1);

if(keypressed >47 && keypressed <52 && keypressed != NO_KEY){

keypressed = keypressed – 48;

ziua = keypressed * 10;

lcd_print_data(8,1);

optiune = 26;}

}

if(optiune == 26){

lcd_crs_blink_at(9,1);

if(keypressed >47 && keypressed <58 && keypressed != NO_KEY){

keypressed = keypressed – 48;

ziua = ziua/10;

ziua = ziua*10;

ziua = ziua + keypressed;

if(ziua > 31 ){ziua = keypressed;}

if(ziua < 1) {ziua = 1;}

lcd_print_data(8,1);

optiune = 27;}

}

//–––––Setează LUNA –––––

if(optiune == 27){

lcd_crs_blink_at(11,1);

if(keypressed >47 && keypressed <50 && keypressed != NO_KEY){

keypressed = keypressed – 48;

luna = keypressed * 10;

lcd_print_data(8,1);

optiune = 28;}

}

if(optiune == 28){

lcd_crs_blink_at(12,1);

if(keypressed >47 && keypressed <58 && keypressed != NO_KEY){

keypressed = keypressed – 48;

luna = luna – luna%10 + keypressed;

if(luna > 12 ){luna = keypressed;}

if(luna < 1 ){luna = 1;}

lcd_print_data(8,1);

optiune = 29;}

}

//–––––Setează ANUL ––––-

if(optiune == 29){

lcd_crs_blink_at(14,1);

if(keypressed >47 && keypressed <58 && keypressed != NO_KEY){

keypressed = keypressed – 48;

anul = anul – anul%100;

anul = anul + keypressed*10;

lcd_print_data(8,1);

optiune = 30;

}

}

if(optiune == 30){

lcd_crs_blink_at(15,1);

if(keypressed >47 && keypressed <58 && keypressed != NO_KEY){

keypressed = keypressed – 48;

anul = anul – anul%10;

anul = anul +keypressed;

lcd_print_data(8,1);

lcd_print_ceas(0,1);

calculeaza_data();

optiune = 31;

}

}

if(optiune == 31){ lcd_ch(0,0,"SET OK?Da=A Nu=B");

lcd_crs_blink_at(6,0);

optiune = 32;}

if(optiune == 32){ if( keypressed == 'A'){optiune = 40;}

if( keypressed == 'B'){optiune = 20;}

//––––––––––––-

// SISTEM ÎN LUCRU

//

// lcd_ch(0,1,"A |B |D |C |"); // sistem dezarmat

// lcd_ch(0,1,"A* B* D* C* "); // sistem dezarmat

// lcd_ch(0,1,"A3 B* D* C* "); // sistem cu 3 evenimente pe poarta A

if(optiune == 40){

srlcd.begin(16,2);

srlcd.clear();

lcd_print_data(8,0);

lcd_print_ceas(0,0);

lcd_crs_off();

// "-A! -B -C -D! "

lcd_ch(0,1," A B C D "); // sistemul e activ

if(bitRead(al_activa,0)){lcd_ch(0,1,"-");}

if(bitRead(al_activa,1)){lcd_ch(4,1,"-");}

if(bitRead(al_activa,2)){lcd_ch(8,1,"-");}

if(bitRead(al_activa,3)){lcd_ch(12,1,"-");}

optiune = 41;

}

if(optiune == 41){

// PROTOCOL DETECȚIE EMISIE RECEPȚIE IMPULSURI LASER

// CU FOTOTRANZISTORI ÎN MONTAJ AMPLIFICATOR COLECTOR COMUN

PORTC = 1<<PINC0; //puls UP

_delay_ms(1);

// dacă tranzistorul este închis și pe pinul alocat apare 1 LOGIC avem eveniment

// pe care îl semnalizăm și înregistrăm în memorie

// al_activa[4] este condiția de utilizare pe poarta respectivă

if ((!(PINC & 1<<2)) && (bitRead(al_activa,0))){

lcd_ch(2,1,"!");// indicație eveniment

ee_alarma[0] = 'A'; // numărul porții

ee_alarma[1] = ziua; // ziua curentă

ee_alarma[2] = luna; // luna curentă

ee_alarma[3]=ora; // ora curentă

ee_alarma[4]=minut;// minutul

if(ee_cont > 900){ee_cont = 0;}//verificare memorie plină cu ajutorul contorului ee_cont

else{ee_cont = ee_cont+5;} // incrementare contor memorie

//scrie in memorie evenimentul

eeprom_update_block ((const void*) ee_alarma,(void *)ee_cont,5);

// activare avertizare

PORTC = 1<<PINC1;

//trimite mesaj pe serial la 9600baud

if( serial_ON == 1 ){

Serial.println("A");

Serial.print(ee_alarma[1]);

Serial.print(ee_alarma[2]);

Serial.print(ee_alarma[3]);

Serial.print(ee_alarma[4]); }

optiune = 40;

}

if ((!(PINC & 1<<3)) && (bitRead(al_activa,1))){

lcd_ch(6,1,"!");// indicație eveniment

ee_alarma[0] = 'B'; // numarul porții

ee_alarma[1] = ziua; // ziua curentă

ee_alarma[2] = luna; // luna curentă

ee_alarma[3]=ora; // ora curentă

ee_alarma[4]=minut;// minutul

if(ee_cont > 900){ee_cont = 0;}//verificare memorie plină cu ajutorul contorului ee_cont

ee_cont = ee_cont+5; // incrementare contor memorie

//scrie în memorie evenimentul

eeprom_update_block ((const void*) ee_alarma,(void *)ee_cont,5);

// activare avertizare

PORTC = 1<<PINC1;

//trimite mesaj pe serial la 9600baud

if( serial_ON == 1 ){

Serial.println("B");

Serial.print(ee_alarma[1]);

Serial.print(ee_alarma[2]);

Serial.print(ee_alarma[3]);

Serial.print(ee_alarma[4]);}

optiune = 40;

}

if ((!(PINC & 1<<4)) && (bitRead(al_activa,2))){

lcd_ch(10,1,"!");// indicație eveniment

ee_alarma[0] = 'C'; // numărul portii

ee_alarma[1] = ziua; // ziua curentă

ee_alarma[2] = luna; // luna curentă

ee_alarma[3]=ora; // ora curentă

ee_alarma[4]=minut;// minutul

if(ee_cont > 900){ee_cont = 0;}//verificare memorie plină cu ajutorul contorului ee_cont

ee_cont = ee_cont+5; // incrementare contor memorie

//scrie în memorie evenimentul

eeprom_update_block ((const void*) ee_alarma,(void *)ee_cont,5);

// activare avertizare

PORTC = 1<<PINC1;

//trimite mesaj pe serial la 9600baud

if( serial_ON == 1 ){

Serial.println("C");

Serial.print(ee_alarma[1]);

Serial.print(ee_alarma[2]);

Serial.print(ee_alarma[3]);

Serial.print(ee_alarma[4]);}

optiune = 40;

}

if ((!(PINC & 1<<5)) && (bitRead(al_activa,3))){

lcd_ch(14,1,"!");// indicatie eveniment

ee_alarma[0] = 'D'; // numarul portii

ee_alarma[1] = ziua; // ziua curenta

ee_alarma[2] = luna; // luna curenta

ee_alarma[3]=ora; // ora curenta

ee_alarma[4]=minut;// minutul

if(ee_cont > 900){ee_cont = 0;}//verificare memorie plina cu ajutorul contorului ee_cont

ee_cont = ee_cont+5; // incrementare contor memorie

//scrie in memorie evenimentul

eeprom_update_block ((const void*) ee_alarma,(void *)ee_cont,5);

// activare avertizare

PORTC = 1<<PINC1;

//trimite mesaj pe serial la 9600baud

if( serial_ON == 1 ){

Serial.println("D");

Serial.print(ee_alarma[1]);

Serial.print(ee_alarma[2]);

Serial.print(ee_alarma[3]);

Serial.print(ee_alarma[4]);

}

optiune = 40;

}

_delay_ms(10);

PORTC = 0<<PINC0; //puls DOWN

_delay_ms(10);

}

//––––––––––––––

// CITIRE '#' MATRICE OPTIUNI

//******************************************

if(keypressed == '#' ){ optiune = 50;}

if(optiune == 50){lcd_ch(0,0,"NR.OPTIUNE= #– ");lcd_crs_blink_at(13,0);

keypressed = NO_KEY;

optiune = 51;}

if(optiune == 51 && keypressed != NO_KEY){

//primul digit

v_opti[0] = keypressed;

srlcd.setCursor(13,0);

srlcd.print(v_opti[0]);

lcd_crs_blink_at(14,0);

keypressed = NO_KEY;

optiune = 52; }

if(optiune == 52 && keypressed != NO_KEY){

//al doilea digit

v_opti[1] = keypressed;

srlcd.setCursor(14,0);

srlcd.print(v_opti[1]);

keypressed = NO_KEY;

srlcd.command(8);//dezactivează cursorul

optiune = 53;

}

if(optiune == 53){

srlcd.clear();

//calcul opțiune

// activare anulare bariere #A0 =dezactivat #A1 = activat

if(v_opti[0]=='A' && v_opti[1]== '1'){bitSet(al_activa,0);optiune = 40;}

if(v_opti[0]=='B' && v_opti[1]== '1'){bitSet(al_activa,1);optiune = 40;}

if(v_opti[0]=='C' && v_opti[1]== '1'){bitSet(al_activa,2);optiune = 40;}

if(v_opti[0]=='D' && v_opti[1]== '1'){bitSet(al_activa,3);optiune = 40;}

// dezactivare bariere

if(v_opti[0]=='A' && v_opti[1]== '0'){bitClear(al_activa,0);optiune = 40;}

if(v_opti[0]=='B' && v_opti[1]== '0'){bitClear(al_activa,1);optiune = 40;}

if(v_opti[0]=='C' && v_opti[1]== '0'){bitClear(al_activa,2);optiune = 40;}

if(v_opti[0]=='D' && v_opti[1]== '0'){bitClear(al_activa,3);optiune = 40;}

if(v_opti[0]>47 && v_opti[0]<58){

v_opti[0]=v_opti[0] – 48;

v_opti[1]=v_opti[1] – 48;

optos = (((v_opti[0])*10) + (v_opti[1]));

if(optos!=1 && optos!=5 && optos!=20 && optos!=40 && optos!=60){ optiune =40; }

else{optiune = optos;}

}

}

//––––––––––––––-

// INTEROGARE MEMORIE EEPROM

//*******************************************

if(optiune == 60){

srlcd.begin(16,2);

keypressed = NO_KEY;

srlcd.clear();

optiune = 61;

}

if(optiune == 61){

lcd_ch(0,0,"Evenimente MEM ");

lcd_ch(0,1,"Scroll UP=C DN=D");

keypressed = NO_KEY;

optiune == 62;

}

if(optiune == 62){

//eeprom_read_block (( void *) ee_parola , ( const void *) 991, 5 ) ;

}

//––––––––––––––

// CITIRE MATRICE BUTOANE

//******************************************

if (keypressed != NO_KEY){

tasta = keypressed;

if(keypressed == '*' ){optiune = optiune – 1;}

}

//––––––––––––––

//if(keypressed == '*' ){ optiune = optiune – 1;}

}

Norme de securitate și protecția muncii

Art. 79. – Prezentele reglementări se aplică activităților care se desfașoară la echipamentele tehnice care constituie surse de radiații vizibile (optice), cu referire specială la laser.

Art. 80. – Prezentele prevederi se referă la radiațiille optice periculoase, cu indicație specială pentru radiația laser și nu reglementează aspectele referitoare la radiațiile vizibile provenite de la sursele incandescente, fluorescente, fosforescente, arcurile electrice etc., pentru care există reglementări in standardele și normele în vigoare.

Art. 81. – La evaluarea nivelului de risc laser, în scopul asigurării protecției personalului lucrător, se va lua în considerare clasificarea laserelor* conform normelor internaționale recunoscute pe plan intern și parametrii emisiei lor:

a) mediul activ

b) lungimea de undă a radiației

c) puterea și densitatea maximă de putere la ieșire

d) divergența fasciculului

e) forma și dimensiunea fasciculului la ieșire

f) existența eventuală a unor sisteme de focalizare și distanță focală

g) distanța de la sursa laser la punctul de lucru

h) indicații referitoare la dispozitivele de protecție și mijloacele de protecție prevăzute pentru postul de lucru.

*Notă: Prezentele norme au în vedere clasificarea tehnică a laserilor în clasele I-IV, iar parametrii de emisie sunt prezentați in Normele de Medicina Muncii.

Art. 82. – (1)Măsurile de securitate care trebuie adoptate la utilizarea instalațiilor laser diferă, în funcție de caracteristicile laserului, de tipul și condițiile de utilizare ale acestora.

(2)Pentru instalațiile laser din clasa 1 si 2 nu se prevăd cerințe specifice de securitate în afară de instruirea corectă a personalului de deservire (operatori laser) privind interzicerea dirijării fasciculului laser spre alte persoane și utilizarea mijloacelor individuale de protecție prevăzute.

(3)Pentru instalațiile laser din clasele 3 si 4, unde există riscurile de afectare a organului vizual, a pielii, precum și a tesuturilor interne, se prevăd cerințe specifice de securitate, în funcție de modul de utilizare și conditiile concrete în care se desfașoara activități cu laser.

Art. 89. – Pentru amplasarea corectă a instalațiilor laser este necesară cunoașterea parcursului (traiectoriei) fasiculului laser deschis, a reflexiilor și difuziilor normale și accidentale ale acestuia.

Art. 90. – În zona în care se efectuează activitați cu laser se interzice introducerea în fasciculul laser a unor elemente optice reflectante sau difuzante, precum și a unor materiale ușor inflamabile.

Art. 106. – Personalul de deservire a instalatiilor laser nu va purta in timpul lucrului obiecte care pot reflecta radiatia directa: ceasuri, nasturi de metal, catarame, bijuterii etc.

Art. 107. – Reglarea instalației laser se va realiza astfel încât să se evite emisiile accidentale de radiații.

Art. 112. – Se interzice a se privi în radiația laser și a se alinia laserul cu ochiul liber, privind axial sau paraaxial în cavitate.[23]

Bibliografie

[1] Valentin Feieș, Andrei Drăgulinescu ,“Optoelectronică. Probleme” ,Editura Matrix ROM, București, 2006.

[2] S.M. Sze, Kwok K. NG, “Physics of Semiconductor devices” ,ediția a treia, 2007

[3] Matt Young, “Optics and Lasers: Including Fibers and Optical Waveguides”, Editura Springer.

[4] Robert Hunsperger,“Integrated Optics. Theory and Technology” ,ediția a șasea, Editura Springer, 2009.

[5]http://www.cnmv.ro/site_fizica/lectii-fizica/ Efectul%20fotoelectric/antet.htm

[6]http://cursuri.flexform.ro/courses/L2/document/Cluj-Napoca/grupa1/Aranyi_Iulia/site/fototranzi stor.html

[7]”Phototransistor and IRED Databook”,http://www.hofoo.com.cn/uploadfiles/phototransistor-ired %20data%20book.pdf

[8]“Typical applications for Phototransistors and IREDs” , EG&G Electronics, http://www.johnloomis.org/ece445/topics/egginc/pt_app.html

[9] Eric J. Lerner , “Introduction to photodetectors and applications”,

http://www.laserfocusworld.com/articles/print/volume-36/issue-12/buyers-guide-2001/photodetectors/introduction-to-photodetectors-and-applications.html

[10]"Dioda LASER" , Univ. Gh.Asachi, Iași – http://rf-opto.etc.tuiasi.ro/docs/opto/LASER.pdf

[11] Matthias Pospiech, Sha Liu, “LASER Diodes – an Introduction”, 2004

[12]http://www.revista-alarma.ro/pdf/SUBSISTEMUL%20DE%20DETECTIE%20SI%20 ALARMARE%20PERIMETRALA%203.pdf

[13]http://www.revista-alarma.ro/pdf/Detectia%20perimetrala.pdf

[14]“Introduction to Microcontrollers” , Univ. California, Berkeley, https://inst.eecs.berkeley.edu/~ee128/fa04/labs/lab7-intro.pdf

[15]http://diodes.com/datasheets/74HC14.pdf

[16]http://www.conrad.com/ce/en/product/506110/LM01RDD-Red-Laser-Class-2-Red-NA

[17]http://www.produktinfo.conrad.com/datenblaetter/150000-174999/154514-da-01-en-FOTOTR ANSISTOR_5MM_TYP_L_53P3BT.pdf

[18]http://www.elecrow.com/download/LCD1602.pdf

[19]https://www.sparkfun.com/datasheets/LCD/HD44780.pdf

[20]http://www.instructables.com/id/The-74HC164-Shift-Register-and-yourArduino/

[21]http://arduino.cc/en/Main/ArduinoBoardUno

[22]"ATmega32/L Datasheet" , Atmel Corp., http://www.atmel.com/images/doc2503.pdf

[23]http://www.iprotectiamuncii.ro/norme-protectia-muncii/nssm-34

Bibliografie

[1] Valentin Feieș, Andrei Drăgulinescu ,“Optoelectronică. Probleme” ,Editura Matrix ROM, București, 2006.

[2] S.M. Sze, Kwok K. NG, “Physics of Semiconductor devices” ,ediția a treia, 2007

[3] Matt Young, “Optics and Lasers: Including Fibers and Optical Waveguides”, Editura Springer.

[4] Robert Hunsperger,“Integrated Optics. Theory and Technology” ,ediția a șasea, Editura Springer, 2009.

[5]http://www.cnmv.ro/site_fizica/lectii-fizica/ Efectul%20fotoelectric/antet.htm

[6]http://cursuri.flexform.ro/courses/L2/document/Cluj-Napoca/grupa1/Aranyi_Iulia/site/fototranzi stor.html

[7]”Phototransistor and IRED Databook”,http://www.hofoo.com.cn/uploadfiles/phototransistor-ired %20data%20book.pdf

[8]“Typical applications for Phototransistors and IREDs” , EG&G Electronics, http://www.johnloomis.org/ece445/topics/egginc/pt_app.html

[9] Eric J. Lerner , “Introduction to photodetectors and applications”,

http://www.laserfocusworld.com/articles/print/volume-36/issue-12/buyers-guide-2001/photodetectors/introduction-to-photodetectors-and-applications.html

[10]"Dioda LASER" , Univ. Gh.Asachi, Iași – http://rf-opto.etc.tuiasi.ro/docs/opto/LASER.pdf

[11] Matthias Pospiech, Sha Liu, “LASER Diodes – an Introduction”, 2004

[12]http://www.revista-alarma.ro/pdf/SUBSISTEMUL%20DE%20DETECTIE%20SI%20 ALARMARE%20PERIMETRALA%203.pdf

[13]http://www.revista-alarma.ro/pdf/Detectia%20perimetrala.pdf

[14]“Introduction to Microcontrollers” , Univ. California, Berkeley, https://inst.eecs.berkeley.edu/~ee128/fa04/labs/lab7-intro.pdf

[15]http://diodes.com/datasheets/74HC14.pdf

[16]http://www.conrad.com/ce/en/product/506110/LM01RDD-Red-Laser-Class-2-Red-NA

[17]http://www.produktinfo.conrad.com/datenblaetter/150000-174999/154514-da-01-en-FOTOTR ANSISTOR_5MM_TYP_L_53P3BT.pdf

[18]http://www.elecrow.com/download/LCD1602.pdf

[19]https://www.sparkfun.com/datasheets/LCD/HD44780.pdf

[20]http://www.instructables.com/id/The-74HC164-Shift-Register-and-yourArduino/

[21]http://arduino.cc/en/Main/ArduinoBoardUno

[22]"ATmega32/L Datasheet" , Atmel Corp., http://www.atmel.com/images/doc2503.pdf

[23]http://www.iprotectiamuncii.ro/norme-protectia-muncii/nssm-34

Anexă

Codul sursă folosit la programarea microcontroller-ului

/*

* Main.cpp

*/

#ifndef SKETCH_H_

#include "Sketch.h"

#endif

#include "Keypad.h"

#include <util/delay.h>

#include <avr/interrupt.h>

#include <avr/pgmspace.h>

#include <avr/eeprom.h>

#include "ShiftRegLCD123.h"

#define stanga 24

#define dreapta 30

#define TRUE 1

#define FALSE 0

#define BAUD 9600

//Variabile globale––––––––

int optiune,inc,ct_1,ct_2,ct_3;

int secunda,minut,ora,ziua,luna,anul,bisect,print_ceas;

int ziua_nr, set_ora_dvi;

unsigned char tasta,nr_tasta,ascii_nr[4],key_combo[5];

char parola[5];

char v_opti[2];uint8_t optos;

char cmd[4];

int serial_ON;

int lcd_blink_pct[3];// [0]=coloană, [1]=rând, [2] = enable/disable

int al_activa ;// 0b00 nici una activă, 0b1111 = toate active

//varibile stocate în EEPROM

uint8_t ee_parola[5], ee_alarma[4], ee_cont;

//–––––––––––––-

const byte dataPin = 11; // SR Data from Arduino pin 10

const byte clockPin = 12; // SR Clock from Arduino pin 11

const byte enablePin = 10; // LCD enable from Arduino pin 12

// Instantiate an LCD object using ShiftRegLCD123 wiring.

// LCD enable directly from Arduino.

ShiftRegLCD123 srlcd(dataPin, clockPin, enablePin, SRLCD123);

//KEYPAD–––––––––––-

const byte numRows= 4; //number of rows on the keypad

const byte numCols= 4; //number of columns on the keypad

//keymap defines the key pressed according to the row and columns just as appears on the keypad

char keymap[numRows][numCols]=

{

{'D', 'C', 'B', 'A'},

{'#', '9', '6', '3'},

{'0', '8', '5', '2'},

{'*', '7', '4', '1'}

};

//Code that shows the the keypad connections to the arduino terminals

byte rowPins[numRows] = {9,8,7,6}; //Rows 0 to 3

byte colPins[numCols]= {5,4,3,2}; //Columns 0 to 3

//initializes an instance of the Keypad class

Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

//––––––––––––––

void lcdintro1();

void ora_zero();

void lcd_crs_blink_at(uint8_t col,uint8_t rind);

void lcdscroll(uint8_t nrscroll, uint8_t directie);

void lcd_2int(uint8_t col, uint8_t rind,uint8_t st);

void lcd_ch(uint8_t col, uint8_t rind,char *c );

void lcd_print_data(uint8_t col, uint8_t rind);

void lcd_print_ceas(uint8_t col, uint8_t rind);

void lcd_blink_puncte( uint8_t col, uint8_t rind,uint8_t enbl);

void lcd_crs_off();

void sistem_init();

void sistem_set_time();

void sistem_set_user();

void sistem_init_alarm();

void sistem_set_alarm();

void sistem_watch();

void calculeaza_data();

// S E T U P

void setup()

{

// inițializare LCD și setarea mărimii display-ului

// LCD cu 16 coloane x 2 linii, font normal

srlcd.begin(16,2);

Serial.begin(9600);

//srlcd.backlightOn();

// inițializări Timer1

cli(); // disable global interrupts

TCCR1A = 0; // set entire TCCR1A register to 0

TCCR1B = 0; // same for TCCR1B

// set compare match register to desired timer count:

OCR1A = 15624;

// turn on CTC mode:

TCCR1B |= (1 << WGM12);

// Set CS10 and CS12 bits for 1024 prescaler:

TCCR1B |= (1 << CS10);

TCCR1B |= (1 << CS12);

// enable timer compare interrupt:

TIMSK1 |= (1 << OCIE1A);

sei(); // enable global interrupts

//INIȚIALIZARE pini IMPULS , ACUSTIC, FOTOTRANZISTORI

sistem_init_alarm();

// inițializări variabile globale

optiune = 0; //stare finită

inc = 0 ; //contor

ct_1 = 0;ct_2 = 0;ct_3 = 0;//contoare

secunda = 0; minut = 34; ora = 22;

ziua = 19; luna = 6; anul = 2014;

//bariera 1 = 0b0001 , bariera 2 = 0b0010 , bariera 3 = 0b0300 , bariera 4 = 0b000

al_activa = 0b0000;//toate barierele active

ee_parola[1] ='7';ee_parola[2] ='7';ee_parola[3] ='7';ee_parola[4] ='7';

eeprom_update_block ((const void*) ee_parola,(void *)991,5);

// eeprom_read_block (( void *) ee_parola , ( const void *) 10, 5 ) ;

//eeprom_update_block (( const void *) ee_parola , ( void *) 10, 5);

}

//–––––––––––––––

void lcdscroll(uint8_t nrscroll, uint8_t directie)

{uint8_t i;

//Shift entire display left=24 , right =30

for(i=0;i < nrscroll ; i++){

srlcd.command(directie);

_delay_ms(300);

}

}

void ora_zero(){ora=0;minut=0;secunda=0;}

void lcdintro1()

{

srlcd.clear();

srlcd.setCursor(7,0);

srlcd.print ("SISTEM DE ALARMARE PERIMETRALA");

_delay_ms(200);

lcdscroll(28,stanga);

srlcd.clear();

/* srlcd.setCursor(12,1);

srlcd.print("4 BARIERE LASER ");

_delay_ms(200);

lcdscroll(30,stanga);

*/

srlcd.clear();

srlcd.setCursor(0,0);

optiune = 1;//exit intro

}

void lcd_crs_blink_at(uint8_t col,uint8_t rind)

{

//Display on Cursor blinking

srlcd.setCursor(col,rind);

srlcd.command(15);

}

//Display on Cursor off

void lcd_crs_off()

{

srlcd.command(12);

}

//––––––––––––-

void lcd_2int(uint8_t col, uint8_t rind,uint8_t st)

{

ascii_nr[0] = st%10 ; //unități

ascii_nr[1] = (st%100 – st%10)/10 ; //zeci

//ascii_nr[2] = (st%1000-st%100)/100 + 48; //sute

//ascii_nr[3] = (st%10000-st%1000)/1000 + 48;//mii

//if(ascii_nr[0]=='0')ascii_nr[0]=' ';

//if((ascii_nr[0]=='0')&&(ascii_nr[1]=='0'))ascii_nr[1]=' ';

//srlcd.command(1);

srlcd.setCursor(col,rind);

//if(ascii_nr[0] != '0'){srlcd.print(ascii_nr[0]);}

//if((ascii_nr[0] != '0')&&(ascii_nr[1] != '0')){srlcd.print(ascii_nr[1]);}

srlcd.print(ascii_nr[1]);

srlcd.print(ascii_nr[0]);

}

void lcd_ch(uint8_t col, uint8_t rind,char *c )

{ //print șir de caractere la coloană și rând

srlcd.setCursor(col,rind);

srlcd.print (c);

}

void lcd_print_data(uint8_t col, uint8_t rind)

{

//print data

lcd_2int(col,rind,ziua);

lcd_ch(col+2,rind,"/");

lcd_2int(col+3,rind,luna);

lcd_ch(col+5,rind,"/");

lcd_2int(col+6,rind,anul%2000);

}

void lcd_print_ceas(uint8_t col, uint8_t rind)

{ //print ceas

lcd_2int(col,rind,ora);lcd_2int(col+3,rind,minut);

}

void lcd_blink_puncte( uint8_t col, uint8_t rind,uint8_t enbl)

{

lcd_blink_pct[0] = col;

lcd_blink_pct[1] = rind;

lcd_blink_pct[2] = enbl;

}

// T I M E R E

ISR (TIMER1_COMPA_vect) // action to be done every 1 sec

{

if(print_ceas == 1){ lcd_print_ceas(0,0);print_ceas = 0;}

secunda=secunda + 1;

if(secunda%20 == 0){calculeaza_data();}

if(secunda >= 60){ minut = minut+1; secunda = 0;}

if(minut >= 60){ora=ora+1; minut=0;secunda=0;}

if((ora >= 24)){ora_zero(); ziua=ziua+1;} //corecție +3 secunde

if((ziua>31)&&((luna==1)||(luna==3)||(luna==5)||(luna==7)||(luna==8)||(luna==10))) {ziua=1;luna=luna+1;ora_zero();}

if((ziua>31)&&(luna==12)){ziua=1;luna=1;anul=anul+1;ora_zero();}

if((ziua>30)&&((luna==4)||(luna==6)||(luna==9)||(luna==11))) {ziua=1;luna=luna+1;ora_zero();}

if(ziua > 29 && luna == 2 && bisect == 1 ){luna=luna+1;ziua=1;ora_zero();}

if(ziua > 28 && luna == 2 && bisect == 0 ){luna=luna+1;ziua=1;ora_zero();}

//print ceas

if(optiune == 41){

if(secunda%2 == 0 ){lcd_ch( 2,0,":");}

if(secunda%2 != 0 ){lcd_ch( 2,0," ");}

if(secunda == 59 ){lcd_print_ceas(0,0);}

if(secunda == 59 && minut == 59){lcd_print_data(8,0);}

}

}

//–––––––––

void sistem_set_user()

{

lcd_ch(0,0,"Sistem users ");

lcd_ch(0,1,"Nr USR ");

}

//OPTIUNE 10 – 23 –––-

void sistem_set_time()

{

}

//INITALIZARE PORTURI SENZORI

void sistem_init_alarm()

{

DDRC = (1<<PINC0)| //Setare port digital out

(1<<PINC1)| //Setare port digital out

(0<<PINC2)| //Setare port analog input

(0<<PINC3)| //Setare port analog input

(0<<PINC4)| //Setare port analog input

(0<<PINC5); //Setare port analog input

PORTC = 0x00; // Activare Pull-Up

}

//C A L C U L E C A L E N D A R

void calculeaza_data()

{

uint8_t i;

int day_code,d1, d2, d3;// cu a câta zi din săptămână începe anul 0=Duminica, 1=Luni,..6=Sâmbătă

int zi_lu,d_day,nr_zile;zi_lu=0;

int days_in_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

// calcul an bisect

if((anul% 4 == FALSE && anul%100 != FALSE )||( anul%400 == FALSE)){bisect = 1;

days_in_month[2]=29; }//daca anul e bisect luna are 29 de zile

else{bisect = 0;}

// calcul ziua săptămânii

d1 = (anul – 1.)/ 4.0;

d2 = (anul – 1.)/ 100.;

d3 = (anul – 1.)/ 400.;

day_code = (anul + d1 – d2 + d3) %7;

for(i=1;i<luna;i++){zi_lu = days_in_month[i]+zi_lu;}

nr_zile=(zi_lu + ziua – 1);//câte zile din an au trecut

if((ziua<7)&&(luna==1)){d_day=(day_code+ziua)%7;}

d_day=((nr_zile%7)+day_code+7)%7;

//return d_day = ziua curenta;

ziua_nr = d_day;

// ora de vara / iarna

//ultima duminică din martie (ora 03:00 devine 04:00),

// și ultima duminică din octombrie (ora 04:00 devine 03:00).

if((luna == 3) && (ziua > 24) &&(set_ora_dvi==0)&&(ora == 3)&&(d_day == 0) && (minut == 0) )

{

//scroll_to_lcd("CEASUL TRECE LA ORA DE VARA");

ora = ora+1;

set_ora_dvi = 1;

}

if((luna == 10) && (ziua > 24) &&(set_ora_dvi==0) && (ora == 4)&&(d_day == 0) && (minut == 0) )

{

//scroll_to_lcd("CEASUL TRECE LA ORA DE IARNA ");

ora = ora-1;

set_ora_dvi = 1;

}

if((luna == 4 || (luna == 11)) && (ziua >1) ){set_ora_dvi = 0;}

}

––––––––––––––-

//L O O P

void loop()

{

char keypressed = myKeypad.getKey();

if(optiune == 0){ lcdintro1();srlcd.clear();optiune = 1;}

//––––––––––––––

// parola + inițializare ora / data sistem

//*****************************************

if(optiune == 1) {

srlcd.clear();

eeprom_read_block (( void *) ee_parola , ( const void *) 991, 5 ) ;

lcd_ch(0,0,"Parola sistem: ");

lcd_ch(6,1,"–-");

lcd_crs_blink_at(6 ,1);

optiune = 2;

}

if(optiune == 2){

if(ct_1 > 0){lcd_ch(5+ct_1,1,"*");}

lcd_crs_blink_at(6+ct_1 ,1);optiune = 3;}

if(optiune == 3){

if (keypressed != NO_KEY){

parola[ct_1] = tasta;

optiune = 2;

ct_1 = ++ct_1 ;

}

if(ct_1 > 4 ){

if (parola[1] == ee_parola[1] &&

parola[2] == ee_parola[2] &&

parola[3] == ee_parola[3] &&

parola[4] == ee_parola[4] ){ct_1 = 0;

// Verificare Sunet OK

PORTC =1<<PINC1; _delay_ms(100);

PORTC =0<<PINC1; _delay_ms(200);

PORTC =1<<PINC1; _delay_ms(100);

PORTC =0<<PINC1; _delay_ms(100);

optiune = 5;} //PAROLA OK !!!

else{lcd_ch(0,0,"Parola gresita ");_delay_ms(1000);

ct_1 = 0;

optiune = 1;}

}

}

//SCHIMBARE PAROLA

//**************************

if(optiune == 5) {

srlcd.clear();

lcd_ch(0,0,"Schimbare Parola");

lcd_ch(0,1,"DA= A / NU= B ");

lcd_crs_blink_at(14 ,1);

optiune = 6;tasta = 0;

}

if(optiune == 6) {

//if (keypressed != NO_KEY){

if(tasta == 'A'){optiune = 7;}

if(tasta == 'B'){optiune = 20;}

//}

}

if(optiune == 7){

srlcd.clear();

lcd_ch(0,0," Parola noua :");

_delay_ms(1000);

lcd_ch(6,1,"–-");

lcd_crs_blink_at(6 ,1);

optiune = 9;

tasta = 0;

ct_1=0;//resetăm contorul

}

if(optiune == 8){

if(ct_1 > 0){lcd_ch(5+ct_1,1,"*");}

lcd_crs_blink_at(6+ct_1 ,1);optiune = 9;

}

if(optiune == 9){

if (keypressed != NO_KEY){

if(tasta >47 && tasta < 58)

{ee_parola[ct_1] = tasta;

optiune = 8;

ct_1 = ct_1 + 1;}

}

if(ct_1 > 4) {lcd_ch(0,0,"PAROLA SCHIMBATA");

eeprom_update_block ((const void*) ee_parola,(void *)991,5);

_delay_ms(1000);

optiune = 1;}

}

//–––––––––––––-

// SISTEM SETARE DATA , ORA , MINUT //

//****************************************

if(optiune == 20) {

lcd_ch(0,0,"Sistem SET TIME");

lcd_ch(0,1,"hh:mm zz/ll/an");

lcd_crs_blink_at(0 ,1);

ct_1 = 0;

delay(1000);

lcd_print_ceas(0,1);

lcd_print_data(8,1);

optiune = 21;

}

//––––-Seteaza ORA ––––––

if(optiune == 21){

if( keypressed == 'B'){optiune = 40;}

lcd_crs_blink_at(0,1);

if(keypressed >47 && keypressed <51 && keypressed != NO_KEY){

keypressed = keypressed -48;

ora =keypressed*10;

//ora =ora*10;

lcd_print_ceas(0,1);

optiune = 22;

}

}

if(optiune == 22){

lcd_crs_blink_at(1,1);

if( keypressed == 'B'){optiune = 40;}

if(keypressed >47 && keypressed <58 && keypressed != NO_KEY){

keypressed = keypressed-48;

ora = ora -ora%10 + keypressed ;

if(ora > 23 ){ora = keypressed; }

lcd_print_ceas(0,1);

optiune = 23;

}

}

//––––-Setează MINUTUL ––––-

if(optiune == 23){

if( keypressed == 'B'){optiune = 40;}

lcd_crs_blink_at(3,1);

if(keypressed >47 && keypressed <54 && keypressed != NO_KEY ){

keypressed =keypressed – 48;

minut = keypressed * 10;

optiune = 24;

lcd_print_ceas(0,1);

}

}

if(optiune == 24){

lcd_crs_blink_at(4,1);

if(keypressed >47 && keypressed <58 && keypressed != NO_KEY){

keypressed = keypressed – 48;

minut = minut – minut%10 + keypressed;

lcd_print_ceas(0,1);

optiune = 25;}

}

//–––––Setează Ziua –––––-

if(optiune == 25){

lcd_crs_blink_at(8,1);

if(keypressed >47 && keypressed <52 && keypressed != NO_KEY){

keypressed = keypressed – 48;

ziua = keypressed * 10;

lcd_print_data(8,1);

optiune = 26;}

}

if(optiune == 26){

lcd_crs_blink_at(9,1);

if(keypressed >47 && keypressed <58 && keypressed != NO_KEY){

keypressed = keypressed – 48;

ziua = ziua/10;

ziua = ziua*10;

ziua = ziua + keypressed;

if(ziua > 31 ){ziua = keypressed;}

if(ziua < 1) {ziua = 1;}

lcd_print_data(8,1);

optiune = 27;}

}

//–––––Setează LUNA –––––

if(optiune == 27){

lcd_crs_blink_at(11,1);

if(keypressed >47 && keypressed <50 && keypressed != NO_KEY){

keypressed = keypressed – 48;

luna = keypressed * 10;

lcd_print_data(8,1);

optiune = 28;}

}

if(optiune == 28){

lcd_crs_blink_at(12,1);

if(keypressed >47 && keypressed <58 && keypressed != NO_KEY){

keypressed = keypressed – 48;

luna = luna – luna%10 + keypressed;

if(luna > 12 ){luna = keypressed;}

if(luna < 1 ){luna = 1;}

lcd_print_data(8,1);

optiune = 29;}

}

//–––––Setează ANUL ––––-

if(optiune == 29){

lcd_crs_blink_at(14,1);

if(keypressed >47 && keypressed <58 && keypressed != NO_KEY){

keypressed = keypressed – 48;

anul = anul – anul%100;

anul = anul + keypressed*10;

lcd_print_data(8,1);

optiune = 30;

}

}

if(optiune == 30){

lcd_crs_blink_at(15,1);

if(keypressed >47 && keypressed <58 && keypressed != NO_KEY){

keypressed = keypressed – 48;

anul = anul – anul%10;

anul = anul +keypressed;

lcd_print_data(8,1);

lcd_print_ceas(0,1);

calculeaza_data();

optiune = 31;

}

}

if(optiune == 31){ lcd_ch(0,0,"SET OK?Da=A Nu=B");

lcd_crs_blink_at(6,0);

optiune = 32;}

if(optiune == 32){ if( keypressed == 'A'){optiune = 40;}

if( keypressed == 'B'){optiune = 20;}

//––––––––––––-

// SISTEM ÎN LUCRU

//

// lcd_ch(0,1,"A |B |D |C |"); // sistem dezarmat

// lcd_ch(0,1,"A* B* D* C* "); // sistem dezarmat

// lcd_ch(0,1,"A3 B* D* C* "); // sistem cu 3 evenimente pe poarta A

if(optiune == 40){

srlcd.begin(16,2);

srlcd.clear();

lcd_print_data(8,0);

lcd_print_ceas(0,0);

lcd_crs_off();

// "-A! -B -C -D! "

lcd_ch(0,1," A B C D "); // sistemul e activ

if(bitRead(al_activa,0)){lcd_ch(0,1,"-");}

if(bitRead(al_activa,1)){lcd_ch(4,1,"-");}

if(bitRead(al_activa,2)){lcd_ch(8,1,"-");}

if(bitRead(al_activa,3)){lcd_ch(12,1,"-");}

optiune = 41;

}

if(optiune == 41){

// PROTOCOL DETECȚIE EMISIE RECEPȚIE IMPULSURI LASER

// CU FOTOTRANZISTORI ÎN MONTAJ AMPLIFICATOR COLECTOR COMUN

PORTC = 1<<PINC0; //puls UP

_delay_ms(1);

// dacă tranzistorul este închis și pe pinul alocat apare 1 LOGIC avem eveniment

// pe care îl semnalizăm și înregistrăm în memorie

// al_activa[4] este condiția de utilizare pe poarta respectivă

if ((!(PINC & 1<<2)) && (bitRead(al_activa,0))){

lcd_ch(2,1,"!");// indicație eveniment

ee_alarma[0] = 'A'; // numărul porții

ee_alarma[1] = ziua; // ziua curentă

ee_alarma[2] = luna; // luna curentă

ee_alarma[3]=ora; // ora curentă

ee_alarma[4]=minut;// minutul

if(ee_cont > 900){ee_cont = 0;}//verificare memorie plină cu ajutorul contorului ee_cont

else{ee_cont = ee_cont+5;} // incrementare contor memorie

//scrie in memorie evenimentul

eeprom_update_block ((const void*) ee_alarma,(void *)ee_cont,5);

// activare avertizare

PORTC = 1<<PINC1;

//trimite mesaj pe serial la 9600baud

if( serial_ON == 1 ){

Serial.println("A");

Serial.print(ee_alarma[1]);

Serial.print(ee_alarma[2]);

Serial.print(ee_alarma[3]);

Serial.print(ee_alarma[4]); }

optiune = 40;

}

if ((!(PINC & 1<<3)) && (bitRead(al_activa,1))){

lcd_ch(6,1,"!");// indicație eveniment

ee_alarma[0] = 'B'; // numarul porții

ee_alarma[1] = ziua; // ziua curentă

ee_alarma[2] = luna; // luna curentă

ee_alarma[3]=ora; // ora curentă

ee_alarma[4]=minut;// minutul

if(ee_cont > 900){ee_cont = 0;}//verificare memorie plină cu ajutorul contorului ee_cont

ee_cont = ee_cont+5; // incrementare contor memorie

//scrie în memorie evenimentul

eeprom_update_block ((const void*) ee_alarma,(void *)ee_cont,5);

// activare avertizare

PORTC = 1<<PINC1;

//trimite mesaj pe serial la 9600baud

if( serial_ON == 1 ){

Serial.println("B");

Serial.print(ee_alarma[1]);

Serial.print(ee_alarma[2]);

Serial.print(ee_alarma[3]);

Serial.print(ee_alarma[4]);}

optiune = 40;

}

if ((!(PINC & 1<<4)) && (bitRead(al_activa,2))){

lcd_ch(10,1,"!");// indicație eveniment

ee_alarma[0] = 'C'; // numărul portii

ee_alarma[1] = ziua; // ziua curentă

ee_alarma[2] = luna; // luna curentă

ee_alarma[3]=ora; // ora curentă

ee_alarma[4]=minut;// minutul

if(ee_cont > 900){ee_cont = 0;}//verificare memorie plină cu ajutorul contorului ee_cont

ee_cont = ee_cont+5; // incrementare contor memorie

//scrie în memorie evenimentul

eeprom_update_block ((const void*) ee_alarma,(void *)ee_cont,5);

// activare avertizare

PORTC = 1<<PINC1;

//trimite mesaj pe serial la 9600baud

if( serial_ON == 1 ){

Serial.println("C");

Serial.print(ee_alarma[1]);

Serial.print(ee_alarma[2]);

Serial.print(ee_alarma[3]);

Serial.print(ee_alarma[4]);}

optiune = 40;

}

if ((!(PINC & 1<<5)) && (bitRead(al_activa,3))){

lcd_ch(14,1,"!");// indicatie eveniment

ee_alarma[0] = 'D'; // numarul portii

ee_alarma[1] = ziua; // ziua curenta

ee_alarma[2] = luna; // luna curenta

ee_alarma[3]=ora; // ora curenta

ee_alarma[4]=minut;// minutul

if(ee_cont > 900){ee_cont = 0;}//verificare memorie plina cu ajutorul contorului ee_cont

ee_cont = ee_cont+5; // incrementare contor memorie

//scrie in memorie evenimentul

eeprom_update_block ((const void*) ee_alarma,(void *)ee_cont,5);

// activare avertizare

PORTC = 1<<PINC1;

//trimite mesaj pe serial la 9600baud

if( serial_ON == 1 ){

Serial.println("D");

Serial.print(ee_alarma[1]);

Serial.print(ee_alarma[2]);

Serial.print(ee_alarma[3]);

Serial.print(ee_alarma[4]);

}

optiune = 40;

}

_delay_ms(10);

PORTC = 0<<PINC0; //puls DOWN

_delay_ms(10);

}

//––––––––––––––

// CITIRE '#' MATRICE OPTIUNI

//******************************************

if(keypressed == '#' ){ optiune = 50;}

if(optiune == 50){lcd_ch(0,0,"NR.OPTIUNE= #– ");lcd_crs_blink_at(13,0);

keypressed = NO_KEY;

optiune = 51;}

if(optiune == 51 && keypressed != NO_KEY){

//primul digit

v_opti[0] = keypressed;

srlcd.setCursor(13,0);

srlcd.print(v_opti[0]);

lcd_crs_blink_at(14,0);

keypressed = NO_KEY;

optiune = 52; }

if(optiune == 52 && keypressed != NO_KEY){

//al doilea digit

v_opti[1] = keypressed;

srlcd.setCursor(14,0);

srlcd.print(v_opti[1]);

keypressed = NO_KEY;

srlcd.command(8);//dezactivează cursorul

optiune = 53;

}

if(optiune == 53){

srlcd.clear();

//calcul opțiune

// activare anulare bariere #A0 =dezactivat #A1 = activat

if(v_opti[0]=='A' && v_opti[1]== '1'){bitSet(al_activa,0);optiune = 40;}

if(v_opti[0]=='B' && v_opti[1]== '1'){bitSet(al_activa,1);optiune = 40;}

if(v_opti[0]=='C' && v_opti[1]== '1'){bitSet(al_activa,2);optiune = 40;}

if(v_opti[0]=='D' && v_opti[1]== '1'){bitSet(al_activa,3);optiune = 40;}

// dezactivare bariere

if(v_opti[0]=='A' && v_opti[1]== '0'){bitClear(al_activa,0);optiune = 40;}

if(v_opti[0]=='B' && v_opti[1]== '0'){bitClear(al_activa,1);optiune = 40;}

if(v_opti[0]=='C' && v_opti[1]== '0'){bitClear(al_activa,2);optiune = 40;}

if(v_opti[0]=='D' && v_opti[1]== '0'){bitClear(al_activa,3);optiune = 40;}

if(v_opti[0]>47 && v_opti[0]<58){

v_opti[0]=v_opti[0] – 48;

v_opti[1]=v_opti[1] – 48;

optos = (((v_opti[0])*10) + (v_opti[1]));

if(optos!=1 && optos!=5 && optos!=20 && optos!=40 && optos!=60){ optiune =40; }

else{optiune = optos;}

}

}

//––––––––––––––-

// INTEROGARE MEMORIE EEPROM

//*******************************************

if(optiune == 60){

srlcd.begin(16,2);

keypressed = NO_KEY;

srlcd.clear();

optiune = 61;

}

if(optiune == 61){

lcd_ch(0,0,"Evenimente MEM ");

lcd_ch(0,1,"Scroll UP=C DN=D");

keypressed = NO_KEY;

optiune == 62;

}

if(optiune == 62){

//eeprom_read_block (( void *) ee_parola , ( const void *) 991, 5 ) ;

}

//––––––––––––––

// CITIRE MATRICE BUTOANE

//******************************************

if (keypressed != NO_KEY){

tasta = keypressed;

if(keypressed == '*' ){optiune = optiune – 1;}

}

//––––––––––––––

//if(keypressed == '*' ){ optiune = optiune – 1;}

}

Similar Posts