Skocz do zawartości

Soundfollower - podłączenie mikrofonów pod Atmega8


Artisto

Pomocna odpowiedź

Witam.

Pragnę zbudować robota który za zadanie będzie miał jechanie w kierunku źródła dźwięku.

Konstrukcja będzie opierać się na uC Atmega8.

Dlatego mam pytanie - czy podłączenie mikrofonów przez wzmacniacz LM741 jak na dołączonym obrazku pozwoli mi uzyskać informacje o natężeniu dźwięku z mikrofonu? Sygnał ze wzmacniacza leci do wejścia ADC Atmegi.

cUCRaeQ.png

Pozdrawiam.

__________

Komentarz dodany przez: Treker

Link do komentarza
Share on other sites

1. Nie, nie pozwoli. Musisz wymyślić zupełnie inny układ.

2. Kierunku przychodzenia dźwięku nie określasz za pomocą natężenia tylko fazy dwóch (lub więcej) sygnałów. To zadanie dla dużo szybszego procesora i atmega, nawet 16MHz może mieć z tym kłopoty. Można to przemyśleć, ale pierwsze co przychodzi do głowy to liczenie korelacji i jest obliczeniowo bardzo kosztowne. Przy naprawdę wielu wejściach można spróbować użyć tzw. spatial-FFT, ale to też kosztuje dużo mocy. Może najprostsze byłoby zapomnienie o przetwarzaniu DSP a np. wykrywanie opóźnień między impulsami, np. od pojedynczego klaśnięcia. Wtedy dwa mikrofony rozstawione odpowiednio daleko (10cm?) od siebie mogłyby wykryć różnicę czasu w dotarciu impulsu do każdego z nich. ATmega by to zmierzyła i już. To jednak nie zadziała na mowę ani wołanie. Można też spróbować z sygnałami mającymi dobrą autokorelację, np. gwizdem, badając chwile (tj. opóźnienia) przejść przez zero.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Dlaczego kierunku dochodzenia dźwięku nie mogę za pomocą natężenie dźwięku?

Jeżeli mam cztery mikrofony, i wiem gdzie względem siebie lezą, to na podstawie informacji o natężeniu dźwięku jestem w stanie z prostych wzorów wyznaczyć odległości z jakiej dany dźwięk dociera do danego mikrofonu, zgadza się?

Jak dla mnie to chyba nie ma sensu mieszać tutaj tak złożonych obliczeń jak korelacje sygnałów itp.

Zależy mi tylko i wyłącznie na tym, by robot mógł ruszyć w kierunku dźwięku, nie musi tego robić super-dokładnie. Jeżeli proste aplikacje na telefon potrafią wykorzystać jego mikrofon do pomiaru natężenia dźwięku, to czemu zwykły mikrofon i Atmega8 mają nie dać sobie rady?

Link do komentarza
Share on other sites

Hm, chyba mylisz dwie rzeczy: pomiar natężenia dźwięku robiony jednym mikrofonem - czego przykład podałeś w aplikacji telefonu, z pomiarem różnic natężenia mierzonych kilkoma mikrofonami. Pierwsze jest proste - wystarczy liczyć energię sygnału, ale w drugim musisz mieć kilka torów przenoszących istotnie różne amplitudowo sygnały. Po pierwsze musisz użyć mikrofonów kierunkowych a większość tych kupowalnych to zwykłe elektretowe wszechkierunkowe. Możesz próbować bawić się w robienie jakichś przysłon itp, ale to zawsze niesie ryzyko zrobienia rezonatora na pewną częstotliwość (i jej harmoniczne) robiącego za filtr pasmowy. Mikrofony to nie diody LED a dźwięk to nie światło, gdzie odchylasz się o 45° od osi i masz spadek amplitudy 100 razy.

