Skocz do zawartości

Zamiana wartości z czujników na milimetry


Pomocna odpowiedź

Napisano

Cześć,
posiadam czujniki wykonane z diody ir i fotorezystora. Dioda ir wysyła fale ona odbija się od jakiegoś przedmiotu i wraca do fotorezystora. Wynik zostaje odczytany przez mikrokontroler. Zrobiłem pomiar od 1.5 do 10 cm. co 0,5 cm. i mam przypisane do każdej odległości wartość z czujnika. Jak to przekształcić na odległość w milimetrach ?

To proste, musisz znaleźć zależność (funkcję) liczby milimetrów od liczby odczytanej z ADC. Jest na to wiele sposobów. Od Ciebie zależy jak dokładnie i jak "sprytnie" chcesz to zrobić.

Zrób i pokaż wykres: na osi poziomej odłóż liczby z ADC a na pionowej milimetry. Z samej zasady pomiaru nie będzie to precyzyjny dalmierz tylko raczej skalibrowany do danego materiału i koloru ściany czujniczek daleko-średnio-blisko, więc i precyzji tu wielkiej nie potrzebujesz. Być może aproksymacja jednym lub dwoma odcinkami prostej wystarczy a regresja wielomianowa (nawet kwadratowa) będzie strzelaniem z armaty. No ale dawaj wykres. Jak go zobaczysz to może sam na coś wpadniesz.

Na marginesie: w której jesteś klasie i jakiej szkoły? Pytam, bo po V(?) klasie podstawówki to interpolację z użyciem N-1 odcinków powinieneś samodzielnie zrobić w 5 minut. Przypomnij sobie równanie prostej i jak policzyć jego oba współczynniki mając dane dwa punkty przez które ona przechodzi.

Wiem o co chodzi. I tak zrobiłem. Nie wspominałem o tym, aby mnie nie ukierunkowywać tematu.

Zrobiłem sobie wykres, który przekształciłem na wzór w postaci wielomianu 😉

Problem pojawia się jak przeniosę wzór, bo nie mam poprawnych wartości i nie wiem czym to jest spowodowane.

Nie bardzo wierzę, że wiesz co robisz. Prosiłem byś zrobił wykres dokładnie odwrotny: na osi poziomej miałeś odłożyć odczyty z ADC bo to one są wejściem (zmienną X) Twojego wielomianu a na osi pionowej miały znaleźć się wyniki w mm. To nie jest wszystko jedno. Dopiero wtedy - po dopasowaniu funkcji - "wrzucając" do niej liczbę z ADC dostaniesz mm.

To co pokazałeś powyżej działa odwrotnie: podczas liczenia, za X musisz wstawić milimetry a dostaniesz w wyniku odczyt ADC (spróbuj czy tak jest). Chyba nie oto chodziło, prawda?

A swoją drogą, czy liczenie wielomianu 6 stopnia by odczytać odległość prymitywnego czujniczka nie jest lekką przesadą? Przecież wystarczy, że zmienisz warunki oświetlenia lub po prostu drugi raz zdejmiesz te same dane a już liczby przy współczynnikach będą inne. Funkcja przegina się dwa razy więc wystarczy Ci wielomian 3 stopnia a tak naprawdę to aproksymacja dwoma-trzema odcinkami prostych.

I co znaczy "aby mnie nie ukierunkowywać tematu"?

Zmieniłem i mam coś takiego:

I jak w wzór wstawię wartość z ADC to mam jakieś dziwne wyniki.

Chodziło mi o to, że liczyłem na, ze ktoś może podać jakiś program w jakim to przeliczyć lub podpowie jak, bo faktycznie pomyliłem osie, ale i tak nadal niekoniecznie to działa.

Marcin, no proszę Cię, spójrz na swój pierwszy wykres i wyobraź sobie, że kartkę z tym rysunkiem bierzesz do ręki i obracasz wzdłuż prostej nachylonej pod kątem 45° czyli wokół przekątnej rysunku. Dostajesz dokładnie ten sam wykres, ten sam kształt, ale inaczej narysowany. Inaczej zdefiniuj serie (tych samych przecież) danych w arkuszu i jedziesz. Nie kombinuj.

A gotowca jak zwykle nie będzie. Musisz się trochę pomęczyć, zastanowić co robisz źle a przede wszystkim zrozumieć. Umiesz w Excelu dopasować krzywą do punktów (co prawda trochę bez sensu, ale zawsze) a nie możesz pojąć czegoś takiego jak funkcja jednej zmiennej? Skup się i dawaj poprawny wykres. I nie myśl na razie o wielomianie, myśl o tym co robisz, co ma być u Ciebie zmienną x odkładaną na osi poziomej a co wartością funkcji f(x). Dla pewności że rozumiesz, możesz to nam napisać.

I zastanów się co wrzucasz jako publiczny wynik swojej pracy. Przecież dopasowany wielomian 4(!) stopnia ma pierwszy współczynnik 5e-15 czyli 0.000000000000005. Drugi i trzeci też są prawie równe zeru, więc zostaje Ci tylko równanie prostej 5x+15. Jak ze swoich "krzywych" danych zrobiłeś prostą???

Po prostu nie zwróciłem uwagi na to jak mi dane złapało. Teraz już sobie sprawdziłem i zaznaczyłem poprawnie dane.

I niby jak wzór jest, ale w kilku liczbach mam dość poprawne wyniki a w reszcie nie za bardzo. Niby krzywa wielomianu przechodzi prawie po tej od moich danych, ale wynik z ADC np. 455 odpowiada 40mm. a nie 61mm. tak jak mi wzór wyliczył.

Znacznie lepiej. Teraz, kiedy masz za sobą zwykłe rzemiosło polegające na zaznaczaniu rzędów i kolumn w arkuszu, zacznij myśleć. Co widzimy na wykresie? Krzywą która wygląda jak fragment paraboli i gdyby nie ostatni prawy punkt mogłaby spokojnie być przybliżona wielomianem kwadratowym. Ponieważ jednak pod koniec mamy przegięcie w dół (czy wiesz z czego ono wynika - pomyśl chwilę co się dzieje przy bardzo bliskich odległościach, co widzi detektor?) to można podejrzewać, że przyda się trzeci współczynnik w funkcji. Trzeci a nie piąty. A gdybyś nawet tego nie wiedział a priori wprost z wykresu, to wystarczy znowu spojrzeć na wielkości tych współczynników, masz zatem po kolei:

0.000000000012

0.000000006

0.000006

0.0033

1.0056

i stała 182.78.

A teraz przyjrzyj się ile cyfr znaczących program Ci wypisał we współczynnikach równania i jak to się ma do precyzji wyniku? Jeśli podnosisz coś np. do czwartej potęgi to dostajesz ogromną liczbę. A teraz mnożysz ją przez 6e-09 to ile cyfr znaczących wyniku dostajesz i jak wielki będzie błąd? Ten program jest głupi a Ty wierzysz we wszystko co wypisał. Gdyby tam było 6.00000e-9 albo 6.1274636e-9 to przynajmniej byłaby szansa, że jest to w miarę precyzyjna liczba. Samo 6 jest beznadziejne, to jedna cyfra, a wynika tylko z tego, w jaki sposób jest wypisywane - gdzieś "w środku" zostało to zaokrąglone.

Co więcej. Jak już napisałem wcześniej, w ogóle nie potrzebujesz wyrazów z x^5, x^4 a nawet x^3. Mimo ostatniego punktu wykresu trochę opuszczonego możesz - właśnie z uwagi na mały współczynnik 6e-06 przy x^3, spokojnie zrobić to na funkcji kwadratowej.

W następnym nawrocie każ więc dopasować punkty do nowego wielomianu, tym razem drugiego stopnia i pokaż co wyszło. Dla sportu możesz też sprawdzić jakie wyniki będziesz dostawał z wielomianu stopnia trzeciego. Moim zdaniem w takiej zabawce jak Twój czujnik skórka nie jest warta wyprawki bo wyniki i tak będą obarczone poważnym błędem metody.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...