Autorul poate fi contactat la adresa: dan.radulescu@stud.acs.upb.ro
Tema acestui proiect constă în implementarea unei mașinuțe ce poate fi controlată cu ajutorul unui dispozitiv Android, folosind Bluetooth. De asemenea, mașina va dispune și de un set de LED-uri și de un buzzer pentru a simula un girofar și respectiv o sirenă.
Proiectul are ca scop consolidarea cunoștințelor acumulate în cadrul laboratoarelor de PM, acesta fiind primul meu proiect în care este implicată și partea hardware. Rezultatul ar trebui să fie o jucărie care să îi distreze pe utilizatori.
În cadrul proiectului voi implementa și o aplicație Android ce îi va oferi posibilitatea unui smartphone de a se conecta și a trimite comenzi la placă. Va exista câte un buton pentru fiecare funcționalitate, dar și un mecanism pentru a putea seta o putere variabilă pentru motoare.
Smartphone-ul Android va trimite comenzi către modulul HC-05, acesta comunicând cu microcontroller-ul ATmega 324 pe interfața de USART. Apoi, microcontroller-ul va putea activa Buzzer-ul, va putea porni LED-urile sau va trimite semnal PWM către driver-ul L298N, pentru a stabili turația motoarelor de pe fiecare punte. De la microcontroller se vor trimite și semnale pentru controlul direcției fiecărei punți, pe pinii IN1, IN2, IN3, IN4 ai driver-ului L298N (astfel va fi controlat și mecanismul de virare).
Listă de piese:
Nume piesă | Cod piesă |
---|---|
PCB | PM 2019 |
Modul Bluetooth | HC-05 |
Driver de motoare | L298N |
Kit 4WD Chassis Car | - |
Modul cu Buzzer activ | - |
LED-uri | 3mm cu Lentile difuze |
Sursă de alimentare | YwRobot MB-V2 |
Breadboard | HQ 400 |
Conectori, fire, rezistențe | - |
Schema electrică a proiectului:
Atât driver-ul de motoare cât și placa sunt alimentate cu ajutorul a doua baterii de 9V montate în paralel. Pentru placă, am folosit o sursă de alimentare (regulator DC-DC-Down) deoarece trebuie alimentată la 5V. Regulatorul a fost plasat pe un breadboard. Prin cablul USB de la regulator la placă, se realizeaza o masă comună, incluzând minusul de pe breadboard.
În cazul modulului HC-05 am folosit și un divizor de tensiune de la 5V la 3V3, deoarece pinul RX poate primi maxim 3V3.
Ca medii de dezvoltare am folosit:
Am utilizat biblioteca USART pusa la dispozitie in laboratorul 1. In usart.c, in functia de initializare a interfetei 0 de pe uC, am setat baud rate-ul la 9600, am pornit si transmisie si receptie si am setat datele de control conform datasheet-ului HC-05: 8 biti de date, 1 bit de stop si fara biti de paritate.
Intr-o bucla infinita, uC asteapta sa primeasca date (caractere), si in functie de caracterul primit va modifica valorile pinilor IN1, 2, 3, 4 sau va modifica pragurile OCR0A, B pentru a obtine viteze diferite. Pentru modificarea vitezei, dupa primirea unui caracter, se asteapta primirea a trei cifre folosite la constructia noii valori a pragurilor.
Pentru LED-uri si buzzer, am folosit intreruperi. Astfel, la anumite intervale date de timerul 1, se va face switch intre LED-urile stinse si pornite sau se va modifica prescalerul timerului 2 pentru a trimite un semnal PWM cu frecventa diferita buzzerului (care simuleaza o sirena).
Aplicatia pune la dispozitie 7 butoane si un seek bar pentru a controla viteza. Prin apasarea butoanelor se vor trimite date (caractere) catre modulul Bluetooth, apoi prin USART catre microcontroller, acesta urmand sa efectueze o anumita actiune.
Cu ajutorul acestei aplicatii se poate:
1) Stabili o noua conexiune cu masina 2) Deplasa masina 3) Seta o viteza variabila 4) Se pot porni LED-urile sau buzzerul
Pentru seek bar, am calculat o functie prin care sa mapez procentul din seek bar intr-o valoare pentru pragurile OCR0A si B. Apoi trimit un String zNr3cifreCoresp.
Am reușit să implementez tot ce mi-am propus la începutul acestui proiect. A fost o experiență interesantă și benefică din punct de vedere didactic având în vedere că am trecut prin marea majoritate a conceptelor învățate în cadrul laboratoarelor.
Am avut câteva dificultăți la partea de debugging, în special la comunicarea Android-Bluetooth-Atmega, însă m-am folosit de consola din Android Studio pentru a observa diverse bug-uri (erori la inițializare socket; trimitere mesaje corect de pe Android dar fără răspuns pe Atmega - Baud Rate-ul era setat la o valoare greșită). Ocazional, se mai întâmplă ca modulul Bluetooth să se reseteze, atunci când toate cele 4 motoare funcționează la putere maximă și sunt porniți și ceilalți consumatori. În acest caz, trebuie apăsat din nou butonul Connect.
Pe viitor, intenționez să mai pun și un senzor de distanță în așa fel încât mașina să se oprească la detecția unui obstacol.
Arhiva contine urmatoarele fisiere: