Sistem Supraveghere Si Control Casa Inteligentadoc

=== Sistem supraveghere si control casa inteligenta ===

PROIECT DE DIPLOMĂ

Murtaza Mihai Andrei

COORDONATOR ȘTIINȚIFIC

Conf. Univ. Dr. Ing. Constantin Pătrașcu

Iulie 2016

CRAIOVA

Sistem supraveghere și control casă inteligentă

Murtaza Mihai Andrei

COORDONATOR ȘTIINȚIFIC

Conf. Univ. Dr. Ing. Constantin Pătrașcu

Iulie 2016

CRAIOVA

DECLARAȚIE DE ORIGINALITATE

Subsemnatul Murtaza Mihai Andrei, student la specializarea Calculatoare Română din cadrul Facultății de Automatică, Calculatoare și Electronică a Universității din Craiova, certific prin prezenta că am luat la cunoștință de cele prezentate mai jos și că îmi asum, în acest context, originalitatea proiectului meu de licență:

cu titlul Sistem supraveghere și control casă inteligentă,

coordonată de Constantin Pătrașcu,

prezentată în sesiunea Iulie 2016.

La elaborarea proiectului de licență, se consideră plagiat una dintre următoarele acțiuni:

reproducerea exactă a cuvintelor unui alt autor, dintr-o altă lucrare, în limba română sau prin traducere dintr-o altă limbă, dacă se omit ghilimele și referința precisă,

redarea cu alte cuvinte, reformularea prin cuvinte proprii sau rezumarea ideilor din alte lucrări, dacă nu se indică sursa bibliografică,

prezentarea unor date experimentale obținute sau a unor aplicații realizate de alți autori fără menționarea corectă a acestor surse,

însușirea totală sau parțială a unei lucrări în care regulile de mai sus sunt respectate, dar care are alt autor.

Pentru evitarea acestor situații neplăcute se recomandă:

plasarea între ghilimele a citatelor directe și indicarea referinței într-o listă corespunzătoare la sfărșitul lucrării,

indicarea în text a reformulării unei idei, opinii sau teorii și corespunzător în lista de referințe a sursei originale de la care s-a făcut preluarea,

precizarea sursei de la care s-au preluat date experimentale, descrieri tehnice, figuri, imagini, statistici, tabele et caetera,

precizarea referințelor poate fi omisă dacă se folosesc informații sau teorii arhicunoscute, a căror paternitate este unanim cunoscută și acceptată.

Data, Semnătura candidatului,

PROIECTUL DE DIPLOMĂ

REFERATUL CONDUCĂTORULUI ȘTIINȚIFIC

În urma analizei lucrării candidatului au fost constatate următoarele:

În concluzie, se propune:

Data, Semnătura conducătorului științific,

TEMĂ PROIECT

Să se realizeze un sistem de supraveghere și control a unei case inteligente.

Sistemul trebuie să asigure controlul temperaturei, luminii interioare, să ofere un sistem de acces în încăpere pe bază de cod și un sistem cu avertizare sonoră în momentul accesului.

CUPRINSUL

LISTA FIGURILOR

FIGURA 1. SCHEMA BLOC A PROIECTULUI 12

FIGURA 2. SCHEMA ELECTRONICĂ A PROIECTULUI 13

FIGURA 3. DIAGRAMA LOGICĂ A SISTEMULUI 14

FIGURA 4. SCHEMA FAMILIEI AVR8 16

FIGURA 5. STRUCTURA INTERNĂ GENERALĂ A MICROCONTROLERULUI ATMEGA328 17

FIGURA 6. DIAGRAMA BLOC (ATMEGA328) 18

FIGURA 7. REGISTRU DE STARE 20

FIGURA 8. SCHEMA ECHIVALENTĂ A UNUI PIN 24

FIGURA 9. SEMNIFICAȚIA PINILOR 24

FIGURA 10. INDICATORUL DE STIVĂ 26

FIGURA 11. ORGANIZAREA SPAȚIULUI DE MEMORIE 27

FIGURA 12. SCHEMA ELECTRICA A CIRCUITULUI DE RESET 27

FIGURA 13. SCHEMA ELECTRICA A OSCILATORULUI 28

FIGURA 14. DISPLAY 16X2 29

FIGURA 15. PINII REGISTRULUI DE DEPLASARE 74HC595 30

FIGURA 16. SCHEMA CONEXIUNE LCD 16X2 30

FIGURA 17. TASTATURĂ 31

FIGURA 18. DIVIZOR DE TENSIUNE 31

FIGURA 19. MARTORI LUMINOȘI 32

FIGURA 20. SENZORUL DE TEMPERATURĂ LM35DZ 33

FIGURA 21. AERUL CONDIȚIONAT 34

FIGURA 22. SIMULAREA AERULUI CONDIȚIONAT 34

FIGURA 23. SENZORUL INFRAROȘU RECEPTOR 35

FIGURA 24. SCHEMA BLOC A RECEPTORULUI INFRAROȘU 35

FIGURA 25. MODULUL DE ÎNCĂLZIRE 36

FIGURA 26. SIMULAREA MODULULUI DE ÎNCĂLZIRE 37

FIGURA 27. SENZORUL DE TEMPERATURĂ NTC-100K 37

FIGURA 28. CARACTERISTICA PUTERE CONSUMATĂ-TEMPERATURĂ AMBIALĂ 38

FIGURA 29. CARACTERISTICA VALOARE CITITĂ-VALOARE AFȘATĂ (NTC-100K) 38

FIGURA 30. VARIATOR DE TENSIUNE ALTERNATIVĂ CLASIC 39

FIGURA 31. VARIATOR DE TENSIUNE ALTERNATIVĂ 40

FIGURA 32. SIMULAREA DETECTĂRII TRECERII PRIN ZERO 40

FIGURA 33. SIMULAREA LUMINII INTERIOARE 41

FIGURA 34. SIMULAREA UNUI SEMNAL DREPTUNGHIULAR CU UN PWM DE 50% 41

FIGURA 35. ELEMENTUL PIEZZO BUZZER 42

FIGURA 36. TELECOMANDA 42

FIGURA 37. MODULAȚIA 43

FIGURA 38. SEMNALUL RECEPȚIONAT DE LA TELECOMANDĂ 43

FIGURA 39. PLACA DE DEZVOLTARE ARDUINO UNO 45

FIGURA 40. SCHEMA ELECTRONICĂ A PLĂCII DE DEZVOLTARE ARDUINO UNO 45

FIGURA 41. PROGRAMAREA PLĂCII DE DEZVOLTARE ARDUINO UNO CA ISP 46

FIGURA 42. CONEXIUNE PLACĂ DE DEZVOLTARE ARDUINO UNO ȘI MICROCONTROLLER 46

FIGURA 43. ALEGEREA TIPULUI DE PROGRAMARE 47

FIGURA 44. INSCRIPȚIONAREA BOOTLOADERULUI 47

FIGURA 45. INSCRIPȚIONAREA MICROCONTROLLERULUI 47

FIGURA 46. CABLAJUL (PLACA) SISTEMULUI 48

FIGURA 47. SISTEMUL DE SUPRAVEGHERE ȘI CONTROL A CASEI INTELIGENTE 49

LISTA TABELELOR

TABELUL 1. PINI LCD 16X2 29

TABELUL 2. VALORI TASTATURĂ 32

TABELUL 3. CARACTERISTICILE ELECTRICE LM35DZ 33

TABELUL 4. CARACTERISTICILE MATERIALELOR ( PLATINĂ, NICHEL, CUPRU) 38

TABELUL 5. CODURI TELECOMANDĂ 44

Introducere

Spațiul unde locuim, muncim sau ne relaxăm merită ce este mai bun, deoarece reprezintă eticheta, emblema vieții noastre. Este un loc unde ne simțim ‘acasă’, iar confortul și siguranța sunt elemente esențiale. Pentru a putea sporii confortul într-o încăpere montarea unui sistem de control a condițiilor ambientale este o variantă foarte des aplicată.

