logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak przeliczyć napięcie z czujnika GP2D120 na odległość?

dturczak 07 Sie 2007 17:31 6656 43
Najlepsze odpowiedzi

Jak zamienić napięcie z analogowego czujnika GP2D120 na odległość?

Najlepiej nie używać uniwersalnego wzoru z datasheetu, tylko skalibrować konkretny egzemplarz GP2D120 i dopasować do niego charakterystykę napięcie–odległość [#4155200][#4156608] Zrób serię pomiarów dla znanych odległości (np. co 0,5 cm albo kilka–kilkanaście punktów na całym zakresie), a potem wstaw dane do tablicy i interpoluj liniowo albo dopasuj wielomian w Matlabie/Excelu/FindGraph [#4314726][#4157553] Jeden z użytkowników podał dla GP2D120 aproksymację: x = -13.31167350334445 + 86.2346117103064*1/y - 144.6947275148453*1/y^2 + 116.9524759800732*1/y^3 - 31.03257932111795*1/y^4, gdzie y to napięcie w V, a x to odległość w cm, z błędem ok. 2,6 mm [#4314726] Trzeba też pamiętać, że wyjście czujnika jest nieliniowe, każdy egzemplarz może się różnić od wykresu z noty, a wpływ mają też kolor i faktura powierzchni [#4155200][#4314726] Jeśli chcesz liczyć poniżej 4 cm, program musi uwzględnić, po której stronie krzywej jest punkt, bo w tym obszarze odczyt może być niejednoznaczny [#4186019]
Wygenerowane przez model językowy.
REKLAMA
  • #1 4155100
    dturczak
    Poziom 19  
    Posty: 416
    Pomógł: 9
    Ocena: 5
    Jak przeliczyć napięcie z czujnika GP2D120 na odległość?
    odczytuje napiecie przez przetwornik z czujnika gp2d120
    dane mam na 2 bajtach..
    zastanawiam sie jak to teraz przeliczyc na odleglosc...
    wziasc troche wartosci z wykresu " na oko" i wyliczyc wzor funkcji i podstawiac?
    w dokumentacji pisze ze czujnik jest od 4 do 30..
    patrzac na wykres moglbym przeciez <4 tez odczytywac tylko musialbym sprawdzac czy kolejna wartosc mierzonego napiecia poprostu rosnie...?
    tak przy okazji jaki typ w C przechowuje 16 bitowa zmienna(2 bajty)
  • REKLAMA
  • #2 4155200
    Paweł Es.
    VIP Zasłużony dla elektroda
    Posty: 6981
    Pomógł: 1236
    Ocena: 692
    Obawiam się, że będziesz musiał wyskalować konkretny posiadany czujnik. Wykresy w kartach katalogowych są zwykle typu uśrednionego a poszczególne egzemplarze mogą się różnić od siebie. Poza tym jest jeszcze problem z w pływem typu powierzchni na to co wychodzi z czujnika.

    A co to będzie za układ ?

    A tu masz opis typów danych w języku C

    http://fizar.pu.kielce.pl/porady/kurs_c/typy_danych.htm
  • #3 4155293
    dturczak
    Poziom 19  
    Posty: 416
    Pomógł: 9
    Ocena: 5
    nie wydaje mi sie zeby jakos te czujniki sie skalowalo...
    jedyne co jest dostepne co wyjscie z napieciem...
    myslisz ze jestem w stanie sprawdzic z wieksza dokladnoscia wartosci niz te usrednione z wykresu?
    jak sie do tego zabrac?
  • #4 4156608
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    dturczak napisał:
    nie wydaje mi sie zeby jakos te czujniki sie skalowalo...

    Nie chodzi o skalowanie tylko o kalibrację. Każdy czujnik można kalibrować programowo. Możesz poprostu umieścić czujnik w odległości 4cm i zmierzyć napięcie, następnie umieścić go w odległości 6cm i zmierzyć napięcie następnie w odległości 8cm i tak dalej. Uzyskaną w ten sposób charakterystykę możesz wrzucić w postaci tablicy do uC a pomiędzy punktami robić aproksymację liniową lub taką charakterystykę możesz wrzucić do Matlaba i wyznaczyć wielomian, a następnie na podstawie współczynników wielomianu obliczać odległość w uC.
  • #5 4156662
    dturczak
    Poziom 19  
    Posty: 416
    Pomógł: 9
    Ocena: 5
    no wiem ze tak mozna..
    ok wylicze wzor funkcji z wykresu z datashita i z wlasnych pomiarow i zamieszcze..
    zobaczymy na ile beda sie roznic...
    pozdrawiam
  • #6 4157147
    lord_dagoth
    Poziom 25  
    Posty: 860
    Pomógł: 68
    Ocena: 6
    jestem dopiero uczniem szkoły średniej, ale interesowałaby mnie głębiej metoda wyznaczenia tego wielomianu na podstawie zmierzonych danych.

    Czy żeby bardziej zgłębić ten temat ten artykuł będzie dobry? http://home.agh.edu.pl/~km2007/misc/papers/228.pdf

    Mógłbyś coś polecić więcej?
  • #7 4157264
    dturczak
    Poziom 19  
    Posty: 416
    Pomógł: 9
    Ocena: 5
    nie wiem czy tak strasznie chce mi sie bawic...
    wezme pomierze napiecie w punktach wyznaczonych suwmiarką..co np. 0,5 cm, otrzymam tak jakby punkty o wspolrzednych x,y
    wklepie te dane w matlabie..
    albo co najwyzej w excelu,narysuje wykres i kaze mu zrobic wzor funkcji do niego..
    bede mial wzor z wspolczynnikami.
    chcac obliczyc odleglosc bede sobie podstawial napiecie do wzorku i juz...
  • #8 4157293
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    lord_dagoth napisał:

    Czy żeby bardziej zgłębić ten temat ten artykuł będzie dobry? http://home.agh.edu.pl/~km2007/misc/papers/228.pdf
    Mógłbyś coś polecić więcej?

    Oczywiścię tą wiedza nie można wzgardzić, napewno jest pożyteczna ale mnie osobiście przeraziły te wzory. Ze swojej strony polecam zainteresowac sie programem typu Matlab (lub jego darmowym odpowiednikiem). Znajdziesz tam narzędzia do Curve Fitting (matlab ma fajnego toolbox'a do tego celu) a pozatym możesz go używać jako wygodnego kalkulatora.
  • #9 4157319
    dturczak
    Poziom 19  
    Posty: 416
    Pomógł: 9
    Ocena: 5
    moze jak tak bardzo chcesz zrobic to od podstaw to cos z metod numerycznych...
    jakas Interpolacja Newtona albo cos..
    w necie jest wiele kursow..
  • #10 4157362
    Klima
    Poziom 31  
    Posty: 1535
    Pomógł: 112
    Ocena: 180
    lord_dagoth napisał:
    jestem dopiero uczniem szkoły średniej, ale interesowałaby mnie głębiej metoda wyznaczenia tego wielomianu na podstawie zmierzonych danych.

    Czy żeby bardziej zgłębić ten temat ten artykuł będzie dobry? http://home.agh.edu.pl/~km2007/misc/papers/228.pdf

    Mógłbyś coś polecić więcej?


    Zarzuć w gugla "interpolacja".
    A do Matlaba choćby i to:
    http://www-ccs.ucsd.edu/matlab/techdoc/ref/interp1.html
    http://www.mathworks.com/access/helpdesk/help...access/helpdesk/help/techdoc/ref/polyfit.html

    Jak nie masz Matlaba, to zainteresuj się tym:
    http://www.gnu.org/software/octave/
  • REKLAMA
  • #11 4157553
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    W excelu masz możliwość wyznaczenia jednym ruchem funkcji regresji m.in. liniowej, wielomianowej, wykładniczej, logarytmicznej itp

    Podobna opcja jest w oo.calc, ale nie widzę tam możliwości jawnego wyeksponowania wzoru dla tej linii :?:
  • #12 4157751
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    Elektronicznej miarki i tak z tego nie zrobisz, wiec podejrzewam ze conajwyżej do zabawki można tego układu użyć a tam dokładność specjalnie nie gra roli. Podobne problemy rozwiązuję określając kilka/kilkanaście/kilkadziesiąt przedziałów bo tak na prawde dokładność nie jest atutem takiego rozwiązania. Jeśli chcesz być dokładniejszy to użyj dwóch czujników o różnych zakresach (wtedy wyliczysz punkt przecięcia obu charakterystyk czujników) i bedziesz mieć szerszy zakres i dokładność. Wszystko zalezy od zastosowania :)
    Pozdrawiam
  • #13 4169460
    dturczak
    Poziom 19  
    Posty: 416
    Pomógł: 9
    Ocena: 5
    pierwszy problem sie pojawil.. ;)
    otoz nie wiem czy to dobry pomysl ,ale chcialem odczytywac napiecie w trybie free run (samoczynnie zeby mierzyl)
    z kwarcem 8Mhz,i preskalerem przetwornika 128...
    co daje mi ok.62 kHz na przetwornik...wiec nie tak znowu szybko..
    ale co jakis czas procesor mi sie zawiesza..
    tzn..odczyt na lcd zupelnie staje..
    dopiero reset pomaga..
    co moze byc tego przyczyna?
    czy dac sobie spokoj i mierzyc np.10 razy w ciagu sekundy tylko..
    bo w tym momencie korzystac z przerwania i robie srednia z 30 pomiarow
    ==========
    no niestety dalem 10 razy w ciagu sekundy...
    i to bez trybu free fun tylko reczny...
    i nadal mam to zawieszanie sie...
    co mam zrobic?
  • #14 4170460
    Elektricon
    Poziom 12  
    Posty: 97
    Ocena: 2
    a procek nadal dziala,czy tylko przetwornik sie zawiesza?
  • REKLAMA
  • #15 4170470
    dturczak
    Poziom 19  
    Posty: 416
    Pomógł: 9
    Ocena: 5
    no niestety przedziwnie sie to zachowuje..
    tzn jak dam miganie diody w srodku programu to ona tez przestaje migac,procesor sie poprostu zawiesza...
    albo na wyswietlaczu pojawia sie duza ilosc krzakow..
    mial ktos podobne problemy?
    czasami dziala bez problemu,czasami resetuje procka,pomacham reka przed czujnikiem i sie zawiesza...
    o co chodzi?
  • #16 4170493
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    A skąd mamy to wiedzieć.

    Spróbuj pomóc mi: Mam program, czasem mi się zawiesza, co jest przyczyną? Programu nie pokaże bo po co, procesor zgadnij sobie jaki.

    Nawet nie napisałeś jaka to rodzina, jedyne co wiemy to jaki czujnik i że program zapewne w C...

    Co do przeliczania odległości, tu masz opis i wzór do linearyzacji:
    http://www.acroname.com/robotics/info/articles/irlinear/irlinear.html
    Opis i badania:
    http://www.konar.ict.pwr.wroc.pl/uploads/download/raporty/Raport1-bolo.pdf


    Mi on od razu nie działał na GP2D12, ale po dobraniu parametrów na oko (mam mocno styrany czujnik) dokładność była zadowalająca (~1cm)
  • #17 4170511
    dturczak
    Poziom 19  
    Posty: 416
    Pomógł: 9
    Ocena: 5
    ATmega16 standardowo..
    program w zalaczniku..
    nie krytykujcie kodu,rozpisalem to bo szukam bledu
    procek z niewiadomych przyczyn sie zawiesza...
    bo czujnik nie ma z tym nic wspolnego prawda?
    Załączniki:
    • adc.c (5.58 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #18 4170994
    lord_dagoth
    Poziom 25  
    Posty: 860
    Pomógł: 68
    Ocena: 6
    McRancor napisał:


    Wielkie dzięki za podanie tych linków, naprawdę przydatne są, i da się zrozumieć ;)

    Odczytując dane z wykresu podanego w tym temacie, oraz używając aproksymacji wyznaczyłem wzór na odległość: y=-0,743130+13,804003/x

    Dokładność jest dość spora, ale jak zakupie czujnik, będę musiał zebrać dane i wyprowadzić wzór z nich.
  • #19 4172731
    dturczak
    Poziom 19  
    Posty: 416
    Pomógł: 9
    Ocena: 5
    wzor wzorem a mi przez pomiar przetwornikiem zawiesza sie atmega..
    jakies sugestie skad sie to moze brac?
    moze stos sie zapycha podczas tych odczytow czy jakos tak?
    jezeli tak ,to jak to obejsc..
  • #20 4173670
    dturczak
    Poziom 19  
    Posty: 416
    Pomógł: 9
    Ocena: 5
    wydaje mi sie ze wszystko sie dzialo przez zaklocenia...
    narazie dziala ;)
  • REKLAMA
  • #21 4184608
    dturczak
    Poziom 19  
    Posty: 416
    Pomógł: 9
    Ocena: 5
    czy czesciowo sprawny czujnik moze powodowac zawieszanie sie przetwornika a tym samym atmegi?
  • #22 4184876
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    Dalmierze optyczne sharpa potwornie sieją na zasilaniu, dodaj kondensator 33uF przy zasilaniu sharpa i 100n przy Vcc i GND na procesorze. Podejrzewam że 100nF pomiędzy AVcc i AGND już jest, dobrze żeby też był dławik 10uH pomiędzy AVcc i Vcc. Sam stosuję filtr LC 33mH/33uF na zasilaniu sharpa i pięknie czyści to śmieci z zasilania. Wskazuje na to fakt że procesor zawiesza się kiedy machasz ręką przed czujnikiem. Kiedy czujnik widzi coś na większej odległości, wtedy zwiększa prąd płynący przez jego diodę nadawczą i "pogłębia" szpile na zasilaniu.

    Możesz jeszcze uruchomić Brown-out Detector w procesorze (BOD) i sprawdzać czy go nie resetuje w krytycznych momentach pracy dalmierza
  • #23 4185283
    dturczak
    Poziom 19  
    Posty: 416
    Pomógł: 9
    Ocena: 5
    mam nadzieje ze o to sianie chodzi wlasnie w moim przypadki
    pobawie sie w nablizszym czasie i napisze co z tego wyszlo..
    tak z tymi kondkami nie do konca cie zrozumialem ?
    o cos takiego ci chodzilo ?
    https://obrazki.elektroda.pl/90_1186495676.gif
    to mowisz zeby jeszcze jeden taki filtr LC dac na zasilaniu sharpa...

    dalbys rade wrzucic rysuneczek jak to u ciebie wyglada?
  • #24 4185588
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    Jak przeliczyć napięcie z czujnika GP2D120 na odległość?

    Nie znam tego rozwiązania jakie stosujesz na AREF, ja stosuję zgodnie z dokumentacją atmela tylko kondensator 100n, podłączenie przez rezystor do napięcia zasilania to nie jest dobry pomysł jeżeli korzystasz z wewnętrznego napięcia odniesienia.

    FERRITE to koralik ferrytowy, kolejny "odszumiacz" ale jego możesz sobie podarować, ważne żeby masy analogowa i cyfrowa spotkały się tylko w jednym punkcie i jak najbliżej stabilizatora/źródła napięcia

    Na schemacie który podałem widać też że do zasilania szarpa idą osobne linie GND i Vcc od stabilizatora. Jest to celowe i na płytce drukowanej te linie również idą osobno prosto od stabilizatora przez LC do szarpa. W aplikacji której fragment pokazałem był sonar baaardzo wrażliwy na wszelkie zakłócenia. Po zastosowaniu takiego rozwiązania pracuje bez zarzutu.

    PS. Czyżbyś miał podwójne konto?
  • #25 4185671
    dturczak
    Poziom 19  
    Posty: 416
    Pomógł: 9
    Ocena: 5
    dzieki... :)
    zalogowalem sie przez przypadek na konto kuzyna ,ktory czasami do mnie wpada i dal automatyczne zapamietywanie hasla..
    stad ta pomylka..
    sory...

    a tak przy okazji,w przypadku kiedy nie stosowales odszumiaczy (byc moze w momencie kiedy co dopiero wpadl ci w rece) tez ci sie zawieszal?
  • Pomocny post
    #26 4185752
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    Od razu miałem załączony BOD detector na 4,3V i zdarzało się że procesor się resetował
  • #27 4186019
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    Witam
    Nie przejtzałem programu, ale może masz w nim tak rozpisana funkcję, ze przy pomiarach poniżej 4cm głupieje nie wiedząc z której strony krzywej jest poprawny wynik. Spróbuj zmienic program tak by podawał wartość nieprzeliczoną i potestuj.
    Taki przetwornik odległości faktycznie działa impulsowo, w związku z tym:

    1 - sieje niemiłosiernie, potrzebne dobre filtrowanie i ferryt jak najbardziej jest wskazany a jeszcze lepiej dodatkowo filtr LC

    2 - nie wiem z jaką częstościa mierzy czujnik, ale mierzenie zbyt częste też pewnie nie jest konieczne, bo zmiany nie sa szybkie (10Hz wystarcza)

    Wrzuciłbys rysunek płytki to by było wiadomo czy dobrze wykonana :)
    Pozdrawiam
  • #28 4186433
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    ~25Hz to częstotliwość zmian na wyjściu przetwornika
  • #29 4186563
    dturczak
    Poziom 19  
    Posty: 416
    Pomógł: 9
    Ocena: 5
    podczas pomiaru ,nie mam zadnych przeliczen na odleglosc
    zwykle przerwanie,a w programie glownym miga dioda ( juz nawet obsluge lcd wylaczylem)...
    po pewnym czasie dioda sie poprostu zawiesza..
    jezeli chodzi o przetwornik to mam wybrany najwiekszy preskaler czyli 128 przy kwarcu 8 Mhz..
    plytka jest raczej dobrze zaprojektowana,chociaz martwi mnie fakt ze masa na plytce jest rozprowadzona dosc cienkimi sciezkami...
  • #30 4186648
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    największe znaczenie będzie miał sposób dostarczenia zasilania do przetwornika (grube ścieżki a najlepiej przewody) oraz filtr (kondensator i może dławik?)

    Swoją drogą wyłącz BOD albo zmniejsz granice do 3,7V i sprawdz reakcję. Moze wszystko jest winą błedu w programie?
    Mam podobny dylemat, tez mi sie procek wiesza po OK minucie. Problemy ze stosem? trudno powiedzieć :)

    Upewnij się, ze w programie podczas wejścia w przerwanie sa blokowane przerwania.

    Wyłącz przerwanie i wrzuc odczyt ADC w pętli razem z innymi "rzeczami do zrobienia"
    Pozdrawiam

