Skocz do zawartości

"Elektroniczny patefon" na bazie czujnika odległości HC-SR04


Adder

Pomocna odpowiedź

(edytowany)

@SOYER Policzyłem sobie i częstotliwość próbkowania i zapoznałem z twierdzeniem Nyquista–Shannona. Na pewno zrobisz to lepiej.

Jakbyś chciał usłyszeć audiofilskie nagranie, to zachęcam do obejrzenia jeszcze raz teledysku. A jakbyś chciał podjąć się mierzenia prędkości tym czujnikiem, to zmierz się z tym problemem, a potem oceniaj wyciągnięte wnioski w kategoriach sukcesu lub porażki. 

Niech to. Straciłem cały wieczór na bezsensowne dyskusje i nerwy zamiast popracować nad programem. Jedyna cenna rzecz to te wyliczenia. Dzięki @ethanak

pomogłeś, ale jak wiedziałeś, to po co były te przepytywania ☹️. Uważacie mnie za sobie równych? Zielonkę po Kursie Arduino #1? Ehhh. 

Liczyłem tu na wsparcie, a nie uwagi podszyte sarkazmem. 

W sumie to jest mój projekt. Podzielę się nim jak skończę. Sam się wszystkiego nauczę, oprogramuję i zrozumiem. Nie potrzebuję już porad. Dzięki za pomoc! 

Edytowano przez Adder
  • Lubię! 1
Link do komentarza
Share on other sites

@Adder Niestety pogubiłem się w powyższej dyskusji, natomiast Kolega @marek1707 pytał Cię o minimalną częstotliwość, z jaką musiałbyś próbkować sygnał, aby móc go później odtworzyć 🙂 - tu musisz poczytać o twierdzeniu Shannona - mówi ono, że jeśli próbujesz sygnał analogowy, którego najwyższa składowa harmoniczna ma częstotliwość f_a; to próbkowanie musi przebiegać z częstotliwością większą od 2*f_a. Jeśli nie spełnisz tego warunku, otrzymasz zbiór punktów w osi czasu, ale próbując je interpolować, z dużym prawdopodobieństwem nie otrzymasz sygnału nawet trochę przypominającego tego, który próbkowałeś. Stąd przykład - przy niektórych plikach dźwiękowych znajduje się zapis 44,1kHz - i w oczywisty sposób nawiązuje ono do dwukrotności górnej granicy słuszalności ludzkiego ucha (20kHz). Kolega @marek1707 bardzo intuicyjnie to wytłumaczył - jeśli nie będzie fotografował wahadła z częstotliwością większą niż 2x częstotliwość drgań tegoż wahadła, nie jesteś w stanie ocenić tylko na podstawie tych zdjęć częstotliwości -  której w oczywisty sposób szukasz 😉

Jeśli chcesz się dowiedzieć czegoś więcej na w/w tematy, polecam hasło "sampling theorem"

  • Lubię! 1
Link do komentarza
Share on other sites

1 godzinę temu, Adder napisał:

po co były te przepytywania ☹️. Uważacie mnie za sobie równych?

Oczywiście, że nie. Ja na przykład wiem od przeczytania pierwszych Twoich postów, że mogę Cię zjeść na śniadanie i nawet mi się nie odbije. I właśnie dlatego zadaję pytania. Taki tu mamy sposób pomagania, że (nie licząc przypadków desperackich) za pomocą dobrych pytań wskazujemy kierunek zdobywania wiedzy. Przecież nie wyobrażasz sobie chyba, że ktoś Ci tu będzie tłumaczył teorię o próbkowaniu czy modulacji FM, wyjaśnione w setkach miejsc w sieci, z obrazkami, filmikami i komentarzem w pierdylionie języków. Od razu widać, że nigdy o tym nie słyszałeś więc w kolejnym poście proszę byś podał mi częstotliwość zbierania próbek mowy. Prosty przypadek. Przecież nie pytam bo nie wiem albo dlatego, że chcę wykazać Twoją niewiedzę (bo wiem, że nie wiesz), ale liczę na jakiś wysiłek i poszukiwania. Tak to działa. Dyskusja osoby bez kompleksów mogłaby wyglądać tak:

- Dobra, znalazłem, że dla mowy wymaga się 8kHz. Ja tyle nie uzyskam, nie ma na to szans. Może zatem będę przenosił tylko niskie tony?

- No niestety nie. Sygnał "szybszy" niż połowa częstotliwości próbkowania nie znika, tylko "odbija" się od Fs/2

- Nic nie rozumiem.

