This is an old revision of the document!
Proiectul meu constă într-o machetă de casă inteligentă (smart house), care integrează o serie de funcționalități moderne menite să imite controlul automatizat al unei locuințe reale.
Utilizatorul va putea interacționa cu macheta prin intermediul unei aplicații, având posibilitatea să:
- controleze luminile din fiecare cameră,
- deschidă sau închidă ușa de la garaj,
- primească notificări de tip alarmă în cazul în care este detectată mișcare în locuință în timp ce luminile sunt stinse.
Ideea proiectului a pornit de la dorința de a ilustra modul în care tehnologia poate fi integrată într-un mediu domestic pentru a spori confortul, securitatea și eficiența energetică.
Consider că un astfel de sistem este util atât pentru utilizatori, oferindu-le control de la distanță asupra casei lor, cât și pentru mine, ca dezvoltator, pentru aprofundarea cunoștințelor în domeniul automatizărilor și interfețelor inteligente.
Locuința va fi formată din opt camere, dintre care una va fi destinată garajului. În fiecare cameră, cu excepția garajului, va fi instalat câte un LED care poate fi aprins sau stins direct din aplicația mobilă, oferind un control inteligent al iluminatului.
Ușa garajului va putea fi controlată tot prin aplicație, fiind acționată de un servomotor, ceea ce permite deschiderea și închiderea acesteia de la distanță, în mod automatizat.
Pentru un plus de siguranță, dacă LED-ul de pe hol este stins iar senzorul detectează mișcare, se va declanșa automat o alertă pe telefon, însoțită de activarea buzzerului. Astfel, sistemul oferă nu doar confort, ci și un nivel crescut de securitate pentru întreaga locuință.
Placa de dezvoltare ESP32 funcționează ca unitate de control principală, gestionând toate componentele periferice ale sistemului: servomotorul utilizat pentru ridicarea și coborârea ușii garajului, buzzerul, LED-urile de stare și senzorul de detecție.
Alimentare: Dispozitivul este alimentat de un modul format din patru baterii AA (6V), care furnizează energia necesară pentru funcționarea servomotorului. Pentru a alimenta în siguranță placa ESP32, tensiunea este redusă la 3.3V cu ajutorul unui divizor de tensiune.
Pentru a controla eficient servomotorul, semnalul PWM generat de ESP32 (0–3.3V) este amplificat la 0–5V cu ajutorul unui amplificator operațional, asigurând astfel o acționare precisă a mecanismului de deschidere/închidere a garajului. Senzorul este alimentat direct din baterii și este conectat la pinul GPIO0 al plăcii ESP32. Buzzerul este conectat la pinul GPIO1, permițând generarea alertelor sonore în funcție de starea sistemului.
Această arhitectură asigură un control eficient și fiabil al sistemului de automatizare a ușii de garaj.
Piese:
| Componentă | Descriere / Observație |
|---|---|
| ESP32 | Placă Wireless cu Microcontroller |
| Servomotor SG92R 9g 2.5 kg.cm, 4.8 V | Motor utilizat pentru usa garajulu |
| Modul Senzor PIR HC-SR501 | Senzor de Miscare |
| Tranzistor PNP 2n2907 TO-92 | Pentru buzzer |
| Buzzer Activ | 103450 – 3.7V, 2000mAh |
| LED-uri | lumina |
IDE: PlatformIO IDE (Visual Studio Code).
Framework: Arduino Core pentru ESP32.
Limbaj de Programare: C++.
Librării și Surse 3rd-Party: <Arduino.h>: Librăria de bază Arduino, oferind funcționalități fundamentale. <WiFi.h>: Librărie standard ESP32 pentru managementul conexiunii Wi-Fi. <WebServer.h>: Librărie standard ESP32 pentru crearea unui server web HTTP. <LittleFS.h>: Librărie pentru gestionarea sistemului de fișiere LittleFS, utilizat pentru stocarea paginilor web (HTML, CSS, JS). <ArduinoJson.h>: O librărie populară pentru parsarea și generarea eficientă a obiectelor JSON, utilizată pentru comunicarea datelor structurate cu clientul web (ex: starea senzorilor, starea ușii de garaj). <DHT.h> și <DHT_U.h>: Librării pentru interfațarea cu senzorul de temperatură și umiditate DHT22 (probabil de la Adafruit). <ESP32Servo.h>: Librărie specifică ESP32 pentru controlul precis al servomotoarelor, utilizată pentru ușa garajului. “credentials.hpp”: Fișier header customizat, parte a proiectului, care conține datele de autentificare pentru rețeaua Wi-Fi și pentru interfața web (nu este o librărie 3rd-party, ci o componentă a proiectului).
Algoritmi și Structuri Planificate/Implementate: Arhitectură Generală: Sistemul funcționează ca un server web pe ESP32, accesibil printr-o interfață web dintr-un browser. Evenimentele sunt declanșate de cereri HTTP de la client (browser). Starea dispozitivelor (LED-uri, ușă garaj) este menținută în variabile globale și reflectată pe pinii GPIO. Managementul Autentificării: Un mecanism simplu de autentificare bazat pe username și parolă (definite în credentials.hpp). O variabilă booleană (isAuthenticated) urmărește starea sesiunii. Accesul la paginile protejate (ex: index.html, rutele de control) este permis doar după autentificare. Utilizatorii neautentificați sunt redirecționați către pagina de login (login.html). Logout-ul resetează starea de autentificare. Controlul Dispozitivelor (Lumini și Ușă Garaj): Lumini: Fiecare lumină este asociată cu un pin GPIO și o variabilă booleană de stare (ex: ledStateBedroom1). Comutarea stării se face prin cereri HTTP GET către rute dedicate (ex: /toggleBedroom1). O funcție generică processToggleRequest() centralizează logica de comutare și debounce pentru a preveni acționări multiple la apăsări rapide. Starea curentă poate fi interogată prin rute dedicate (ex: /stateBedroom1). Ușă Garaj: Controlată de un servomotor (garageServo). Pozițiile “închis” și “deschis” sunt definite prin constante (SERVO_CLOSED_POS, SERVO_OPEN_POS). Acționarea se face prin cereri HTTP POST (/openGarageDoor, /closeGarageDoor). Include un mecanism de debounce (garageDoorDebounceDelay) pentru a preveni suprasolicitarea servomotorului. La deschiderea ușii, lumina din garaj este aprinsă automat dacă era stinsă. Starea ușii și a luminii din garaj este returnată în format JSON. Citirea Senzorilor (DHT22): Datele de temperatură și umiditate sunt citite la cerere printr-un endpoint HTTP GET (/dhtdata). Datele sunt returnate în format JSON. Include gestionarea erorilor în cazul în care citirea de la senzor eșuează (returnează null pentru valori). Servirea Fișierelor Statice: Paginile HTML (index.html, login.html), fișierele CSS (style.css) și JavaScript (script.js) sunt stocate în sistemul de fișiere LittleFS. Funcția readFile() este utilizată pentru a citi conținutul acestor fișiere și a le trimite clientului. Debounce: Implementat pentru a preveni acționări multiple și nedorite cauzate de cereri rapide. toggleDebounceDelay pentru comutarea luminilor. garageDoorDebounceDelay pentru acționarea ușii garajului. Se bazează pe compararea timpului curent (millis()) cu timpul ultimei acționări. Structuri de Date: Variabile booleene simple pentru stările LED-urilor și ale ușii de garaj. Obiecte StaticJsonDocument (din ArduinoJson) pentru construirea răspunsurilor JSON. Array-uri de pini și pointeri la stări pentru inițializarea facilă a LED-urilor în setup(). Surse și Funcții Implementate (Etapa 3): Fișierul Principal (implicit .cpp): Variabile Globale: Definirea pinilor, constantelor pentru servo, variabilelor de stare pentru LED-uri, ușa garajului, autentificare, instanțe pentru DHT, Servo, WebServer. setup(): Inițializare comunicație serială. Configurare pini LED ca OUTPUT și setare stare inițială. Inițializare și atașare servomotor la pinul specificat, setare poziție inițială (închis). Inițializare senzor DHT. Montare sistem de fișiere LittleFS. Listare fișiere din LittleFS (pentru debugging). Conectare la rețeaua Wi-Fi folosind credențialele din credentials.hpp. Definirea handler-elor pentru rutele HTTP ale serverului web: Login: /login.html (GET), /login (POST). Logout: /logout (POST). Pagina principală: / (GET). Resurse statice: /style.css, /script.js. Control lumini: /toggle<RoomName>, /state<RoomName> pentru fiecare cameră. Control ușă garaj: /openGarageDoor (POST), /closeGarageDoor (POST), /garageDoorState (GET). Date senzor: /dhtdata (GET). Gestionare NotFound: server.onNotFound(). Pornire server web. loop(): Apel continuu server.handleClient() pentru a procesa cererile HTTP primite, doar dacă ESP32 este conectat la Wi-Fi. Funcții Utilitare: readFile(fs::FS &fs, const char * path): Citește și returnează conținutul unui fișier din sistemul de fișiere specificat. checkAuth(): Verifică dacă utilizatorul este autentificat. Returnează true dacă este autentificat, false altfel. Handler-e Web (Funcții de Gestiune a Rutelor): Autentificare: handleLoginHTML(), handleLogin(), handleLogout(). Interfață Principală: handleRoot(), handleCSS(), handleJS(). Control Lumini: processToggleRequest(int pin, bool &stateVariable, const String& ledName): Logica centralizată pentru comutarea și debounce-ul luminilor. handleToggleBedroom1(), handleStateBedroom1(), etc. (câte o pereche pentru fiecare lumină configurată): Apelează processToggleRequest sau returnează starea curentă. Control Ușă Garaj: handleOpenGarageDoor(), handleCloseGarageDoor(), handleGarageDoorState(). Implementează logica de acționare, debounce și returnare a stării în format JSON. Senzor DHT: handleDHTData(). Citește datele de la senzor și le returnează în format JSON, cu gestionarea erorilor. handleNotFound(): Gestionează cererile către rute inexistente, redirecționând la login dacă se încearcă accesul la / fără autentificare.
Care au fost rezultatele obţinute în urma realizării proiectului vostru.