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ă.
Componentă | Rol în sistem | Conectare la Arduino (prin Shield) |
---|---|---|
Arduino Uno | Controler principal | — |
Shield motoare L293D | Controlează 4 motoare DC | Se montează direct peste placa Arduino Uno |
4x Motoare DC + roți | Permite deplasarea vehiculului | Conectate la porturile M1–M4 de pe shield |
LED (roșu) | Semnalizare vizuală a mișcării | A1 (PC1) |
Buzzer activ (5V) | Avertizare sonoră în timpul mișcării | A0 (PC0) |
Modul Bluetooth HC-05 | Transmitere comenzi de pe telefon via Bluetooth | TX → D0, RX → D1 (cu divizor de tensiune) |
Breadboard + jumperi | Conexiuni simple și fără lipire | — |
2x baterii 18650 (3.7V) | Alimentare portabilă pentru logică și motoare | Conectate la portul VIN de pe shield |
Suport baterii 2×18650 | Fixare fizică a bateriilor | — |
LED-ul este conectat la pinul A1 (PC1) cu rezistor de 220Ω în serie
Buzzer-ul este conectat la pinul A0 (PC0)
Modulul HC-05 este conectat la:
TX → D0 (RX Arduino) – cu divizor de tensiune (2kΩ + 1kΩ)
RX → D1 (TX Arduino)
Display LCD I2C conectat la:
SDA → A4 (jos pe shield, spre margine)
SCL → A5 (jos pe shield, lângă SDA)
Motoarele sunt conectate la M1, M2, M3 și M4 direct pe shield
LED-ul clipește la 0.5 secunde (folosind Timer1 în modul CTC) când mașina merge înapoi
Buzzer-ul este activ în toate direcțiile de mers (semnal logic HIGH)
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