This shows you the differences between two versions of the page.
|
pm:prj2026:cezar.zlatea:ion.butura [2026/05/15 16:13] ion.butura |
pm:prj2026:cezar.zlatea:ion.butura [2026/05/26 14:41] (current) ion.butura |
||
|---|---|---|---|
| Line 12: | Line 12: | ||
| * afiseaza in timp real statusul sistemului pe display LCD 1602; | * afiseaza in timp real statusul sistemului pe display LCD 1602; | ||
| * transmite imagini live prin WiFi accesibile de pe orice browser; | * transmite imagini live prin WiFi accesibile de pe orice browser; | ||
| - | * detecteaza zgomote suspecte prin senzorul de microfon. | + | * detecteaza zgomote suspecte prin senzorul de microfon; |
| + | * trimite notificari automate pe Telegram cu link la camera live. | ||
| **Ipoteza:** Credem ca un sistem de detectie bazat pe senzori IR combinat cu o camera WiFi va oferi o solutie de securitate mai completa decat un sistem doar cu senzori, deoarece furnizeaza atat detectie imediata cat si dovada vizuala a evenimentului detectat. | **Ipoteza:** Credem ca un sistem de detectie bazat pe senzori IR combinat cu o camera WiFi va oferi o solutie de securitate mai completa decat un sistem doar cu senzori, deoarece furnizeaza atat detectie imediata cat si dovada vizuala a evenimentului detectat. | ||
| - | ===== Descriere generala ===== | + | ===== Milestone 1 - Alegere tema ===== |
| - | Sistemul este compus din doua unitati principale: Arduino Nano ca unitate de control central si ESP32-CAM ca modul de supraveghere video. Arduino Nano primeste semnale de la senzorii IR si microfon, controleaza buzzerul si actualizeaza LCD-ul prin I2C. ESP32-CAM ruleaza independent un server web care transmite imagini live prin WiFi. | + | ==== Descriere generala ==== |
| + | |||
| + | Sistemul este compus din doua unitati principale: Arduino Nano ca unitate de control central si ESP32-CAM ca modul de supraveghere video. Arduino Nano primeste semnale de la senzorii IR si microfon, controleaza buzzerul si actualizeaza LCD-ul prin I2C. ESP32-CAM ruleaza independent un server web care transmite imagini live prin WiFi si trimite notificari pe Telegram. | ||
| Schema bloc a sistemului: | Schema bloc a sistemului: | ||
| - | {{:pm:prj2026:numele_asistentului:schema_electrica_sistem_securitate(2).png?700|Schema electrica}} | + | {{:pm:prj2026:cezar.zlatea:schema_electrica_sistem_securitate_2_.png?700|Schema bloc}} |
| Modulele principale ale proiectului sunt: | Modulele principale ale proiectului sunt: | ||
| * **Unitatea de control - Arduino Nano**: citeste senzorii IR si microfonul prin GPIO, controleaza buzzerul si actualizeaza LCD-ul prin I2C. | * **Unitatea de control - Arduino Nano**: citeste senzorii IR si microfonul prin GPIO, controleaza buzzerul si actualizeaza LCD-ul prin I2C. | ||
| - | * **Modulul de detectie - Senzori IR x2**: detecteaza obstacole/persoane in raza de 5-25cm, reglabila prin potentiometru. Conectati pe pinii D2 si D3. | + | * **Modulul de detectie - Senzor IR**: detecteaza obstacole/persoane in raza de 5-10cm, reglabila prin potentiometru. Conectat pe pinul D2. |
| - | * **Modulul de alarma - Buzzer pasiv**: emite ton de alarma la 1000Hz prin functia tone() cand se detecteaza intrusi. | + | * **Modulul de alarma - Buzzer pasiv**: emite ton de alarma diferentiat prin PWM — sunet ascendent pentru IR, descendent pentru audio. |
| * **Modulul de afisare - LCD 1602 I2C**: afiseaza statusul sistemului prin comunicare I2C la adresa 0x27. | * **Modulul de afisare - LCD 1602 I2C**: afiseaza statusul sistemului prin comunicare I2C la adresa 0x27. | ||
| - | * **Modulul video - ESP32-CAM**: ruleaza un server web cu stream video live accesibil prin browser la adresa IP locala. | + | * **Modulul video - ESP32-CAM**: ruleaza un server web cu captura foto accesibila prin browser si trimite notificari pe Telegram. |
| - | * **Modulul de detectie sunet - Microfon MH**: detecteaza zgomote suspecte, reglabil prin potentiometru. | + | * **Modulul de detectie sunet - Microfon MH**: detecteaza zgomote suspecte prin intreruperi hardware, reglabil prin potentiometru. |
| + | |||
| + | ==== Planificare ==== | ||
| + | |||
| + | {{:pm:prj2026:cezar.zlatea:gantt.png?700|Grafic Gantt}} | ||
| - | ===== Hardware Design ===== | + | ===== Milestone 2 - Hardware ===== |
| ==== Lista de componente ==== | ==== Lista de componente ==== | ||
| Line 42: | Line 49: | ||
| | U3 | FT232RL - adaptor USB-to-Serial | 1 | | | U3 | FT232RL - adaptor USB-to-Serial | 1 | | ||
| | DISP1 | LCD 1602 cu modul I2C (QAPASS PCF8574) | 1 | | | DISP1 | LCD 1602 cu modul I2C (QAPASS PCF8574) | 1 | | ||
| - | | IR1, IR2 | Senzori IR de proximitate MH-B | 2 | | + | | IR1 | Senzor IR de proximitate MH-B | 1 | |
| | MIC1 | Senzor microfon MH cu potentiometru | 1 | | | MIC1 | Senzor microfon MH cu potentiometru | 1 | | ||
| | BZ1 | Buzzer pasiv | 1 | | | BZ1 | Buzzer pasiv | 1 | | ||
| Line 48: | Line 55: | ||
| | BB1 | Breadboard | 1 | | | BB1 | Breadboard | 1 | | ||
| | — | Fire jumper tata-mama / tata-tata | — | | | — | Fire jumper tata-mama / tata-tata | — | | ||
| - | | — | Cablu USB-A la Mini-USB | 1 | | + | | — | Cablu USB-A la Mini-USB | 2 | |
| ==== Conexiuni electrice - Arduino Nano ==== | ==== Conexiuni electrice - Arduino Nano ==== | ||
| ^ Pin Arduino Nano ^ Tip ^ Conectat la ^ | ^ Pin Arduino Nano ^ Tip ^ Conectat la ^ | ||
| - | | 5V | Power | VCC - LCD I2C, VCC - IR1, VCC - IR2, VCC - Microfon | | + | | 5V | Power | Sina rosie breadboard | |
| - | | GND | GND | GND - LCD I2C, GND - IR1, GND - IR2, GND - Microfon, GND - Buzzer | | + | | GND | GND | Sina albastra breadboard | |
| | A4 (SDA) | I2C SDA | SDA - Modul I2C LCD | | | A4 (SDA) | I2C SDA | SDA - Modul I2C LCD | | ||
| | A5 (SCL) | I2C SCL | SCL - Modul I2C LCD | | | A5 (SCL) | I2C SCL | SCL - Modul I2C LCD | | ||
| - | | D2 | GPIO INPUT | OUT - Senzor IR 1 | | + | | D2 | GPIO INPUT | OUT - Senzor IR | |
| - | | D3 | GPIO INPUT | OUT - Senzor IR 2 | | + | | D3 | GPIO INPUT | OUT - Senzor microfon (intrerupere) | |
| - | | D7 | GPIO INPUT | OUT - Senzor microfon | | + | |
| | D8 | GPIO OUTPUT | Pin + Buzzer pasiv | | | D8 | GPIO OUTPUT | Pin + Buzzer pasiv | | ||
| + | | D9 | GPIO OUTPUT | GPIO12 - ESP32-CAM (trigger) | | ||
| ==== Conexiuni electrice - ESP32-CAM ==== | ==== Conexiuni electrice - ESP32-CAM ==== | ||
| Line 66: | Line 73: | ||
| ^ Pin ESP32-CAM ^ Conectat la ^ | ^ Pin ESP32-CAM ^ Conectat la ^ | ||
| | 5V | VCC - FT232RL | | | 5V | VCC - FT232RL | | ||
| - | | GND | GND - FT232RL | | + | | GND | GND - FT232RL + sina albastra breadboard | |
| - | | U0R (RX) | TX - FT232RL | | + | | U0R (RX) | TX - FT232RL (doar la programare) | |
| - | | U0T (TX) | RX - FT232RL | | + | | U0T (TX) | RX - FT232RL (doar la programare) | |
| | IO0 | GND (doar la programare) | | | IO0 | GND (doar la programare) | | ||
| + | | GPIO12 | D9 - Arduino Nano (trigger alarma) | | ||
| ==== Detalii module hardware ==== | ==== Detalii module hardware ==== | ||
| - | === Senzorii IR MH-B === | + | === Senzorul IR MH-B === |
| - | Senzorii IR folosesc un LED emitator infrarosu si un receptor pentru a detecta obstacolele prin reflectia luminii IR. Distanta de detectie este reglabila intre 5-25cm prin potentiometrul albastru de pe placheta. Senzorul da semnal LOW cand detecteaza un obstacol si HIGH cand nu detecteaza nimic. | + | Senzorul IR foloseste un LED emitator infrarosu si un receptor pentru a detecta obstacolele prin reflectia luminii IR. Distanta de detectie este reglabila intre 5-25cm prin potentiometrul albastru de pe placheta. Senzorul da semnal LOW cand detecteaza un obstacol si HIGH cand nu detecteaza nimic. |
| - | **Observatie:** Senzorii sunt sensibili la lumina ambianta intensa. Se recomanda pozitionarea lor ferita de surse de lumina directa. | + | **Observatie:** Senzorul este sensibil la lumina ambianta intensa. Se recomanda pozitionarea ferita de surse de lumina directa. |
| === LCD 1602 cu modul I2C === | === LCD 1602 cu modul I2C === | ||
| Line 85: | Line 93: | ||
| === ESP32-CAM === | === ESP32-CAM === | ||
| - | ESP32-CAM ruleaza firmware CameraWebServer care expune un server HTTP pe portul 80. Camera OV2640 captureaza imagini JPEG transmise in streaming. Modulul se conecteaza automat la reteaua WiFi configurata si expune interfata web la adresa IP alocata de router (banda 2.4GHz obligatorie). | + | ESP32-CAM ruleaza un server web HTTP care expune captura foto la adresa /capture. Camera OV2640 captureaza imagini JPEG la rezolutie VGA. Modulul se conecteaza automat la reteaua WiFi 2.4GHz si trimite notificari pe Telegram prin API HTTPS cu WiFiClientSecure. |
| - | ===== Software Design ===== | + | ==== Schema electrica ==== |
| - | ==== Cod Arduino Nano ==== | + | {{:pm:prj2026:cezar.zlatea:schema_electrica_detaliata.png?700|Schema electrica detaliata}} |
| + | |||
| + | ==== Imagini montaj fizic ==== | ||
| + | |||
| + | {{:pm:prj2026:cezar.zlatea:photo1.jpg?700|Montaj fizic - vedere generala}} | ||
| + | |||
| + | {{:pm:prj2026:cezar.zlatea:photo2.jpg?700|Montaj fizic - detaliu componente}} | ||
| + | |||
| + | ===== Milestone 3 - Software ===== | ||
| + | |||
| + | ==== Biblioteci folosite ==== | ||
| + | |||
| + | * **Wire.h** — biblioteca built-in Arduino pentru comunicare I2C. Aleasa pentru ca LCD-ul foloseste protocolul I2C, reducand numarul de fire de la 16 la 4. | ||
| + | * **LiquidCrystal_I2C** (Frank de Brabander) — simplifica controlul LCD-ului prin I2C. Aleasa pentru ca e cea mai populara si documentata biblioteca pentru LCD 1602 cu modul PCF8574. | ||
| + | * **esp_camera.h** — biblioteca oficiala Espressif pentru controlul camerei OV2640. Singura optiune viabila pentru ESP32-CAM. | ||
| + | * **WiFi.h** — biblioteca oficiala ESP32 pentru conectare WiFi. Necesara pentru streaming video live. | ||
| + | * **WiFiClientSecure.h** — biblioteca ESP32 pentru conexiuni HTTPS. Necesara pentru comunicarea cu API-ul Telegram. | ||
| + | * **HTTPClient.h** — biblioteca ESP32 pentru cereri HTTP/HTTPS. Folosita pentru trimiterea notificarilor pe Telegram. | ||
| + | |||
| + | ==== Element de noutate ==== | ||
| + | |||
| + | Combinarea detectiei prin doua tipuri de senzori (IR + audio) cu feedback diferentiat — sunete diferite pentru fiecare tip de detectie (sunet ascendent pentru IR, descendent pentru audio), transmisie video live prin WiFi si notificari automate pe Telegram cu link la camera, toate integrate intr-un singur sistem embedded accesibil si low-cost. | ||
| + | |||
| + | ==== Functionalitati din laboratoare folosite ==== | ||
| + | |||
| + | * **GPIO** — citire senzori IR si microfon prin digitalRead(), control buzzer si trigger ESP32-CAM prin digitalWrite() | ||
| + | * **I2C** — comunicare cu LCD 1602 prin modulul PCF8574 la adresa 0x27, folosind biblioteca Wire.h | ||
| + | * **Intreruperi hardware** — microfonul foloseste attachInterrupt() pe pinul D3 cu trigger RISING pentru a detecta zgomote scurte pe care digitalRead() in loop le-ar rata | ||
| + | * **PWM** — generare tonuri diferentiate prin functia tone() — sunet ascendent (500-2000Hz) pentru IR, descendent (2000-500Hz) pentru audio | ||
| + | * **UART** — comunicare seriala pentru debug prin Serial Monitor si programare ESP32-CAM prin FT232RL | ||
| + | |||
| + | ==== Scheletul proiectului ==== | ||
| + | |||
| + | <code> | ||
| + | Arduino Nano: | ||
| + | setup(): | ||
| + | - initializeaza pinii (INPUT/OUTPUT) | ||
| + | - ataseaza intreruperea pentru microfon pe D3 (RISING) | ||
| + | - initializeaza LCD prin I2C la adresa 0x27 | ||
| + | - afiseaza mesaj initial "Sistem gata!" | ||
| + | |||
| + | loop(): | ||
| + | - citeste senzorul IR prin digitalRead() | ||
| + | - verifica flag-ul microfonului (setat prin intrerupere) | ||
| + | - daca e intrus: | ||
| + | - trimite HIGH pe TRIGGER_PIN (D9) catre ESP32-CAM | ||
| + | - afiseaza tip intrus pe LCD (IR / AUD / IR+AUD) | ||
| + | - emite sunet diferentiat prin buzzer PWM | ||
| + | - reseteaza flag-ul microfonului | ||
| + | - daca nu e intrus: | ||
| + | - trimite LOW pe TRIGGER_PIN | ||
| + | - afiseaza "Sistem gata! / Monitorizare..." | ||
| + | |||
| + | ESP32-CAM: | ||
| + | setup(): | ||
| + | - initializeaza camera OV2640 | ||
| + | - conecteaza la WiFi | ||
| + | - porneste server web HTTP | ||
| + | |||
| + | loop(): | ||
| + | - gestioneaza cererile HTTP (capture/root) | ||
| + | - daca TRIGGER_PIN == HIGH: | ||
| + | - trimite notificare pe Telegram cu link camera | ||
| + | - asteapta 30 secunde | ||
| + | </code> | ||
| + | |||
| + | ==== Cod Arduino Nano (final) ==== | ||
| <code cpp> | <code cpp> | ||
| Line 96: | Line 170: | ||
| LiquidCrystal_I2C lcd(0x27, 16, 2); | LiquidCrystal_I2C lcd(0x27, 16, 2); | ||
| + | |||
| + | #define IR1_PIN 2 | ||
| + | #define MIC_PIN 3 | ||
| + | #define BUZZER_PIN 8 | ||
| + | #define TRIGGER_PIN 9 | ||
| + | |||
| + | volatile bool micDetectat = false; | ||
| + | |||
| + | void micISR() { | ||
| + | micDetectat = true; | ||
| + | } | ||
| void setup() { | void setup() { | ||
| Serial.begin(9600); | Serial.begin(9600); | ||
| - | pinMode(2, INPUT); // senzor IR 1 | + | pinMode(IR1_PIN, INPUT); |
| - | pinMode(3, INPUT); // senzor IR 2 | + | pinMode(MIC_PIN, INPUT); |
| - | pinMode(7, INPUT); // microfon | + | pinMode(BUZZER_PIN, OUTPUT); |
| - | pinMode(8, OUTPUT); // buzzer | + | pinMode(TRIGGER_PIN, OUTPUT); |
| + | digitalWrite(TRIGGER_PIN, LOW); | ||
| + | |||
| + | attachInterrupt(digitalPinToInterrupt(MIC_PIN), micISR, RISING); | ||
| lcd.init(); | lcd.init(); | ||
| Line 108: | Line 196: | ||
| lcd.setCursor(0, 0); | lcd.setCursor(0, 0); | ||
| lcd.print("Sistem gata!"); | lcd.print("Sistem gata!"); | ||
| + | lcd.setCursor(0, 1); | ||
| + | lcd.print("Monitorizare..."); | ||
| } | } | ||
| void loop() { | void loop() { | ||
| - | int ir1 = digitalRead(2); | + | int ir1 = digitalRead(IR1_PIN); |
| - | int ir2 = digitalRead(3); | + | |
| + | Serial.print("IR1: "); Serial.print(ir1); | ||
| + | Serial.print(" MIC: "); Serial.println(micDetectat); | ||
| + | |||
| + | bool irDetectat = (ir1 == LOW); | ||
| + | bool audDetectat = micDetectat; | ||
| + | bool intrus = (irDetectat || audDetectat); | ||
| + | |||
| + | if (intrus) { | ||
| + | digitalWrite(TRIGGER_PIN, HIGH); | ||
| + | |||
| + | lcd.setCursor(0, 0); | ||
| + | lcd.print("!! INTRUS !! "); | ||
| + | lcd.setCursor(0, 1); | ||
| + | |||
| + | if (irDetectat && audDetectat) { | ||
| + | lcd.print("Tip: IR + AUD "); | ||
| + | } else if (irDetectat) { | ||
| + | lcd.print("Tip: IR "); | ||
| + | } else if (audDetectat) { | ||
| + | lcd.print("Tip: AUD "); | ||
| + | } | ||
| + | |||
| + | if (audDetectat && !irDetectat) { | ||
| + | for (int freq = 2000; freq >= 500; freq -= 50) { | ||
| + | tone(BUZZER_PIN, freq); | ||
| + | delay(20); | ||
| + | } | ||
| + | noTone(BUZZER_PIN); | ||
| + | delay(500); | ||
| + | } else { | ||
| + | for (int freq = 500; freq <= 2000; freq += 50) { | ||
| + | tone(BUZZER_PIN, freq); | ||
| + | delay(20); | ||
| + | } | ||
| + | noTone(BUZZER_PIN); | ||
| + | delay(500); | ||
| + | } | ||
| + | |||
| + | micDetectat = false; | ||
| - | lcd.setCursor(0, 1); | ||
| - | if (ir1 == LOW || ir2 == LOW) { | ||
| - | lcd.print("INTRUZ DETECTAT!"); | ||
| - | tone(8, 1000); | ||
| } else { | } else { | ||
| - | lcd.print("Totul OK... "); | + | digitalWrite(TRIGGER_PIN, LOW); |
| - | noTone(8); | + | noTone(BUZZER_PIN); |
| + | lcd.setCursor(0, 0); | ||
| + | lcd.print("Sistem gata! "); | ||
| + | lcd.setCursor(0, 1); | ||
| + | lcd.print("Monitorizare... "); | ||
| } | } | ||
| - | delay(200); | ||
| } | } | ||
| </code> | </code> | ||
| - | ==== Notiuni din laboratoare folosite ==== | + | ==== Cod ESP32-CAM (final) ==== |
| + | |||
| + | <code cpp> | ||
| + | #include "esp_camera.h" | ||
| + | #include <WiFi.h> | ||
| + | #include <WebServer.h> | ||
| + | #include <HTTPClient.h> | ||
| + | #include <WiFiClientSecure.h> | ||
| + | |||
| + | #define CAMERA_MODEL_AI_THINKER | ||
| + | #include "camera_pins.h" | ||
| + | |||
| + | const char* ssid = "SSID_TAU"; | ||
| + | const char* password = "PAROLA_TA"; | ||
| + | const char* botToken = "TOKEN_BOT_TELEGRAM"; | ||
| + | const char* chatID = "CHAT_ID_TAU"; | ||
| + | |||
| + | #define TRIGGER_PIN 12 | ||
| + | |||
| + | WebServer server(80); | ||
| + | bool alarmActive = false; | ||
| + | String cameraIP = ""; | ||
| + | |||
| + | void startCamera() { | ||
| + | camera_config_t config; | ||
| + | config.ledc_channel = LEDC_CHANNEL_0; | ||
| + | config.ledc_timer = LEDC_TIMER_0; | ||
| + | config.pin_d0 = Y2_GPIO_NUM; | ||
| + | config.pin_d1 = Y3_GPIO_NUM; | ||
| + | config.pin_d2 = Y4_GPIO_NUM; | ||
| + | config.pin_d3 = Y5_GPIO_NUM; | ||
| + | config.pin_d4 = Y6_GPIO_NUM; | ||
| + | config.pin_d5 = Y7_GPIO_NUM; | ||
| + | config.pin_d6 = Y8_GPIO_NUM; | ||
| + | config.pin_d7 = Y9_GPIO_NUM; | ||
| + | config.pin_xclk = XCLK_GPIO_NUM; | ||
| + | config.pin_pclk = PCLK_GPIO_NUM; | ||
| + | config.pin_vsync = VSYNC_GPIO_NUM; | ||
| + | config.pin_href = HREF_GPIO_NUM; | ||
| + | config.pin_sccb_sda = SIOD_GPIO_NUM; | ||
| + | config.pin_sccb_scl = SIOC_GPIO_NUM; | ||
| + | config.pin_pwdn = PWDN_GPIO_NUM; | ||
| + | config.pin_reset = RESET_GPIO_NUM; | ||
| + | config.xclk_freq_hz = 20000000; | ||
| + | config.pixel_format = PIXFORMAT_JPEG; | ||
| + | config.frame_size = FRAMESIZE_VGA; | ||
| + | config.jpeg_quality = 10; | ||
| + | config.fb_count = 1; | ||
| + | config.fb_location = CAMERA_FB_IN_DRAM; | ||
| + | config.grab_mode = CAMERA_GRAB_WHEN_EMPTY; | ||
| + | esp_camera_init(&config); | ||
| + | } | ||
| + | |||
| + | void sendMessageTelegram(String message) { | ||
| + | WiFiClientSecure client; | ||
| + | client.setInsecure(); | ||
| + | HTTPClient http; | ||
| + | String url = "https://api.telegram.org/bot" + String(botToken) + "/sendMessage?chat_id=" + String(chatID) + "&text=" + message; | ||
| + | http.begin(client, url); | ||
| + | http.setTimeout(30000); | ||
| + | http.GET(); | ||
| + | http.end(); | ||
| + | } | ||
| + | |||
| + | void handleCapture() { | ||
| + | camera_fb_t* fb = esp_camera_fb_get(); | ||
| + | if (!fb) { server.send(500, "text/plain", "Camera capture failed"); return; } | ||
| + | server.sendHeader("Content-Type", "image/jpeg"); | ||
| + | server.sendHeader("Content-Length", String(fb->len)); | ||
| + | server.send_P(200, "image/jpeg", (const char*)fb->buf, fb->len); | ||
| + | esp_camera_fb_return(fb); | ||
| + | } | ||
| + | |||
| + | void handleRoot() { | ||
| + | String html = "<html><body><h2>ESP32-CAM Sistem Securitate</h2>"; | ||
| + | html += "<img src='/capture' style='width:100%'>"; | ||
| + | html += "<br><a href='/capture'>Refresh poza</a></body></html>"; | ||
| + | server.send(200, "text/html", html); | ||
| + | } | ||
| + | |||
| + | void setup() { | ||
| + | Serial.begin(115200); | ||
| + | pinMode(TRIGGER_PIN, INPUT_PULLDOWN); | ||
| + | startCamera(); | ||
| + | WiFi.begin(ssid, password); | ||
| + | while (WiFi.status() != WL_CONNECTED) { delay(500); } | ||
| + | cameraIP = WiFi.localIP().toString(); | ||
| + | server.on("/", handleRoot); | ||
| + | server.on("/capture", handleCapture); | ||
| + | server.begin(); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | server.handleClient(); | ||
| + | if (digitalRead(TRIGGER_PIN) == HIGH) { | ||
| + | if (!alarmActive) { | ||
| + | alarmActive = true; | ||
| + | String msg = "INTRUS%20DETECTAT%20Acceseaza%20camera:%20http://" + cameraIP; | ||
| + | sendMessageTelegram(msg); | ||
| + | delay(30000); | ||
| + | alarmActive = false; | ||
| + | } | ||
| + | } else { | ||
| + | alarmActive = false; | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | ==== Validare functionalitatilor ==== | ||
| + | |||
| + | * **Senzorul IR** — testat prin Serial Monitor, confirmat ca da LOW la detectie si HIGH cand nu e nimic in fata | ||
| + | * **Microfonul** — testat prin batai din palme, confirmat prin intrerupere RISING pe pinul D3 | ||
| + | * **LCD** — testat cu mesaje diferite pentru fiecare stare a sistemului | ||
| + | * **Buzzer** — testat cu tonuri ascendente (IR) si descendente (AUD) | ||
| + | * **ESP32-CAM** — testat cu captura foto accesibila in browser la adresa IP locala | ||
| + | * **Telegram** — testat, notificare trimisa automat la detectie cu link la camera | ||
| + | |||
| + | ==== Calibrare senzori ==== | ||
| + | |||
| + | * **Senzorul IR** — potentiometrul reglat la distanta de detectie de 5-10cm, ferit de lumina directa care poate cauza detectii false | ||
| + | * **Microfonul** — potentiometrul reglat la sensibilitate minima pentru a evita detectiile false cauzate de zgomotul buzzerului sau al mediului ambiant | ||
| + | |||
| + | ==== Optimizari ==== | ||
| + | |||
| + | * Folosirea intreruperilor hardware pentru microfon in loc de digitalRead() in loop — microfonul da semnal de cateva milisecunde, prea scurt pentru a fi prins in loop cu delay-uri | ||
| + | * Variabila micDetectat declarata volatile pentru acces corect din intrerupere si din loop | ||
| + | * Resetarea flag-ului micDetectat = false dupa fiecare alarma pentru a evita alarme repetate | ||
| + | * Sunete diferentiate pentru IR si AUD pentru a putea identifica sursa alarmei fara a privi LCD-ul | ||
| + | * Delay de 30 secunde intre notificari Telegram pentru a evita spam-ul | ||
| + | * Folosirea WiFiClientSecure cu setInsecure() pentru conexiuni HTTPS fara certificat | ||
| + | |||
| + | ==== Demo video ==== | ||
| - | * **GPIO** - citire senzori IR si microfon, control buzzer | + | [[https://drive.google.com/drive/folders/11QswgKaX1Qu9Ga9UTKeiX1DueLoq28_y?usp=sharing|Demo video - Sistem Securitate Smart]] |
| - | * **I2C** - comunicare cu LCD 1602 prin modulul PCF8574 | + | |
| - | * **UART** - comunicare seriala pentru debug si programare ESP32-CAM | + | |
| - | * **PWM** - generare ton buzzer pasiv prin functia tone() | + | |
| - | * **Intreruperi** - (planificat) folosirea intreruperilor hardware pe pinii D2/D3 | + | |
| ===== Rezultate Obtinute ===== | ===== Rezultate Obtinute ===== | ||
| - | Metrici atinse pana in prezent: | + | ^ Metrica ^ Tinta ^ Rezultat masurat ^ |
| + | | Timp de raspuns la detectie | < 500ms | < 200ms | | ||
| + | | Distanta de detectie IR | 5-10cm | 5-10cm | | ||
| + | | Timp trimitere notificare Telegram | < 30s | ~15s | | ||
| + | | Consum memorie Arduino | < 80% | 25% | | ||
| + | | Consum memorie ESP32-CAM | < 90% | 81% | | ||
| * Detectie intrusi functionala cu timp de raspuns sub 200ms | * Detectie intrusi functionala cu timp de raspuns sub 200ms | ||
| - | * Alarma sonora la 1000Hz activa simultan cu detectia | + | * Alarma sonora diferentiata activa simultan cu detectia |
| * LCD actualizeaza statusul in timp real | * LCD actualizeaza statusul in timp real | ||
| - | * Stream video ESP32-CAM accesibil prin browser pe reteaua locala | + | * ESP32-CAM accesibil prin browser la adresa IP locala |
| + | * Notificari automate pe Telegram la detectie | ||
| * Sistem testat si functional pe breadboard | * Sistem testat si functional pe breadboard | ||
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| - | TODO - va fi completat la finalul proiectului. | + | Proiectul demonstreaza integrarea practica a comunicatiei I2C, GPIO, UART, PWM si intreruperi hardware pe Arduino Nano, impreuna cu un modul WiFi cu camera ESP32-CAM. Sistemul ofera detectie imediata prin senzori IR si microfon, alarma sonora diferentiata, afisare pe LCD si notificari automate pe Telegram — toate componentele unui sistem de securitate functional si accesibil. |
| - | ===== Download ===== | + | Ipoteza initiala a fost confirmata — combinarea senzorilor IR cu camera WiFi ofera o solutie mai completa decat un sistem doar cu senzori, furnizand atat detectie imediata cat si dovada vizuala prin link-ul la camera trimis pe Telegram. |
| - | TODO - se va adauga arhiva proiectului dupa finalizare. | + | ===== Download ===== |
| - | Link repository Git: TODO | + | Arhiva proiectului: [[https://github.com/inocm/Sistem-de-Securitate-Smart-cu-ESP32-CAM/tree/main|GitHub Repository]] |
| ===== Jurnal ===== | ===== Jurnal ===== | ||
| Line 162: | Line 423: | ||
| | 18.05.2026 | Conectare buzzer pasiv, testare alarma sonora. | | | 18.05.2026 | Conectare buzzer pasiv, testare alarma sonora. | | ||
| | 19.05.2026 | Programare si testare ESP32-CAM cu stream video WiFi. | | | 19.05.2026 | Programare si testare ESP32-CAM cu stream video WiFi. | | ||
| + | | 20.05.2026 | Integrare microfon cu intreruperi hardware. | | ||
| + | | 21.05.2026 | Integrare ESP32-CAM cu Arduino Nano prin GPIO trigger. | | ||
| + | | 22.05.2026 | Implementare notificari Telegram prin API HTTPS. | | ||
| + | | 23.05.2026 | Testare finala si documentatie. | | ||
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
| Line 180: | Line 445: | ||
| * [[https://github.com/johnrickman/LiquidCrystal_I2C|Biblioteca LiquidCrystal I2C]] | * [[https://github.com/johnrickman/LiquidCrystal_I2C|Biblioteca LiquidCrystal I2C]] | ||
| * [[https://github.com/espressif/arduino-esp32|Arduino ESP32 - Espressif]] | * [[https://github.com/espressif/arduino-esp32|Arduino ESP32 - Espressif]] | ||
| + | * [[https://core.telegram.org/bots/api|Telegram Bot API]] | ||