Skocz do zawartości

Stanowisko do badania prędkości - Raspberry Pi, Python, czujniki PNP


Czolgista

Pomocna odpowiedź

3 minuty temu, Czolgista napisał:

Kwestia jest taka, że nie mam do tego żadnego oprogramowania, a chciałbym uzyskać już gotowe wyniki po pomiarze, niż przenosić ręcznie pomiar z czujników i obliczać prędkość.

Jeśli zdecydujesz się na Arduino to wyniki możesz przesyłać do komputera przez USB/UART. Kwestia wykorzystania tych danych na samym PC 🙂 

Link do komentarza
Share on other sites

@Czolgista Kwestia tego, co chcesz z tymi danymi później zrobić. Bo we wszystkich przypadkach (Rpi + pigpio, Pico + C/MicroPython, Arduino) masz czas przelotu, a znając dodatkowo drogę obliczenie prędkości to raptem jedno dzielenie.

Załóżmy, że w programie znasz już prędkość. Co dalej?

Przy okazji: jakoś w Twoim poście nie widzę linków do specyfikacji czujnika...

Edytowano przez ethanak
Link do komentarza
Share on other sites

@Czolgista Wygląda na to, że masz dość wysokie wymagania odnośnie projektu... Warto na moment zająć się prostymi obliczeniami.

Mamy odległość między czujnikami 40 mm, czyli 0.04 m. Podawałeś, że prędkości to 4-12 m/s więc policzmy ile czasu będzie trwał cały pomiar.

Dla 4 m/s mamy: 0.04 / 4 = 0.01 s = 10ms,

natomiast dla 12 m/s: 0.04 / 12 = 3.333 ms

To dość długie czasy jak dla mikroprocesora, czy mikrokontrolera, więc nie powinno być problemu. Natomiast wyzwaniem może okazać się "dokładność" +/- 0.05m/s o której wspominasz.

Zacznijmy od rozdzielczości pomiaru.

Jeśli prędkość wyniesie 4.05 m/s to teoretyczny czas: 0.04 / 4.05 = 9.877 ms

A dla prędkości 12.05 m/s: 0.04 / 12.05 = 3.320 ms

Czyli różnica między 4.05, a 4 m/s to: 123 us

Natomiast między 12.05, a 12 m/s to raptem: 13 us

Największym wyzwaniem nie jest jednak sama wartość 13us, ale jej udział w całym czasie pomiaru, czyli 3.3 ms. Jak łatwo policzyć to jakieś 0.4%.

Wiemy już jakiej rozdzielczości pomiaru oczekujesz, w przypadku czasu to jakieś 13us. Użycie prostego pomiaru z zapamiętaniem czasu pierwszego impulsu i czekaniem w pętli na drugi tutaj się raczej nie sprawdzi.

Wspomniałeś natomiast o oczekiwanej dokładności - z nią może być o wiele trudniej niż z rozdzielczością pomiaru, szczególnie jeśli oczekujesz dokładności na poziomie 0.4%. Wybór mikrokontrolera lub mikroprocesora wydaje się tutaj najmniejszym problemem.

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

Jeszcze na zakończenie z mojej strony wyniki pomiarów.

Skrypt "test1" używał funkcji time.time() do pobierania czasu i w pętli aktywnie czekał na zmianę stanu GPIO. Natomiast skrypt "test3" używa biblioteki pigpio z ustawionym samplowaniem GPIO co 1us.

Pierwsze 2 kolumny pokazują wyniki dla impulsu o szerokości 3200us, kolejne 2 dla 3333 us.

2022-11-23-132339_2558x1398_scrot.thumb.png.a68773243d8a0cd5eddf074b95146608.png

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

Ja natomiast mam inne wątpliwości.

Załóżmy, że pomiar czasu z potrzebną dokładnością jest możliwy (Arduino pewnie się wyrobi z 12µs bez gmerania po licznikach, Pico spokojnie, RPi4 pewnie też). Jaki jest czas reakcji samego czujnika i jak wygląda powtarzalność?

 

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

PS. Wyniki nie były ręcznie filtrowane, ani modyfikowane. Nie pojawiały się też większe odchyłki od oczekiwanych wyników. Nawet priorytety procesów nie były zmieniane (tutaj przydały się 4 rdzenie malinki). A co do uwag odnośnie celowości używania płytki za kilkaset złotych do takiego zastosowania - to czas poświęcony na pomiary i pisanie na forum był więcej wart niż malinka, nawet w wersji 8GB 😉

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

6 minut temu, ethanak napisał:

Ja natomiast mam inne wątpliwości.

Załóżmy, że pomiar czasu z potrzebną dokładnością jest możliwy (Arduino pewnie się wyrobi z 12µs bez gmerania po licznikach, Pico spokojnie, RPi4 pewnie też). Jaki jest czas reakcji samego czujnika i jak wygląda powtarzalność?

Tutaj warto zacząć od małej powtórki z metrologii i doczytać czym różni się: dokładność, precyzja i rozdzielczość. W pełni się zgodzę, że rozdzielczość nie jest problemem. Ale powtarzalność reakcji czujnika, a więc precyzja oraz odniesienie uzyskanych wyników do rzeczywistości, czyli dokładność (o weryfikacji której wspominał @matsobdev ) jak najbardziej.

I to co najważniejsze - wysoka rozdzielczość nie zapewni nam wysokiej dokładności. Więc jak napisałem wcześniej - wybór mikrokontrolera / mikroprocesora to chyba najmniejszy problem w tym projekcie.

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

Zrobiła się burza mózgów, bardzo fajnie :). Czujniki są różne np.: Czujnik Sick albo Czujnik P. I faktycznie tak jak pisaliście i liczył @Elvis czasy reakcji mogą być problemem, bo z pozoru wydawałoby się że czas odpowiedzi na poziomie 0,1 ms to bardzo dobry czas, ale jednak dla +/-0,05  m/s (razem 0,1 m/s) to za mało. Ale czy czasu reakcji nie możemy uwzględnić w obliczeniach, a jedynie w dokładności uwzględnić tą z czujnika? Wtedy byśmy mieli w tej sytuacji +/-0,02 m/s (czyli 0,04 ms), a z obliczeń (zakładając korzystniejszy wariant 50 mm drogi pomiarowej) wychodzi że potrzeba maksimum 0,052 ms dokładności dla V = 4 m/s.

Zakładając, że dobierzemy właściwy czujnik i dokładność będzie właściwa, to co byście proponowali dalej? Chciałbym aby wynik na komputerze wyglądał mniej więcej jak w załączniku - podana prędkość, energia kinetyczna i ew. wykres. Obliczenia są proste (prócz wykresów), ale nie mam żadnego programu co by to wygenerował, a nie chcę pobierać za każdym razem danych z Arduino i przeliczać. Dlatego myślałem o jakimś nieskomplikowanym kodzie w Pythonie, co z Raspberry wyświetlałby na monitorze/komputerze. Albo Arduino jak pisał @ethanak, ale nadal jest problem z obróbką i prezentacją danych. W załączniku widok jak mniej więcej to powinno wyglądać. 

Program - widokpng.png

Link do komentarza
Share on other sites

19 godzin temu, Czolgista napisał:

nie mam żadnego programu co by to wygenerował

I co z tym zrobisz? Poszukasz gotowca? Zlecisz komuś napisanie? Sam napiszesz? Bo za chwilę się okaże, że masz problem nie z pomiarem, a z prezentacją wyników...

Bo 'nieskomplikowany kod w Pythonie' pewnie by wystarczył - tylko co dla Ciebie znaczy 'nieskomplikowany'...

Link do komentarza
Share on other sites

20 godzin temu, Czolgista napisał:

W załączniku widok jak mniej więcej to powinno wyglądać. 

Pierwsza opcja to program w dowolnym języku, który będzie odczytywał dane wprost z UART. Jeśli szukasz czegoś łatwiejszego to na pewno da się to zrobić łatwiej za pomocą narzędzia Processing - tutaj przykład połączenia nawet z Arduino: https://www.arduino.cc/education/visualization-with-arduino-and-processing

Sprawdź jeszcze narzędzie, które opisałem w poniższym artykule - może wystarczy w tym przypadku:

https://forbot.pl/blog/arduino-jak-rysowac-rozbudowane-wykresy-na-zywo-id28017

Link do komentarza
Share on other sites

Inna opcja, ale wymaga znajomośvi javascriptu: serwer www (wbrew pozorom w przypadku malinki to naprawdę nieskomplikowamy program w pythonie) i wizualizacja przez przeglądarkę. 

Ale w każdym przypadku coś trzeba napisać...

Link do komentarza
Share on other sites

Na wstępie dziękuję wszystkim za wszelkie pomysły i sugestie, choć nie ukrywam że jest tu dla mnie sporo nowości 😊.

@Treker Ten program Telemetry pokazuje dane z czujników, ale nie wyświetli mi chyba obliczenia na podstawie moich danych i z czujnika? A modyfikacji raczej nie podołam bo jest w Javie.  

Podsumowując to co wywnioskowałem: Raspberry trochę mija się z celem, Arduino lepiej się sprawdzi. System pomiaru miałby wyglądać tak: Czujniki rejestrują zdarzenie i przewodami wysyłają sygnały napięciowe do mikrokontrolera Arduino (jakaś rozbudowana płytka z avr attiny lub STM8 jak pisał @_LM_), a ten mierzy czas między sygnałami zbiera dane napięcia w czasie, które posłużą później do narysowania wykresu -> te wszystkie dane są przesyłane na komputer poprzez UART/USB. Na komputerze dane są automatycznie obrabiane w dedykowanym (stworzonym od podstaw lub zmodyfikowanym podobnym z open source) oprogramowaniu i prezentowane w sposób jaki pokazałem w poprzednim poście (mniej więcej).  

@ethanak – a jaką korzyść da mi użycie przeglądarki zamiast innej formy uruchomienia programu? Niestety javasciprtu nie znam.

Pisałem natomiast o Pythonie, ponieważ podstawy znam i aktualnie uczę się cały czas tego języka, więc byłoby to fajne wyzwanie z szansą powodzenia. A nieskomplikowany oznacza, że pobiera dane (np. CSV), tworzy wykres (np. z użyciem bibliotek matplotlib), przeprowadza prostą kalkulację prędkości i energii, prezentując wyniki na ekranie z możliwością ich zapisu. A jeśli nie podołam z programem, to zostanie opcja zlecenia komuś napisania takiego programu. Jest to projekt laboratoryjny stąd duża dokładność i inne wymagania.

Ale czas reakcji czujników chyba nie powinien być uwzględniany w obliczaniu dokładności/błędu prędkości, a jedynie sama dokładność czujników?

Link do komentarza
Share on other sites

1 minutę temu, Czolgista napisał:

Ale czas reakcji czujników chyba nie powinien być uwzględniany w obliczaniu dokładności/błędu prędkości, a jedynie sama dokładność czujników?

Dzisiaj poprawiałem ploter laserowy, bo jeden ze sterowników reagował kilkadziesiąt milisekund za późno. Efekt był taki, że przy hamowaniu po dłuższym odcinku w osi Y potrafiło skrzywić ramę... Tak każdy element wpływający na opóźnienia pomiaru itp. musisz brać pod uwagę.

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