Un sistem de control a condițiilor ambientale presupune prezența unor elemente precum: senzori care culeg diverse informații, elemente de acționare care permit comanda sistemelor instalate și unitatea centrală care memorează și monitorizează informațiile, ia decizii și emite comenzi în funcție de aceste decizii.

Printr-o singură apăsare a unui buton este de ajuns ca să tragem draperia, să stingem lumina, să ne reglăm temperatura, să încuiem ușa și să ne simțim în siguranță.

Evoluția în domeniul microcontrolerelor își are începutul în dezvoltarea tehnologiei circuitelor integrate. Această dezvoltare a stat la baza înmagazinării a sute de tranzistoare intr-un singur chip. Cu trecerea timpului chipurile au suferit modificări și anume introducerea de periferice ca memoria, linii intrare/ieșire și altele. În urma acestor pași s-a obținut primul microcalculator care va purta numele de microcontroler.

Microcontrolere au aplicații în toate domeniile, de exemplu un autovehicul conține câteva zeci chiar sute de microcontrolere și microprocesoare care au dus la câștiguri substanțiale ale performanțelor sale funcționale.

Proiectul meu, Sistem Casa inteligenta, are la bază un microcontroller care este pe post de unitate centrală a sistemului. Acesta controlează draperia, aerul condiționat, modulul de încălzire, modulul de securitate, modulul de avarie, modulul de afișare, lumina, lampa, monitorizează temperatura și umiditatea dintr-o încăpere. .

Sistemul are scopul de a prezenta principalele sisteme ambientale si de siguranta ce pot fi regasite intr-o locuinta moderna. Realizarea unui sistem integrat, compus dintr-o parte fizica si o parte logica.

Componenta fizica consta intr-o platforma electronica, realizata pe baza unei scheme electronice, ce va servi drept mediu desfasurare a modului logic. Elementele ce stau la baza componentei fizice sunt componentele electronice, senzorii, actuatoarele si toate elementelor ce ajuta la punerea in aplicare a partii logice.

Componenta logica consta intr-un program software ce are ca scop controlul perifericelor si luarea deciziilor pe baza informatiilor de intrare. Acesta este stocat in memoria unui microprocesor si se va apela automat la demararea sistemului.

Sistemul integrat poate fi privit ca un modul ce se bazeaza pe informatii de intrare si prin intermediul algoritmului integrat in partea logica, vor rezulta una sau mai multe decizii ce va influenta ansamblul partii de comanda.

Datorita mixajului dintre circuitul electronic si modulul software, acest sistem tine locul vechilor sistemelor analogice din care erau formate sistemele ambientale dintr-o locuinta. Volumul redus al acestui modul cat si multitudinea de functii ce pot fi intregrate ajuta utilizatorul sa mentina sub control toate sistemele principale ce se pot regasii intr-o casa moderna. Accesul pe baza unui cod de siguranta cat si activarea diferitelor functii prin intermediul unei telecomenzi confera un confort sporit.

Daca functionalitatea instalatiilor dintr-o casa sunt controlate prin scenarii predefinite sau daca toate subsistemele (control iluminat, control temperaturi, controlul luminozitatii, alarmare la incendiu si efractie etc) sunt integrate intr-un singur sistem si pot fi controlate printr-o interfata grafica facila si comoda proprietarului sau daca, sunt anticipate anumite nevoi ale ocupantilor casei si sunt rezolvate automat , putem spune ca avem o casa inteligenta.

Descrierea proiectului

Elementul de bază al acestui proiect este microcontrollerul ATmega328, acesta fiind responsabil de achiziția, prelucrarea datelor și controlul perifericelor.

Sistemul este controlat printr-o telecomandă cu infraroșu. S-a considerat utilă realizarea comunicației în acest fel, deoarece raza de emisie este suficientă pentru o încăpere și prețul unui astfel de sistem este mult mai mic în comparație cu alte sisteme precum Bluethooth-ul sau Radio Frecvență (RF).

Sistemul controlează sistemul de ventilatie, modulul de încălzire, modulul de securitate, modulul de afișare, lumina ; dar și monitorizează temperatura.

În următoarele figuri sunt prezentate schema bloc a proiectului (Figura 1), schema electronică a proiectului (Figura 2) și diagrama logică a sistemului de supraveghere si control a casei inteligente (Figura 3).

Figura 1. Schema bloc a proiectului

Figura 3. Diagrama logică a sistemului

2.1 Microcontrolerul ATmega 328

ATmega328 este un microcontroler RISC pe 8 biți realizat de firma Atmel. ATmega328 este de mică putere bazat pe arhitectura RISC AVR îmbunatațită. Memoriile ROM, EEPROM și SRAM sunt integrate în același chip, înlaturând nevoia de memorie externă. Dispune de 32 de regiștri de uz general care sunt direct adresabile de Unitatea Logică Aritmetică (ALU), permițând accesarea a două registere independente într-o singură instrucțiune. Astfel se obține o eficiența mai mare in execuție (de până la 10 ori mai rapide decât cele convenționale CISC).[1]

Microcontrolerele AVR pe 8 biți (Atmel) au la bază un nucleu RISC cu arhitectura Harvard. Aceste microcontrolere sunt destinate aplicațiilor simple: controlul motoarelor, controlul fluxului de informație pe portul USB, aplicații din domeniul automobilelor, controlul accesului de la distanță, etc.

Figura 4. Schema familiei AVR8

2.1.1 Caracteristici

Principalele caracteristici ale acestuia sunt:

32 KB de memorie Flash reinscriptibilă pentru stocarea programelor;

2 KB de memorie RAM;

1 KB de memorie EEPROM;

două numărătoare/temporizatoare de 8 biți;

un numărător/temporizator de 16 biți;

conține un convertor analog – digital de 10 biți, cu intrări multiple;

conține un comparator analogic;

conține un modul USART pentru comunicație serial(port serial);

dispune de un cronometru cu oscilator intern;

oferă 23 de linii I/O organizate in trei porturi (PB, PC, PD).

Figura 5. Structura internă generală a microcontrolerului ATmega328

Funcția principală a nucleului CPU-AVR este aceea de a asigura executia corectă a programului. Pentru aceasta, nucleul este capabil să acceseze memoriile, sa execute calcule, sa controleze perifericele și sa prelucreze întreruperile. Structura internă generală a controlerului este prezentată în figura 5. Se poate observa că există o magistrală generală de date la care sunt conectate mai multe module[1]:

unitatea aritmetică și logică (ALU) ;

registrele generale ;

memoria RAM și memoria EEPROM ;

liniile de intrare (porturile I/O) și celelalte blocuri de intrare/ieșire.

Figura 6. Diagrama bloc (Atmega328)

O caracteristică foarte importantă pentru orice procesor și în particular pentru microcontrolere este sistemul de întreruperi. O întrerupere reprezintă un semnal generat de un modul extern unității centrale de procesare (CPU) pentru a anunța apariția unui eveniment care trebuie tratat. Utilizarea unui astfel de sistem permite implementarea de module specializate care să execute operații în paralel cu CPU și să solicite intervenția acestuia numai la terminarea operațiilor sau în alte cazuri definite.

ATmega328 dispune de 26 surse de întrerupere. Atunci când una dintre ele devine activă se suspendă cursul normal de execuție și se face salt automat la o adresă prestabilită din memoria program.

RESET – Generată la alimentare sau la un semnal pe pinul RESET

EXT_INT0 – Întrerupere externă 0

EXT_INT1 – Întrerupere externă 1

PCINT0 – Cerere schimbare pin întrerupere 0

PCINT1 – Cerere schimbare pin întrerupere 1

PCINT2 – Cerere schimbare pin întrerupere 2

WDT – Generată de modulul WATCHDOG

TIM2_COMPA – Generată când timerul pe 16 biți atinge valoarea de prag A

TIM2_COMPB – Generată când timerul pe 16 biți atinge valoarea de prag B

TIM2_OVF – Generată când Timer/Counter2 atinge valoarea maximă

TIM1_CAPT – Generată de unitatea de captură a timerului pe 16 biți

TIM1_COMPA – Generată când timerul pe 16 biți atinge valoarea de prag A

