Cameră de securitate controlată prin aplicație mobilă
Introducere
Prezentarea pe scurt a proiectului:
Acest proiect constă într-un sistem de supraveghere portabil, autonom, bazat pe modulul ESP32-CAM. Dispozitivul este alimentat de la o baterie Li-Ion și poate stoca imagini pe un card SD, dar și transmite date către o aplicație mobilă personalizată prin WiFi.
Ce face:
- Captează imagini la intervale regulate sau la detecția mișcării.
- Salvează imaginile pe un card microSD.
- Trimite notificări și imagini către o aplicație mobilă.
- Poate fi controlat de la distanță printr-o interfață mobilă.
Scopul:
Scopul este realizarea unui sistem de supraveghere autonom, ușor de amplasat în diverse locații, fără a necesita infrastructură complicată sau alimentare permanentă.
Ideea de la care am pornit:
Am dorit un dispozitiv simplu, accesibil, portabil și wireless, care să poată monitoriza un spațiu și să alerteze utilizatorul în timp real.
Utilitate:
Este util pentru monitorizarea locuințelor, birourilor, grădinilor, spațiilor de parcare sau în proiecte educaționale și hobby-uri DIY. Poate fi un bun punct de plecare pentru aplicații IoT mai complexe.
Descriere generală
Schema bloc:
Descrierea modulelor:
ESP32-CAM – modulul principal care controlează tot sistemul. Capturează imagini, gestionează conexiunea WiFi și salvează pe SD card.
Baterie Li-Ion + Modul de alimentare (TP4056) + Convertor MT3608 – sursa de alimentare a sistemului.
Card microSD – folosit pentru stocarea imaginilor local.
Aplicație mobilă – oferă interfață pentru vizualizarea imaginilor și trimiterea comenzilor către ESP32.
Modul WiFi (integrat în ESP32) – pentru comunicarea cu telefonul.
Hardware Design
Componente utilizate:
Schema electrica:
Software Design
Mediu de dezvoltare:
Biblioteci utilizate:
`FS.h` – pentru interactiunea cu fisiere
`SD_MMC.h` – pentru interacțiunea cu cardul microSD
`WiFi.h` – conexiune wireless
`esp_camera.h` – controlul camerei
Functii adaugate:
ESP32-CAM
onTimer() (ISR marcat cu IRAM_ATTR):
startRecording():
Creează un fișier nou pe cardul SD (nume incrementat automat) cu extensia .mjpeg. Pornește înregistrarea, reținând momentul de start, pentru a ști ulterior când să se oprească după un anumit interval (ex. 5 secunde).
stopRecording():
downscaleGrayscale(const camera_fb_t *fb, uint8_t *output):
detectMotion(const camera_fb_t *fb):
Preia cadrul de la cameră, apoi îl trimite către downscaleGrayscale(). Compară rezultatul cu cadrul anterior (prevFrame) și calculează media diferențelor pixel cu pixel. Dacă media diferențelor depășește MOTION_THRESHOLD, consideră că s-a detectat mișcare și întoarce true.
getLastFileNumber():
checkMotion():
Se apelează atunci când motionCheckFlag este setat de întrerupere (onTimer()). Obține un nou cadru de la cameră, apelează detectMotion() și dacă este detectată mișcare, pornește înregistrarea (startRecording()).
Aplicatie Mobila
onCreate() (în MainActivity)
onResume() (în MainActivity)
La revenirea în aplicație, pornește un Coroutine care testează de mai multe ori dacă adresa camerei (ESP32) este accesibilă. Dacă e disponibilă, încarcă în WebView pagina de la
URL-ul camerei; dacă nu, apelează promptToConnect() pentru a cere utilizatorului să se conecteze manual la rețeaua ESP32.
WebViewContainer(setWebView: (WebView) → Unit)
O funcție de tip Composable care creează un WebView cu diverse setări activate: JavaScript, stocare DOM, acces la fișiere, redare media etc. Returnează prin callback obiectul WebView pentru a putea fi folosit ulterior.
isCameraReachable()
promptToConnect(context: Context)
Rezultate Obţinute
Concluzii
Cod sursă
Jurnal
Etapa 1: Alegerea componentelor și testarea ESP32-CAM
Etapa 2: Algoritm de detectare a miscarii
Etapa 3: Captura video și salvarea pe SD
Etapa 4: Interfață mobilă + transmisie WiFi
Etapa 5: Integrare finală și testare pe baterie
Bibliografie / Resurse