Entfernungsmessung mit dem Sharp IR Sensor

By | 26. Januar 2017

Der Sharp GP2Y0A02YK IR Infrarot Sensor ist ein Distanz-Sensor auf optischer Basis mit Analogausgang. Er arbeitet nach dem Triangulationsprinzip mit integriertem PSD-Chip. Die Ansteuerung ist sehr einfach: Es müssen nur +5 V und Masse angelegt werden. Am Pin Vo liegt dann eine positive, analoge Spannung an, die je nach Objektentfernung zwischen 0,4 – 2,8 V liegt. Die Spannungsänderung ist nicht linear. Die Reichweite erstreckt sich von ca. 20 cm bis 150 cm.

 

Die einfachste Form den Sensor in Betrieb zu nehmen ist die Verwendung der frei erhältlichen Bibliothek (SharpIR.h). Damit gestaltet sich die Nutzen sehr einfach, da nach der Initialisierung eines Sensor-Objekts die Methode get.Distance bereit gestellt wird, die sämtlichen Berechnungsschritte übernimmt, um aus dem analogen Spannungswert des Sensorelements die entsprechende Entfernung zu bestimmen. Der Programmcode gestaltet sich daher auch sehr kompakt:

Möchte man den Sensor die Sache selbst in die Hand nehmen und den Sensor ohne Bibliothek in Betrieb nehmen, muss man als erstes den Spannungswert der Sensorzelle einlesen und entsprechend umrechnen, da der eingelesene Wert zwischen 0 und 1024 liegt und noch keine Spannung anzeigt. Durch Multiplikation mit dem Faktor (5V/1024) erhält man dann aber einen Spannungswert, der  ein Maß für die Distanz darstellt.

Im nächsten Schritt müssen wir herausfinden, welche Distanz der gemessenen Spannung entspricht. Die Kurve in Abbildung 3 des Datenblatts ist die einzige Quelle, die den Zusammenhang zwischen Spannung und gemessenen Abstand darstellt.

Da es keine algebraische Beschreibung des Zusammenhangs zwischen Distanz und Spannungs-Wert gibt, benötigen wir eine andere Methode um den Abstand zu berechnen.

Im Internet findet man verschiedene Berechnungsformen. Im folgenden Listig wird eine Approximation mit einer Exponentialkurve verwendet. Da es sich, wie aus dem Datenblatt ersichtlich ist, um eine fallende Kurve handelt, wird ein negativer Exponnent verwendet. Die Faktoren 65 und -1.1 sind durch systematisches Probieren ermittelt worden.

    \[ distance = 65* volts^{-1.10} \]

Diese Werte müssen dann auch mit dem eigenen Sensor überprüft und ggf. etwas angepasst werden. Das entsprechende Arduino Programm ist im folgenden Listing dargestellt:

Eine weitere Möglichkeit bestünde darin, zu versuchen aus dem Diagramm im Datenblatts eine Liste von Wertepaaren (siehe nebenstehende Tabelle) zu ermittelten, und über Interpolationstechniken eine algebraische Beschreibung z.B. ein Polynom höheren Grades zu bestimmen. Programme wie Mathematica oder Mathlab bieten sich für eine derartige Aufgabe an.

Ebenso wäre es denkbar, die Tabelle noch etwas höher aufzulösen und diese Daten dann in einem Array abzulegen. Und darüber dann die Entfernung zu bestimmen.

Alles in allem bleibt es aber eine nicht ganz einfache Aufgabe auf Basis der zur Verfügung stehenden Informationen präzise Entfernungen zu bestimmen. Ohne zusätzliche – wie auch immer geartete –Kalibierungsschritte wird man zu keinen präzisen Aussagen kommen.

Ich denke aber dass die erreichte Genauigkeit für viele Anwendungsbereiche ausreichend ist, so dass man dieses Sensor auch aufgrund seiner unkomplizierten Inbetriebnahme sehr universell einsetzen kann.