This shows you the differences between two versions of the page.
|
pm:prj2025:cmoarcas:radu.marin0508:motionsentry [2025/05/04 19:02] 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:a.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> | ||
| - | |||