This is an old revision of the document!


Smart House Layout - Ilie Viky-Andreea

Introducere

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.

Descriere generală

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ță.

Hardware Design

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

Software Design

Mediu de Dezvoltare:

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.

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Ilie Viky-Andreea, 334CD → :pm:prj2025:cc:viky_andreea.ilie.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2025/fstancu/viky_andreea.ilie.1748407891.txt.gz · Last modified: 2025/05/28 07:51 by viky_andreea.ilie
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