This is an old revision of the document!


Mașinuță actionata Bluetooth cu semnalizare LED/Buzzer

Introducere

Mașinuță controlată prin Bluetooth, cu semnalizare sonoră și vizuală. Scopul este de a construi un vehicul controlabil de la distanță, folosind componente accesibile.

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ă.

Descriere generală

Arduino Uno este unitatea de control care citește datele de la senzorul ultrasonic.

Î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ă.

 Schema bloc

Hardware Design

Aici sunt prezentate toate elementele hardware utilizate în proiect: lista de componente, schema electrică, descrierea conexiunilor și rezultatele simulării.

Listă de componente

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)
Display LCD 16×2 I2C Afișează direcția curentă a mașinii SDA → A4, SCL → A5 (pe pinii shield-ului, jos stânga)
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

Schema electrică

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

Diagramă de semnal

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)

LCD-ul afișează comenzile în timp real: inainte, inapoi, dreapta etc.

Simulare (Wokwi sau Tinkercad)

Dacă dorești să incluzi simulări:

Recomandare: folosește Wokwi sau Tinkercad

Adaugă schema conectării LED-ului, buzzer-ului, HC-05-ului și LCD-ului I2C

Simularea motoarelor reale nu este posibilă, dar poți testa restul funcțiilor

 Schema completă a conexiunilor în Tinkercad

Software Design

* mediu de dezvoltare * acces direct la registre și întreruperi * control PWM, UART, senzor obstacol * algoritmi: FSM, ISR, filtrare, interpretare comenzi

Mediu de dezvoltare și structură generală:

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

Rezultate Obținute

Concluzii

Cod sursa

https://github.com/Dragos-Coticeru/Arduino-Bluetooth-Car

Codul va avea modificari, inca nu este complet

pm/prj2025/mdinica/dragos.coticeru.1748563605.txt.gz · Last modified: 2025/05/30 03:06 by dragos.coticeru
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