This shows you the differences between two versions of the page.
pm:prj2022:ncaroi:masinuta_bluetooth [2022/05/21 12:58] sebastian.pitur |
pm:prj2022:ncaroi:masinuta_bluetooth [2022/05/27 19:55] (current) sebastian.pitur |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Masinuță teleghidată bluetooth ====== | + | ====== Masinuță teleghidată Bluetooth ====== |
===== Introducere ===== | ===== Introducere ===== | ||
Line 33: | Line 33: | ||
== Schema electrica == | == Schema electrica == | ||
- | {{:pm:prj2022:ncaroi:bth_car_schema_electrica.png?800|}} | + | {{:pm:prj2022:ncaroi:bth_car_schema_electrica.png?600|}} |
===== Software Design ===== | ===== Software Design ===== | ||
Line 39: | Line 39: | ||
== Mediu de dezvoltare == | == Mediu de dezvoltare == | ||
<note tip> | <note tip> | ||
- | * Arduino IDE [1](https://downloads.arduino.cc/arduino-nightly-windows.zip) | + | * Arduino IDE [1](https://downloads.arduino.cc/arduino-nightly-windows.zip) |
- | * Vim (external editor) [2] (https://github.com/vim/vim-win32-installer/releases) | + | * Vim (external editor) [2] (https://github.com/vim/vim-win32-installer/releases) |
- | * Librarii folosite in EAGLE: "Bluetooth HC-05.lbr" [3] | + | |
</note> | </note> | ||
+ | == Librării şi surse 3rd-party == | ||
<note tip> | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | + | * Librarie EAGLE "Bluetooth HC-05.lbr" [3] |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * Librarie EAGLE "sgs-thom.lbr" [4] |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * Aplicatie Android "Circuits Ninja Robot Remote", aplicatie folosita pentru comunicarea dintre modulul bluetooth si telefonul Android [5] |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | </note> |
- | * (etapa 3) surse şi funcţii implementate | + | == Surse şi funcţii implementate == |
- | Pentru a trimite comenzi modulului Bluetooth HC-05, am folosit aplicatia de android “Bluetooth RC Controller”. Astfel, sunt setate urmatoarele comenzi (definite in fisierul utils.h): | + | <note tip> |
- | + | * "bth_car.ino" - sursa unde sunt implementate functiile urmatoare | |
- | 'F' - fata | + | * setup(): se seteaza modul pinilor folositi la comandarea driverului de motoare, se porneste comunicarea seriala cu un baud rate (9600) |
- | 'B' - spate | + | * loop(): se interpreteaza informatiile primite de la modulul bluetooth, apelandu-se in functie de caracterele primite una din functiile: stp, fwd, rev, lft, rght, sau se seteaza puterea controlata prin pwm a motoarelor |
- | 'L' - stanga | + | * stp() - masina sta pe loc, se trimite 0 prin pwm la motoare |
- | 'R' - dreapta | + | * fwd() - masina merge inainte, ambele motoare sunt polarizate pozitiv |
- | 'V' - activare mod “anti-coliziuni” | + | * rev() - masina sta pe loc, ambele motoare sunt polarizate negativ |
- | 'v' - dezactivare mod “anti-coliziuni” | + | * lft() - masina sta pe loc, motoarele au putere de rotatie diferite, virand stânga |
- | Comunicarea dintre HC-05 si placuta este facuta prin UART. In acest sens, am folosit implementarea pentru comunicate USART din laborator. In bucla while infinita din main, astept receptionarea datelor de la modulul HC-05 (aplicatia android trimite date la fiecare 50ms), controlarea motoarelor si a senzorilor ultrasonici fiind bazata pe aceste date. | + | * rght() - masina sta pe loc, motoarele au putere de rotatie diferite, virand dreapta |
- | + | ||
- | Tot in fisierul utils.h este definit si macro-ul STOP_DISTANCE, ce reprezinta distanta in cm (dintre masinuta si cel mai apropiat obiect din fata) la care masinuta isi va opri motoarele pentru a evita o posibila coliziune. | + | |
- | + | ||
- | Sunt folositi 2 senzori ultrasonici HC-SR04, fiind folositi pe rand, unul dupa altul (cand unul masoara distanta, celalalt asteapta, iar cand unul termina de masurat, celalalt preia task-ul de masurare). Motivul pentru utilizarea a 2 senzori HC-SR04 este unghiul mic de detectare a obiectelor (15 grade). Folosirea pe rand a celor 2 senzori este motivata de folosirea aceluiasi timer pe 16 biti. | + | |
- | + | ||
- | Modul de lucru al senzorului HC-SR04 este urmatorul (hc_sr04.h si hc_sr04.c): | + | |
- | + | ||
- | Setarea pinului conectat la trigger pe HIGH, asteptarea a 7-15us, setarea pinului conectat la trigger pe LOW. | + | |
- | Resetarea timerului. | + | |
- | Primirea unei intreruperi (echo pe INT0 sau INT1) si calcularea timpului scurs intre trigger si echo. | + | |
- | Calcularea distantei, folosind timpul de la pasul 3 si viteza sunetului. | + | |
- | Pasul 1 ii spune senzorului sa trimita un semnal ultrasunet (trigger), asteptand sa receptioneze acelasi semnal, dar reflectat de obiectele din directia trimiterii (echo). Timpul scurs de la trimitere pana la receptionare este calculat folosind TCNT1. | + | |
- | + | ||
- | Motoarele masinutei sunt controlate prin driverul L298N, interfatat in l298n.h si l298n.c. Virajul masinutei este bazat pe conceptul de “differential steering”. | + | |
</note> | </note> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | {{:pm:prj2022:ncaroi:bth_car_4660.png?300|}} | ||
+ | {{:pm:prj2022:ncaroi:bth_car_4661.png?300|}} | ||
+ | {{:pm:prj2022:ncaroi:bth_car_4662.png?300|}} | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Masina poate fi controlata remote, in una din directiile spate, fata, stanga, dreapta, la diferite intensitati de putere. |
</note> | </note> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | A fost un proiect prin care mi-am consolidat cunostintele asimilate in timpul laboratoarelor de PM, pe care l-am implementat cu placere. | ||
+ | Link demo: https://www.youtube.com/watch?v=eSyHG1FWbEw | ||
===== Download ===== | ===== Download ===== | ||
<note warning> | <note warning> | ||
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | {{:pm:prj2022:ncaroi:proiect_pm_sebastianpitur.zip|}} |
- | + | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | |
- | </note> | + | |
- | + | ||
- | ===== Jurnal ===== | + | |
- | + | ||
- | <note tip> | + | |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
</note> | </note> | ||
Line 99: | Line 81: | ||
<note> | <note> | ||
- | DataSheet: | + | DataSheet:\\ |
- | [0] https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf | + | [0] DataSheet: https://tinyurl.com/mzn796f4 \\ |
- | [1] https://downloads.arduino.cc/arduino-nightly-windows.zip | + | [1] Arduino IDE: https://tinyurl.com/4js4t6mv \\ |
- | [2] https://github.com/vim/vim-win32-installer/releases | + | [2] Vim https://tinyurl.com/43x3nj2e \\ |
- | [3] https://github.com/ErichStyger/mcuoneclipse/blob/master/Eagle/Library/Bluetooth%20HC-05.lbr | + | [3] "Bluetooth HC-05.lbr": https://tinyurl.com/2xfuzfdc \\ |
- | [4] https://github.com/chiengineer/Eagle-Libraries/blob/master/lbr-depricated/sgs-thom.lbr | + | [4] "sgs-thom.lbr": https://tinyurl.com/jr8dpnea \\ |
+ | [5] "Circuits Ninja Robot Remote": https://tinyurl.com/yc4zsjc7 \\ | ||
</note> | </note> | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||