Table of Contents

Motion Tracking Device

Marin Radu - 333CA

Introducere

MotionSentry

MotionSentry este un dispozitiv integrat pentru detectarea și urmărirea mișcării, bazat pe senzori infraroșu. Acesta scanează mediul înconjurător, iar la detectarea unei mișcări, orientează automat dispozitivul în direcția respectivă. Reprezintă o soluție lightweight de simulare a unui modul de tip motion tracker, utilizând un singur senzor.

Scopul proiectului este de a oferi o metodă eficientă și accesibilă pentru integrarea funcționalității de urmărire a mișcării în diverse proiecte sau dispozitive, cu un consum minim de resurse. Rezultatul constă într-un suport capabil de scanare și urmărire în timp real, ușor de integrat în alte sisteme prin simplul principiu de clip-on.

Ideea centrală a proiectului este construirea unei baze pentru o cameră video inteligentă, care, pe lângă o simplă mișcare de tip sweep pe un unghi de 180°, are și capacitatea de a se orienta automat către sursele de mișcare detectate, oferind astfel un plus de securitate. Acest concept este scalabil și poate fi aplicat oricărui dispozitiv care beneficiază de urmărirea mișcării, fără a necesita o precizie extremă.

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.

Descriere generală

 Schema Bloc

Sistemul este compus din următoarele componente hardware și software:

Componente hardware principale:

Module software:

Interacțiunea componentelor:

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

 Schema Electrica

 Diagrama de Semnal

Componente și alimentare

Sistemul folosește două surse separate de alimentare pentru o funcționare optimă:

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:

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ă:

Software Design

Codul, împreună cu toate resursele folosite, se pot găsi pe pagina de GitHub.

Mediu de dezvoltare: Visual Studio Code, folosind extensia oficială PlatformIO

Dependențe externe:

Structura codului:

Arhitectura software:

Concepte folosite:

  1. GPIO - pentru controlul componentelor conectate
  2. UART - pentru afisare de mesaje pe serial
  3. Întreruperi - detectarea mișcării generează o întrerupere
  4. Timere - mișcarea PIR-ului se face pe baza unui timer la intervale și unghiuri predefinite
  5. PWM - necesar în mișcarea servomotoarelor și în acționarea asupra buzzer-ului
  6. Wi-Fi - ESP32 creează un server web unde afișează momentul de timp al ultimei mișcări detectate
  7. FreeRTOS - folosit pentru a separa cele 3 procese descrise anterior

Calibrarea senzorului PIR:

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.

  1. 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
  1. 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)
  1. 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

Funcționalitate principală:

Performanță:

Limitări identificate:

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:

Direcții de dezvoltare ulterioară:

Download

Codul sursă și toate fișierele proiectului sunt disponibile pe pagina de GitHub: GitHub Repository.

Proiectul include:

Changelog

Bibliografie/Resurse

Componente hardware

Nume Descriere Detalii
ESP32-WROOM Microcontroller ESP32 versiunea 2.4 Datasheet
HC-SR501 PIR Sensor Senzor de mișcare cu infraroșu Datasheet
SG90 Micro-Servo Servomotor Datasheet
5V Active Buzzer Buzzer pasiv alimentat la 5V Site
3xAA Battery Support Sursă alimentare ESP32 Site
4xAA Battery Support Sursă alimentare servomotoare și PIR Site
5V Step-Up Regulator voltaj Site
Mini Breadboard Placă de legare cu 170 de puncte Site
Other Condensatoare, rezistențe, fire tată-tată și tată-mamă -

Resurse software

Nume Descriere Link
PlatformIO Ecosistem open-source de dezvoltare Site oficial
ESP32Servo Librărie pentru controlul servomotoarelor GitHub
FreeRTOS Sistem de operare în timp real Site oficial
ESP32 Arduino Core Core Arduino pentru ESP32 GitHub

Export to PDF