This shows you the differences between two versions of the page.
pm:prj2025:ajipa:jamal_samir.pirvu [2025/05/13 10:43] jamal_samir.pirvu [Componente Principale] |
pm:prj2025:ajipa:jamal_samir.pirvu [2025/05/30 09:30] (current) jamal_samir.pirvu [Conexiuni Principale] |
||
---|---|---|---|
Line 8: | Line 8: | ||
* Mișcare pe teren variat | * Mișcare pe teren variat | ||
* Controlul turetei pe două axe | * Controlul turetei pe două axe | ||
- | * Mecanism de tragere activat de la distanță | ||
Toate acestea sunt comandate printr-o interfață mobilă sau web. | Toate acestea sunt comandate printr-o interfață mobilă sau web. | ||
Line 15: | Line 14: | ||
- Utilizatorul trimite comenzi pentru: | - Utilizatorul trimite comenzi pentru: | ||
* deplasare (W, A, S, D) | * deplasare (W, A, S, D) | ||
- | * rotirea turetei (stânga/dreapta) | + | * rotirea turetei (J/L) |
- | * înclinarea turetei (sus/jos) | + | * înclinarea turetei (I/K) |
* tragere (SPACE) | * tragere (SPACE) | ||
+ | * frana (X) | ||
- Microcontrollerul interpretează comenzile și controlează motoarele și servomotoarele. | - Microcontrollerul interpretează comenzile și controlează motoarele și servomotoarele. | ||
- | - Mecanismul de tragere este activat la comandă. | ||
===== Descriere Generală ===== | ===== Descriere Generală ===== | ||
Line 40: | Line 39: | ||
* **Șasiu imprimat 3D** | * **Șasiu imprimat 3D** | ||
* **Senile și roți pentru șasiu** | * **Senile și roți pentru șasiu** | ||
- | * **Aplicație mobilă (MIT App Inventor) / Interfață Web** – control tanc. | ||
- | |||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
==== Conexiuni Principale ==== | ==== Conexiuni Principale ==== | ||
- | * Motoare DC → Driver L298N → Arduino D3–D6 | + | |
- | * Servomotor Pan → D9 | + | * Motoare DC → Driver L298N → Arduino D2–D5 |
- | * Servomotor Tilt → D10 | + | - IN1 → D2 (PD2) — Motor stânga înainte |
- | * Servomotor Tragere → D11 | + | - IN2 → D3 (PD3) — Motor stânga înapoi |
- | * Bluetooth HC-05 → RX/TX sau SoftwareSerial | + | - IN3 → D4 (PD4) — Motor dreapta înainte |
- | * ESP32/ESP8266 → GPIO configurabil | + | - IN4 → D5 (PD5) — Motor dreapta înapoi |
- | * Baterie → Motoare & Microcontroller (cu regulator 5V dacă este necesar) | + | - PWM Motor Stânga → D9 (PB1 / OC1A) |
+ | - PWM Motor Dreapta → D10 (PB2 / OC1B) | ||
+ | |||
+ | * Servomotor Pan (Rotație turetă) → D13 (PB5) | ||
+ | |||
+ | * Servomotor Tilt (Înclinare turetă) → D12 (PB4) | ||
+ | |||
+ | * Servomotor Tragere (opțional, partajează pin cu PWM) → D9 (PB1) | ||
+ | |||
+ | * Bluetooth HC-05 → SoftwareSerial(D8, D7) | ||
+ | - TX HC-05 → D8 (PB0) — RX software | ||
+ | - RX HC-05 → D7 (PD7) — TX software | ||
+ | |||
+ | ==== Alimentare Sistem ==== | ||
+ | |||
+ | * 2x Baterii Li-Ion 3.7V (tip 18650) conectate în serie → tensiune totală: 7.4V – 8.4V | ||
+ | * Baterii → BMS 2S (protecție la supra-descărcare, supra-încărcare și scurtcircuit) | ||
+ | * BMS OUT+ și OUT− → Întrerupător principal (ON/OFF) | ||
+ | * Întrerupător → Modul coborâtor de tensiune LM2596 / LM2598 | ||
+ | - LM2598 reglează tensiunea la 5V stabil | ||
+ | * LM2598 → | ||
+ | - Arduino (prin pin Vin sau direct 5V) | ||
+ | - Servomotoare (alimentare externă pentru a evita suprasarcina pe Arduino) | ||
+ | |||
+ | ==== Observații ==== | ||
+ | * Este important ca servomotoarele să fie alimentate direct din LM2598, nu prin 5V de pe Arduino, din cauza curentului mare necesar în sarcină. | ||
+ | * Dacă se folosește servomotorul de tragere pe pinul D9, acesta nu mai poate fi folosit simultan cu PWM pentru motorul stânga (OC1A). | ||
+ | * BMS-ul 2S este esențial pentru siguranță și durata de viață a bateriilor Li-Ion. | ||
+ | |||
+ | |||
+ | {{:pm:prj2025:ajipa:circuit_image.png?600|}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
==== Funcționalități Principale ==== | ==== Funcționalități Principale ==== | ||
- | * Inițializare module: motoare, servo, comunicare serială/WiFi | + | * Inițializare module: motoare, servo, comunicare serială/Bluetooth |
* Recepționare comenzi: | * Recepționare comenzi: | ||
- | - `W`, `A`, `S`, `D` → direcție | + | - `W`, `A`, `S`, `D` → deplasare înainte/înapoi/stânga/dreapta |
+ | - `Q`, `E` → scade/crește viteza | ||
+ | - `X` → frână de urgență | ||
- `I`, `K` → turetă sus/jos | - `I`, `K` → turetă sus/jos | ||
- `J`, `L` → turetă stânga/dreapta | - `J`, `L` → turetă stânga/dreapta | ||
- | - `space` → tragere | + | * Control motoare DC prin DRV8833 cu semnal PWM (Timer1) |
- | * Control motoare DC prin L298N | + | * Control servomotoare (pan/tilt) cu bibliotecă Servo.h |
- | * Control servo (pan/tilt) cu funcții Servo.h | + | * Comenzi transmise prin modul Bluetooth (HC-05) sau consolă serială |
- | * Comenzi transmise prin Bluetooth sau interfață web | + | * Oprire automată la timeout dacă nu se mai primesc comenzi (siguranță) |
+ | |||
+ | ==== Module Software Implementate ==== | ||
+ | * Modul PWM: | ||
+ | - Inițializare Timer1 pentru generarea semnalului PWM către motoare | ||
+ | - Timer0 utilizat pentru buzzer | ||
+ | * Modul Bluetooth/Serial: | ||
+ | - Comunicare bidirecțională cu dispozitive externe | ||
+ | - Interpretare comenzi primite și trimitere mesaje debug | ||
+ | * Modul de control turelă: | ||
+ | - Control fin al unghiului de înclinare și rotație | ||
+ | - Timeout după ultima comandă pentru evitarea mișcărilor continue | ||
+ | * Modul de siguranță: | ||
+ | - Timeout motoare (200 ms) | ||
+ | - Timeout servo (200 ms) | ||
+ | - Funcție `brakeMotors()` pentru frânare activă | ||
+ | |||
+ | |||
+ | ===== Laboratoare Folosite ===== | ||
+ | |||
+ | Laboratorul 0 – GPIO → folosit pentru configurarea pinilor motoarelor, buzzerului și controlul servomotoarelor (setare ieșiri digitale cu DDR și PORT). | ||
+ | |||
+ | Laboratorul 1 – UART → folosit pentru comunicarea serială prin USB (`Serial`) și Bluetooth (`SoftwareSerial`) pentru recepția comenzilor și debug. | ||
+ | |||
+ | Laboratorul 3 – Timere / PWM → | ||
+ | - Timer1 (mod Fast PWM) este folosit pentru generarea semnalului PWM pentru motoarele DC, controlând viteza acestora prin pinii OCR1A (D9) și OCR1B (D10). | ||
+ | - Timer0 (mod Fast PWM) este folosit pentru activarea buzzerului prin OC0A (pinul D6), generând un semnal sonor temporizat. | ||
+ | |||
+ | ===== Implementarea Logicii ===== | ||
+ | |||
+ | După pornirea sistemului, se realizează următoarele inițializări: | ||
+ | - Se configurează pinii pentru motoare, buzzer și PWM (`setupPWM()`). | ||
+ | - Se atașează servomotoarele la pinii 12 și 13 și se setează poziția inițială (90°). | ||
+ | - Se initializează comunicația serială cu PC-ul și Bluetooth. | ||
+ | |||
+ | ===== Funcționare în bucla principală ===== | ||
+ | |||
+ | 1. **Recepție Comenzi:** | ||
+ | Comenzile sunt primite de la utilizator prin Bluetooth sau consolă serială. Funcția `handleCommand()` interpretează literele primite (`W`, `A`, etc.) și activează comportamentul asociat. | ||
+ | |||
+ | 2. **Control Motoare DC:** | ||
+ | - Se folosesc 4 pini digitali (IN1–IN4) pentru sensul de rotație. | ||
+ | - Semnalul PWM este aplicat pe OCR1A și OCR1B pentru controlul vitezei. | ||
+ | - Se suportă control de direcție, frânare activă (`brakeMotors()`), diagonală și timeout automat. | ||
+ | |||
+ | 3. **Control Turelă Servo:** | ||
+ | - La primirea comenzilor `I`, `K`, `J`, `L`, turelă se mișcă incremental (1°/pas) timp de 200ms. | ||
+ | - Servomotoarele sunt controlate cu funcții `Servo.write()`. | ||
+ | |||
+ | 4. **Siguranță (Timeout):** | ||
+ | - Dacă nu se primesc comenzi de motor timp de 200 ms, acestea sunt oprite automat (`stopMotors()`). | ||
+ | - La fel, comenzile de servomotoare sunt valabile doar timp de 200 ms. | ||
+ | |||
+ | ===== Funcții Auxiliare ===== | ||
+ | |||
+ | - `setupPWM()`: configurează Timer1 în mod Fast PWM pentru controlul motoarelor pe OCR1A (D9) și OCR1B (D10). | ||
+ | |||
+ | - `beepBuzzer(uint8_t durationMs)`: pornește buzzerul folosind Timer0 pentru o durată specificată, pentru feedback sonor (ex: confirmare frână). | ||
+ | |||
+ | - `handleCommand(char cmd)`: interpretează comenzile primite de la utilizator și apelează funcțiile corespunzătoare (motor, servo, buzzer). | ||
+ | |||
+ | - `stopMotors()`: dezactivează toți pinii de control motor și oprește PWM. | ||
+ | |||
+ | - `brakeMotors()`: activează frâna motoarelor (toți pinii HIGH) și declanșează buzzerul pentru 100 ms. | ||
+ | |||
+ | - `moveDiagonal(char a, char b)`: gestionează combinațiile de taste pentru mișcare diagonală (`WA`, `WD`, `SA`, `SD`), activând doar motoarele necesare. | ||
+ | |||
===== Rezultate Obținute ===== | ===== Rezultate Obținute ===== | ||
* Control complet al vehiculului prin aplicație. | * Control complet al vehiculului prin aplicație. | ||
* Rotație și înclinare turetă funcțională. | * Rotație și înclinare turetă funcțională. | ||
- | * Tragere fiabilă activată la distanță. | ||
* Sistem stabil și extensibil (ex: cu streaming video sau senzori). | * Sistem stabil și extensibil (ex: cu streaming video sau senzori). | ||
Line 76: | Line 171: | ||
===== Resurse Suplimentare ===== | ===== Resurse Suplimentare ===== | ||
- | * [[https://github.com/Destroyer6969123/Proiect_PM]] – Exemplu cod pe GitHub | + | * [[https://github.com/Destroyer6969123/Proiect_PM]] – Cod |
* Poze și video demonstrativ (de adăugat după construcție) | * Poze și video demonstrativ (de adăugat după construcție) | ||