This is an old revision of the document!
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
Aplicație mobilă (MIT App Inventor) / Interfață Web – control tanc.
Hardware Design
Conexiuni Principale
Motoare DC → Driver L298N → Arduino D2–D7
Servomotor Pan → D12
Servomotor Tilt → D13
Servomotor Tragere → D9
Bluetooth HC-05 → RX/TX sau SoftwareSerial(D10 si D11)
Baterie → BMS
BMS → Coborator tensiune LM2598
LM2598 → Arduino
LM2598 → Servomotoare
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.
Notă: Laboratoarele 2, 4 și 6 nu sunt utilizate în acest cod, deoarece:
- Nu există întreruperi externe sau debouncing (`attachInterrupt`/`INT0`) → Lab 2
- Nu se citește niciun semnal analogic (ex: senzori pe `A0`) → Lab 4
- Nu există comunicație I2C sau afișaje LCD → Lab 6
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