- To zobacz. Narysuj sobie sinusoidę, to najprostszy sygnał i nanieś na nią punkty Twojego próbkowania oddalone od siebie np. o 0.2 okresu. Możesz to rzecz jasna zrobić na kompie. W co się te punkty układają? W jakiś konstropaty sygnał o częstotliowści takiej samej jak Twoja sinusoida. Teraz musisz uwierzyć na słowo, że jeśli odfiltrujesz ten sygnał, to dostaniesz dokładnie taką samą sinusoidę jak ta wejściowa. Pewnie tak za dwa dni byłbyś w stanie zaprogramować jakiś filtr cyfrowy w Processsingu i przepuścić swoje próbki przez niego odtwarzając czystą sinusoidę. Nie święci garnki lepią. Tak działają wszystkie cyfrowe systemy audio, płyty CD, radio DAB itp. Ale wracamy do obrazka. Teraz rozrzedź próbkowanie i narysuj punkty w odległościach np. 0.45 okresu. To także (teoretycznie) wciąż pozwala odtworzyć oryginalną sinusoidę. No dobra, to przekraczamy magiczną granicę i próbkujesz sygnał powiedzmy co 0.6 okresu. To odpowiednik próbkowania dźwięku 1kHz z prędkością 1.66kHz. Jak układają się punkty? Popatrz na nie z daleka, może połącz liniami i odpowiedz albo poszukaj w literaturze w co powinny, jeśli Twój obrazek jest marny.

- Hm, wygląda na sygnał okresowy, ale częstotliwość jest podejrzanie niska.

- To teraz spróbuj próbkować co 0.9 okresu. Wynik widać jak na dłoni, prawda? Teraz to już całkiem ładna ta sinusoida, tylko jakaś taka.. rozwleczona?

No to masz odpowiedź. Wszystkie tony wyższe niż połowa częstotliwości zbierania próbek będą się (być może wielokrotnie) "odbijały" od granic 0Hz i Fs/2 i robiły za dodatkowe dźwięki nie mające nic wspólnego z oryginalnymi. I co najgorsze, po spróbkowaniu będą nie do odróżnienia ani nie do odfiltrowania z tego "poprawnego" zakresu. Próbkując za wolno bezpowrotnie straciłeś szansę na odtworzenie oryginalnego sygnału i dostajesz szumokakofonię. Proste sygnały typu sinusoida leżące poza pasmem Fs/2 będą zamieniały się na proste sinusoidy o innych częstotliwościach, ale skomplikowane sygnały audio zamienią się na kompletną kaszanę. Na nic Twoje zaklęcia i unoszenie się honorem. Przyjmij tę bolesną nauczkę na klatę, bo nie każda działalność R&D - także w dorosłym życiu - kończy się sukcesem. Rozkminianie problemów "bojem" jest fajne i może być radosne (szczególnie przy użyciu saperki), dopóki nie trafiasz na ścianę betonowego schronu. Wtedy bez przygotowania artyleryjskiego lub nawet wspacia z powietrza nie masz szans. A Ty do tej walki nie przygtowałeś się zupełnie a co gorsza, brniesz dalej próbując wydłubać swoją saperką dziurę w żelbetonowym schronie.

http://www.danbullard.com/dan/aliasing.html

PS. Zrozum, nikt tu nie twierdzi, że urządzenie analizujące odległość do membrany nie ma prawa działać. Jeśli spełnisz wymagania teorii i będziesz nadawał w swoim głośniku np. czyste tony z syntezatora MIDI (fortepian w fazie SUSTAIN) o bardzo niskich częstotliwościach i niewielkich amplitudach, oraz jeśli będziesz wyzwalał pomiary czujnika dokładnie co stały, określony czas (to bardzo ważne, zastanów się jak to zrobić) to prawdopodobnie możesz "złapać" takie dźwięki tym swoim cudem i zapisać je w komputerze. Wystarczy tylko rozumieć co się robi i znać ograniczenia. To próbowaliśmy Ci przekazać.

  • Lubię! 3
  • Nie zgadzam się! 1
Link do komentarza
Share on other sites

7 godzin temu, Adder napisał:

Niech to. Straciłem cały wieczór na bezsensowne dyskusje i nerwy zamiast popracować nad programem

No właśnie niewłaściwe podejście. Gdybyś chciał słuchać kolegów to być może zaoszczełdził byś ze 2 tygodnie bezsensownych prób i skupił się na czymś co da się wycisnąć z tego czy innego projektu.

  • Lubię! 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

