This is an old revision of the document!
Proiectul constă într-o turelă asemănătoare celor din jocul Portal, care țintește un laser către un obiect aflat în mișcare și simulează descărcarea unei arme folosind efecte sonore și lumini.
Proiectul fiind destinat exclusiv pentru divertisment, este util în măsura în care creează un efect spectaculos și urmărește cu succes o persoană care trece în fața lui. Pentru mine este util fiindcă reprezintă un prilej de a-mi pune în exercițiu abilități fundamentale de inginer: proiectarea unui sistem complex ce conține module cu interfețe diferite, dezvoltarea componentelor independente și integrarea lor în cadrul sistemului.
Credem că prelucrarea morfologică a imaginilor va îmbunătăți precizia de detectare a mișcării fiindcă va reduce contribuția zgomotului vizual la diferențele observate între cadre.
Componentele principale ale proiectului sunt vizibile în schema bloc de mai sus.
Proiectul conține două microprocesoare ce comunică prin protocolul SLIP, implementat peste UART.
Arduino Uno R3 comandă prin PWM două servomotoare și o diodă laser pentru țintire și LED-uri RGB. În plus, citește valoarea unui potențiometru prin ADC pentru a seta volumul sunetelor.
ESP32-CAM este o placă de dezvoltare cu un modul de cameră OV2640. ESP32-CAM comandă prin I2S un amplificator care transmite semnalul de output unui difuzor de 4 ohmi.
| Metrică | Țintă | Măsurare |
|---|---|---|
| Latența detecției de mișcare | < 200 ms | Timestamp la captura camerei și mișcarea servomotorului |
| Acuratețea urmăririi, la iluminare stabilă | > 80% din timp | Inspecție vizuală directă |
| Consum total de curent | < 1.5 A | Ampermetru în serie pe alimentare |
Piesele folosite în proiect:
| Piesă | Folosință |
|---|---|
| Arduino Uno R3 | Control lumini și servomotoare, citire volum |
| ESP32-CAM | Detecție mișcare, redare sunete |
| 2x servomotoare SG90 | Țintirea laserului |
| platformă pan + tilt | Suport pentru servomotoare |
| modul diodă laser | Feedback vizual pentru urmărire |
| amplificator I2S MAX98357A | Conversie digital-to-analog și amplificare sunet |
| speaker 4 ohmi | Redare sunet |
| 4x LED RGB anod comun | Efecte de lumină |
| 3x tranzistor 2N2222 | Comutare LED-uri |
| potențiometru | Schimbarea volumului |
| adaptor USB-C | Alimentare de la sursă externă |
| rezistori, fire | Conectare pini, divizor de tensiune etc. |
Dintre pinii plăcii Arduino Uno, am folosit 0 și 1 pentru comunicarea prin UART cu ESP32. Divizorul de tensiune este necesar întrucât Arduino furnizează 5V pe pinul TX în timp ce ESP32 folosește logică digitală de 3.3V. Pinii GPIO 3, 5, 6, 11 au fost aleși pentru a comanda dioda laser și LED-urile, iar pinii 9 și 10, care pot furniza semnal PWM, au fost aleși pentru controlul servomotoarelor. Pinul A0 servește la citirea valorii potențiometrului.
Pe placa ESP32-CAM am folosit pinii 13, 14 și 15 pentru comunicare prin I2S cu amplificatorul, respectiv pinii 12 și 16 pentru comunicarea prin UART cu Arduino.
Sistemul software urmează un automat finit de stări reprezentat în diagrama de mai jos:
Cele două microprocesoare care implementează acest automat au responsabilități diferite și comunică folosind protocolul point-to-point SLIP peste UART.
Subsistemul de pe ESP32-CAM conține două taskuri de FreeRTOS prin intermediul cărora:
Subsistemul de pe Arduino Uno R3:
De când am stabilit tema proiectului și până la acest checkpoint am atins următoarele obiective: