This is an old revision of the document!
Utilizatorul poate sa emita un sunet pe orice frecventa, care av fi setata din CLI in robot. Acesta, dupa o apasare de buton va incepe o calibrare apoi, va detecta directia din care vine sunetul. La apasarea altui buton se va duce in acea directie pana la intalnirea unui obstacol. La apasarea altui buton, acesta se va intoarce in pozitia initiala.
* Librării și surse 3rd-party: Nu sunt utilizate librării externe (3rd-party). Se folosesc doar facilitățile standard oferite de Arduino (Serial, analogRead, etc.).
* Algoritmi și structuri implementate:
1) Utilizatorul introduce o frecvență țintă prin portul serial (UART). 2) Sistemul analizează semnalul audio și afișează frecvența dominantă detectată. 3) Dacă frecvența dominantă coincide cu frecvența țintă, se semnalează faptul că a fost detectată.
1) Citire din serial (polling) 2) Achiziție de date 3) Analiză spectrală
* Gasirea sursei sunetului:
1) Un program separat va performa o rotire de 360 de grade pentru a calcula timpul de rotire al robotului (t_rot) 2) Timpul va fi salvat in memoria EEPROM pentru a fi folosit in codul efectiv 3) Dupa intriducerea frecventei de detectat, robotul va incepe sa faca o rotire completa in care va analiza frecventele dectate si amplitudinile lor 4) In momentul detectarii frecventei tinta, va compara amplitudinea cu maximul curent si daca aceasta depaseste, va salva timpul de rotatie curent 5) Dupa efectuarea rotatiei, va calcula diferenta de timp dintre timpoul din EEPROM (t_rot) si timoul salvat in timpul rotatiei de dectare. 6) Diferenta va fi timpul de rotatie pe care il va face pentru a se orienta spre sursa.
* Funcții implementate:
goertzel(samples[], numSamples, targetFreq, samplingRate) Calculează magnitudinea unei anumite frecvențe în semnalul audio, folosind algoritmul Goertzel.
setup() Inițializează comunicarea serială și solicită frecvența țintă de la utilizator.
loop() Execută logica principală: citește date, calculează frecvența dominantă, compară cu frecvența țintă, trimite rezultat prin UART.
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.