Skocz do zawartości

Pomiar prędkości z czujnikiem odległości HC-SR04


Pomocna odpowiedź

(edytowany)

@Gieneq Dziękuję za podpowiedź 😀 Myślę jednak, że przeceniasz moje możliwości. Ja stawiam dopiero pierwsze kroki w adaptacji C na Arduino, a co tu myśleć o wprowadzaniu nowego języka... Przerośnie mnie to. Dziękuję również, za zwrócenie uwagi na bardzo ważną rzecz jaką jest platforma sprzętowa na jaką piszemy program. Dzisiaj, kiedy w smartfonie można obrabiać video, łatwo zapomnieć co może procesor w rodzaju AVR. Lepiej np. policzyć na boku ile wynosi np. cos(30stopni) i wpisać do programu przybliżenie dziesiętne, niż obciążać system w sumie zbędnym obliczeniami. 👍👍   

Wracając do pomiaru. Dzisiaj uogólniłem trochę moją teorię efektywnego pomiaru prędkości przy użyciu HC-SR04 ("teorię Addera"😆) i zastanowiłem się jak będzie wyglądała soczewka optymalnego pomiaru dla jednego czujnika. Nie było to zaskoczeniem, ale wnioski są (dla mnie) ciekawe. Najpierw rysunek. 

 

872257952_soczewka1-D.thumb.png.2dc708302836a7f862e0ae027471063f.png

Soczewka jak można się domyślać ma tylko jeden wymiar i jest łukiem wyciętym z okręgu przez optymalny kąt pomiaru w odległości pomiaru od czujnika (CE).

Tym samym wiarygodny pomiar prędkości jednym czujnikiem nie jest możliwy (nie możemy obliczyć drogi - poruszający się obiekt pozostawi ślad jednopunktowy). Oczywiście jest jeden przypadek szczególny. Drogę możemy obliczyć zmieniając położenie soczewki w trakcie ruchu obiektu prostopadle do czujnika, ale ten przypadek szczególny nie jest interesujący, bo każdy na niego wpada natychmiast. Celem jest zmierzenie prędkości obiektu poruszającego się pod dowolnym kątem do czujnika. Aby tego dokonać, konieczne jest pewne oszustwo. Po prostu w praktyce należy nieznacznie pogrubić soczewkę (O ile? Trzeba zbadać eksperymentalnie!), tak aby, jej szerokość była większa niż jeden punkt. Oczywiście wtedy istnieje ryzyko, że obiekt będzie znajdował się w strefie pomiaru, ale wyjdzie z soczewki, ryzyko to będzie jednak bardzo małe (prawie pomijalne). Pogrubienie soczewki widać na rysunku. Otwiera się tu pewne pole dla eksperymentów, które zamierzam wykonać. Przedtem jednak, czeka mnie przebudowa całej idei programu, co z drugiej strony przyda się pod kątem planów dodania drugiego i trzeciego czujnika. 🙂 🙂 🙂 

PS. Python... Hmm.. Niebezpiecznie się nakręcam. 😉

Edytowano przez Adder
  • Lubię! 1
Link to post
Share on other sites

Dzień dobry, 

Dzisiaj udało mi się skonstruować podwaliny teoretyczne do wyznaczenia toru w jakim powinien poruszać się obiekt, aby uzyskać naprawdę fajne dane pomiarowe przy wykorzystaniu 1 czujnika. 

179361352_torruchu1czujnik.thumb.png.17feb3ee769a898f24ba941f09ee9126.png 

Założenia: 

1) Czujnik znajduje się w pkt. B.

2) Obiekt którego prędkość chcemy zmierzyć porusza się prostoliniowo po odcinku AE wewnątrz toru (zaznaczonego na niebiesko).

3) Czujnik robi 2 pomiary w czasie gdy obiekt porusza się po torze.

Aby pomiar był w miarę dokładny należy przygotować "urządzenie pomiarowe". Sprowadza się to do wyznaczenia przebiegu toru oraz ustalenia kąta pod jakim tor będzie obserwowany przez czujnik. Dla przyjętych w przykładzie na rysunku wymiarów toru kąt obserwacji musi wynosić 117.3 stopnia. Droga wyznaczana jest w oparciu o twierdzenia Carnota (po kilku niezbędnych przekształceniach). Znając drogę jesteśmy w domu...

Tak skonstruowane urządzenie "wyciska" w mojej opinii, wszystko co można zrobić z pojedynczym czujnikiem w kwestii pomiaru prędkości. Zapewnia ono, że obiekt znajduje się w strefie wiarygodnych pomiarów, a zaokrąglenia nie powinny wpływać na użyteczność otrzymanych wyników. 

Czas na roboty ręczne. 

 

Link to post
Share on other sites
Dnia 16.01.2021 o 15:30, Adder napisał:

w oparciu o twierdzenia Carnota (po kilku niezbędnych przekształceniach)

Twierdzenie cosinusów ok, to łatwe. Ale, brakuje jednego boku tworzącego kąt, jest tylko bok przeciwległy, kąt i jeden bok. Trzeba dodatkowo zbudować i rozwiązać równanie kwadratowe. Kurła, wreszcie ta matura na coś się przydaje... Myślałem, że już nigdy nie będę musiał się nad tym zmóżdżać, w dobie internetu, gdzie odpowiedź ma się za jednym kliknięciem i człowiek wszystko zapomina w sekundę, a tu taki przypadek 🤣😬😤😀

Czy programowanie musi być takie trudne? Uhhh... 😀😀😀

Link to post
Share on other sites
10 godzin temu, Adder napisał:

wreszcie ta matura na coś się przydaje

Wczoraj odnotowałem użycie twierdzenia Talesa, w projekcie przekombinowanego daszku w karmniku dla ptaków - wyznaczałem długość " połowy kleszcza":

image.thumb.png.4a440ca499d397e35847d1d39bf50e74.png

 

  • Lubię! 1
Link to post
Share on other sites
11 godzin temu, Adder napisał:

Czy programowanie musi być takie trudne?

Nie. W sumie źle napisałem. Programowanie nie jest trudne. Nad wyraz lekko mi to przychodzi. Wszystko się kompiluje prawie za pierwszym razem i działa jak powinno. Wyzwaniem dla takich nowicjuszy jak ja, jest modelowanie rzeczywistości. Cała Matematyka jaka za tym stoi. Tu nie ma drogi na skróty. Ją trzeba albo samemu odkryć, albo zrozumieć i zastosować coś co odkrył ktoś inny. Ciekawe, bardzo ciekawe...

Link to post
Share on other sites
(edytowany)

Dobry wieczór!

Skończyłem całą tę matematykę. 😅💪 Czy dobrze?🥶MATH.thumb.png.d069b41b99d9ebfb2b9558b300512caf.png

Teraz wiadomo, gdzie znajduje się obiekt w danej chwili. A stąd już policzenie drogi i czasu to drobiazg.

Przy obliczeniach założyłem, że czujnik zainstalowany w "urządzeniu pomiarowym" dostrzegł obiekt w odległości 11.

Jeśli wszystko gra - można zacząć to programować. Czyli, wreszcie najprzyjemniejsza część zadania ...🙂🙃🙂

Edytowano przez Adder
Link to post
Share on other sites
(edytowany)

Programik wyszedł mały i zgrabniutki. 

 DistancetoDetector=GetDistance();
  if (DistancetoDetector<=12.0 && DistancetoDetector>=10.0) {
  if (Distance1==0 && Distance2==0) {
  Time1=DetectionTime;
  Distance1=DistancetoDetector;
  } else if (Distance2==0 && DistancetoDetector<Distance1) {
    Time2=DetectionTime;
    Distance2=DistancetoDetector;
    DistancetoTrackend1=(-9.16+sqrt(83.9056-4.0*(100-Distance1*Distance1)))/2.0;
    DistancetoTrackend2=(-9.16+sqrt(83.9056-4.0*(100-Distance2*Distance2)))/2.0;
    Time=Time2-Time1;
    Distance=DistancetoTrackend1-DistancetoTrackend2;
    Speed=(1000.0/(Time))*Distance/100.0;
  }   
  }
  
  

Ale nieprawdopodobna mordęga jest z pracami ręcznymi. Ta kulka lata gdzie chce zamiast poruszać się po torze ....😡😂

Edytowano przez Adder
Link to post
Share on other sites

Powoli kończą mi się chrupki, ale zanim pójdę po nową paczkę muszę zapytać jak masz zamiar poradzić sobie z echami stałymi. Łatwo jest wykryć odległość do ściany w pustym pokoju, ale ja tu na zdjęciu widzę, że czujnik w swoim zasięgu będzie miał mnóstwo ciekawych krawędzi i płaszczyzn od których dźwięk odbija się znacznie lepiej niż od kulki. Jak zatem chcesz odróżnić echo kulki od całej reszty (bo tak prymitywny czujnik pokazuje tylko pierwsze echo wykraczające poza próg detekcji) oraz jak często chcesz robić pomiary, bo przecież po wygenerowaniu impulsu sondującego - mimo że nawet dostaniesz szybko jakąś odpowiedź - musisz poczekać aż wszystkie echa wrócą z pełnego zasięgu bo przecież one magicznie nie znikają gdy już nie jesteś nimi zainteresowany i w kolejnym cyklu nałożą się na kolejne odpowiedzi. Być może Twój egzemplarz czujnika (są różne wersje oprogramowania jego kontrolera) ma nawet jakieś ograniczenie na czas wygenerowania kolejnego impulsu.

  • Lubię! 1
