Autor: Georgescu Ioana
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:
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ă.
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 |
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:
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.
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
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:
Formatul arhivei singing_car.zip:
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