TIM1_COMPB – Generată când timerul pe 16 biți atinge valoarea de prag B

TIM1_OVF – Generată când timerul pe 16 biți atinge valoarea maximă

TIM0_COMPA – Generată când timerul pe 16 biți atinge valoarea de prag A

TIM0_COMPB – Generată când timerul pe 16 biți atinge valoarea de prag B

TIM0_OVF – Generată când Timer/Counter0 atinge valoarea maximă

SPI_STC – Generată de unitatea SPI

USART_RXC – Generată la recepția completă a unor date de catre modulul USART

USART_UDRE – Generată când registrul de date al modulului USART este gol

USART_TXC – Generată la transmisia completă a unor date de către modulul USART

ADC – Generată de modulul ADC

EE_RDY – Generată de modulul EEPROM

ANA_COMP – Generată de comparatorul analogic

TWI – Generată de modulul TWI

SPM_RDY – Generată de modulul de auto-scriere a memoriei Flash

Dacă o singură întrerupere nu este utilizată se recomandă ca pe poziția acesteia să se introducă o instrucțiune de salt către eticheta RESET. Primele patru instrucțiuni care apar după eticheta RESET sunt utilizate pentru a inițializa pointer-ul de stivă definit de registrele SPH și SPL.

ATmega328 este susținut de o serie completă de instrumente de program și de dezvoltare a sistemului, care include: compilatoare, macroasambloare, programe debug/simulare etc.

Registrul de stare (SREG)

Registrul de stare contine informații despre ultima operație aritmetică efectuată de ALU. După fiecare operație aritmetică, starea registrului este actualizată. Conținutul registrului de stare poate fi salvat/restaurat prin program, de exemplu, la accesarea unei subrutine.

Figura 7. Registrul de stare

Bitul 7 (I – Global Interrupt Enable) – activare/dezactivare globală întreruperi

Acest bit trebuie să aibă valoarea „1” pentru a permite execuția oricărei întreruperi. Dacă are valoarea „0” orice sursă de întrerupere este dezactivată.

Bitul 6 (T – Bit Copy Storage) – bit de copiere

Bitul 5 (H – Half Carry Flag) – indicator de transport la jumătate

Bitul 4 (S – Sing bit) – indicator de semn

Bitul 3 (V – Two’s Complement Overflow Flag) – indicator de depășire în cazul operațiilor în complement față de 2

Bitul 2 (N – Negative Flag) – indicator de rezultat negativ

Bitul 1 (Z – Zero Flag) – indicator de zero

Acest bit devine „1” dacă rezultatul unei operații aritmetice sau logice a fost zero.

Bitul 0 ( C – Carry Flag) – indicator de transport

Acest bit devine „1” în cazul unei depășiri la operații pe 8 biți.

Instrucțiuni aritmetice și logice

Cele mai uzuale instrucțiuni aritmetice și logice sunt:

– ADD Rd,Rr

Efectul: se adună conținutul registrului Rd cu cel al registrului Rr și rezultatul se pune în Rd.

– ADC Rd,Rr

Efectul: se adună conținutul registrului Rd cu cel al registrului Rr și cu indicatorul de transport și rezultatul se pune în Rd.

– SUB Rd,Rr

Efectul: se scade conținutul registrului Rr din cel al registrului Rd și rezultatul se pune în Rd.

– AND Rd,Rr

Efectul: se face „ȘI logic” între conținutul registrului Rd și cel al registrului Rr iar rezultatul se pune în Rd.

– INC Rd

Efectul: incrementează conținutul registrului Rd și pune rezultatul în Rd.

– DEC Rd

Efectul: decrementează conținutul registrului Rd și pune rezultatul în Rd.

Instrucțiuni de salt

Cele mai uzuale instrucțiuni de salt sunt:

– JMP k

Efectul: se face salt necondiționat cu „k” poziții față de adresa curentă din memoria program. Instrucțiunea se poate utiliza și în forma „JMP etichetă”.

– RCALL subrutină

Efectul: se apelează o subrutină. Pentru a reveni din aceasta se utilizează instrucțiunea RET.

– RETI

Efectul: se revenire dintr-o subrutină de tratare a unei întreruperi.

– CPSE Rd,Rr

Efectul: se compară valorile regiștrilor Rd și Rr și în caz de egalitate instrucțiunea imediat următoare nu se mai execută.

– CP Rd,Rr

Efectul: compară valorile regiștrilor Rd și Rr fără să modifice conținutul acestora. Ca urmare a ecuției acestei instrucțiuni se vor schimba corespunzător biții registrului de stare.

– SBRC Rd,b

Efectul: dacă bitul b din registrul Rd are valoarea „0” instrucțiunea imediat următoare nu se mai execută.

– SBRS Rd,b

Efectul: dacă bitul b din registrul Rd are valoarea „1” instrucțiunea imediat următoare nu se mai execută.

– SBIC P,b

Efectul: dacă bitul b din registrul de intrare/ieșire P are valoarea „0” instrucțiunea imediat următoare nu se mai execută.

– SBIS P,b

Efectul: dacă bitul b din registrul de intrare/ieșire P are valoarea „1” instrucțiunea imediat următoare nu se mai execută.

– BREQ etichetă

Efectul: dacă indicatorul Z are valoarea „1” se face salt la etichetă.

Instrucțiuni de transfer

Cele mai uzuale instrucțiuni de transfer sunt:

– MOV Rd,Rr

Efectul: copiază conținutul registrului Rr în registrul Rd.

– LDI Rd,k

Efectul: copiază valoarea k în registrul Rd. Această instrucțiune lucrează numai cu registrele

r16 – r31.

– IN Rd,P

Efectul: copiază conținutul registrului de intrare/ieșire P în registrul Rd.

– OUT P,Rr

Efectul: copiază conținutul registrului Rr în registrul de intrare/ieșire P.

Instrucțiuni care lucrează la nivel de bit

Cele mai uzuale instrucțiuni care lucrează la nivel de bit sunt:

– SBI P,b

Efectul: bitul b din registrul de intrare/ieșire P ia valoarea „1”. Instrucțiunea se poate utiliza numai pentru regiștri P situați la adresele de memorie 20h – 3Fh.

– CBI P,b

Efectul: bitul b din registrul de intrare/ieșire P ia valoarea „0”. Instrucțiunea se poate utiliza numai pentru regiștri P situați la adresele de memorie 20h – 3Fh.

– LSL Rd

Efectul: Registrul Rd este deplasat logic la stânga cu o poziție.

– ROR Rd

Efectul: Registrul Rd este rotit la dreapta cu o poziție prin bitul indicator de transport.

Instrucțiuni speciale

Instrucțiunile speciale sunt:

– NOP

– SLEEP

– WDR

Descrierea pinilor

Majoritatea pinilor au funcții alternative legate de funcționarea dispozitivelor periferice. Activarea funcțiilor alternative ale unor pini nu afectează utilizarea altor pini ca port I/O general.

Figura 8. Schema echivalentă a unui pin

Figura 9. Semnificația pinilor

VCC – Tensiunea de alimentare

GND – Masa

Portul B (PB7…PB0) XTAL1/ XTAL2/ TOSC1/ TOSC2

Portul B este un port I/O de 8 biți bidirecțional prevazut cu rezistențe de agățare interne (opțional). Buffer-ele de ieșire ale portului B au caracteristici de amplificare. În funcție de configurație pinii PB6 si PB7 pot fi intrarea și ieșirea amplificatorului inversor al generatorului de tact, sau intrare pentru timerul/ contorul 1, respectiv timerul/ contorul 2. Portul B indeplinește de asemenea funcții speciale ale microcontrolerului ATmega 328.[2]

Portul C (PC6…PC0) RESET

Portul C este un port I/O de 7 biți bidirecțional prevăzut cu rezistențe de agățare interne (opțional). Buffer-ele de ieșire ale portului C au caracteristici de amplificare. Liniile portului A sunt folosite și ca intrări analogice pentru convertorul A/D. Pinul PC6 servește și ca intrare pentru inițializarea procesorului. Portul B indeplinește de asemenea funcții speciale ale microcontrolerului ATmega 328. [2]

Port D (PD7…PD0)

Portul D este un port I/O de 8 biți bidirecțional prevazut cu rezistențe de agățare interne (optional). Buffer-ele de ieșire ale portului D au caracteristici de amplificare. Portul D îndeplinește de asemenea funcții speciale ale ATmega 328.[2]

AVCC – pin de alimentare pentru portul A și pentru convertorul A/D.

AREF – pin de intrare pentru referința analogical a convertorului A/D.

Stiva

Microcontrolerele AVR folosesc o stivă organizată în memoria SRAM de date. Stiva se folosește în principal pentru stocarea temporară a datelor, pentru stocarea variabilelor locale dar și pentru stocarea adreselor de revenire din întreruperi. Accesarea stivei se face prin registrului contor de stiva SP (Stack Pointer) care este actualizat de procesor la fiecare accesare a stivei. Stiva lucrează pe principiul LI-FO (Last Input – First Output) și evoluează prin decrementarea adreselor. La încarcarea unei date în stivă SP este decrementat, iar la citire este incrementat, de aceea SP indică întotdeauna prima locație liberă din vârful stivei. Dimensiunea memoriei SRAM instalate condiționează dimensiunea propriu-zisă a stivei. Utilizatorul setează prin program adresa de început a stivei (care este adresa cea mai mare a zonei de memorie alocată stivei). Procesorul folosește instrucțiunea PUSH pentru transferul de date în stivă, iar instrucțiunea POP este folosită pentru transferul din stivă.

Indicatorul de stivă (SP) este decrementat cu 1 când se introduc date în stivă cu instructiunea PUSH, și decrementat cu 2 când sunt salvate în stivă adresele de revenire la apelarea subrutinelor cu instructiunile CALL sau GOTO sau la acceptarea unei întreruperi. Indicatorul de stivă este incrementat cu 1 când datele sunt citite din stivă cu instructiunea POP, și incrementat cu 2 când sunt citite din stivă adrese la executia unei instructiuni de revenire dintr-o subrutina (RET) sau dintr-o întrerupere (RETI).

Indicatorul de stivă este implementat cu două registre de 8 biți. Aceste registre sunt adresate în spatiul de adrese al dispozitivelor I/O (registrele SPH și SPL). De structura implementării depind numărul de biți folosiți. Spațiul de adrese poate fi mic la unele implamentări ale arhitecturii AVR, deoarece este folosit doar registrul SPL(SP Low). În acest caz registrul SPH (SP High) nu mai este utilizat.

Figura 10. Indicatorul de stivă

Organizarea memoriei

Atmega328 are două spații de memorie principală: memoria de date și memoria de program. În plus Atmega328 are și o memorie nevolatilă EEPROM pentru memorarea datelor. Cele trei tipuri de memorie sunt adresate liniar.

Figura 11. Organizarea spațiului de memorie

2.1.2 Circuitul de reset

Acest circuit are rolul de-a reseta microcontrolerul și anume de-al aduce la condițiile inițiale. Această funcție se realizează prin modificare potențialului de la pinul 1 al microcontrolerului care este legat la tensiunea de alimentare printr-o rezistentă de 10Kohmi. Astfel se intelege ca la pinul 1 se gasește starea 1 logic iar atunci când este activată funcția RESET la pinul 1 se va regasi starea 0 logic.

In figura 12 este prezentată schema electrică a circuitului de RESET.

Fig. 12 Schema electrica a circuitului de RESET.

Oscilatorul

Oscilatorul pe care il deține sistemul de supraveghere și control a casei inteligente are fecvența de 16 Mhz.

Datorită factorului de calitate extrem de ridicat și a unei stabilitați foarte bune cu temperatura, cristalul de quartz se utilizează pe scara largă în realizarea oscilatoarelor cu o înalta stabilitate a frecvenței de oscilație, din punct de vedere electric oscilatorul oferă o impedenața cu proprietați de circuit rezonant.[3]

In figura 13 este prezentată schema electrică a oscilatorului.

Fig. 13 Schema electrică a oscilatorului.

2.2 Modulul de afișare

Modulul de afișare este format dintr-un LCD 16×2 și un registru de deplasare comandate de către microcontrollerul Atmega328. Pe display sunt afișate temperatura din încăpere, temperatura setată de utilizator, umiditatea din încăpere și simbolurile de încălzire, respectiv răcire în momentul în care este în funcțiune încălzirea, respectiv aerul condiționat.

Ecranul LCD 16×2 este folosit într-o gamă largă de aplicații, dispunând de funcții de afișare a caracterelor speciale, personalizate, animații etc.

Figura 14. Display LCD 16×2

Specificații:

Număr de caractere: 16×2;

Culoare caracatere: alb;

Culoare fundal: albastru;

Tensiune de lucru 5 V;

Tabelul 1. Pini LCD 16×2

LCD-ul are trei pini de alimentare (Vdd, Vss, Vee), trei pini de control (RS, E, R/W) și opt pini de date (D0-D7). Pentru a afișa date el are nevoie de cel puțin 6 pini intrare-ieșire de la microcontroller, ceea ce reprezintă un dezavantaj atunci când este nevoie de mulți pini disponibili ai microcontrollerului. O modalitate de a reduce numărul de pini necesari funcționării afișajului este de a controla LCD-ul cu ajutorul unui registru de deplasare.[4]

Datele sunt transferate serial de la microcontroller către registru de deplasare, iar la rândul lui trimițând datele paralel către afișaj. Comunicația este prin protocolul de comunicare SPI.

Integratul 74HC595 este registru de deplasare pe 8-biți de mare viteză, cu intrare serială, ieșire paralelă sau serială cu trei etape de ieșire. Acesta primește datele și ceasul de tact de la microcontroller și își umple buffe-rul intern de 8 biți. După ce buffer-ul s-a umplut primește un impuls de 5V pe pinul registrului de stivă, determinându-l să scoată la ieșire datele primate și sa reînceapă procesul. [5]

Figura 15. Pinii registrului de deplasare 74HC595

Figura 16. Schema conexiune LCD 16×2

2.3 Modulul de securitate

