Smart Home

Student: Coconu Taisia-Maria

Grupa: 331CC

:!: :!: :!: Drive Proiect Coconu Taisia-Maria :!: :!: :!:

Introducere

Prezentarea succintă a proiectului:

Am ales realizarea unei case inteligente pentru a simula existența anumitor facilități într-un mediu de trai favorabil din zilele noastre. Din acest motiv, consider relevantă crearea unei machete care să reflecte principalele operații inteligente pe care un arhitect le poate avea în vedere atunci când construiește o casă modernă.

:!: De ce este utilă o astfel de casă pentru omul modern? :!:

Simplifică extrem de mult anumite procese obositoare și obișnuite din casele tradiționale, sporind totodată curiozitatea și interesul utilizatorului prin diverse inovații ce aduc noutate și prosperitate în propria locuință.

Descriere generală

Prin acest proiect, se vor simula următoarele funcționalități:

  • :-P Pe LCD sunt afișate, la început, temperatura de afară, precum și data și ora. Odată ce se realizează anumite funcții asupra acestuia, vor fi afișate informații precum: numărul oamenilor care sunt în casă, nivelul de umiditate al plantelor, texte sugestive operațiilor, parola de la casă, mesaje corespunzătoare de genul “Sunt acasă” / “Nu sunt acasă” etc.
  • =) Aprinderea unui LED la apropierea de casă atunci când senzorul fotorezistiv detectează întuneric și senzorul de sunet detectează zgomot împrejurul casei (înlocuindu-se astfel tradiționala aprindere a întrerupătorului din veranda casei atunci când se intră în casă și permițând economisirea energiei electrice datorită faptului că led-ul se aprinde doar atunci când este detectat zgomot)
  • :-o Închiderea automată a geamurilor casei atunci când senzorul nivelului de apă detectează un nivel ce poate reprezenta un pericol pentru pătrunderea apei în casă. Există un LED care anunță furtuna prin pâlpâiri successive ale acestuia
  • ;-) Deschiderea automată a garajului atunci când senzorul fotoelectric detectează inserarea unei monede în aparatul de la intrarea în parcare. Atunci când mașina este parcată în garaj, un mesaj corespunzător este afișat pe LCD.
  • 8-) Intrarea în casă se va face automat pe baza unei parole ce va fi afișată pe un LCD și introdusă cu ajutorul a două butoane (butonul verde este apăsat un număr corespunzător de secunde până când se introduce un caracter, iar butonul roșu confirm selecțiile făcute). Se permite ca atunci când se introduce un caracter greșit din parolă acesta să fie șters. Pe LCD apar mesaje sugestive legate de operațiile care sunt făcute asupra butoanelor. Odată cu intrarea în casă, va cânta o melodie de “Bun venit”. Persoanele care intră în casă vor fi contorizate. Dacă parola este greșită de 3 ori, se va activa alarma și va fi chemată poliția, simulată cu ajutorul unei mașini realizate tot cu Arduino.
  • :-| În cazul în care este o temperatură mult prea ridicată în casă, există un ventilator ce va porni automat. Detecția se face cu ajutorul unui senzor de temperatură și umiditate. Temperatura încăperii este monitorizată și afișată permanent pe LCD.
  • 8-o Același ventilator pornește și anunță un incendiu, ajutând la stingerea acestuia în cazul în care senzorul de foc detectează posibilitatea unui incendiu. De asemenea, ușa de la intrare se va deschide automat la anunțarea unui posibil incendiu, iar alarma va porni necondiționat.
  • :!: Există un sistem de monitorizare a umidității solului plantelor din grădină care este pornit doar la o comandă introdusă de utilizator. În cazul în care plantele nu sunt udate suficient, este emis un semnal sonor și unul luminos pentru a înștiința nevoia de a uda solul. Datele referitoare la umiditate și la nivelul de apă al plantelor este afișat pe LCD.

Schema bloc

Hardware Design

Lista de piese :-P

Scheme electrice :-D

Pentru implementarea funcționalității de aprindere a ledului atunci când este detectată voce și este noapte:

Se utilizează:

  • LED
  • Senzor sunet
  • Senzor fotorezistiv

Pentru implementarea funcționalității de închidere automată a ferestrelor atunci când este detectat un nivel ridicat de apă pe acoperișul casei:

Se utilizează:

  • Servomotor
  • Senzor nivel apă

