This shows you the differences between two versions of the page.
pm:prj2025:iotelea:albert.antonescu [2025/05/30 08:46] albert.antonescu [Software Design] |
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 ===== | ||
- | <note tip> | + | {{:pm:prj2025:iotelea:autoturret-final-poza.jpg?200&right | Imagine cu proiectul real – Auto-Turret activ}} |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | \\ |
- | </note> | + | |
+ | **Performanță:**\\ | ||
+ | * Detecție fiabilă a țintei (cerc) și a laserului cu OpenCV.\\ | ||
+ | * Mișcare fluidă a servomotoarelor pentru urmărire pe două axe (pan/tilt).\\ | ||
+ | * Activare precisă a trăgaciului când ținta este centrată.\\ | ||
+ | * Moduri de operare complet funcționale: FREE, SCAN, LOCK, FIRE_WARN, MANUAL.\\ | ||
+ | * Feedback vizual și sonor prin LED RGB și buzzer.\\ | ||
+ | |||
+ | **Demonstrație video:**\\ | ||
+ | ▶️ [[https://youtu.be/r3NM0cNHf28|Vizualizează un Demo]] | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | ===== Download ===== | + | Proiectul **Sistem Automat de Țintire** a reușit să combine eficient hardware-ul de tip embedded cu procesarea vizuală de pe PC. Am integrat cu succes controlul prin UART, logica de moduri, interfață vizuală (LED RGB), feedback acustic (buzzer), control manual (joystick) și funcționalitate completă de tragere automată. |
- | <note warning> | + | 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. |
- | 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ă ;-). | + | |
- | 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**. | + | 📌 **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. 😄 |
- | </note> | + | |
- | ===== Jurnal ===== | + | ===== Download ===== |
- | <note tip> | + | **📦 Arhivă completă proiect:** |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | {{:pm:prj2025:iotelea:Auto-Turret-System.zip | descarcă Auto-Turret-System.zip}} |
- | </note> | + | |
+ | **🔗 Repository GitHub:** | ||
+ | [[https://github.com/AlbertArt10/Auto-Turret-System|github.com/AntonescuAlbert/AutoTurret-PM2025]] | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | === Resurse Software === |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * [[https://docs.opencv.org/|OpenCV Documentation]] |
- | </note> | + | * [[https://www.arduino.cc/reference/en/|Arduino Reference]] |
+ | * [[https://pyserial.readthedocs.io/|PySerial Documentation]] | ||
+ | |||
+ | === Resurse Hardware === | ||
+ | * [[https://datasheetspdf.com/pdf-file/847115/TowerPro/SG90/1|Datasheet SG90 Servomotor]] | ||
+ | * [[https://www.handsontec.com/dataspecs/motor/MG996R%20Servo.pdf|Datasheet MG996R Servomotor]] | ||
+ | * [[https://components101.com/modules/ps2-joystick-module|Joystick PS2 Module Pinout]] | ||
+ | * [[https://components101.com/buzzer-pinout-working-applications|Buzzer pasiv – circuit și funcționare]] | ||
- | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | + | === Alte === |
+ | * Video tutoriale Arduino + OpenCV de pe YouTube | ||
+ | * Exemple de cod din laboratoarele PM | ||
- | }} |