Wyobraź sobie to w rzeczywistości: do robota dochodzi mnóstwo dźwięków, które Twój mózg wycina z obrazu akustycznego bez Twojej wiedzy. Dzięki temu wydaje Ci się, że jest cicho a Ty słyszysz tylko swojego rozmówcę w tłumie lub radio stojące obok pracującej pralki. Tak nawiasem mówiąc my też rozpoznajemy kierunek przychodzącego dźwięku po fazie. Ani wzmacniacz mikrofonowy ani procesor (ten procesor) nie umieją wycinać tła. Tak więc już na dzień dobry mamy szum całego toru plus tło akustyczne pomieszczenia. Do tego dochodzi hałas samych napędów robota - wielokrotnie silniejszy niż wszystkie inne czynniki. No i do tego dodajesz Twój specjalny dźwięk, który Ty słyszysz z definicji bardzo dobrze a który dolatuje do robota z daleka nie tylko drogą bezpośrednią, ale także przez wielokrotne odbicia od ścian i innych sprzętów w pokoju. Jak bardzo musi być mocniejszy od tych wszystkich śmieci by po pierwsze w ogóle został zauważony a po drugie by dało się przy 10-bitowym przetworniku odróżnić energie w kilku kanałach i jeszcze coś z tego policzyć? Owszem, na kartce papieru to wydaje się proste - masz 4 mikrofony, każdy odbiera czysty sygnał tylko ze swojego stożka przestrzeni (a resztę wielokrotnie słabiej), żadnych odbić, ech itp, liczymy energie x4, proste obliczenia i mamy kierunek - choćby przybliżony. No nie wiem, próbuj..

Liczenie korelacji to pierwszy, narzucający się sposób wyznaczenia fazy - nie wiem co Cię w tym tak oburza. Niestety przy tak niskim próbkowaniu jaką dysponuje przetwornik ATmegi (kilkanaście kHz podzielone na 4 kanały) będziesz musiał zrobić porządne filtry antyaliasingowe a moc obliczeniowa jest na tyle mała, że system mógłby pobierać komplet próbek z 4 kanałów tylko co jakiś czas a potem je obrabiać - to nie jest nie do zrobienia, choć rozdzielczość będzie słaba. Dlatego zaproponowałem metodę impulsową - z klaskaniem - bo ta wydaje się dużo prostsza w realizacji a wynik pewniejszy. Liczenie czasów rzędu dziesiątek us leży w możliwościach tego procesora. Wtedy także prosty wzór i masz kierunek. Klaśnięcia lub inne podobne dźwięki "wybuchowe" niosą ogromną energię w szerokim paśmie i krótkim czasie - łatwo zrobić układ lub program odróżniający je od reszty śmieci a ponieważ właśnie są szybkie - łatwo wyznaczyć jednoznacznie chwilę ich pojawienia się.

Tak czy tak, musisz trochę poczytać o wzmacniaczach operacyjnych lub wziąć gotowy schemat z sieci - niekoniecznie na takich elementach. Wystarczą dwa-trzy tranzystory, choć gdyby przyszło do robienia filtrów, takie wzmacniacze są wygodne. To co pokazałeś jest kompletną pomyłką. Poradzisz z tym sobie? Nie wiem jakiej podpowiedzi oczekujesz.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Wielkie dzięki za tak szerokie wyjaśnienie tego zagadnienia.

Jako, że to mój pierwszy projekt, to chyba jednak pójdę w kierunku liczenia czasu dotarcia sygnału z dźwięku o krótkim czasie trwania i o dużej energii.

A w przyszłości mogę próbować zrobić bardziej zaawansowanego robota, który będzie opierał się na różnicy faz.

Więc, jeżeli chcę policzyć czas dotarcia sygnału do mikrofonów, to wystarczy takie podłączenie jakie jest obecnie, czy coś dorzucić ew. usunąć?

Pozdrawiam.

Link do komentarza
Share on other sites

Chyba zaczynam się powtarzać: nie masz żadnego układu. To co pokazałeś nie zadziała z tak wielu powodów, że nawet nie warto ich tu wypisywać.

Jeżeli chcesz to wymyślić sam, spróbuj przejść następującą drogę:

1. Dowiedz się jakie istnieją rodzaje mikrofonów, czym się różnią, ile kosztują i które z nich jesteś w stanie kupić. Porównaj charakterystyki kierunkowe, sygnały wyjściowe, przenoszone pasma, ceny oraz fizyczne wielkości. Z tego wyjdzie Ci który typ jest sens tu stosować.