Pentru implementarea funcționalității de deschidere a garajului atunci când este introdusă o monedă:

Se utilizează:

  • Servomotor
  • Senzor fotoelectric

Pentru implementarea funcționalității de intrare în casă:

Se utilizează:

  • Butone
  • Servomotor
  • LCD

Pentru implementarea funcționalității de deschidere a ventilatorului atunci când este o temperatură prea ridicată:

Se utilizează:

  • Ventilator
  • Senzor temperatură și umiditate

Pentru implementarea funcționalității de aprindere a ventilatorului atunci când flacăra este detectată:

Se utilizează:

  • Ventilator
  • Senzor foc

Pentru implementarea funcționalității de monitorizare a plantelor:

Se utilizează:

  • LED
  • Buzzer
  • Senzor umiditate sol

Schema hardware finală:

whatsapp_image_2023-04-26_at_21.15.15.jpeg

Alimentarea se face cu ajutorul a doi acumulatori 18650LI-ION. De asemenea, se folosește un modul bluetooth cu ajutorul căruia se pot comanda anumite funcționalități ale casei.

Schema hardware pentru mașina de poliție:

Se utilizează:

  • Buzzer
  • Servomotor
  • DC Motor
  • Motor Driver
  • Senzor Ultrasonic

Software Design

Mediul de dezvoltare utilizat pentru realizarea proiectului a fost: https://www.arduino.cc/en/software/ - versiunea 2.1.0

Pentru SMART HOME

Librăriile folosite au fost:

  1. =) <Servo.h> - utilizată pentru a putea lucra cu cele 3 servomotoare puse la dispoziție
  2. :-D “DHT.h” - utilizată pentru senzorul de temperatură și umiditate
  3. :-O <Wire.h> și <LiquidCrystal_I2C.h> - utilizate pentru a putea folosi LCD-ul în afișarea diverselor informații necesare
  4. :!: <SoftwareSerial.h> - utilizată pentru a putea folosi SerialMonitor
  5. ^_^ <TimeLib.h> - utilizată pentru a putea afișa ora și data

În cele ce urmează, se va prezenta o descriere succintă a codului scris atât pentru casă, cât și pentru mașina de poliție.

Datorită faptului că la intrarea în casă se aude o melodie specifică, am definit notele muzicale necesare astfel:

note muzicale pentru crearea melodiei la intrarea în casă

   #define NOTE_C4  262
   #define NOTE_E4  330
   #define NOTE_G4  392
   #define NOTE_A3  220
   #define NOTE_G3  196
   #define NOTE_B3  247
   #define NOTE_D4  294

În cadrul codului, am folosit mai multe variabile, iar acestea au fost definite astfel:

variabile utilizate pentru aprinderea ledului in functie de sunet, luminozitate și numărul de secunde

   int relay_close_led_flag;
   int relay_close_led_count;

variabila care contorizeaza câți oameni intră în casă

   int counter_people;

variabilă care, atunci când devine multiplu de 3, activează alarma casei

   int counter_police;

variabila care opreste alarma dupa un anumit timp

   int cate_sec = 0;
   int i;

variabila care contorizeaza câte încercări mai are utilizatorul de ghicire a parolei

   int tries = 3;

utilizați în comunicarea serială

   char txbuf[20];
   char rxbuf[20];
   int index = 0;
   long ts = 0;

aprinde și stinge LED-ul după un interval

   short blink_on = 0;
   int ok;

activare/dezactivare alarmă

   int ok1 = 0;

variabile pentru reținerea luminozității/zgomotului extern

   volatile int Brightness;
   volatile int Environmental_sound;

variabilă care permite sau nu intrarea în garaj

   int pass;

servomotoarele

   Servo servo_9;
   Servo servo_10;
   Servo servo_11;

variabilă care reține nivelul apei pentru o plantă

   int water_level;

variabilă care reține umiditatea solului unei plante

   int Soil_moisture;

variabilă care detectează dacă este sau nu foc

   int flame;

variabile care contorizează câte grade sunt afară, respectiv care este umiditatea mediului

   int temperature;
   int humidity;
   DHT dht12(12, 11);

butoane folosite în scrierea parolei

   int Button_Red;
   int Button_Green;

contorizare de câte ori a fost apăsat un anumit buton

   int Red_num_time;
   int Green_num_time;

parola casei

   String password;

