Tanc cu Tureta Controlabilă prin Bluetooth/WiFi

Introducere

Proiectul constă în realizarea unui vehicul tip tanc controlat de la distanță, echipat cu o turetă mobilă capabilă să tragă proiectile. Controlul se face prin Bluetooth sau WiFi, oferind utilizatorului posibilitatea de a manevra tancul și tureta în timp real.

Scopul Proiectului

Scopul principal este de a construi un tanc telecomandat cu funcționalități avansate, inclusiv:

  • Mișcare pe teren variat
  • Controlul turetei pe două axe

Toate acestea sunt comandate printr-o interfață mobilă sau web.

Mod de Funcționare

  1. La pornire, tancul se conectează la dispozitivul de control (telefon sau PC) prin Bluetooth sau WiFi.
  2. Utilizatorul trimite comenzi pentru:
    • deplasare (W, A, S, D)
    • rotirea turetei (J/L)
    • înclinarea turetei (I/K)
    • tragere (SPACE)
    • frana (X)
  3. Microcontrollerul interpretează comenzile și controlează motoarele și servomotoarele.

Descriere Generală

Schema bloc

Componente Principale

  • 2x baterii Li-Ion 18650
  • Modul BMS 2S
  • Suport baterii 2x 18650
  • Modul LM2596 cu voltmetru
  • Modul Bluetooth HC-05
  • Arduino Uno R3
  • 2x motoare GA12-N20 6V
  • Driver motoare L298N
  • 2x servomotoare SG90
  • Suport pan/tilt pentru SG90
  • Șasiu imprimat 3D
  • Senile și roți pentru șasiu

Hardware Design

Conexiuni Principale

  • Motoare DC → Driver L298N → Arduino D2–D5
    1. IN1 → D2 (PD2) — Motor stânga înainte
    2. IN2 → D3 (PD3) — Motor stânga înapoi
    3. IN3 → D4 (PD4) — Motor dreapta înainte
    4. IN4 → D5 (PD5) — Motor dreapta înapoi
    5. PWM Motor Stânga → D9 (PB1 / OC1A)
    6. 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)
    1. TX HC-05 → D8 (PB0) — RX software
    2. 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
    1. LM2598 reglează tensiunea la 5V stabil
  • LM2598 →
    1. Arduino (prin pin Vin sau direct 5V)
    2. 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.

Software Design

Funcționalități Principale

  • Inițializare module: motoare, servo, comunicare serială/Bluetooth
  • Recepționare comenzi:
    1. `W`, `A`, `S`, `D` → deplasare înainte/înapoi/stânga/dreapta
    2. `Q`, `E` → scade/crește viteza
    3. `X` → frână de urgență
    4. `I`, `K` → turetă sus/jos
    5. `J`, `L` → turetă stânga/dreapta
  • Control motoare DC prin DRV8833 cu semnal PWM (Timer1)
  • Control servomotoare (pan/tilt) cu bibliotecă Servo.h
  • Comenzi transmise prin modul Bluetooth (HC-05) sau consolă serială
  • Oprire automată la timeout dacă nu se mai primesc comenzi (siguranță)

Module Software Implementate

  • Modul PWM:
    1. Inițializare Timer1 pentru generarea semnalului PWM către motoare
    2. Timer0 utilizat pentru buzzer
  • Modul Bluetooth/Serial:
    1. Comunicare bidirecțională cu dispozitive externe
    2. Interpretare comenzi primite și trimitere mesaje debug
  • Modul de control turelă:
    1. Control fin al unghiului de înclinare și rotație
    2. Timeout după ultima comandă pentru evitarea mișcărilor continue
  • Modul de siguranță:
    1. Timeout motoare (200 ms)
    2. Timeout servo (200 ms)
    3. 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:

  1. Se folosesc 4 pini digitali (IN1–IN4) pentru sensul de rotație.
  2. Semnalul PWM este aplicat pe OCR1A și OCR1B pentru controlul vitezei.
  3. Se suportă control de direcție, frânare activă (`brakeMotors()`), diagonală și timeout automat.

3. Control Turelă Servo:

  1. La primirea comenzilor `I`, `K`, `J`, `L`, turelă se mișcă incremental (1°/pas) timp de 200ms.
  2. Servomotoarele sunt controlate cu funcții `Servo.write()`.

4. Siguranță (Timeout):

  1. Dacă nu se primesc comenzi de motor timp de 200 ms, acestea sunt oprite automat (`stopMotors()`).
  2. 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

  • Control complet al vehiculului prin aplicație.
  • Rotație și înclinare turetă funcțională.
  • Sistem stabil și extensibil (ex: cu streaming video sau senzori).

Concluzii

Proiectul demonstrează un sistem robotic funcțional și modular. Integrarea Bluetooth/WiFi, controlul pe două axe și tragerea automatizată oferă o platformă excelentă pentru învățare în domeniul roboticii și sistemelor încorporate.

Resurse Suplimentare

pm/prj2025/ajipa/jamal_samir.pirvu.txt · Last modified: 2025/05/30 09:30 by jamal_samir.pirvu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0