2. Zastanów się co Twój układ ma robić. Jaki będzie sygnał wejściowy tj. z wybranego mikrofonu i co chcesz uzyskać na wyjściu, czyli co chcesz mieć na wejściu procesora. Z tego wyjdzie jakie bloczki będziesz musiał wstawić, co będą robiły i jakie powinny mieć parametry. Policz sobie wzmocnienie, oszacuj pasmo itp.

3. Zacznij czytać o wzmacniaczach. Podstawowe układy pracy tranzystora, polaryzacja, sprzęganie stało- i zmiennoprądowe, wzmacniacze wielostopniowe itd. Możesz też pójść inną drogą i zdecydować się na wzmacniacze operacyjne. Tutaj skup się na podstawowych układach pracy i osiągach pod kątem Twoich konkretnych potrzeb. Jeżeli w pkt 2 dojdziesz do wniosku, ze potrzebujesz jakiegoś filtrowania w dziedzinie częstotliwości - dojdą jeszcze filtry. Jeżeli będzie potrzebna dyskryminacja amplitudy - zajrzyj też do rozdziału o komparatorach itd..

4. Sklej to wszystko w całość i opisz swoje przemyślenia, lub zacznij zadawać bardziej precyzyjne pytania.

Możesz też spróbować przeszukać sieć pod kątem podobnych tematów. Wielu ludzi zrobiło z pewnością układy czułe na klaśnięcie np. do wyłączania światła - to był swoim czasie popularny temat wśród młodych adeptów elektroniki. Tam musi być przecież jakiś mikrofon, wzmacniacz i detektor "strzału". Dalej to już może być Twój procesor. Dwa (cztery?) takie układy będą przenosić to co dostaną od swojego mikrofonu. Jeżeli rozmieścisz je w pewnej odległości (w kwadracie?) to dostaniesz 2 (4?) sygnały jakoś przesunięte. Zastanów się jak możesz "złapać" w procesorze chwile ich pojawienia się, bo dalej - jak już sam napisałeś - prosty wzór i gotowe.

Link do komentarza
Share on other sites

Przepraszam, jeżeli zadaję za dużo zielonych pytań, ale pierwszy robot zawsze jest najtrudniejszy 😉 (jakby potem miało być łatwiej...)

Znalazłem taki układ oparty na Atmedze8

http://lucidscience.com/pro-nikon%20clap%20snap-2.aspx

Detektor klaśnięcia.

Czy ten układ spełni swoje zadanie?

Kwestią oprogramowania będzie już wyczulenie robota na podążanie za dwoma klaśnięciami, zamiast za jednym, zgadza się?

Pozdrawiam.

Link do komentarza
Share on other sites

A jakie zadanie przed nim postawiłeś? Jeżeli ma to być interfejs między mikrofonem a procesorem, to każdy prosty wzmacniacz się nada. Może być LM386, może być wiele innych.

OK, masz już impuls klaśnięcia doprowadzony do portu. Jak chcesz poznać kierunek skąd przybył dźwięk? Chyba musisz zrobić co najmniej trzy takie układy (ale procesor wystarczy jeden 🙂 ) lub więcej. Jeżeli rozmieścisz je np. w trójkącie lub w kwadracie i każdy z mikrofonów będzie "patrzył" np. do góry, to masz trzy/cztery sygnały o mniej więcej tej samej amplitudzie ale różniące się chwilą, w której dotrą do procesora. Zakładając, że odległość między mikrofonami to np. 10-15cm i znając prędkość dźwięku w powietrzu policz jakie będzie maksymalne opóźnienie ostatniego sygnału względem pierwszego. Wszystkie inne będą wartościami pośrednimi. Wymyśl też dobry algorytm łapania momentów pojawienia się sygnałów. Na pewno wykorzystasz do tego któryś timer procesora. Zastanów się z jakim zegarem powinien pracować żeby dać sensowną rozdzielczość pomiaru i jaką musi mieć pojemność, by nie przepełnić się nawet przy najdłuższym czasie. Na początku (gdy jeszcze nic nie przyszło) musisz skanować wszystkie wejścia. Pierwszy impuls będzie sygnałem odniesienia (będzie miał czas zerowy). Zapamiętaj które to wejście i od tej chwili musisz już sprawdzać tylko pozostałe wejścia. Po przyjściu kolejnego impulsu zapamiętujesz czas i skanujesz coraz mniej wejść aż do złapania wszystkich czasów.

