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ță.
Prin acest proiect, se vor simula următoarele funcționalități:
Lista de piese
Scheme electrice
Librăriile folosite au fost:
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ă.
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ă.
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ă
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
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ă:
10. Interfața aplicației
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.
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.
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.
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ă.
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ță