Table of Contents

Singing car

Autor: Georgescu Ioana

Introducere

Proiectul constă în realizarea unei mașinuțe comnadate prin Bluetooth. Mașinuța va putea merge înainte, înapoi, în stânga și în dreapta. Va putea “cânta” prin intermediul unui buzzer și a unor fișiere în care vor fi codificate cântecele. Utilizatorul va putea controla mișcarea mașinuței și, în același timp, va putea porni / opri cântatul și schimba cântecul.

Scopul proiectului este exersarea interacțiunii cu componentele prezentate la curs și în laborator prin construirea unei aplicații distractive.

Utilitatea proiectului vine din perifericele diverse care vor fi conectate la plăcuța Arduino:

Descriere generală

dabble_gamepad_digital.jpg Pentru interacțiunea cu mașinuța utilizatorul va folosi aplicația Dabble, special concepută pentru a comanda Arduino prin Bluetooth. Comenzile se vor trimite din modulul Gamepad, modul Digital al aplicației:

Mașinuța are 6 LED-uri: 2 galbene în față, 2 portocalii în spate, unul albastru și unul roșu pe partea de sus.

Pe parcursul setup-ului LED-urile albastru și roșu lumineaza cu aceași intensitate și mașinuța nu reacționează la comenzile utilizatorului.

La finalul setup-ului, LED-ul roșu se stinge și cel albastru luminează la intensitate maximă. Acum mașinuța este gata să primească comenzi.

Mașinuța caută cântecele în fișiere cu nume “songX.txt” (X = numărul cântecului) în folderul “songs” de pe cardul SD. În timpul setup-ului, mașinuța emite o atenționare în oricare dintre următoarele situații:

Atenționarea constă în stingerea LED-ului albastru, aprinderea celui roșu la intensitate maximă și emiterea unui sunet. Dacă s-a emis atenționarea, mașinuța va recepționa în continuare comenzile pentru mers și reglarea vitezei, dar le va ignora pe cele pentru cântat.

La mersul înainte sau înapoi toate LED-urile “far” (cele galbene și cele portocalii) sunt aprinse. La cotire mașinuța semnalizează clipind farurile de pe partea spre care cotește și tinăndu-le pe celelalte două aprinse constant. Cănd mașinuța stă pe loc toate farurile sunt stinse.

Deplasarea va avea loc atât timp cât utilizatorul ține apăsată săgeata corespunzătoare direcției dorite. Dacă se apasă doua sau mai multe direcții simultan, mașinuța va răspunde doar la una. Ordinea de prioritate dată direcțiilor, de la cea mai mare la cea mai mică, este: față, spate, stânga, dreapta.

La apăsarea simultană a accelerării și a frânei (TRIANGLE, respectiv CROSS) ambele comenzi sunt ignorate. Viteza poate fi reglată și cât timp mașinuța stă pe loc. În acest caz, noua viteză va fi viteza cu care va porni mașina.

La apăsarea butonului START mașinuța va începe să cânte. Apăsarea butonului START nu va avea niciun efect cât timp mașinuța cântă. Butonul SELECT urmează aceeași logică, dar pentru oprirea cântatului.

Mașinuța nu schimbă cântecul decât dacă îi cere utilizatorul prin SQUARE sau CIRCLE. Cănd ajunge la finalul cântecului curent începe să-l cânte din nou de la început. Mașinuța nu ține minte unde a rămas în cardul unui cântec dacă este intreruptă din cântatul lui. Dacă se apasă SELECT în timpul unui cântec și apoi se apasă START, mașinuța va lua cântecul de la început. Dacă se selectează alt cântec și apoi se revine la cântecul întrerupt, mașinuța îl va lua de la început. Dacă există un singur cântec, la apăsarea SQUARE sau CIRCLE mașinuța îl va lua de la început.

Se poate selecta alt cântec și când mașinuța nu cântă. În timpul setup-ului mașinuța numără cântecele găsite și va cicleaza prin ele la apăsarea SQUARE sau CIRCLE. Dacă este la primul cântec și se apasă SQUARE, va trece la ultimul. Dacă este la ultimul și se apasă CIRCLE, va trece la primul. Dacă se apasă SQUARE și CIRCLE simultan, ambele comenzi sunt ignorate.

În timpul cântatului, LED-urile albastru și roșu luminează în tandem cu melodia, cu intensități corelate cu notele cântate, asemănător cu luminile de poliție (când unul lumiează mai intens, celălalt luminează mai slab). Când mașinuța nu cântă, doar LED-ul albastru luminează.

singingcarschemabloc.jpg

Hardware Design