Modulul de securitate este format dintr-o tastatură cu ajutorul căreia este introdus codul de acces, doi martori luminoși pentru a indica starea ușii (închisă sau deschisă.

Pentru a deschide ușa se introduce codul de acces (1274), reintroducerea acestuia va închide ușa. Sitemul va avertiza sonor după ce codul a fost introdus corect printr-un “buzz” și daca a fost introdus greșit prin trei “buzz-uri”. Din interiorul încăperii se poate de asemenea închide sau deschide ușa prin apăsarea butonului CH al telecomenzii. Microcontrollerul va stoca în memoria eeprom a acestuia starea închis – deschis, iar în caz de căderea electricității, la repornirea sistemului acesta va revenii la ultima stare memorată.

Figura 17. Tastatură

Tastatura are la bază divizorul de tensiune. La fiecare buton apăsat, la ieșire va fi o anumită tensiune. Formula divizorului de tensiune este: .

Figura 18. Divizorul de tensiune

Tabelul 2. Valori tastatură

Martori luminoși care indică starea ușii (închisă respectiv deschisă) sunt proiectați cu posibilitatea de a putea schimba starea din închis în deschis doar printr-o comandă a unui pin al microcontrollerul ATmega328, din considerente economice al pinilor microcontrollerului.

Principiul de funcționare este relativ simplu. Dacă baza tranzistorul PNP va primii “0” logic sau 0V atunci va intra în conducție și va aprinde ledul roșu. Dacă baza tranzistorul NPN va primii “1” logic sau 5V atunci va intra în conducție și va aprinde ledul verde. Deoarece ledurile funcționează la un curent maxim de 20mA, am înseriat la fiecare led câte o rezistență de 330Ω, considerând utilă alimentarea ledurilor la un curent de 15mA.

Figura 19. Martori luminoși

2.4 Senzorul de temperatură LM35DZ

Figura 20. Senzorul de temperatură LM35DZ

Senzorul de temperatură LM35DZ este circuit integrat de precizie, cu o ieșire de tensiune liniară în raport cu temperatura în Centigrade. Senzorul nu necesită nici o calibrare externă pentru a oferi o acuratețe de ± ¼ ° C în raza temperaturii camerei și ± ¾ ° C la capacitate maximă între -55° C și +150° C.

Tabelul 3. Caracteristici electrice LM35DZ

Aerul condiționat

Figura 21. Aerul condiționat

Aeru condiționat este controlat printr-o telecomandă cu infraroșu. Din motive economice aerul condiționat va fi simulat printr-un ventilator alimentat la 12V și va fi comandat de microcotroller. Sistemul poate fi controlat automat sau manual. În modul automat se setează temperatura dorită în încăpere iar dacă temperatura va fi mai mare decât temperatura din încăpere sistemul va controla aerul condiționat. În modul manual se poate pornii-oprii aerul condiționat și seta puterea de puterea de suflare a aerului condiționat.

Figura 22. Simularea aerului condiționat

Principiul de utilizare al aerului condiționat este următorul:

La apăsarea butonului PLAY din telecomandă se va activa modul automat, sistemul oscilând între aerul condiționat și încălzire pentru a putea menține temperatura setată.

La apăsarea butonului butonul 9 din telecomandă se va activa modul manual de pornire, respectiv oprire a aerului condiționat.

La apăsarea butonului butonul 8 din telecomandă se va activa modul manual ce va incrementa turația coolerului.

La apăsarea butonului butonul 7 din telecomandă se va activa modul manual ce va decrementa turația coolerului.

2.6 Senzorul infraroșu receptor

Figura 23. Senzor infraroșu receptor

Senzorul infraroșu receptor este folosit pentru detecția telecomenzii, în aproape toate aplicațiile: televizoare, DVD playere, modulatoare FM auto…etc. Distanța dintre un emițator și un receptor variează de la 8 la 45m. Senzorul conține un demodulator IR de o anumita frecvență. În funcție de cum sunt modulate receptoarele sunt de 36 kHz, 38 kHz, 40 kHz și 56 kHz.[11]

Figura 24. Schema bloc a receptorului infraroșu

2.7 Modulul de încălzirea

Figura 25. Modulul de încălzire

Modulul de încălzire este format dintr-un conductor electric și un termistor ce sunt amplasate sub pardosea. Din motive economice și de siguranță deoarece conductorul este alimentat la 220V alternativ, am simulat modulul de încălzire printr-o rezistență de 15Ω-10W alimentată la 12V și un termistor ntc de 100k. Modulul de încălzire este conectat sau deconectat printr-un releu. Termistorul are rolul ca în cazul în care conductorul ajunge la o temperatură prea mare să fie decuplat.

Modulul poate fi controlat în două moduri automat sau manual. În modul automat modulul este activat sau dezactivat automat în funcție de temperatura setată. În modul manual modulul este activat sau dezactivat prin telecomandă. În ambele moduri aceasta va fi decuplată automat și dacă va depășii o temperatură de 60 °C, refiind conectată automat cănd temperatura va ajunge la 50 °C. Această metodă este folosită pentru a prevenii problema cuplării și decuplării repetate pănă la stabilizarea temperaturii.

Conform legii lui Ohm , rezistența va consuma un curent de 800mA.

Puterea disipată pe rezistență: P= U * I= 12 *0.8= 9.6W.

Figura 26. Simularea modului de încălzirei

2.8 Senzorul rezistiv de temperatură NTC-100K

Figura 27. Senzorul de temperatură NTC-100K

Termometrele cu rezistență metalică acoperă un domeniu relativ larg de temperaturi, fiind folosite pentru măsurarea temperaturii gazelor și lichidelor, a temperaturii suprafețelor unor solide sau temperature din interiorul unor solide ușoare. Ele sunt stabile și rezistente la condiții de mediu neprietenoase, fiind des folosite în industria chimică sau industria alimentară. Termometrele cu rezistență metalică au o acuratețe bună dar un raspuns lent în timp, fiind destul de fragile și uneori scumpe.

Metalele cele mai des folosite ca traductori de temperatură sunt platina, cuprul și nichelul. Valorile standard pentru rezistența la temperatura de referință Ro (valori nominale) sunt 10, 50, 100, 500 și 1000 ohmi.[12]

În tabelul de mai jos sunt prezentate caracteristicile acestor materiale, cu precizarea că ele se referă la termometrele cu rezistența nominală de 100 Ω.

Tabelul 4. Caracteristicile materialelor (Platină, Nichel, Cupru)

Figura 28. Caracteristica putere consumată – temperatură ambiantă

Temperatura care poate fi masurată de acest senzor este în domeniul -55°C ~ +125°C, iar puterea este de 0,5W. [12]

Valoare citită de la senzor

Temperatură afișată

Figura 29. Caracteristica valoare citită – valoare afișată (NTC-100K)

Domeniul de masurare fixat pentru acest proiect este cuprins între 0 și 105 grade Celsius, se alimentează cu o tensiune 3-5V, iar pe ieșirea are o tensiune analogică care variază între 0 și tensiunea de alimentare.

Lumina interioară

Controlul intensității luminoase a unei bec incandescent alimentat la o tensiune de 220V curent alternativ, se poate face printr-un variator de tensiune. Variatoarele de tensiune alternativă sunt parte integrată în clasa convertoarelor de energie de putere denumită generic convertoare statice de putere din care fac parte redresoarele, chopper-ele și invertoarele. Acestea realizează conversia curent alternativ- curent alternativ, mai precis, modifică, în anumite limite, valoarea efectivă a fundamentalei pe sarcină, rezultatul final fiind reglajul puterii electrice disipată pe aceasta.[13]

Variatoarele de tensiune alternativă se pot utiliza și la reglajul turației unui motor de curent alternativ. Un exemplu clasic de variator de tensiune alternativa este prezentat în figura de mai jos.

Figura 30. Variator de tensiune alternativă clasic

Dacă triacul este blocat, prin circuit nu va trece nici un curent. În momentul deschiderii triacului, prin circuitul becului vor circula ambele semialternanțe, însă fragmentate, în funcție de unghiul de deschidere. Prin triac va circula un curent redresat (pulsatoriu) format numai din semialternanțe pozitive, de asemenea fragmentate.[14]

În proiectul actual nu poate fi folosit acest tip variator de tensiune, deoarece nu poate fi controlat prin intermediul microcontrollerului. Pentru a putea controla intensitatea luminoasă cu ajutorul microcontrollerului avem nevoie de un circuit pentru detectarea trecerii prin zero și un circut de comandă.

Figura 31. Variator de tensiune alternativă

Circuit pentru detectarea trecerii prin zero se realizează printr-o punte redresoare si un optocuplor. Tensiunea alternativă este redresată pentru a elimina alternanța negativă și este izolată printr-un optocuplor de restul circuitului. În figura de mai jos este prezentat rezultatul unei simulări cu ajutorul programului Proteus, pe calculator a circuitului de detecție a trecerii prin zero. Pe canalul B al osciloscopului este un semnal sinusoidal de 220V și 50Hz, iar pe canalul B este semnalul obținut la ieșirea optocuplorului..

Se știe că , astfel dacă o perioadă este de 20mS, atunci timpul trecerii prin zero va fi de 10ms la fel cum se observă și în simulare.

Figura 32. Simularea detectării trecerii prin zero

Partea de comandă a becului incandescent se realizează cu ajutorul unui triac. Acesta are nevoie de un curent în grilă pentru a putea fi amorsat. Pentru a izola partea de curent alternativ de restul circuitului se folosește un optocuplor care va comanda triacul. Microcontrollerul citește când tensiunea ajunge la zero și dă un semnal de 5V pentru a amorsa triacul, acesta va sta amorsat pănă va ajunge semnalul pe alternanța negativă, dezamorsându-l. Sincronizând trecerea prin zero cu impulsul pentru amorsarea triacului se poate regla intensitatea luminoasă.

Din motive economice și de siguranță, deoarece tensiunea de 220V este periculoasă; am ales becuri de 12V pentru a simula variația intensității luminoase.

Partea de comandă este un MOSFET cu canal N. Acest tip de tranzistoare se comandă în tensiune, astfel la o tensiune de 5V tranzistorul este complet deschis, iar la o tensiune de 0V tranzistorul este complet închis. Pentru a putea varia intensitatea luminoasă este generat un semnal dreptunghiular de către microcontroller, deschizând într-o anumită măsură tranzistorul.

În acest fel a fost realizat varierea intensității luminoase a lămpii și a luminii interioare.

Figura 33. Simularea luminii interioare

Figura 34. Simularea unui semnal dreptunghiular cu un PWM de 50%

2. 10 Elementul piezzo buzzer

Figura 35. Elementul piezzo buzzer

Elementul Piezo buzzer este o componentă electronică concepută să producă sunete. Datorită prețului mic și modului simplu de a lucra cu el, acesta are folosit des în aplicații precum senzorul de gaz, calculatoare, sonerii etc.[15]

În proiect elementul piezo are rolul de a produce un sunet pentru a avertiza validitatea codului de securitate.

2.11 Telecomanda

Figura 36. Telecomanda

Telecomanda utizată în proiect a fost folosită la un modulator FM auto. Pentru a putea fi folosită în proiect a trebuit să programez un microcontroller să îmi citească și să îmi afișeze codurile în HEX ale butoanelor.

Telecomanda are la bază protocolul NEC. Protocolul utilizează codarea biților într-un puls. Fiecare puls este de 560 µs, la o frecvență de 38 kHz. Semnalul logic “1” durează 2.25ms să se transmită, în timp ce semnalul “0” durează la jumătate 1.125ms. [17]

Figura 37. Modulația

În figrua 53 este un semnal captat cu osciloscopul, recepționat la apăsarea butonului EQ de la telecomandă. După cum se poate observă semnalul este aproape la fel ca în figura 52, deoarece este alt cod trimis, iar filtrele de zgomote nu au fost activate.

Figura 38. Semnal recepționat de la telecomandă

În tabelul este descrisă acțiunea și codul în HEX specifică fiecărui buton al telecomenzii.

Tabelul 5. Coduri telecomandă

3. Conceperea programului pentru microcontroller

Codul pentru microcontroller este cod C și a fost scris în softul Arduino și programat cu placă de dezvoltare Arduino Uno.

Placa de dezvoltare Arduino Uno are ca elemente de bază un microcontroller Atmega328P, un oscilator și un regulator liniar de 5V. Figurile, tabelele și exemplele software sunt în conformitate cu foaia de catalog [18].

Figura 39. Placa de dezvoltare Arduino Uno

Figura 40. Schema electronică a plăcii de dezvoltare Arduino Uno

A fost inscripționat Arduino Uno să fie îndeplinească funcția de programator ISP. S-a ales din exemple ArduinoISP și acesta a fost încărcat pe placa de dezvoltare.

Figura 41. Programarea plăcii de dezvoltare Arduino Uno ca ISP

După ce a fost inscripționat Arduino, a fost pus microcontrollerul pe un breadboard și făcute conexiunile între microcontroller și placa de dezvoltare Arduino Uno, la fel ca în figura de mai jos.

Figura 42. Conexiune placa de dezvoltare Arduino Uno și microcontroller

După ce au fost făcute conexiunile a fost selectat tipul de programare “Arduino as ISP” și inscripționat bootloaderul pe noul microcontroller, acest pas se face decât odată; bootloaderul fiind acel programel care face microcontrollerul să poată să lucreze cu platforma Arduino.

Figura 43. Alegerea tipului de programare

Figura 44. Inscripționarea Bootloaderului

În final după ce au fost făcuți toți pașii se poate încărca codul pe microcontroller.

Acești pași au fost repetați de trei ori, deoarece în proiect sunt folosite trei microcontrollere.

Figura 45. Inscripționarea microcontrollerului

4. Proiectarea și realizarea sistemului

Proiectarea schemei electronice și a cablajului imprimat s-au realizat in programul EAGLE. S-a conceput un cablaj simplu cablat, iar amplasarea pieselor sa realizat decat pe fața plăcuței de textolit. S-a optat folosire a două plăcuțe de textolit si anume placa sistemului de comandă și control și placa sistemului format din periferice.

Plasarea componentelor sa făcut strategic datorita nevoii de accesibilitate a anumitor componente, dar si datorită traseelor dintre ele. S-a folosit două tipuri de cablare si anume „top” si „bottom”, s-a apelat la plan de masă pentru atenuare fluctuațiilor parazite.

Figura 46. Cablajul (placa) sistemului

După ce s-au realizat cablajele in EAGLE, acestea au fost imprimate pe plăcuțele de textolit, după care au fost introduse la corodat în clorură ferică.

După corodare au rămas doar traseele dorite, următorul pas fiind stanarea cablajelor, apoi realizarea de găuri pentru terminale si pini, urmat de plasarea componentelor. După terminarea plasării pieselor au rezultat plăcile.Pentru lipirea componentelor sa folosit stația de lipit, fludor si sacâz și sa mai folosit un multimetru pentru măsurarea componentelor si continuitatea traseelor.

Figura 47. Sistemul de supraveghere și control a casei inteligente

5. Concluzii

Datorită acestui sistem am avut posibilitatea să studiez microcontrollerul ATmega328, senzori de temperatura (LM35) și infraroșu, cu care nu am mai lucrat.

Cea mai mare provocare încă de la început a fost imbinarea mai multor funcții folosind un microcontroller cu un numar de intrări-ieșiri aparent insuficient și îmbinarea tuturor elementor în programul software.

Avantajele proiectului:

Poate fi cu ușurință aplicat în orice încăpere;

Este compatibil cu o gamă largă de sisteme de uz casnic;

Înglobează un număr mai mare de funcții față de un sistem asemănător standard de pe piață.

Costul proiectului este cu mult mai mic decât un proiect asemănător cumpărat.

În ceea ce privește posibilitatea de dezvoltare a proiectului, pot spune că montarea unor senzori mult mai complecși și mai preciși pot îmbunătații proiectul.

Bibliografie

http://tet.pub.ro/files/studenti/materiale/an_III/miccurs/CURS_ATMEGA_16_III_TET.doc

http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf

Doicaru Elena, Circuite electronice fundamentale; Ed. Universitaria, Craiova, ISBN978-606-510-683-3

https://www.sparkfun.com/datasheets/LCD/ADM1602K-NSW-FBS-3.3v.pdf

http://www.onsemi.com/pub_link/Collateral/MC74HC595-D.PDF

http://www.instructables.com/

https://learn.sparkfun.com/tutorials/ir-communication

http://www.cetti.ro/v2/curs_ccp/p2_10.pdf

http://electronica.cevadiferit.ro/index.php/circuite-de-alimentare/102-variator-de-tensiune-alternativa.html

http://www.niqro.3x.ro/variator/variator.htm

http://www.engineersgarage.com/insight/how-piezo-buzzer-works#

http://www.sbprojects.com/knowledge/ir/nec.php

http://www.arduino.cc/en/Tutorial/HomePage

https://gist.github.com/williamjturkel/826526

http://42bots.com/tutorials/arduino-controlled-lcd-using-a-shift-register-and-the-spi-library/

http://www.tiletown.co.uk/UnderfloorHeating.aspx

http://biblioteca.regielive.ro/licente/

www.diploma.ro/

http://laurentiu.freewb.ro/motorul-electric

http://www.jayconsystems.com/fileuploader/download/download/?d=1&file=custom%2Fupload%2FFile-1394036527.pdf

ANEXE

Codul sistemului de supraveghere și control a casei inteligente

#include <stdio.h>

#include <SPI.h>

#include <LiquidCrystal.h>

#include <EEPROM.h>

#include <IRremote.h>

LiquidCrystal lcd(9);

///////////////////IR RECEIVER///////////

int RECV_PIN = 4;

IRrecv irrecv(RECV_PIN);

decode_results results;

///////////////LUMINA ///////////////

int d = 6;

boolean c = 0;

int lampa = 0;

///////////////COOLER ///////////////

int a = 6;

boolean b = 0;

int cooler = 0;

///////////////Incalzire ///////////////

const int ntc = A5;

int ntcvalue = 0;

const int rezistenta = 2;

boolean kj = 0;

int mz = 0;

///////////////////buzzer////////////////

int ctone = 3830; // 261 Hz

int speakerPin = 8;

long elapsedtime = 0;

long duration = 500000; // play each tone for about a half second (microseconds)

///////////////////temperatura///////////////

float tempC;

int tempPin = A4;

///////////////////VARIABILE////////////

boolean k = 0;

boolean j = 0;

float tempsetata = 27.000;

////////Character semn grade///

byte customChar[8] = {

0b00110,

0b01001,

0b01001,

0b00110,

0b00000,

0b00000,

0b00000,

0b00000

};

///////////////////////////////

byte temp[8] = {

0b00100,

0b01011,

0b01010,

0b01011,

0b01010,

0b10001,

0b11111,

0b01110

};

//////////////////////

byte cool[8] = {

0b00000,

0b00010,

0b10100,

0b01110,

0b00101,

0b01000,

0b00000,

0b00000

};

///////////////Tastatura ///////////////

int keypressed = 0;

int keyboardPin = A1; // Analog input pin that the keypad is attached to

int keyboardValue = 0; // value read from the keyboard

int led = 7;

////////////PAROLA INTRODUSA/////

int VA= 0;

int VB= 0;

int VC= 0;

int VD= 0;

////////////PAROLA = 1274/////

int TA= 1;

int TB= 2;

int TC= 7;

int TD= 4;

///////////////////////////////

int AB = 0;

boolean Stare = 0;

///////////////////////////////////////////////////////////////////////////////////

void setup(void)

{

Stare = EEPROM.read(2);

pinMode(ntc, INPUT);

pinMode(tempPin, INPUT);

pinMode(keyboardPin, INPUT);

pinMode(speakerPin, OUTPUT);

pinMode(led, OUTPUT);

digitalWrite(led,LOW);

pinMode(6, OUTPUT);

digitalWrite(6,LOW);

pinMode(10, OUTPUT);

digitalWrite(3,LOW);

pinMode(rezistenta,OUTPUT);

digitalWrite(rezistenta,LOW);

lcd.createChar(0, customChar); ///////caracter grade celsius

lcd.createChar(1, temp); ///////////caracter incalzire

lcd.createChar(2, cool); ///////////caracter racire

irrecv.enableIRIn(); // Start the receiver

lcd.begin(16, 2);

lcd.clear();

// Mesajul de inceput

lcd.setCursor(4, 0);

lcd.print("Licenta");

delay(500);

lcd.setCursor(15, 1);

lcd.print("M");

delay(500);

lcd.setCursor(14, 1);

lcd.print("Mu");

delay(500);

lcd.setCursor(13, 1);

lcd.print("Mur");

delay(500);

lcd.setCursor(12, 1);

lcd.print("Murt");

delay(500);

lcd.setCursor(11, 1);

lcd.print("Murta");

delay(500);

lcd.setCursor(10, 1);

lcd.print("Murtaz");

delay(500);

lcd.setCursor(9, 1);

lcd.print("Murtaza");

delay(500);

lcd.setCursor(8, 1);

lcd.print("Murtaza ");

delay(500);

lcd.setCursor(7, 1);

lcd.print("Murtaza M");

delay(500);

lcd.setCursor(6, 1);

lcd.print("Murtaza Mi");

delay(500);

lcd.setCursor(5, 1);

lcd.print("Murtaza Mih");

delay(500);

lcd.setCursor(4, 1);

lcd.print("Murtaza Miha");

delay(500);

lcd.setCursor(3, 1);

lcd.print("Murtaza Mihai");

delay(500);

lcd.setCursor(2, 1);

lcd.print("Murtaza Mihai ");

delay(2000);

lcd.clear(); ///stergem LCD

}

void loop(void)

{

/////////////////////////////////Afisam Temperatura//////////////

tempC = (5.0 * analogRead(tempPin) * 100.0) / 1024;

lcd.setCursor(0, 0);

lcd.print("Temp:");

lcd.setCursor(6, 0);

lcd.print(tempC);

lcd.setCursor(8, 0);

lcd.print(".0 ");

lcd.setCursor(11, 0);

lcd.write(byte(0));

lcd.print("C");

delay(100);

lcd.setCursor(0, 1);

lcd.print("TempSet: ");

lcd.setCursor(9, 1);

lcd.print(tempsetata);

lcd.setCursor(13, 1);

lcd.print(" ");

lcd.setCursor(14, 1);

lcd.write(byte(0));

lcd.print("C");

// delay(100);

//////////////////////////Reglaj Temp///////////

if(!j){

lcd.setCursor(15, 0);

lcd.print(" ");

mz = 1; }

if(j){

if(tempsetata > tempC){

lcd.setCursor(15, 0);

lcd.write(byte(1));

mz = 2;

digitalWrite(rezistenta,1);

}

if(tempsetata < tempC){

lcd.setCursor(15, 0);

lcd.write(byte(2));

mz = 1;

digitalWrite(rezistenta,0);

}

}

ntcvalue = analogRead(ntc);

if(ntcvalue > 601){

digitalWrite(rezistenta,0);

}

if(ntcvalue < 593){

if(!kj){

digitalWrite(rezistenta,0); }

if((kj) || (mz == 2)){

digitalWrite(rezistenta,1);

}

}

/////////////////////////////LUMINA////////////////////////////

////////////OFF//////////////

if(!c){

digitalWrite(6,LOW);

}

////////////ON///////////////

if(c){

////////////UP-DOWN////////

if(d == 1){

lampa = 10;

}

if(d == 2){

lampa = 50;

}

if(d == 3){

lampa = 100;

}

if(d == 4){

lampa = 150;

}

if(d == 5){

lampa = 200;

}

if(d == 6){

digitalWrite(6,HIGH);

}

if(d < 6){

analogWrite(6,lampa); }

}

////////////////////////// COOLER /////////////////

////////////OFF//////////////

if(!b){

digitalWrite(10,LOW);

}

////////////ON///////////////

if((b) || (j && (tempsetata < tempC))){

////////////UP-DOWN////////

if(a == 1){

cooler = 25;

}

if(a == 2){

cooler = 50;

}

if(a == 3){

cooler = 100;

}

if(a == 4){

cooler = 150;

}

if(a == 5){

cooler = 200;

}

if(a == 6){

digitalWrite(10,HIGH);

}

if(a < 6){

analogWrite(10,cooler);}

}

//////////////////////////////////CITIM CODURILE HEX TELECOMANDA//////////////////////

if (irrecv.decode(&results)) {

//////// CH ////////////

if(results.value == 0xFF629D){

Stare = ~Stare;

EEPROM.write(2, Stare);

}

////////Buton EQ////////////

if(results.value == 0xFF906F){

}

/////////////////////VOL+////////////////

if(results.value == 0xFFA857) {

}

/////////////////////VOL-////////////////

if(results.value == 0xFFE01F){

}

////////////////// PLAY ///////

if(results.value == 0xFFC23D) {

j = ~j;

}

///////////////////// >>| ////////////////

if(results.value == 0xFF02FD) {

tempsetata = tempsetata + 1;

}

///////////////////// |<< ////////////////

if(results.value == 0xFF22DD){

tempsetata = tempsetata – 1;

}

///////////////////// 0 ////////////////

if(results.value == 0xFF6897) {

kj= ~kj;

}

////////////////// 9 //////////////////

if (results.value == 0xFF52AD) {

b = ~b;

}

////////////////// 8 //////////////////

if (results.value == 0xFF4AB5) {

if(a < 6){

a = a + 1;}

}

////////////////// 7 //////////////////

if (results.value == 0xFF42BD) {

if (a > 0){

a = a – 1;}

}

////////////////// 6 //////////////////

if (results.value == 0xFF5AA5) {

c = ~c;

}

////////////////// 5 //////////////////

if (results.value == 0xFF38C7) {

if ( d < 6){

d = d + 1;}

}

////////////////// 4 //////////////////

if (results.value == 0xFF10EF) {

if (d > 0){

d = d – 1; }

}

////////////////// 3 //////////////////

if (results.value == 0xFF7A85) {

}

////////////////// 2 //////////////////

if (results.value == 0xFF18E7) {

}

///////////////// 1 ///////////////////

if (results.value == 0xFF30CF) {

}

irrecv.resume(); // Receive the next value

}

delay(100);

/////////////////////////////TASTATURA/////////////////////////////////////

keyboardValue = analogRead(keyboardPin); // read the value (0-1023)

if ((keyboardValue >255) && (keyboardValue < 265)){keypressed = 1;}

if ((keyboardValue >145) && (keyboardValue < 160)){keypressed = 2;}

if ((keyboardValue >310) && (keyboardValue < 330)){keypressed = 4;}

if ((keyboardValue >190) && (keyboardValue < 200)){keypressed = 5;}

if ((keyboardValue >700) && (keyboardValue < 725)){keypressed = 7;}

if ((keyboardValue >540) && (keyboardValue < 555)){keypressed = 8;}

if ((keyboardValue >930) && (keyboardValue < 940)){keypressed = 10;} // 11 = *

if ((keyboardValue >860) && (keyboardValue < 874)){keypressed = 11;}

if (keyboardValue > 120){

delay (100);

keyboardValue = analogRead(keyboardPin); // read the value (0-1023)

if (AB <4){

if(AB == 0){

VA = keypressed;}

if(AB == 1){

VB = keypressed;

}

if(AB == 2){

VC = keypressed;

}

if(AB == 3){

VD = keypressed;

}

AB = AB+1;

}

}//wait until key no longer being pressed before continuing

if(AB == 4){

if((VA == TA) && (VB == TB) && (VC == TC) && (VD == TD)){

Stare = ~Stare;

EEPROM.write(2, Stare);

while(elapsedtime < duration) {

digitalWrite(speakerPin, HIGH);

delayMicroseconds(ctone / 2);

digitalWrite(speakerPin, LOW);

delayMicroseconds(ctone / 2);

elapsedtime += ctone;

}

elapsedtime = 0;

delay(500);

AB=0;}

else{

while(elapsedtime < duration) {

digitalWrite(speakerPin, HIGH);

delayMicroseconds(ctone / 2);

digitalWrite(speakerPin, LOW);

delayMicroseconds(ctone / 2);

elapsedtime += ctone;

}

elapsedtime = 0;

delay(500);

while(elapsedtime < duration) {

digitalWrite(speakerPin, HIGH);

delayMicroseconds(ctone / 2);

digitalWrite(speakerPin, LOW);

delayMicroseconds(ctone / 2);

elapsedtime += ctone;

}

elapsedtime = 0;

delay(500);

while(elapsedtime < duration) {

digitalWrite(speakerPin, HIGH);

delayMicroseconds(ctone / 2);

digitalWrite(speakerPin, LOW);

delayMicroseconds(ctone / 2);

elapsedtime += ctone;

}

elapsedtime = 0;

delay(500);

AB=0;

}

}

if(Stare){

digitalWrite(led, HIGH);

}

if(!Stare){

digitalWrite(led, LOW);

}

if(AB == 0){

VA = 0;

VB = 0;

VC = 0;

VD = 0;

}

//////////////////////////////////////////////////////////////////

}

Similar Posts

  • Sisteme Contabile Comparatedocx

    === Sisteme contabile comparate === 2. Sistemul contabil românesc România a folosit până în 1994 sistemul contabil monoist. Obiectivul principal al contabilității era furnizarea informațiilor necesare planificării și controlului centralizat al economiei românești. Toate regulile contabile și modul de aplicare a lor în practică, începând de la planul de conturi și terminând cu formularele de…

  • Salarizarea Personalului In Institutii Publice

    === 28d287a66ca85edfbef8f78f375d2ec4c3362c3a_608831_1 === Cuprins Introducere–––––––––––––––––––––––––––––––––2 Capitolul 1. Aspecte teoretice privind saralizarea personalului–––––––––––––4 1.1. Salarizarea perosnlaului – deimitări conceptuale––––––––––––––––- 4 1.2. Legislația privind saralizarea ––––––––––––––––––––––––9 1.3. Aspecte teoretice privind salariații din România ––––––––––––––––15 Capitolul 2. Legislația privind salarizarea – trecut și prezent–––––––––––––18 2.1. Drepturile salariaților ––––––––––––––––––––––––––-18 2.2. Principalele acte legislative referitoare la salarizarea din prezent –––––––––-24 2.3….

  • Securitatea Energetica

    === 59e88196dcbec4900b4847c51a441721e4cfae17_686181_1 === Securitatea energetică Energia este principalul resort al vieții umane de ani de secole, începând cu revoluția tehnologigică. Aceasta stă la baza funcționării societăilor actuale, fiind motorul care pune în mișcare întrega activitate umană, fiind considerată ca fiind elementul cheie în ceea ce privește dezvoltarea economică, socială și îmbunătățirea calității vieții. Este unanim…

  • Rolul Activitatilor Integrate In Stimularea Creativitatii Copilului Prescolar

    === 571fca64bbd19bba614e68e3287f53f9ca4dbb6c_398480_1 === UNIVERSITATEA VALAHIA DIN TÂRGOVIȘTE FACULTATEA DE TEOLOGIE ORTODOXĂ ȘI ȘTIINȚELE EDUCAȚIEI SPECIALIZAREA:PEDAGOGIA ÎNVĂȚĂMÂNTULUI PRIMAR ȘI PREȘCOLAR LUCRARE DE DIPLOMĂ COORDONATOR ȘTIINȚIFIC: Conf. Dr. Claudia Vlaicu ABSOLVENTĂ: Radu Manuela Târgoviște 2016 UNIVERSITATEA VALAHIA DIN TÂRGOVIȘTE FACULTATEA DE TEOLOGIE ORTODOXĂ ȘI ȘTIINȚELE EDUCAȚIEI SPECIALIZAREA:PEDAGOGIA ÎNVĂȚĂMÂNTULUI PRIMAR ȘI PREȘCOLAR ROLUL ACTIVITĂȚILOR INTEGRATE ÎN STIMULAREA CREATIVITĂȚII…

  • Rolul Si Importanta Comunicarii Nonverbale In Cadrul Interviului In Randul Studentilor

    === 4d9c976281c9c8607a1a0a7fb5e6c6bea12ce058_127650_1 === INTRODUCERE În lucrarea de față urmăresc să analizez influența pe care comunicarea nonverbală o are asupra recrutorilor la susținerea unui interviu de către studenți, modul în care aceștia pot convinge evaluatorii astfel încât să fie angajați și ce însemnătate acordă tinerii comunicării nonverbale. În timpurile moderne societatea are ca dominantă interacțiunile sociale…

  • Rolul Asistentului Medical In Infectiile Nosocomiale

    === 3e9cd47e0b1c683d67cb0e767e90574475cdcd1b_307770_1 === Cuрrinѕ Intrοducеrе СΑΡIТΟLUL I ΑΝΑТΟМIΑ ȘI FIΖIΟLΟGIΑ ΑΡΑRΑТULUI RЕΝΑL 1.1 Αѕресtе gеnеrɑlе ɑlе ɑрɑrɑtului urinɑr 1.2 Αnɑtоmiɑ ɑрɑrɑtului urinɑr 1.3 Fiziоlоgiɑ ɑрɑrɑtului urinɑr СΑΡIТΟLUL II ΝΟȚIUΝI DЕЅΡRЕ IΝFЕСȚIILЕ ΝΟЅΟСΟМIΑLЕ 2.1 Ρrinсiрii utilizɑtе în dеfinirеɑ infесțiilοr nοѕοсοmiɑlе 2.2 Dеfiniții 2.3 Сlɑѕifiсɑrеɑ infесțiilοr nοѕοсοmiɑlе 2.4 Еtiοlοgiɑ infесțiilοr nοѕοсοmiɑlе 2.5 Ρɑtοgеnеzɑ infесțiilοr nοѕοсοmiɑlе 2.6 Ерidеmiοlοgiɑ…