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ă

Mașinuța este controlată exclusiv prin Bluetooth, folosind un Arduino Uno și un shield L293D pentru controlul a 4 motoare DC. Utilizatorul transmite comenzi dintr-o aplicație mobilă către un modul HC-05, conectat la Arduino prin UART (USART). Comenzile primite sunt interpretate direct și transformate în semnale logice către pinii de control ai motoarelor.

Pentru feedback, sistemul include:

un LED care se aprinde în timpul mișcărilor laterale și înapoi

un buzzer activ care se aprinde sincron cu LED-ul în mers înapoi

Controlul direcției și al vitezei motoarelor este realizat cu semnale digitale și PWM, iar gestionarea LED-ului și buzzerului se face cu acces direct la registre și un timer hardware pentru clipire asincronă.

Interacțiunea modulelor este următoarea:

Modul Bluetooth (HC-05): transmite comenzile către Arduino prin UART

Arduino Uno: interpretează comenzile și controlează motoarele, LED-ul și buzzerul

Shield L293D: primește semnalele de direcție și PWM pentru fiecare motor

Motoare DC (x4): execută mișcarea (față, spate, stânga, dreapta, diagonale)

LED + Buzzer: oferă feedback vizual și sonor în funcție de direcție

Toate modulele comunică prin semnale digitale directe sau prin registre, fără delay-uri software, pentru un răspuns imediat la comenzi.

 Schema bloc cu modulele hardware și fluxul de comenzi

Hardware Design

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

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)
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)

Motoarele sunt conectate la M1, M2, M3 și M4 direct pe shield

Descriere functionarea Led/Buzzer

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)

 Vedere de sus a mașinii asamblate

 Schema completă a conexiunilor în Tinkercad

Software Design

Mediu de dezvoltare: Arduino IDE
Microcontroler: ATmega328P (Arduino Uno)
Tehnici: acces direct la registre, întreruperi hardware, PWM, UART, control motoare

Structură generală

Limbaj: C++

IDE: Arduino IDE

Tip fișier principal: .cpp

Împărțire logică pe secțiuni:

Inițializare porturi GPIO (registre)

Inițializare PWM pentru motoare

Configurare UART pentru Bluetooth

Inițializare Timer1 pentru LED blink

Interpretare comenzi seriale și actualizare mișcare

Biblioteci și surse 3rd-party

AFMotor.h — pentru control motoare cu shield L293D

avr/io.h, avr/interrupt.h — acces direct la registre și ISR

Arduino.h, util/delay.h — funcții de bază

Funcții implementate

forward(), back(), left(), right() — controlează cele 4 motoare

stop() — oprește mișcarea și semnalizarea

startBlinkTimer() / stopBlinkTimer() — gestionează LED-ul pe Timer1

ISR(TIMER1_COMPA_vect) — LED-ul clipeste automat în mers înapoi

ISR(USART_RX_vect) — citire caractere UART de la HC-05 (activare directă mișcare)

Comenzi Bluetooth

Recepționate prin UART, în format ASCII:

'F' – înainte

'B' – înapoi

'L' – stânga

'R' – dreapta

'I', 'J', 'K', 'M' – mișcări diagonale

'T' – stop

Tehnici hardware și registre

LED-ul (A1) și buzzerul (A0) controlați direct cu: DDRC |= (1 « PCx)\ PORTC |= (1 « PCx) / PORTC &= ~(1 « PCx)

UART: Serial.begin(9600) + citire cu Serial.available() sau ISR

Timer1 configurat manual cu TCCR1B, OCR1A, TIMSK1 pentru LED blink asincron

Motoarele: controlate cu AF_DCMotor + PWM (setSpeed())

Algoritmi utilizați

Parser UART — interpretează caracterele primite de la telefon

Control PWM — setează viteza fiecărui motor

Blink asincron — LED care semnalizează mersul înapoi fără delay

Mapare mișcări diagonale — combină direcții cu viteze diferite (e.g. I = stânga-față)

Considerații tehnice

Se evită delay() în loop(), pentru răspuns rapid la comenzi

LED-ul și buzzerul sunt sincronizate cu mișcarea

Codul e modular și poate fi extins cu ușurință pentru alți senzori

Testare și integrare

Testarea a fost incrementală:

Test LED/buzzer separat

Test comenzi de mișcare simple

Test UART cu aplicație Android

Test Timer1 LED blink

Integrare completă Bluetooth + semnalizare + motoare

Concluzii

Proiectul este functional si poate fi folosit in diverse domenii, atat in scop de divertisment, cat si scopuri mai practice, cum ar fi transportul de obiecte.

Cod sursa

Impedimente

In decursul crearii acestui proiect am intampinat nenumarate impedimente, pe care le voi prezenta mai jos.

1. Arderea modului Bluetooth

La inceput, am observat ca motoarele se misca foarte repede, si in dorinta de a le incetini, am pus mai putina putere la motoare, fapt care insa nu a fost prea fericit. Am simtit miros de ars si am oprit alimentarea, constatand ca o parte din modulul Bluetooth s-a ars.

2. Functionarea Buzzerului

Buzzerul fiind pasiv, acesta functioneaza prin pulsatie. In momentul in care i se ofera input de tip HIGH, acesta scoate un sunet slab. Am schimbat logica, folosind pulsatie tone(), iar buzzerul funtiona cum trebuie. In schimb, fara absolut nicio aparenta directa legatura, 2 dintre motoare nu mai functionau cand faceam aceasta modificare in cod.

3. Arderea ledului

Initial cand am cuplat ledul, am folosit o rezistenta mult prea mare, fapt care a facut ledul sa nu se mai aprinda. Crezand ca ledul este stricat, am deconectat rezistenta si am conectat ledul direct, fapt care evident a produs arderea ledului. Nu ledul ar fi problema, dar tinand cont de numarul mare de componente care au suferit degradari, performanta proiectului devine usor imprevizibila.

4. Conectarea ecranului LCD

Am dorit sa conectez un ecran LCD pentru a afisa mesaje precum “inainte” in momentul in care masina se deplasa in directia inainte. In schimb, am observat ca pinii de pe Shield ce ar fi trebuit conectati la SDA si SCL nu functioneaza (probabil tot din cauza unor arderi precedente). Ecranul se aprindea in schimb, dar din dorinta de a pastra puterea acumulatorilor (neavand altii de schimb), am renuntat la ideea ecranului.

5. Arderea placutei Arduino

Din neatentie la montarea shieldului, am produs un scurt ce a ars condensatorul de pe placuta arduino, cum este prezentat mai jos.

 Condensator Ars

pm/prj2025/mdinica/dragos.coticeru.txt · Last modified: 2025/05/30 04:04 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