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;
}
//////////////////////////////////////////////////////////////////
}
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Sistem Supraveghere Si Control Casa Inteligentadoc (ID: 155227)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
