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ă.
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.
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 | — |
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
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: 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
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ă
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)
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
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())
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ță)
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
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
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.
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.