This is an old revision of the document!
Am pornit de la ideea creării unei jucării controlate de la distanță.
Consider că este un proiect util cand vine vorba de activități recreative.
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):
'F' - fata 'B' - spate 'L' - stanga 'R' - dreapta 'V' - activare mod “anti-coliziuni” 'v' - dezactivare mod “anti-coliziuni” 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.
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”.
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.