Nume componentă Cantitate Valori Link magazin
Placă de dezvoltare compatibilă Arduino UNO R3 1 ardushop
Modul Bluetooth HC-05 1 optimusdigital
Modul card slot compatibil cu MicroSD 1 optimusdigital
Driver motoare L293D 1 optimusdigital
Buzzer pasiv 1 5V ardushop
LED 5mm albastru 1 2.48 ~ 3.7V ardushop
LED 5mm roșu 1 1.63 ~ 2.03V
LED 5mm galben 2 2.10 ~ 2.18V
LED 5mm portocaliu 2 2.03 ~ 2.10V
Card MicroSD SDHC 1 16GB altex
Motor cu reductor 4 3V ~ 6V DC optimusdigital
Roată 4
Cadru mașinuță 1
Baterie 2+ 9V emag
Mufă baterie 2+ ardushop
Rezistențe 1 1K ardushop
1 5K
2 200K
Tranzistor NPN BC337 1 emag
Tranzistor PNP BC327 1 emag
Breadboard 1 ardushop
Fire mamă-tată
Fire tată-tată
Fire mamă-mamă
Bandă izolatoare

singing_car_eagle.jpg

Driver-ul L293D are 16 pini și poate controla 2 motoare. Eu l-am folosit pentru a comanda 4 motoare, legându-le în paralel. Am conectat pinul 16 la Arduino și pinul 8 la 2 baterii de 9V legate în paralel. O singură baterie nu a fost destul de puternică pentru a putea mișca mașina.

Viteza este controlată prin modificarea valorilor trimise pe pinii de EN (1 și 9), conectați la pini PWM.

Direcția este controlată prin valorile transmise pinilor IN. Fiecare pereche de motoare are 2 pini de input care accepta valori HIGH sau LOW:

Software Design

Biblioteci necesare
  1. SPI
  2. SD
  3. Dabble

Proiectul a fost dezvolat în Arduino IDE. Conține un fișier .ino și două biblioteci cu funcții ajutătoare.

Împărțirea funcționalităților în fișiere:

Pentru lucrul cu cardul SD am folosit biblioteca SD. Aceasta a impus limitarea că fișierele trebuie să aibă nume de maxim 8 caractere (excluzând extensia) și extensii de 3 caractere, altfel nu vor fi văzute. M-am folosit de asta pentru a reține doar numărul cântecului în loc de întregul nume. Compun numele în cod prin concatenare de String-uri.

Formatul unui fișier de cântec este următorul:

<tempo> <frecvența maximă>
<frecvența notei 1> <durata notei 1>
<frecvența notei 2> <durata notei 2>
...
-1

Frecvența maximă este folosită pentru a calcula valoarea ce trebuie trimisă LED-urilor roșu și albastru. Un simplu apel al funcției map() pe frecvența notei curente nu era destul de satisfăcător deoarece unele cântece au frecvențe cu valori apropiate și nu se observau destul de bine fluctuațiile LED-urilor. Funcția folosită a fost (frecvențaCurentă ^ 4) / (frecvențaMaximă ^ 4) * 255.

La fiecare iterație a loop() se verifică dacă s-a primit o comandă de la Dabble, se evaluează viteza, se verifică selectarea unui alt cântec, se citește din fișier și se cântă nota curentă, dacă e cazul, și se evaluează direcția de mers.

De aceea a fost nevoie de un caracter special pentru a marca sfârșitul unui cântec. Am ales -1 deoarece este o valoare imposibilă pentru frecvență, dar poate fi citită ca un întreg, la fel ca celelalte valori din fișier.

Melodiile, codificarea notelor și a duratelor și calculul duratei unei note întregi au fost preluate din proiectul marcat Cântece Arduino din secțiunea Bibliografie/Resurse.

Pentru a delimita apăsările butoanelor de selectare a unui cântec am considerat ca nu vor există apăsări distincte la mai puțin de 500 de milisecunde.

Rezultate Obţinute

Mașinuța acceptă cântece din folderul songs de pe cardul SD care sunt numite “songX.txt”, unde X este numărul cântecului. Poate funcționa și cu card și fără și poate cânta și dacă bateriile pentru motoare sunt deconectate.

Conactarea buzzerului și a LED-urilor roșu și albastru

Conectarea modulului Bluetooth și a driverului L293D

Conectarea motoarelor și a roților la driver

Montajul electric

Teste filmate


Videoclipul de prezentare

Prezentare PM Fair (pptx)

Concluzii

Un proiect foarte interesant, la care am avut de căutat și de adaptat diverse soluții pentru probleme clasice de Arduino. M-am distrat facăndu-l și obținerea rezultatului final mi-a oferit o satisfacție foarte mare.

Dificultăți la care nu m-am așteptat:

Download

Formatul arhivei singing_car.zip:

Jurnal

19-20.04.2020


21.04.2020


23.04.2020


25.04.2020


16.05.2020


20.05.2020


22.05.2020 - 24.05.2020


25.05.2020 - 26.05.2020


27.05.2020


28.05.2020 - 29.05.2020


01.06.2020 - 02.06.2020


03.06.2020

Bibliografie/Resurse