This shows you the differences between two versions of the page.
pm:prj2025:iotelea:albert.antonescu [2025/05/30 09:06] albert.antonescu [Bibliografie/Resurse] |
pm:prj2025:iotelea:albert.antonescu [2025/05/30 14:05] (current) albert.antonescu [Concluzii] |
||
---|---|---|---|
Line 120: | Line 120: | ||
=== Mediu de dezvoltare === | === Mediu de dezvoltare === | ||
- | * **PlatformIO + Visual Studio Code** – pentru codul C++ pe Arduino UNO.\ | + | * **PlatformIO + Visual Studio Code** – pentru codul C++ pe Arduino UNO.\\ |
- | * **Python 3.10** – pentru scriptul de detecție și control al sistemului.\ | + | * **Python 3.10** – pentru scriptul de detecție și control al sistemului.\\ |
* Testare interactivă cu **Serial Monitor** și **fereastră OpenCV**. | * Testare interactivă cu **Serial Monitor** și **fereastră OpenCV**. | ||
=== Librării și surse externe === | === Librării și surse externe === | ||
- | * **Servo.h** – pentru controlul servomotoarelor.\ | + | * **Servo.h** – pentru controlul servomotoarelor.\\ |
- | * **OpenCV** – pentru procesare imagine și detecție de forme.\ | + | * **OpenCV** – pentru procesare imagine și detecție de forme.\\ |
- | * **PySerial** – pentru comunicare UART între PC și Arduino.\ | + | * **PySerial** – pentru comunicare UART între PC și Arduino.\\ |
- | * **Numpy** – pentru calcule vectoriale și distanțe.\ | + | * **Numpy** – pentru calcule vectoriale și distanțe.\\ |
=== Structura codului === | === Structura codului === | ||
Line 135: | Line 135: | ||
==== Pe Arduino (firmware) ==== | ==== Pe Arduino (firmware) ==== | ||
- | * Implementare completă cu **scriere bare-metal** pentru: digitalRead, digitalWrite, analogRead.\ | + | * Implementare completă cu **scriere bare-metal** pentru: digitalRead, digitalWrite, analogRead.\\ |
- | * Control **PWM** pentru cele 3 servomotoare: Pan, Tilt, Fire.\ | + | * Control **PWM** pentru cele 3 servomotoare: Pan, Tilt, Fire.\\ |
- | * Control LED RGB + buzzer pentru feedback în timp real.\ | + | * Control LED RGB + buzzer pentru feedback în timp real.\\ |
- | * Trimitere și recepționare comenzi prin **UART Serial**.\ | + | * Trimitere și recepționare comenzi prin **UART Serial**.\\ |
- | * Implementare logica modurilor: `FREE`, `SCAN`, `LOCK`, `FIRE_WARN`, `MANUAL`.\ | + | * Implementare logica modurilor: `FREE`, `SCAN`, `LOCK`, `FIRE_WARN`, `MANUAL`.\\ |
==== Pe PC (Python + OpenCV) ==== | ==== Pe PC (Python + OpenCV) ==== | ||
- | * Inițializare cameră și captură video în timp real.\ | + | * Inițializare cameră și captură video în timp real.\\ |
- | * Detecție țintă: **HoughCircles** pentru identificarea unui cerc roșu (țintă).\ | + | * Detecție țintă: **HoughCircles** pentru identificarea unui cerc roșu (țintă).\\ |
- | * Detecție punct laser: bazat pe intensitatea canalului roșu.\ | + | * Detecție punct laser: bazat pe intensitatea canalului roșu.\\ |
- | * Aliniere dinamică a servomotoarelor în funcție de pozițiile detectate.\ | + | * Aliniere dinamică a servomotoarelor în funcție de pozițiile detectate.\\ |
- | * Activare secvență de tragere când ținta este aliniată.\ | + | * Activare secvență de tragere când ținta este aliniată.\\ |
- | * Control complet al modurilor și resetare din tastatură sau buton.\ | + | * Control complet al modurilor și resetare din tastatură sau buton.\\ |
=== Funcții cheie implementate === | === Funcții cheie implementate === | ||
Line 154: | Line 154: | ||
**Pe Arduino:** | **Pe Arduino:** | ||
- | * `pinModeBare()`, `digitalWriteBare()`, `analogReadBare()` – acces direct la registre.\ | + | * `pinModeBare()`, `digitalWriteBare()`, `analogReadBare()` – acces direct la registre.\\ |
- | * `beep(freq, durată)` – feedback sonor fără tone().\ | + | * `beep(freq, durată)` – feedback sonor fără tone().\\ |
- | * `setRGB()` – stare vizuală în funcție de mod.\ | + | * `setRGB()` – stare vizuală în funcție de mod.\\ |
- | * `loop()` – gestionează comenzi seriale + logica modului activ.\ | + | * `loop()` – gestionează comenzi seriale + logica modului activ.\\ |
**Pe PC (Python):** | **Pe PC (Python):** | ||
- | * `detect_target()` – caută cercuri și validează poziția.\ | + | * `detect_target()` – caută cercuri și validează poziția.\\ |
- | * `detect_laser()` – localizează punctul roșu intens.\ | + | * `detect_laser()` – localizează punctul roșu intens.\\ |
- | * `run_exploration_mode()` – mișcare servo stânga-dreapta și scanare automată.\ | + | * `run_exploration_mode()` – mișcare servo stânga-dreapta și scanare automată.\\ |
- | * `send(cmd)` – trimite comenzile UART către Arduino cu întârziere minimă controlată.\ | + | * `send(cmd)` – trimite comenzile UART către Arduino cu întârziere minimă controlată.\\ |
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
Line 178: | Line 178: | ||
**Demonstrație video:**\\ | **Demonstrație video:**\\ | ||
- | ▶️ [Vizualizează pe YouTube](https://youtu.be/r3NM0cNHf28)\\ | + | ▶️ [[https://youtu.be/r3NM0cNHf28|Vizualizează un Demo]] |
Line 187: | Line 187: | ||
Pe lângă valoarea educativă și tehnică, proiectul a fost și o provocare practică în a integra mai multe concepte: PWM, UART, ADC, protocoale de comunicație și prelucrare imagine în timp real. | Pe lângă valoarea educativă și tehnică, proiectul a fost și o provocare practică în a integra mai multe concepte: PWM, UART, ADC, protocoale de comunicație și prelucrare imagine în timp real. | ||
- | 📌 *Notă importantă:* Aproximativ **jumătate din problemele întâlnite** în faza de prototipare s-au rezolvat rapid cu ajutorul **benzii adezive**. Fixările provizorii au devenit permanente, iar improvizația a făcut parte din procesul creativ. 😄 | + | 📌 **Notă importantă:** Aproximativ **jumătate din problemele întâlnite** în faza de prototipare s-au rezolvat rapid cu ajutorul **benzii adezive**. Fixările provizorii au devenit permanente, iar improvizația a făcut parte din procesul creativ. 😄 |
===== Download ===== | ===== Download ===== | ||
- | <note warning> | + | **📦 Arhivă completă proiect:** |
- | 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ă ;-). | + | {{:pm:prj2025:iotelea:Auto-Turret-System.zip | descarcă Auto-Turret-System.zip}} |
- | + | ||
- | 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> | + | |
- | + | ||
- | ===== Jurnal ===== | + | |
- | + | ||
- | <note tip> | + | |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
- | </note> | + | |
+ | **🔗 Repository GitHub:** | ||
+ | [[https://github.com/AlbertArt10/Auto-Turret-System|github.com/AntonescuAlbert/AutoTurret-PM2025]] | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||