Link to post
Share on other sites

Dzięki za zainteresowanie tematem! 🙂

1. Echa odbite. Założyłem, że obiekt będzie je zasłaniał, a program zarejestruje tylko czas i odległość obiektu (kulki) w strefie 10-12 cm od czujnika, bo to program tylko interesuje.. Teraz jak o tym wspomniałeś zacząłem się nad tym zastanawiać... Chyba jakiś trigger pomiaru by się przydał... Dwa precyzyjne strzały...

2. Częstotliwość pomiaru - myślałem nad tym. Czujnik wymaga min. 10 mikrosekund pomiędzy zmianami stanu pinów. Do tego dochodzą inne opóźnienia programowalne i nieprogramowalne. Nie potrafię ich obliczyć. 

Ogólnie rzecz biorąc, przyjąłem, że czujnik bezbłędnie wykryje, gdy obiekt pojawi się w strefie pomiaru, zmierzy mu czas pojawienia się i odległość, a potem strzeli drugi pomiar. Ale to nie jest takie proste, jakby się wydawało. Niewątpliwie tu mnie zagiąłeś ... 🙂 🙂 🙂 👍

 

 

Link to post
Share on other sites
46 minut temu, marek1707 napisał:

Powoli kończą mi się chrupki, ale zanim pójdę po nową paczkę muszę zapytać jak masz zamiar poradzić sobie z echami stałymi.

A, i teraz zaczynam pojmować skąd taki wielki obiekt wskazany w dokumentacji do wiarygodnego pomiaru pomimo, że czujnik wykrywa bez problemu dużo mniejsze rzeczy. Echa odbite. Ten czujnik, chyba zacznie mi się śnić po nocach... ale coraz lepiej rozumiem jak on naprawdę działa. Dziękuję!  👍

Link to post
Share on other sites
(edytowany)

@marek1707  Przyszło mi do głowy, że aby poradzić sobie z echem należy skutecznie rozproszyć fale odbite od tła. Z braku profesjonalnej gąbki z pomocą przyszła mi Euspongia officinalis, czyli gąbka szlachetna żyjąca w Morzu Śródziemnym. Zobacz jak pięknie to wygląda. Równe, relatywnie stałe tło w odległości ponad 2 m, choć gąbka leży kilkanaście centymetrów od czujnika... 🙂

A, tu z bliska z zarejestrowanym przelotem obiektu przed gąbką. Ślicznie go uchwycił... 

 P4.thumb.png.52710128a269d1c41962204e5e88d802.png

Edytowano przez Adder
Link to post
Share on other sites

Czasem jedno dobrze zdane pytanie jest warte więcej niż sto odpowiedzi.

No to dalej: w ogólności chodzi o to żeby obiekt był wyraźny na tle całej reszty pola widzenia, brawo że wreszcie do tego doszedłeś. I po drugie: raz wysłany sygnał nie znika na życzenie tylko odbija sie wielokrotnie od różnych rzeczy (także od ścian pomieszczenia, obudowy urzadzenia, fragmentów konstrukcji itd) i dopóki nie rozproszą się wszystkie echa mogące aktywować odbiornik nie możesz wysłać kolejnego impulsu Zatem z gąbką i kulką, w sytuacji klinicznie czystej czujnik sobie radzi. A jak będzie w praktyce? Czy będziesz wyklejać cały ten tor jakimś materiałem pochłaniającym? Czy może trzeba zaokrąglić wszystkie krawędzie tej układanki a toczacą sie kulkę zamienić na sześcian? Moim zdaniem w scenie końcowej tego filmu zobaczymy bohatera z rezygnacją patrzącego w dal i mającego pewność, że zmarnował kawał swojego życia*. Mógł wziąć optyczny czujnik odległości, mógł zatrudnić fotokomórkę odbiciową lub szczelinową (kulka ma kalibrowaną średnicę więc można mierzyć tylko czas przelotu), mógł wreszcie do stalowej kulki użyć metody indukcyjnej i cewki schowanej pod blatem. No ale znalazł prymitywny czujnik ultradźwiękowy, najarał się, myślał że trafił Bingo i uparcie brnął dalej. A my mogliśmy na TV RozrywkaZaDarmo obejrzeć kolejny film klasy D..

* Druga opcja to pyrrusowe zwycięstwo: ogromnym nakładem sił i czasu zrobił pomiar, który działa jakoś. Teraz stoi dumny przed swoim dziełem, a uciekający przed deszczem ludzie nie zauważają ani jego ani tego czegoś co sklecił.. Napisy końcowe, To be continued?

  • Lubię! 2
Link to post
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

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.