Fórum témák

» Több friss téma
Cikkek » Jani-6 (Sharp szenzor értékeinek grafikus ábrázolása Processing-gel)
Jani-6 (Sharp szenzor értékeinek grafikus ábrázolása Processing-gel)
Szerző: Fizikus, idő: Jan 6, 2011, Olvasva: 20536, Oldal olvasási idő: kb. 2 perc
Lapozás: OK   3 / 7

A Sharp GP2Y0A21YK szenzor mérési adatainak linearizálása

A Sharp infravörös távolságérzékelőket sok helyen használhatjuk a robotikában. Ezeknek az érzékelőknek az a legfőbb hátránya, hogy a távolsággal fordítottan arányos és nemlineáris a válaszuk. Sokkal jobban tudnánk az adatokat használni, ha a mért értékeket valahogyan közvetlen távolságadatokká tudnánk alakítani. Erre mutatok most egy példát.

A robothoz egy 10-80cm méréstartományú Sharp GP2Y0A21YK szenzort  használtam. Egyik korábbi cikkemben már szerepelt a szenzor feszültség-távolság görbéje ( LINK ). Erről látható, hogy a szenzor maximális feszültsége kb. 3,1 V, ezért 10 bites ADC felbontás és 5V-os ADC referenciafeszültség használata esetén a mért ADC értékek kb. 0-650 közé esnek. A cikkben szereplő kapcsolást és AVR kódot felhasználva felvehető a szenzor távolság-feszültség (ADC érték) görbéje:

A fenti görbe alakja nagyon hasolít az 1/x függvényre, ezért megpróbálhatjuk ezzel átalakítani a Sharp szenzor válaszgörbéjét egy egyenessé (linearizálás).

Az egyenes általános egyenletét felhasználva és a mért ADC értékek reciprokát az egyenletbe helyettesítve a távolságra (x) egy kis átalakítás után az alábbi egyenletet kapjuk:

Ez egy hasznos képlet, ha tudunk floating point műveleteket végezni. De az ideális megoldás az lenne, ha találnánk egy olyan függvényt is, ami integer műveletekkel is jó eredményt ad. Az AVR-be írandó program méretének drasztikus megnövekedését elkerülendő, a floating point műveletek használatát mindenképpen célszerű kihagyni.

Egy kis további átalakítással kapjuk:

Ez már integer műveletekkel is egyszerűen használható.

10 bites ADC-t használva a Sharp szenzor értékei általában 80 fölötti értékek, ha a szenzor előtt van valamilyen céltárgy. Ha a szenzor előtt nincs semmi, akkor a mért értékek lecsökkenhetnek akár 0-ig is. Hogy elkerüljük a nullával való osztást, az ADC értékekhez hozzáadunk 1-et (mivel az ADC értékek nem lehetnek negatívak).

Ezután már csak a megfelelő függvényparamétereket kell megtalálni, próbálgatással. (Az én szenzorom esetén m`= 6400 és b`= 5 értékek használata esetén volt a legjobb a végeredmény.)

Az alábbi ábra az x=(6400/(adc+1))-5 függvényt ábrázolja:

Látható, hogy ez a közelítés kb. 50 cm-es távolságig használható megfelelő pontossággal, e felett a számított távolságadatok már nem nagyon használhatóak.

Az integer műveletek miatt fellépő kerekítések miatt a számolt értékek nem lesznek hajszálpontosak, de az így számolt közelítő távolságadatok szerintem sokkal emberközelibbek, mintha közvetlenül az ADC nyers mérési eredményeit használnánk.


A cikk még nem ért véget, lapozz!
Következő: »»   3 / 7
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem