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:
Toate acestea sunt comandate printr-o interfață mobilă sau web.
Mod de Funcționare
La pornire, tancul se conectează la dispozitivul de control (telefon sau PC) prin Bluetooth sau WiFi.
Utilizatorul trimite comenzi pentru:
deplasare (W, A, S, D)
rotirea turetei (J/L)
înclinarea turetei (I/K)
tragere (SPACE)
frana (X)
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
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.
Software Design
Funcționalități Principale
Inițializare module: motoare, servo, comunicare serială/Bluetooth
Recepționare comenzi:
`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
`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:
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
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