Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:cmoarcas:radu.marin0508:motionsentry [2025/05/04 19:03]
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 ====
Line 92: Line 271:
 | 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>​
- 
pm/prj2025/cmoarcas/radu.marin0508/motionsentry.1746374625.txt.gz · Last modified: 2025/05/04 19:03 by radu.marin0508
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