Podsumowanie tematu

✨ Dyskusja dotyczy przeliczania napięcia z czujnika odległości GP2D120 na wartość odległości. Zalecane jest wykonanie kalibracji czujnika poprzez pomiary napięcia na wyjściu dla znanych odległości (np. co 0,5 cm) i wyznaczenie funkcji aproksymującej, np. za pomocą regresji wielomianowej lub interpolacji (np. Newtona) w programach takich jak Matlab, Octave lub Excel. Wykresy katalogowe są uśrednione i mogą różnić się między egzemplarzami, dlatego kalibracja indywidualna jest wskazana. W dyskusji poruszono także kwestie techniczne związane z implementacją pomiarów na mikrokontrolerze ATmega16, w tym problemy z zawieszaniem się procesora podczas odczytów ADC w trybie free run przy częstotliwości około 62 kHz. Przyczyną mogą być zakłócenia na zasilaniu czujnika, które można zredukować stosując filtry LC (np. 33mH/33uF) oraz kondensatory (33uF, 100nF) i dławiki na linii zasilania czujnika oraz mikrokontrolera. Zalecane jest także stosowanie Brown-out Detector (BOD) w mikrokontrolerze. Wskazano, że częstotliwość pomiarów powinna być ograniczona do około 10-25 Hz, gdyż czujnik nie wymaga szybkich odczytów, a zbyt szybkie próbkowanie może powodować problemy. Omówiono również kwestie dotyczące stabilności napięcia odniesienia ADC, wpływu impedancji i konieczności uśredniania wielu pomiarów dla poprawy dokładności. W kontekście zastosowań robotycznych poruszono temat rozmieszczenia czujników na robocie oraz potencjalnych zakłóceń między czujnikami pracującymi obok siebie, które jednak są minimalne ze względu na zasadę działania czujników Sharp opartą na pomiarze kąta padania wiązki podczerwieni.
Wygenerowane przez model językowy.
REKLAMA