variabile care deschid sau închid ușa, în funcție de parolă sau dacă este detectat sau nu incendiu

   int door_flag;
   boolean key_door_flag;

LCD

   LiquidCrystal_I2C mylcd(0x27,16,2);

variabile care ajută în conectarea aplicației pentru ușă, mașină, LED, geam, parcare, parolă

   int BLE_door_flag;
   int BLE_car_flag;
   String BLE_value;
   int BLE_LED_flag;
   int BLE_window_flag;
   int BLE_fan_flag;
   String sensor_data;
   String app_password;
   int re_string_len;

Pentru modularizarea codului, am decis împărțirea acestuia în mai multe funcții, fiecare fiind specifică unei anumite funcționalități pe care le implementează proiectul.

Funcția soil() este auxiliară pornirii sistemului de detecție a nivelului de apă pentru sol și al umidității acestuia, întrucât acesta va porni doar atunci când se introduce de la tastatură String-ul “on”. Această funcție va fi mai apoi apelată în loop(), acolo unde se testează umiditatea pe o anumită plantă. Dacă planta necesită a fi udată, atunci buzzer-ul va alarma utilizatorul cu privire la acest lucru (doar când se începe utilizarea sistemului), iar un LED va blink-ui pe tot parcursul utilizării acestui senzor, doar atunci când este cazul.

Funcția Storm_warning() este ajutătoare atunci când se detectează o cantitate ridicată de apă pe acoperișul casei și pornește blink-urile unui LED alb ce are ca scop avertizarea oamenilor cu privire la furtună. Funcția este apelată apoi în loop() și pornește semnalul luminos atunci când cantitatea de apă detectată este mult prea mare. De asemenea, în acest caz, servomotorul aferent geamului produce o mișcare corespunzătoare cu un numpr de grade necesar pentru închiderea lui. În caz contrar, geamul rămâne în permanență deschis.

Funcția fan_motor_pwm() a fost special creată pentru a putea porni ventilatorul în cazul în care este o temperatură prea ridicată sau este detectat foc în apropierea casei. Funcția este apelată în loop() în cazul în care se depășește o temperatură specificată și în bucata de cod în care se pregătește evacuarea casei în caz de incendiu (caz în care se deschide și ușa casei pentru a putea părăsi incinta).

Funcția key_voice() definește sunetul ce este emanat atunci când se apasă butoanele ce compun parola/validarea parolei și se apelează pentru fiecare pas din definirea parolei (caracterele 1, 2, 3, ștergerea unui anumit caracter).

Funcția Password_Confirmation() ajută la deschidere/închiderea/blocarea ușii în caz că parola a fost introdusă corect sau nu. În această funcție se fac diverse afisări pe LCD cu diferite mesaje, se cheamă poliția, se contorizează numărul de încercări și se blochează ușa pentru un număr specificat de secunde (principiul pe care funcționează alarma este similar cu cel al unei parole de la telefon). Funcția este din nou apelată în loop(), acolo unde se și specifică date despre parolă cum ar fi: cifra 1 este corespunzătoare apăsării unui anumit interval de secunde, cifrele 2 și 3 analog, iar pentru a șterge un caracter trebuie apăsat un număr îndelungat de secunde pe butonul verde. Se contorizează numărul de persoane ce intră în casă, încercările rămase, se afișează mesaje corespunzătoare, parola etc.

Funcția setup_melody_door() este folosită numai pentru momentul în care parola este introdusă corect și un nou oaspete este poftit în casă. Melodia este inspirată din Laboratorul 2.

Funcția printDigits este folosită pentru afișarea corespunzătoare a datei și a orei în funcția de setup(), atunci când se afișează pentru prima oară informații corespunzătoare pe LCD. (temperatura, data, ora).

În funcție de setup() se specifică informații precum: la început, ușa este închisă, geamul este deschis, pe LCD se afișează temperatura, data și ora, contoarele sunt inițializate cu 0, String-urile cu ”” etc.

În funcția de loop() sunt executate toate funcționalitățile mai sus menționate. Mai multe detalii se regăsesc în comentariile din cadrul codului din arhivă.

În arhiva alăturată se găsește codul pentru casa SMART, alături de README și biblioteca utilizată pentru senzorul de temperatură și umiditate:

smarthome.zip

Pentru MAȘINA DE POLIȚIE

Pentru a realiza mașinuța de poliție, am avut nevoie principial de un senzor ultrasonic și un buzzer. În realizarea codului, am avut în special grijă de deplasarea mașinii în toate direcțiile de mers. Se verifică distanța până la obstacole și se caută de fiecare dată o rută corespunzătoare unor obstacole cât mai îndepărtate. Mai multe detalii se regăsesc în comentariile din codul din arhivă.

În arhiva alăturată se găsește codul pentru mașina de poliție:

masinapolitie.zip

Rezultate Obţinute

Rezultatele obținute în urma realizării proiectului:

 1. Interfața de început a casei 

 2. Aprinderea ledului noaptea, când se apropie cineva de casă

 3. Ridicarea barierei

 4. Introducerea corectă a parolei și contorizarea persoanelor care intră în casă

whatsapp_image_2023-05-18_at_23.11.42_1_.jpeg whatsapp_image_2023-05-18_at_23.11.43.jpeg

 5. Atunci când parola este introdusă greșit de 3 ori, se activează alarma, iar poliția este înștiințată

 6. Mașina de poliție

 7. Atunci când plouă, geamul se închide

 8. Sistemul de monitorizare al plantelor

whatsapp_image_2023-05-18_at_23.39.58_1_.jpeg whatsapp_image_2023-05-18_at_23.39.58.jpeg

 9. Atunci când se detectează focul, ventilatorul pornește și stinge acest foc, ușa se deschide pentru a se putea evacua încăperea și ambulanța este chemată:

whatsapp_image_2023-05-22_at_12.49.26_2_.jpeg whatsapp_image_2023-05-22_at_12.49.26.jpeg

 10. Interfața aplicației

whatsapp_image_2023-05-18_at_23.33.34.jpeg

Toate celelalte funcționalități, dar și cele prezentate mai sus sunt experimentate într-un demo atașat.

În drive-ul de mai jos poate fi observat un videoclip cu funcționalitatea completă a casei inteligente.

https://drive.google.com/drive/folders/16ODZVYwotw0ONRuD644CYl7uKrvmNkHw?usp=sharing

Concluzii

:-D Realizând acest proiect, am identificat multe lucruri practice care pot fi făcute cu ajutorul unui Arduino. Acest proiect a reprezentat o introducere interesantă în microprocesoare, utilă și care a necesitat foarte mult efort. Smart Home-ul construit are ca fundament vizualizarea unei machete pentru o casă din zilele noastre, modernă, cu diferite funcționalități și care ar putea fi de mare interes pentru toți cei care doresc să își proiecteze și realizeze o casă protejată (datorită cifrului de la intrarea în casă și a alarmei care se pornește atunci când este greșită parola), cu funcționalități intelgente multiple precum închiderea ferestrei atunci când plouă sau pornirea aerului condiționat când temperatura nu este una benefică ambientului.

8-) Casa este, de asemenea, impresionantă prin siguranța pe care o oferă în cazul unui incendiu, garantând o evacuare imediată. Dispune de un sistem de udare inteligent, cu ajutorul căruia utilizatorul este înștiințat care plante necesită a fi udate și care este situația lor cu privire la umiditate.

:-P Toate aceste informații sunt afișate atât pe un LCD, cât și monitorizate cu ajutorul unei aplicații pe telefon (conectată prin Bluetooth) și pot fi la îndemâna utilizatorului în orice moment.

:-O Pentru a simula și o mașină de poliție ce vine în ajutor atunci când parola este introdusă greșit, am construit si o mașină Arduino cu un senzor ultrasonic, al cărei scop nu este altul decât a evita obstacolele și a ajunge la destinație fără a face vreun accident.

;-) Doresc a continua lucrul la acest proiect, îmbunătățind interfața aplicației și conectând cele două Arduino utilizate astfel încât mașina de poliție să pornească singură doar atunci când alarma casei este activată.

Download

Arhiva conține:

  • codurile sursă
  • imagini cu toate funcționalitățile căsuței
  • diagramele electrice ale casei și mașinuței
  • schema bloc

Arhiva poate fi descărcată de mai jos:

Jurnal

05.04.2023 – alegere temă proiect

12.04.2023 – comandare piese

28.04.2023 – creare pagină OCW

12.05.2023 - finalizare Hardware Smart Home

18.05.2023 - finalizare Hardware mașinuță

Bibliografie/Resurse

pm/prj2023/ncaroi/smart-home.txt · Last modified: 2023/05/22 13:00 by taisia_maria.coconu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0