Seite 1 von 1

Linearisierung der GP2D12 Abstandssensoren

Verfasst: 14 Feb 2006, 09:47
von noxon
Da die Abstandssensoren keine linearen Werte liefern, sondern einer speziellen Kurve folgen sollte man dies natürlich auch im Programm und natürlich auch im Simulator beachten.

Um das tun zu können linearisiert man am Besten die Kurve, sodass man beim doppeltem Abstand auch einen doppelt so hohen Messwert erhält.

Dazu habe ich eine Formel auf dieser Seite gefunden, die genau dies tut. Sie ist wirklich sehr einfach und scheint auch sehr genaue Messergebnisse zu liefern. Hinzukommt, dass die Messwerte auch noch individuell auf jeden Sensor einzeln abgestimmt werden und somit eventuelle Toleranzen, die bei der Produktion entstehen, ausgeglichen werden.

Falls der Link irgendwann vielleicht nicht mehr existiert gibt es hier die Formel noch einmal in Textform:

[pre]
D = A / (X - B)


D: Entfernung
X: Ausgabewert des Sensors
A: Steigung der Kurve A/X
B: Offset der Kurve


Die individuellen Konstanten A und B werden wie folgt ermittelt:

A = ((X' - X) * (D' * D)) / ( D - D')

B = ((D' * X') - (D * X)) / (D' - D)



D: Entfernung der ersten Messung (z.B.: bei 15 cm )
X: Ausgabewert der ersten Messung (z.B.: bei 15 cm )

D': Entfernung der zweiten Messung (z.B.: bei 80 cm )
X': Ausgabewert der zweiten Messung (z.B.: bei 80 cm )
[/pre]

Verfasst: 15 Feb 2006, 23:40
von Harald
Nach einer kleinen Messreihe mit fünf Messpunkten hatte ich meine Konstanten beisammen und wunderte mich, dass bei der Berechnung auf dem Papier alles wunderbar klappte, der Bot jedoch ziemlichen Mist anzeigte. Nach einigem Rätseln bin ich schließlich auf die Lösung gestoßen: Das Display zeigt nicht etwa den Sensormesswert für die Formel an, sondern 1023 - Messwert.
Halb so schlimm, man kann die Displayanzeige dennoch zur Kalibrierung verwenden, wenn man die Formel anpasst:

D = A / (1023 - X - B)

Aufpassen sollte man auch, wenn die Konstanten zu groß werden, bei mehr als 32767 könnte es bei einem int16 Probleme geben.

Verfasst: 16 Feb 2006, 10:26
von marvin
Hallo Harald,

könntest du deine gemessenen Werte hier mal veröffentlichen, zwecks Vergleich? Danke.

Gruß marvin

Verfasst: 16 Feb 2006, 20:11
von Harald
könntest du deine gemessenen Werte hier mal veröffentlichen, zwecks Vergleich?
Aber gerne: Mit der Formel

D/cm = A / (X - B)

gilt bei mir

A = 5084
B = 43

Grüße,
Harald

Verfasst: 16 Feb 2006, 23:12
von marvin
Vielen Dank, Harald

bei meinem Bot komme ich auf:

Rechter Sensor:
A = 5000
B = 100

Linker Sensor:
A = 4880
B = 100

Denke, das liegt innerhalb der Toleranz.
Anbei eine Excel Tabelle mit den Messwerten.

Gruß marvin