This shows you the differences between two versions of the page.
pm:prj2025:cmoarcas:radu.marin0508:motionsentry [2025/05/04 18:48] radu.marin0508 [Descriere generală] |
pm:prj2025:cmoarcas:radu.marin0508:motionsentry [2025/05/16 23:18] (current) radu.marin0508 [Download] |
||
---|---|---|---|
Line 2: | Line 2: | ||
=== Marin Radu - 333CA === | === Marin Radu - 333CA === | ||
===== Introducere ===== | ===== Introducere ===== | ||
+ | |||
+ | <hidden> | ||
+ | <note tip> | ||
+ | Prezentarea pe scurt a proiectului vostru: | ||
+ | * ce face | ||
+ | * care este scopul lui | ||
+ | * care a fost ideea de la care aţi pornit | ||
+ | * de ce credeţi că este util pentru alţii şi pentru voi | ||
+ | </note> | ||
+ | </hidden> | ||
==== MotionSentry ==== | ==== MotionSentry ==== | ||
Line 13: | Line 23: | ||
**Utilitatea** sistemului derivă din simplitatea și versatilitatea sa, putând fi folosit într-o varietate de contexte. Proiectul în sine este relativ ușor de realizat din punct de vedere al resurselor și conceptelor utilizate, fiind o soluție de tip //DIY// pentru problema propusă. Exemplele prezentate sunt doar o parte din scenariile în care acest dispozitiv își poate dovedi valoarea. | **Utilitatea** sistemului derivă din simplitatea și versatilitatea sa, putând fi folosit într-o varietate de contexte. Proiectul în sine este relativ ușor de realizat din punct de vedere al resurselor și conceptelor utilizate, fiind o soluție de tip //DIY// pentru problema propusă. Exemplele prezentate sunt doar o parte din scenariile în care acest dispozitiv își poate dovedi valoarea. | ||
- | <hidden> | ||
- | <note tip> | ||
- | Prezentarea pe scurt a proiectului vostru: | ||
- | * ce face | ||
- | * care este scopul lui | ||
- | * care a fost ideea de la care aţi pornit | ||
- | * de ce credeţi că este util pentru alţii şi pentru voi | ||
- | </note> | ||
- | </hidden> | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | {{ pm:prj2025:cmoarcas:radu.marin0508:schema_bloc.png?500x500 | Schema Bloc }} | + | {{ pm:prj2025:cmoarcas:radu.marin0508:schema_bloc.png?600x500 | Schema Bloc }} |
<hidden> | <hidden> | ||
Line 33: | Line 34: | ||
</note> | </note> | ||
</hidden> | </hidden> | ||
+ | |||
+ | Sistemul este compus din următoarele componente hardware și software: | ||
+ | |||
+ | **Componente hardware principale:** | ||
+ | * ESP32-WROOM - microcontroller central | ||
+ | * HC-SR501 PIR Sensor - senzor de detectare a mișcării | ||
+ | * 2x Servomotoare SG90 - pentru scanare și urmărire | ||
+ | * Buzzer pasiv 5V - pentru alarmă la detectarea mișcării | ||
+ | * 2 surse de alimentare separate (3xAA și 4xAA) | ||
+ | |||
+ | **Module software:** | ||
+ | * Scanner - controlează mișcarea de scanare a senzorului PIR | ||
+ | * Sentry - responsabil pentru urmărirea mișcării detectate | ||
+ | * PIR - gestionează detectarea mișcării prin senzorul infraroșu | ||
+ | * Buzzer - controlează semnalele audio | ||
+ | * WiFi - creează și menține serverul web pentru monitorizare | ||
+ | |||
+ | **Interacțiunea componentelor:** | ||
+ | * Senzorul PIR este montat pe primul servomotor și scanează zona | ||
+ | * La detectarea mișcării, al doilea servomotor orientează dispozitivul către sursa mișcării | ||
+ | * ESP32 gestionează comunicația între module și expune datele prin serverul web | ||
+ | * Buzzer-ul emite semnale sonore la detectarea mișcării | ||
+ | |||
+ | |||
+ | **Element de noutate:** implementarea unui design //lightweight//, usor de folosit si integrat in alte circuite sau proiecte hardware, functionalitatea fiind similara unui //framework// sau API din contexte orientate-software. | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
+ | <hidden> | ||
<note tip> | <note tip> | ||
Aici puneţi tot ce ţine de hardware design: | Aici puneţi tot ce ţine de hardware design: | ||
Line 43: | Line 70: | ||
* rezultatele simulării | * rezultatele simulării | ||
</note> | </note> | ||
+ | </hidden> | ||
+ | |||
+ | {{ pm:prj2025:cmoarcas:radu.marin0508:schema_electrica.png?700x500 | Schema Electrica }} | ||
+ | |||
+ | {{ pm:prj2025:cmoarcas:radu.marin0508:diagrama_semnal.png?700x500 | Diagrama de Semnal }} | ||
+ | |||
+ | ==== Componente și alimentare ==== | ||
+ | |||
+ | Sistemul folosește două surse separate de alimentare pentru o funcționare optimă: | ||
+ | * 3xAA + regulator step-up 5V pentru alimentarea ESP32 și a buzzer-ului | ||
+ | * 4xAA direct pentru alimentarea servomotoarelor și a senzorului PIR | ||
+ | |||
+ | Această separare este esențială pentru a evita interferențele și căderile de tensiune cauzate de consumul variabil al servomotoarelor, care ar putea afecta funcționarea stabilă a microcontroller-ului. | ||
+ | |||
+ | ==== Conectarea pinilor ==== | ||
+ | |||
+ | | **Componenta** | **Pin ESP32** | **Motivație** | | ||
+ | | Buzzer | D18 | Pin cu capacitate PWM pentru control precis al tonurilor | | ||
+ | | Servomotor Scanner | D19 | Pin cu capacitate PWM, necesar pentru controlul servomotorului | | ||
+ | | Servomotor Sentry | D22 | Pin dedicat controlului mișcărilor de urmărire | | ||
+ | | Senzor PIR | D23 | Pin cu suport pentru întreruperi externe, esențial pentru detectarea promptă a mișcării | | ||
+ | |||
+ | Alegerea acestor pini a fost făcută ținând cont de cerințele specifice ale fiecărei componente: | ||
+ | * Pinii D18 și D19 sunt utilizați pentru componente care necesită semnale PWM | ||
+ | * Pinul D23 pentru PIR suportă întreruperi, ceea ce permite reacții rapide la mișcare | ||
+ | * Pinii sunt grupați pentru o organizare mai bună a cablajului | ||
+ | |||
+ | ==== Date consum de energie ==== | ||
+ | |||
+ | | **Componentă** | **Consum în standby (mA)** | **Consum în funcționare (mA)** | | ||
+ | | ESP32 (WiFi activ) | 80 | 120-150 | | ||
+ | | Servomotor Scanner (în mișcare) | 5 | 100-120 | | ||
+ | | Servomotor Sentry (în mișcare) | 5 | 100-120 | | ||
+ | | Senzor PIR | 50 | 65 | | ||
+ | | Buzzer | 0 | 30 | | ||
+ | | **Total** | **140 mA** | **415-485 mA** | | ||
+ | |||
+ | **Autonomie estimată:** | ||
+ | * Cu bateriile 3xAA (2000mAh) pentru ESP32: ~16 ore | ||
+ | * Cu bateriile 4xAA (2000mAh) pentru servomotoare și PIR: ~8 ore în utilizare intensivă | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Codul, împreună cu toate resursele folosite, se pot găsi pe pagina de [[https://github.com/radum157/uC_motion_tracker | GitHub]]. | ||
+ | <hidden> | ||
<note tip> | <note tip> | ||
Descrierea codului aplicaţiei (firmware): | Descrierea codului aplicaţiei (firmware): | ||
Line 54: | Line 123: | ||
* (etapa 3) surse şi funcţii implementate | * (etapa 3) surse şi funcţii implementate | ||
</note> | </note> | ||
+ | </hidden> | ||
- | ===== Rezultate Obţinute ===== | + | **Mediu de dezvoltare:** Visual Studio Code, folosind extensia oficială PlatformIO |
+ | **Dependențe externe:** | ||
+ | * framework-ul Arduino din PlatformIO | ||
+ | * madhephaestus/ESP32Servo - pentru controlul servomotoarelor prin PWM | ||
+ | |||
+ | **Structura codului:** | ||
+ | * main: punctul de pornire, inițializare și legătură între toate componentele | ||
+ | * buzzer/: funcții legate de acțiunea buzzer-ului | ||
+ | * PIR/: logica din spatele detecției mișcării | ||
+ | * scanner/: configurează mișcarea treptată a PIR-ului (și a servomotorului aferent) | ||
+ | * sentry/: implementarea urmăririi mișcării efective detectate de senzor | ||
+ | * wifi/: parte pseudo-izolată de restul sistemului, în care se pornește wifi-ul și se creează serverul web | ||
+ | * firmware_compress.py: script de compresie gzip a fișierelor firmware | ||
+ | |||
+ | **Arhitectura software:** | ||
+ | * Conform diagramei de semnal, proiectul conține 3 componente majore care activează simultan: | ||
+ | * Primul servo, cel care mișcă PIR-ul | ||
+ | * Al doilea servo, care urmărește mișcarea efectivă | ||
+ | * Serverul web | ||
+ | * Toate componentele rulează pe același core FreeRTOS, fiind utilizată noțiunea de //"concurrency"// (+ sincronizările asociate) | ||
+ | * Ele interacționează prin intermediul unor variabile volatile de tip bool, care marchează schimbarea stării sistemului și determină un feedback din partea componentei afectate (pe serial și fizic) | ||
+ | |||
+ | **Concepte folosite:** | ||
+ | - GPIO - pentru controlul componentelor conectate | ||
+ | - UART - pentru afisare de mesaje pe serial | ||
+ | - Întreruperi - detectarea mișcării generează o întrerupere | ||
+ | - Timere - mișcarea PIR-ului se face pe baza unui timer la intervale și unghiuri predefinite | ||
+ | - PWM - necesar în mișcarea servomotoarelor și în acționarea asupra buzzer-ului | ||
+ | - Wi-Fi - ESP32 creează un server web unde afișează momentul de timp al ultimei mișcări detectate | ||
+ | - FreeRTOS - folosit pentru a separa cele 3 procese descrise anterior | ||
+ | |||
+ | **Calibrarea senzorului PIR:** | ||
+ | * Aceasta a fost realizată luând în considerare delay-ul dintre detecții | ||
+ | * Valoarea acestui delay a fost aleasă astfel încât să fie minimală, dar să evite totuși fals-pozitive (de exemplu, detectarea aceleiași mișcări de 2 ori, sau pornirea alarmei atunci când senzorul în sine se mișcă) | ||
+ | * Această calibrare se poate observa și în partea software, prin noțiunea de **debounce** | ||
+ | |||
+ | **Optimizări:** | ||
+ | |||
+ | Au fost realizate 3 tipuri de optimizări: ale dimensiunii firmware-ului, ale eficienței de execuție a codului și optimizări legate de //power management//. | ||
+ | |||
+ | - Dimensiune Firmware | ||
+ | * Optimizări de genul opțiunii //-Os// la compilare | ||
+ | * Fișierul rezultat se trece printr-un script Python de compresare //gzip// | ||
+ | * Aceste optimizări s-au realizat după sesizarea utilizării excesive ale memoriei flash de pe ESP32 | ||
+ | |||
+ | - Eficiență cod: | ||
+ | * API-ul FreeRTOS pentru crearea de task-uri pe același core împarte codul în funcție de partea implementată | ||
+ | * Evitarea oricăror algoritmi / structuri de date care ar putea încetini execuția (analiză tradeoff funcționalitate-overhead) | ||
+ | |||
+ | - Power management: | ||
+ | * Orice componente ESP32 care nu sunt folosite au fost dezactivate (ex: bluetooth, partiții de fișiere //SPIFFS//) | ||
+ | * WiFi **nu** poate fi pus pe sleep, deoarece ar contrazice funcționalitatea proiectului în sine (trebuie să fie mereu activ log-ul) | ||
+ | |||
+ | ===== Rezultate Obținute ===== | ||
+ | |||
+ | <hidden> | ||
<note tip> | <note tip> | ||
Care au fost rezultatele obţinute în urma realizării proiectului vostru. | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
</note> | </note> | ||
+ | </hidden> | ||
+ | |||
+ | **Funcționalitate principală:** | ||
+ | * Detectarea fiabilă a mișcării pe un unghi de 180° prin scanare continuă | ||
+ | * Orientarea precisă spre sursa mișcării în mai puțin de 300ms | ||
+ | * Interfață web accesibilă pentru monitorizarea evenimentelor de mișcare în timp real | ||
+ | * Autonomie satisfăcătoare pentru un dispozitiv portabil | ||
+ | |||
+ | **Performanță:** | ||
+ | * Raza de detecție: până la 7 metri (conform specificațiilor senzorului PIR) | ||
+ | * Timp de reacție: 200-300ms de la detectarea mișcării până la orientarea completă | ||
+ | * Consum mediu: sub 200mA în funcționare normală (fără alarme frecvente) | ||
+ | * Fiabilitate crescută prin separarea surselor de alimentare | ||
+ | |||
+ | **Limitări identificate:** | ||
+ | * Sensibilitatea senzorului PIR variază în funcție de condițiile de mediu | ||
+ | * Servomotoarele consumă energie semnificativă în timpul operațiilor de scanare continuă | ||
+ | * Autonomia poate fi îmbunătățită prin optimizări suplimentare de energie | ||
+ | * Impulsurile primite de la senzor sunt ignorate pe perioada schimbarii unghiului de orientare | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | |||
+ | Proiectul **MotionSentry** demonstrează posibilitatea implementării unui sistem de urmărire a mișcării eficient și accesibil utilizând componente comune și un microcontroller ESP32. Principalele realizări includ: | ||
+ | |||
+ | * Implementarea unui algoritm de scanare și urmărire cu un singur senzor PIR | ||
+ | * Utilizarea eficientă a resurselor microcontroller-ului prin separarea task-urilor | ||
+ | * Optimizarea consumului de energie prin separarea surselor de alimentare | ||
+ | * Crearea unei interfețe web pentru monitorizare și control | ||
+ | |||
+ | Direcții de dezvoltare ulterioară: | ||
+ | * Adăugarea unui modul de cameră pentru înregistrarea mișcării detectate | ||
+ | * Implementarea unui sistem de notificări push pe telefonul utilizatorului | ||
+ | * Optimizarea suplimentară a consumului de energie pentru autonomie extinsă | ||
+ | * Integrarea cu alte sisteme de automatizare pentru casa inteligentă | ||
===== Download ===== | ===== Download ===== | ||
+ | <hidden> | ||
<note warning> | <note warning> | ||
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ă ;-). | 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ă ;-). | ||
Line 70: | Line 228: | ||
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:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | 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:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | ||
</note> | </note> | ||
+ | </hidden> | ||
+ | |||
+ | Codul sursă și toate fișierele proiectului sunt disponibile pe pagina de GitHub: [[https://github.com/radum157/uC_motion_tracker | GitHub Repository]]. | ||
+ | |||
+ | Proiectul include: | ||
+ | * Cod sursă complet organizat modular | ||
+ | * Fișier README cu instrucțiuni de instalare și utilizare | ||
+ | * Script de compilare și încărcare | ||
+ | * Scheme de conectare a componentelor | ||
===== Changelog ===== | ===== Changelog ===== | ||
Line 77: | Line 244: | ||
* Documentație idee generală și componente: 04.05.2025 | * Documentație idee generală și componente: 04.05.2025 | ||
* Schemă bloc: 04.05.2025 | * Schemă bloc: 04.05.2025 | ||
+ | * Ridicare piese: 08.05.2025 | ||
+ | * Conectare piese la breadboard + legături între ele: 10.05.2025 | ||
+ | * Implementare separare surse de alimentare: 12.05.2025 | ||
+ | * Optimizare consum de energie: 14.05.2025 | ||
+ | * Finalizare parte software: 15.05.2025 | ||
+ | * Finalizare pagina de wiki si github: 16.05.2025 | ||
<hidden> | <hidden> | ||
Line 85: | Line 258: | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
+ | |||
+ | <hidden> | ||
+ | <note> | ||
+ | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | ||
+ | </note> | ||
+ | </hidden> | ||
==== Componente hardware ==== | ==== Componente hardware ==== | ||
- | ^ Nume ^ Descriere ^ Datasheet / Site ^ | + | ^ Nume ^ Descriere ^ Detalii ^ |
| ESP32-WROOM | Microcontroller ESP32 versiunea 2.4 | [[https://www.mouser.com/datasheet/2/891/esp-wroom-32_datasheet_en-1223836.pdf| Datasheet]] | | | ESP32-WROOM | Microcontroller ESP32 versiunea 2.4 | [[https://www.mouser.com/datasheet/2/891/esp-wroom-32_datasheet_en-1223836.pdf| Datasheet]] | | ||
| HC-SR501 PIR Sensor | Senzor de mișcare cu infraroșu | [[https://www.handsontec.com/dataspecs/SR501%20Motion%20Sensor.pdf | Datasheet]] | | | HC-SR501 PIR Sensor | Senzor de mișcare cu infraroșu | [[https://www.handsontec.com/dataspecs/SR501%20Motion%20Sensor.pdf | Datasheet]] | | ||
| SG90 Micro-Servo | Servomotor | [[https://www.friendlywire.com/projects/ne555-servo-safe/SG90-datasheet.pdf | Datasheet]] | | | SG90 Micro-Servo | Servomotor | [[https://www.friendlywire.com/projects/ne555-servo-safe/SG90-datasheet.pdf | Datasheet]] | | ||
- | | 5V Active Buzzer | Buzzer activ alimentat la 5V | [[https://www.optimusdigital.ro/ro/audio-buzzere/633-buzzer-activ-de-5-v.html?search_query=buzzer&results=63 | Site]] | | + | | 5V Active Buzzer | Buzzer pasiv alimentat la 5V | [[https://www.optimusdigital.ro/ro/audio-buzzere/633-buzzer-activ-de-5-v.html?search_query=buzzer&results=63 | Site]] | |
- | | 3xAA Battery Support | Sursă alimentare | [[https://www.optimusdigital.ro/ro/suporturi-de-baterii/1090-suport-baterii-3-x-r6.html?search_query=battery&results=42 | Site]] | | + | | 3xAA Battery Support | Sursă alimentare ESP32 | [[https://www.optimusdigital.ro/ro/suporturi-de-baterii/1090-suport-baterii-3-x-r6.html?search_query=battery&results=42 | Site]] | |
+ | | 4xAA Battery Support | Sursă alimentare servomotoare și PIR | [[https://www.optimusdigital.ro/ro/suporturi-de-baterii/2806-suport-baterii-4-x-r6.html?search_query=suport+bateri&results=94 | Site]] | | ||
| 5V Step-Up | Regulator voltaj | [[https://www.optimusdigital.ro/ro/electronica-de-putere/3907-micro-sursa-de-tensiune-ridicatoare-boost-de-5-v-cu-intrare-09-5-v.html?search_query=micro+sursa+de+tensiune&results=46 | Site]] | | | 5V Step-Up | Regulator voltaj | [[https://www.optimusdigital.ro/ro/electronica-de-putere/3907-micro-sursa-de-tensiune-ridicatoare-boost-de-5-v-cu-intrare-09-5-v.html?search_query=micro+sursa+de+tensiune&results=46 | Site]] | | ||
| Mini Breadboard | Placă de legare cu 170 de puncte | [[https://www.optimusdigital.ro/ro/prototipare-breadboard-uri/244-mini-breadboard-colorat.html?search_query=mini+breadboard&results=39 | Site]] | | | Mini Breadboard | Placă de legare cu 170 de puncte | [[https://www.optimusdigital.ro/ro/prototipare-breadboard-uri/244-mini-breadboard-colorat.html?search_query=mini+breadboard&results=39 | Site]] | | ||
| Other | Condensatoare, rezistențe, fire tată-tată și tată-mamă | - | | | Other | Condensatoare, rezistențe, fire tată-tată și tată-mamă | - | | ||
- | <hidden> | + | ==== Resurse software ==== |
- | <note> | + | |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | ^ Nume ^ Descriere ^ Link ^ |
- | </note> | + | | PlatformIO | Ecosistem open-source de dezvoltare | [[https://platformio.org/ | Site oficial]] | |
- | </hidden> | + | | ESP32Servo | Librărie pentru controlul servomotoarelor | [[https://github.com/madhephaestus/ESP32Servo | GitHub]] | |
+ | | FreeRTOS | Sistem de operare în timp real | [[https://www.freertos.org/ | Site oficial]] | | ||
+ | | ESP32 Arduino Core | Core Arduino pentru ESP32 | [[https://github.com/espressif/arduino-esp32 | GitHub]] | | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||
- |