This is an old revision of the document!
Controlul se face printr-o aplicație mobilă compatibilă Bluetooth, care permite direcționarea mașinuței în timp real.
În funcție de mișcarea aleasă, mașinuța aprinde un LED și activează un buzzer pentru a semnaliza vizual și sonor comanda executată.
În funcție de distanța față de obstacol, Arduino comandă motoarele să se oprească sau să vireze.
Dacă se apropie de un obstacol, se activează un buzzer și un LED. * LED-ul se aprinde când mașina schimbă direcția. * Buzzer-ul variază frecvența sunetului în funcție de distanță.
În modul automat, mașina navighează singură, evitând obstacolele cu ajutorul senzorului de distanță.
În modul Bluetooth, utilizatorul controlează manual mașina printr-o aplicație de pe telefon, trimițând comenzi către Arduino printr-un modul de comunicație serială.
Componente utilizate și rolul acestora:
- Platformă acrilică – suport mecanic pentru toate componentele, asigură stabilitate și montare ușoară.
- Arduino Uno – unitatea centrală de control; citește senzorii și controlează motoarele, LED-ul și buzzerul.
- Shield motoare L293D – permite controlul a până la 4 motoare DC prin semnale digitale de la Arduino.
- 4x Motoare DC 3-6V + 4 roți – asigură deplasarea vehiculului înainte/înapoi și viraje.
- Senzor ultrasonic HC-SR04 – măsoară distanța față de obstacole pentru navigare autonomă.
- LED – semnalizează vizual când mașina virează (dreapta pentru evitare obstacol).
- Buzzer activ – oferă semnal sonor, frecvența variază în funcție de distanța față de obstacol.
- Bluetooth (modul HC-05) – permite control manual al mașinii prin aplicație de pe telefon.
- Breadboard + cabluri jumper – facilitarea conexiunilor între Arduino, senzori, buzzer, LED și Bluetooth.
- 4x baterii 3.7V 2500mAh Samsung 18650 (2 de rezervă) – oferă alimentare portabilă pentru motor și logică.
- Suport baterii, șuruburi, piulițe – fixare sigură a componentelor pe platformă.
Limbaj: C
IDE: MPLAB X
Compilator: XC8
Microcontroler: PIC16F877A
Programator/debugger: PICkit 3
Aplicația este împărțită în mai multe module software, fiecare responsabil pentru o funcționalitate specifică:
Inițializare hardware (I/O, UART, temporizatoare)
Control motoare (direcție și viteză cu PWM)
Recepție comenzi Bluetooth prin UART
Comportament autonom: evitare obstacole
Comutare mod funcționare prin întrerupere externă
Biblioteci și fișiere incluse:
xc.h – acces la registrele microcontrolerului
Fișiere de configurare (fuses, frecvență oscilator)
Toate funcțiile pentru UART, PWM și logica de control sunt scrise manual, folosind acces direct la registre.
Utilizarea întreruperilor:
INT0 – comutare între mod Bluetooth și mod autonom (prin apăsarea unui buton)
USART Receive Interrupt – primește și interpretează comenzi Bluetooth (fără polling)
Controlul motoarelor și PWM:
Direcție: controlată prin semnale digitale către driverul L298N (IN1–IN4)
Viteză: ajustată cu PWM, folosind registrul TMR1
CCPR1L – controlează factorul de umplere
TMR1 și PR1 – configurează frecvența PWM
Mod Bluetooth (control manual):
Comenzile sunt primite de la telefon via Bluetooth (HC-05), sub formă de caractere ASCII:
'F' – înainte
'B' – înapoi
'L' – stânga
'R' – dreapta
'S' – stop
Comanda este procesată imediat în ISR-ul UART și direcția motoarelor este actualizată
Mod autonom (ocolire obstacole):
Senzori de obstacol frontal (ex: IR sau ultrasonic) trimit semnale digitale către Arduino
Mașinuța evaluează starea senzorilor în bucla principală:
Dacă un obstacol este detectat: oprire și evitare laterală
Dacă drumul este liber: continuă deplasarea înainte
Logica este implementată cu FSM (Finite State Machine) cu stările:
MERGE_INAINTE
EVITA_STANGA
EVITA_DREAPTA
OPRIT
Algoritmi implementați:
FSM – pentru decizii logice în modul autonom
ISR (Interrupt Service Routines) – pentru UART și comutare mod
Debouncing software – pentru stabilizarea butonului de mod
PWM control – ajustarea vitezei motoarelor
Parser comenzi seriale – interpretarea rapidă a comenzilor Bluetooth
Alte considerente:
Variabilele partajate cu ISR-uri sunt declarate volatile
Se evită delay-uri lungi în bucla principală pentru a nu bloca răspunsul la întreruperi
Codul este scris modular, permițând testarea și depanarea pe componente
Testarea aplicației s-a realizat incremental: s-au verificat individual comanda motoarelor, recepția UART, funcționarea PWM și senzorii, urmate de integrarea completă în sistemul dual
https://github.com/Dragos-Coticeru/Arduino-Bluetooth-Car
Codul va avea modificari, inca nu este complet