This is an old revision of the document!


Sonar pe baza de microfon unidirectional

Introducere

Proiectul prezintă un mini-robot mobil care utilizează un microfon unidirecțional pentru a detecta o sursă de sunet cu o frecvență specifică. Robotul se orientează către direcția din care amplitudinea semnalului audio recepționat este maximă, folosind un algoritm simplu de scanare și localizare

Descriere generală

Schema bloc: [Senzor audio (microfon)] → [Amplificator semnal audio] → [Microcontroler (Arduino Uno)] → [Algoritm detecție frecvență și amplitudine] → [Control motoare pentru orientare]

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.

Hardware Design

Descriere module:

  • Microfon unidirecțional: captează sunetele din fața robotului și reduce zgomotul de fundal din alte direcții.
  • Amplificator audio: crește nivelul semnalului de intrare pentru a putea fi procesat corect de ADC-ul microcontrolerului.
  • Microcontroler (Arduino MEGA 2560): evaluează amplitudinea semnalului audio și controlează motoarele pentru orientarea robotului.
  • Motoare DC.

Software Design

* Mediu de dezvoltare: Aplicația este dezvoltată în Arduino IDE, folosind platforma Arduino Mega 2560. Codul este scris în limbaj C++ cu suportul bibliotecilor Arduino standard.

* 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:

  • Algoritmul Goertzel: este implementat pentru analiza frecvenței dominante dintr-un semnal audio. Acesta este eficient pentru identificarea unei anumite frecvențe într-un semnal digitalizat.
  • Citirea semnalului audio: se face de pe pinul analogic A0, cu o frecvență de eșantionare de 9 kHz. Sunt colectate 256 de probe.
  • Comunicare serială:
    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ă.
  • Controlul fluxului: logica programului se bazează pe o buclă principală (loop()), în care sunt alternate etapele de:
    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.

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

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ă ;-).

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.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2025/rnedelcu/matei.popescu1811.1747723279.txt.gz · Last modified: 2025/05/20 09:41 by matei.popescu1811
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0