(edytowany)

@wn2001 Dziękuję. Wczoraj poczytałem trochę o tym zagadnieniu. Policzyłem teoretyczną częstotliwość próbkowania. Zrobiłem nagranie i policzyłem ilość otrzymanych odczytów. 

@marek1707 Bardzo dziękuję panie Marku. Rozświetlił mi pan w mojej pustej mózgownicy. Teraz chcę to wszystko zobaczyć na własne oczy. Choćby dlatego kopię dalej. Co mi pozostało? 🙂  

@SOYER Trzeba jeszcze słuchać ze zrozumieniem. Żeby rozumieć trzeba mieć wiedzę. Jeśli jej brakuje trzeba ją zdobyć. Albo poprzez zapoznawanie się z teorią - nudne i nie ma gwarancji zrozumienia, albo przez doświadczenie - ciekawe, a rozwiązanie jest ostateczne i jednoznaczne. 

 

Ogólnie bardzo wszystkim jeszcze raz dziękuję. Nie będę już jednak tutaj nic wrzucał, dopóki nie skończę zadania. Liczę jednak na Waszą pomoc jakbym gdzieś utknął. Co jest bardzo prawdopodobne. Dobrego dnia!

Edytowano przez Adder
dodanie komentarza
  • Lubię! 1
Link do komentarza
Share on other sites

16 godzin temu, Adder napisał:

Chyba zależy od natężenia dźwięku?

Im głośniej tym większa?

Ile? Zależy od membrany. Folia spożywcza owinięta wokół głośnika lata na kilka milimetrów. 

Mylę się?

Dobre pytanie. Kiepska. Głośniki muszą być mocno rozkręcone. Stąd protesty rodziny. 

Cześć,

ja wiem - minimalna rozdzielczość tego czujnika to (w warunkach idealnyach) wynosi 3mm. Wychylenie membran dobrych głośników 100W to max. 8 mm (przy pełnej mocy). W normalnych warunkach (zakłócenia akustyczne w otoczeniu) myślę, że minimalna rozdzielczość tego czujnika to będzie z 5mm. No chyba, że kolega @Adder ma audiofilskie głośniki o mocy z 300W (takie za kilkadziesiąt tysięcy złotych - tam wychylenia membran są wyższe). Też jestem ciekaw nagranych próbek (plików dźwiekowych).

Pozdrawiam

 

Edytowano przez FlyingDutch
  • Lubię! 1
Link do komentarza
Share on other sites

25 minut temu, FlyingDutch napisał:

Wychylenie membran dobrych głośników 100W to max. 8 mm (przy pełnej mocy).

Przy jakiej częstotliwości? Nie mów że przy 3 kHz (koniec minimalnego pasma dla mowy)

Link do komentarza
Share on other sites

A może zmienić metodę pomiarową? Intuicyjnie nasuwają się metody odbiciowe, których zakres jest znacznie mniejszy (kilka milimetrów), ale znacznie bardziej czułe (oczywiście nie ma nic za darmo - światło zewnętrze może takowy pomiar zakłócić, ponadto jest silnie nieliniowy) 😉

Link do komentarza
Share on other sites

5 minut temu, wn2001 napisał:

A może zmienić metodę pomiarową?

Ale to ma być na HC-SR04 - gdyby nie to, proponowałbym mikrofon (zdaje się że już o tym wspominałem).

Link do komentarza
Share on other sites

Może zacznijmy od teoretycznych ograniczeń samej metody z echem? Skoro HC-SR04 potrzebuje min. 10us impulsu do startu, to załóżmy że to jest pierwsza składowa. Potem mamy wysłanie 8 impulsów sondujących czyli powiedzmy 200us. Jeśli czujnik będzie ustawiony w odległości 10cm od membrany, to czas przelotu tam-i-z-powrotem wyniesie ok 600us. Do tego jakiś margines bezpieczeństwa i mamy wszystkiego razem 1ms. Możemy zatem próbkować 1kHz. Do mowy nie wystarczy, ale sterylne niskie dźwięki powinny przejść. Jak pisałem, po próbkowaniu nie da się już robić antyaliasingu, więc sygnał w głośniku powinien być pasmowo ograniczony do 200-300Hz. Można sobie przygotować takie próbki na kompie w jakimś programie do manipulacji plikami audio i potem to odtwarzać. To oryginalnie może być sygnał mowy, choć de facto niewiele z niej zostanie. Z muzyki z resztą też.. Pytanie jakim szumem będzie obarczony sygnał wyjściowy z czujnika SR04. Podejrzewam, że ogromnym. Być może nawet stosunek sygnału do szumu będzie 0dB lub gorzej i dlatego wprost tego odtwarzać się nie da. Natomiast na pewno FFT pokaże oryginalny prążek (to w końcu zestaw filtrów) pod warunkiem, że sygnał wejściowy będzie czysty, tj. gdy wiemy czego się spodziewać. Dlatego sugeruję przygotowanie do testów czystych sinusoid np. 40 czy 70Hz i takich składowych szukać w złapanych próbkach. Na pewno trzeba zrobić wszystko by ograniczyć możliwe źródła szumu: jitter próbkowania czyli wyzwalanie czujnika ze sprzętowego wyjścia timera (OC2?) oraz łapanie długości sygnału zwrotnego także na sprzętowe wejście Input Capture (IC1?). 

Trzeba pamiętać, że poruszająca się w przód i w tył membrana robi modulację FM padającego sygnału. To z jednej strony wpływa na działanie czujnika SR04, bo nie dostaje swoich 40kHz a coś przesuniętego i to raczej przypadkowo w górę lub w dół - i dlatego prosiłem Autora by zastanowił się jak widmowo wygląda sygnał wracający z membrany głośnika (ale jak grochem o ścianę) a z drugiej daje szansę odbioru dźwięku z fali ciągłej 40kHz padającej na głośnik czy szybę. To już nie jest czujnik SR04 bo one tego nie umie, a i demodulator FM (cyfrowy? w procesorze? STM32?) to już troszkę wyższa szkoła jazdy, ale na mojego nosa da się. Tylko hm.. po co?. To już lepiej ze światłem lub np. podczerwienią, bo i odległość może być większa i modulacja FM praktycznie nie istnieje - mamy tylko modulację amplitudy. Do tego niestety potrzebna jest dobra optyka, bo o ile nawet tania dioda laserowa potrafi nadawać w 1° o tyle odbiornik musi patrzeć na ten jeden punkt a nie na cały świat przed nami (stosunek sygnału do szumu). Także ogniskowa 1000mm chyba nie będzie przesadą..

EDIT: Aby odtwarzać próbki z SR04 na sprzęcie audio, trzeba je najpierw upsamplingować do min 8kHz (najlepiej od razu do 44.1) a potem koniecznie ostro ograniczyć pasmowo do 200-300Hz. Wtedy jest szansa, że coś da się usłyszeć. Jeśli próbki złapane na 1kHz wyślemy do głośnika, słychać będzie głównie 1kHz 😞 To wszystko da się zrobić w Audacity itp.

Edytowano przez marek1707
  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

(edytowany)

Dzień dobry!

Przez ostatni tydzień zgłębiałem teorię fal. Myślę, że wreszcie ją zrozumiałem, przynajmniej na tyle, aby pójść dalej z projektem, choć szczerze mówiąc sądziłem, że na wieki utonę w tajemnicach funkcji sinus. Wczoraj przyśniło mi się koło, cały dzień o tym myślałem i olśniło mnie, że amplituda fali (wychyleń membrany) obarczonej zresztą błędami pomiaru wynikającej z niedoskonałości czujnika, na której się tyle czasu bez sensu skupiałem, nie ma dla tego projektu żadnego znaczenia. Wtedy wszystko stało się banalnie proste. Dzisiaj zrobiłem nowe pomiary, inaczej do nich podszedłem i inaczej spojrzałem na rezultat. Oto wyniki:

529476178_Zrzutekranu2021-02-24o08_42_59.thumb.png.e1daf85f6478d5be838e336ce8a1f834.png

Pierwszy wykres przedstawia (odpowiednio przetworzony - jak? Tajemnica... 😄) efekt pomiaru fali o częstotliwości 50HZ drugi 100Hz. Wygląda na to, że wreszcie ruszyłem do przodu, a do odtwarzania wystarczy na Arduino zwykła funkcja tone(). 

Edytowano przez Adder
edycja
Link do komentarza
Share on other sites

(edytowany)

Swoją drogą na dzisiaj jestem w stanie wycisnąć z czujnika 245,99 Hz. To mało, ale jeszcze się nad tym nie skupiałem, może uda się trochę popracować z programem, żeby uzyskać więcej. Na razie, do budowy modelu odtwarzania bardzo niskich częstotliwości wystarczy. Świetnie byłoby mieć chociaż z 1kHz, ale niestety czarno to widzę. 

Edytowano przez Adder
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!

Anonim
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.