Przy 4 mikrofonach w kwadracie będziesz miał trzy czasy, przy trzech w trójkącie - dwa. Na tej podstawie powinieneś umieć określić kierunek. Jeśli któreś wejście nie przyśle swojego impulsu tzn. jeśli czas oczekiwania na niego będzie dłuższy niż jakaś wartość maksymalna to znaczy, że pomiar nie jest możliwy, resetujesz algorytm skanowania i czekasz na kolejne klaśnięcie.

Ciekaw jestem Twoich wniosków i wyników podobnej analizy przeprowadzonej samodzielnie i bardziej szczegółowo - w końcu to Twój projekt. Napisz jak dokładnie zamierzasz to zrobić.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

No tak, to, że potrzeba więcej niż jeden taki układ to pewne ^.^ Ale czy ten jest dobry? (znaczy, pewnie jest skoro ktoś go opisał i wydaje się też z wyglądu być w porządku)

Też nie widzę na nim jakiegoś nadmiaru niepotrzebnych elementów - w sensie, głównie chodzi mi o sam element z mikrofonem, wzmacniaczem i wejściem do Atmegi. Bo pozostałą część schematu mam już opracowaną.

marek1707, szczerze mówiąc, to miałem zamiar zrobić to dokładnie jak opisujesz ;] Tj. oczekiwanie na pierwszy sygnał z któregoś z mikrofonów, a potem liczenie czasów dotarcia kolejnych i z tego wyliczanie kierunku przyjścia dźwięku, potem przeliczenie tego na to przez jaki czas i na który silnik dać napięcie by obrócić robota i po zakończeniu tego, sygnał na oba silniki by gnał do przodu.

A do tego chciałbym jeszcze dorzucić by znowu był wyczulony na dwa klaśnięcia które go zatrzymają + auto-stop po przejechaniu 2-3 metrów.

W ten sposób będę mógł mu "dać" informację o odległości od źródła dźwięku ;]

Link do komentarza
Share on other sites

Układ na LM386 jest ekstremalnie prosty. Żadnego filtrowania po stronie analogowej. Każdy dźwięk głośniejszy niż pewien poziom będzie widziany przez procesor jak ciąg impulsów o częstotliwości takiej jak oryginalny sygnał. Klaśnięcie będzie prawdopodobnie pojedynczym impulsem z racji swojego "wybuchowego" charakteru, ale gwarancji żadnej nie ma. Dlatego jedynym dyskryminatorem odróżniającym dobre od złego może być tylko próg komparacji wejść procesora, czyli odróżnianie po amplitudzie. Będziesz musiał ustawić małą czułość toru a klaśnięcia będą musiały być po prostu wystarczająco silne tak, by wyraźnie wyróżniały się na tle reszty.

Najlepszym rozwiązaniem byłby tu cyfrowy filtr dopasowany, "nauczony" wyglądu impulsu klaśnięcia - ten wykrywałby odpowiedni sygnał zagrzebany w szumie otoczenia, ale to bez szybszego procesora będzie chyba niemożliwe więc jeśli nie ma co się lubi, trzeba lubić co się ma. Radziłbym dodać choć analogowy filtr górnoprzepustowy taki, by wycinał wszystko co wolniejsze, np. mowę czy odgłosy tła.

Mam nadzieję, że nie zmarnowałeś czasu i wiesz już co nieco o wzmacniaczach, filtrach itp. Dzięki temu możesz teraz samodzielnie wymyślić dużo lepszy układ wejściowy.

Link do komentarza
Share on other sites

http://postimg.org/image/i6kvy8x6f/

Podmieniłem ten układ na tamten z linku, który ma wykrywać klaśnięcia.

Nie dodałem filtru górnoprzepustowego bo nie bardzo wiem czy to ma być gotowy układ już jakiegoś typu czy należy taki zbudować z podstawowych elementów (~jak na obrazku - http://pl.wikipedia.org/wiki/Filtr_g%C3%B3rnoprzepustowy) dla konkretnie dobranej częstotliwości => dobranego C i R ew. modyfikowanego R by mieć możliwość dopasowania częstotliwości do klaśnięcia?

__________

Komentarz dodany przez: Treker

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.