Infrarotsensor mit Matlab/Simulink: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 10: Zeile 10:
==Aufgabenstellung==
==Aufgabenstellung==


Die Aufgabe in der Lehrveranstaltung [[BSE_Signalverarbeitende_Systeme| Signalverarbeitende Systeme]] aus dem Master-Studiengang Business and Systems Engineering der Hochschule Hamm-Lippstadt war es, semesterbegleitend einen zugeteilten Sensor mit der Hilfe von MATLAB/Simulink auszulesen und dessen Signalverarbeitungskette zu beschreiben, zu untersuchen und zu verstehen.
Im Rahmen der Lehrveranstaltung [[BSE_Signalverarbeitende_Systeme| Signalverarbeitende Systeme]] im Master-Studiengang Business and Systems Engineering der Hochschule Hamm-Lippstadt war es Aufgabe, einen zugeteilten Sensor mit der Hilfe der Sowftware MATLAB/Simulink auszulesen und dessen Signalverarbeitungskette zu beschreiben, zu untersuchen und zu verstehen.


==Sensor==
==Sensor==
[[Datei: High-precision-medium-range-infrared-distance-sensor-for-nxt-or-ev3.jpg |thumb|300px|right|Abb. 1: High Precision Medium Range Infrarotsensor für NXT und EV3<ref name=" High Precision Medium Range Infrarotsensor für NXT und EV3">  http://www.mindsensors.com/92-thickbox_default/high-precision-medium-range-infrared-distance-sensor-for-nxt-or-ev3.jpg] Abgerufen am 02.07.2018</ref>]]
[[Datei: High-precision-medium-range-infrared-distance-sensor-for-nxt-or-ev3.jpg |thumb|300px|right|Abb. 1: High Precision Medium Range Infrarotsensor für NXT und EV3<ref name=" High Precision Medium Range Infrarotsensor für NXT und EV3">  http://www.mindsensors.com/92-thickbox_default/high-precision-medium-range-infrared-distance-sensor-for-nxt-or-ev3.jpg] Abgerufen am 02.07.2018</ref>]]


Bei dem in der Lehrveranstaltung genutzten Sensor mit dem Namen [http://www.mindsensors.com/ev3-and-nxt/112-high-precision-medium-range-infrared-distance-sensor-for-nxt-or-ev3| DIST-Nx-v3] handelt es sich um ein Sensormodul der Firma [http://www.mindsensors.com/| mindsensors.com] welches es ermöglicht einen Infrarotsensor mit einem [https://de.wikipedia.org/wiki/Lego_Mindstorms Lego Mindstorms] NXT oder EV3 zu verbinden um eine Distanz zu messen. Bei dem dabei verwendeten Infrarotsensor handelt es sich um einen Sensor der Firma Sharp mit der Bezeichung 2Y0A21. Das [http://www.mindsensors.com/ev3-and-nxt/112-high-precision-medium-range-infrared-distance-sensor-for-nxt-or-ev3| DIST-Nx-v3] Modul ist kein Lego Produkt und wurde von [http://www.mindsensors.com/ mindsensors.com] für die Verwendung mit [https://de.wikipedia.org/wiki/Lego_Mindstorms Lego Mindstorms] Produkten entwickelt. Dazu wurde die in Abbildung 1 zu sehende I²C Schnittstelle inklusive einer vorverarbeitenden Schaltung in dem Modul verbaut. Diese Schaltung ist nicht bekannt und geht auch nicht aus den Dokumentationen von [http://www.mindsensors.com/ mindsensors.com] hervor. Es ist anzunehmen, dass ein Mikrocontroller verbaut wurde, da dieser zum Aufbau einer Verbindung über I²C benötigt wird. Über dies hinaus ist die sensorseitig vorhandene Schnittstelle des Sharp Sensors weiterhin nutzbar. Diese besteht aus einer JST (Japan Solderless Terminals) Buchse mit drei Pins.
Bei dem in der Lehrveranstaltung genutzten Sensor mit dem Namen [http://www.mindsensors.com/ev3-and-nxt/112-high-precision-medium-range-infrared-distance-sensor-for-nxt-or-ev3| DIST-Nx-v3] handelt es sich um ein Sensormodul der Firma [http://www.mindsensors.com/| mindsensors.com], welches es ermöglicht einen Infrarotsensor mit einem [https://de.wikipedia.org/wiki/Lego_Mindstorms Lego Mindstorms] NXT oder EV3 zu verbinden, um eine Distanz zu messen. Der verwendete Infrarotsensor ist ein Sensor der Firma Sharp mit der Bezeichung 2Y0A21. Das [http://www.mindsensors.com/ev3-and-nxt/112-high-precision-medium-range-infrared-distance-sensor-for-nxt-or-ev3| DIST-Nx-v3] Modul ist kein Lego Produkt und wurde von [http://www.mindsensors.com/ mindsensors.com] für die Verwendung in Verbindung mit [https://de.wikipedia.org/wiki/Lego_Mindstorms Lego Mindstorms] Produkten entwickelt. Dazu wurde die in Abbildung 1 zu sehende I²C Schnittstelle inklusive einer vorverarbeitenden Schaltung in dem Modul verbaut. Diese Schaltung ist nicht bekannt und geht auch nicht aus den Dokumentationen von [http://www.mindsensors.com/ mindsensors.com] hervor. Es ist anzunehmen, dass ein Mikrocontroller verbaut wurde, welcher zum Aufbau einer Verbindung über I²C benötigt wird. Darüber hinaus ist die sensorseitig vorhandene Schnittstelle des Sharp Sensors weiterhin nutzbar. Diese besteht aus einer JST (Japan Solderless Terminals) Buchse mit drei Pins.


Da es Inhalt der Aufgabenstellung war, sich möglichst nah mit einem Sensor auseinander zu setzen, wird im folgenden Artikel der Sensor ausschließlich über die sensorseitige Schnittstelle ausgelesen. Somit wird die modulseitige Nachverarbeitung der Sensorwerte umgangen um einen genaueren Blick auf die Funktionswiese und das Verhalten des Sharp Sensors zu erhalten.
Da die Aufgabenstellung eine möglichst detaillierte Auseinandersetzung mit einem Sensor behandelt, wird im folgenden Artikel der Sensor ausschließlich über die sensorseitige Schnittstelle ausgelesen. Somit wird die modulseitige Nachverarbeitung der Sensorwerte umgangen, um einen genaueren Blick auf die Funktionswiese und das Verhalten des Sharp Sensors zu erhalten.
<br/><br/>
<br/><br/>


'''Sharp 2Y0A21:'''
'''Sharp 2Y0A21:'''


Bei dem verwendeten Infrarotsensor handelt es sich um einen Infrarot Abstandssensor der Firma Sharp mit der Bezeichnung 2Y0A21.  
Bei dem verbauten Infrarotsensor handelt es sich um einen Infrarot Abstandssensor der Firma Sharp mit der Bezeichnung 2Y0A21.  


Der Sensor besitzt folgende Technische Daten:
Der Sensor besitzt folgende Technische Daten:
Zeile 30: Zeile 30:
*Betriebsspannung zwischen 4,5 und 5,5 Volt
*Betriebsspannung zwischen 4,5 und 5,5 Volt
*analoge Ausgangsspannung zwischen 0 und 5 Volt
*analoge Ausgangsspannung zwischen 0 und 5 Volt
*Abmessungen 13 x 44,5 x 13,5 mm (Höhe x Breite x Tiefe).
*Abmessungen 13 x 44,5 x 13,5 Millimeter (Höhe x Breite x Tiefe).
<br/><br/>
<br/><br/>
Wie in Abbildung 2 zu erkennen ist, besteht der Infrarotsensor aus einem optischen Positionssensor ([https://de.wikipedia.org/wiki/Position_Sensitive_Device Position Sensitive Device]), einer Infrarot Diode und einer signalverarbeitenden Schaltung. Die Reflektivität des gemessenen Objekts, die Umgebungstemperatur und die Betriebsdauer des Sensors werden nicht in die Abstandsmessung eingerechnet. Bei der Triangulation wird, wie in Abbildung 3 dargestellt, der Winkel des Infrarotlichts welches vom zu messenden Gegenstand reflektiert wird gemessen. In Abhängigkeit vom Winkel verändert sich die Ausgangsspannung des Sensors zwischen 0 und 5 Volt. Mithilfe der im Datenblatt angegebenen Kennlinie (Abbildung 4) kann die Ausgangsspannung in den Abstand umgerechnet werden. Der Mindestabstand des Sensors, 10 Zentimeter, entspricht somit 2,3 Volt Ausgangsspannung. Bei dem maximalen Abstand von 80 Centimetern beträgt die Ausgangsspannung 0,4 Volt. Der Sensor wird wie in Abbildung 5 dargestellt mit einem Mikrocontroller verbunden.
Wie in Abbildung 2 zu erkennen ist, besteht der Infrarotsensor aus einem optischen Positionssensor ([https://de.wikipedia.org/wiki/Position_Sensitive_Device Position Sensitive Device]), einer Infrarot Diode und einer signalverarbeitenden Schaltung. Die Reflektivität des gemessenen Objekts, die Umgebungstemperatur und die Betriebsdauer des Sensors werden nicht in die Abstandsmessung eingerechnet. Bei der Triangulation wird der Winkel des Infrarotlichts, welches vom zu messenden Gegenstand reflektiert wird, gemessen. (siehe Abbildung 3) In Abhängigkeit vom Winkel verändert sich die Ausgangsspannung des Sensors zwischen 0 und 5 Volt. Mithilfe der im Datenblatt angegebenen Kennlinie (siehe Abbildung 4) kann die Ausgangsspannung in den Abstand umgerechnet werden. Der Mindestabstand des Sensors (10 Zentimeter) entspricht somit 2,3 Volt Ausgangsspannung. Bei dem maximal messbaren Abstand von 80 Zentimetern beträgt die Ausgangsspannung 0,4 Volt. Der Sensor wird, entsprechend Abbildung 5, mit einem Mikrocontroller verbunden.
{|align="left"
{|align="left"
|[[Datei: Infrarotsensor Blockschaldbild.PNG |thumb|350px|right|Abb. 2: Blockschaltbild des Infrarotsensors <ref name=" Blockschaltbild des Infrarotsensors ">  http://www.sharp-world.com/products/device/lineup/data/pdf/datasheet/gp2y0a21yk_e.pdf] Seite 2, Abgerufen am 25.05.2018</ref>]]
|[[Datei: Infrarotsensor Blockschaldbild.PNG |thumb|350px|right|Abb. 2: Blockschaltbild des Infrarotsensors <ref name=" Blockschaltbild des Infrarotsensors ">  http://www.sharp-world.com/products/device/lineup/data/pdf/datasheet/gp2y0a21yk_e.pdf] Seite 2, Abgerufen am 25.05.2018</ref>]]
Zeile 45: Zeile 45:
==Signalverarbeitung==
==Signalverarbeitung==


Um die analogen Sensordaten des Sharp 2Y0A21 Infrarotsensors in MATLAB oder für eine andere Anwendung nutzen zu können, ist es nötig diese zu verarbeiten und an einer digitalen Schnittstelle zur Weitergabe zur Verfügung zu stellen. Die Werte sollen wie in der Aufgabenstellung beschrieben in MATLAB verarbeitet, möglicherweise gefiltert und grafisch dargestellt werden. Im Folgenden sollen die Schritte beschrieben werden, die benötigt wurden um dies zu realisieren.  
Um die analogen Sensordaten des Sharp 2Y0A21 Infrarotsensors in MATLAB oder für eine andere Anwendung nutzen zu können, ist es nötig, diese zu verarbeiten und in digitaler Form an einer Schnittstelle (in dies Fall USB) für die weitere Verarbeitung, wie zum Beispiel in einem MATLAB Programm, zur Verfügung zu stellen. Die Werte sollen wie in der Aufgabenstellung beschrieben in MATLAB verarbeitet, möglicherweise gefiltert und grafisch dargestellt werden. Im Folgenden werden die Schritte beschrieben, die benötigt werden um dies zu realisieren.  


===Hardwareaufbau===
===Hardwareaufbau===


[[Datei: Infrarotsensor Messaufbau.png |thumb|300px|right|Abb. 6: Hardwareaufbau]]
[[Datei: Infrarotsensor Messaufbau.png |thumb|300px|right|Abb. 6: Hardwareaufbau]]
Herzstück des Hardwareaufbaus ist das Sensormodul, welches den Sharp 2Y0A21 beinhaltet. Dieses ist, wie die Abbildung 6 zeigt, mit der Hilfe von Jumper-Kabeln über den sensorseitigen Anschluss mit dem Arduino UNO verbunden. Der Vo Pin des Sensors ist mit der Ausgangsspannung belegt und wird an den analogen Input Port A0 des Arduino UNO angeschlossen. Der GND des Sensors wird mit dem Ground des Arduino UNO verbunden. Der Vcc Pin des Sensors ist mit der Versorgungsspannung des Sensors belegt und wird an die 5V Spannung des Arduino UNO angeschlossen. Da die Sensorsignale analog an den Arduino UNO übertragen werden ist kein Bussystem zur Übertragung der Sensordaten nötig. Der Arduino UNO ist über die vorhandene USB Schnittstelle mit einem PC verbunden. Über diese Verbindung bezieht er 5 Volt Versorgungsspannung für sich und den Sensor. Der PC führt MATLAB aus, welches das Programm zur weiteren Verarbeitung der Daten beinhaltet. Dieses bekommt über den COM-Port des PCs Zugriff auf die digitalen Sensordaten.
Herzstück des Hardwareaufbaus ist das Sensormodul, welches den Sharp 2Y0A21 beinhaltet. Dieses ist, wie Abbildung 6 zeigt, mit Hilfe von Jumper-Kabeln über den sensorseitigen Anschluss mit dem Arduino UNO verbunden. Der Vo Pin des Sensors ist mit der Ausgangsspannung belegt und wird an den analogen Input Port A0 des Arduino UNO angeschlossen. Der GND Pin des Sensors wird mit dem Ground des Arduino UNO verbunden. Der Vcc Pin des Sensors ist mit der Versorgungsspannung des Sensors belegt und wird an die 5V Spannung des Arduino UNO angeschlossen. Da die Sensorsignale analog an den Arduino UNO übertragen werden, ist kein Bussystem zur Übertragung der Sensordaten nötig. Der Arduino UNO ist über die vorhandene USB Schnittstelle mit einem PC verbunden. Der PC führt MATLAB aus, welches das Programm zur weiteren Verarbeitung der Daten beinhaltet. Das Programm erhält über den COM-Port des PCs Zugriff auf die digitalen Sensordaten vom Mikrocontroller.
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
===Mikrocontroller===
===Mikrocontroller===
Zeile 56: Zeile 56:
[[Datei: Infrarotsensor Arduino UNO.png |thumb|250px|right|Abb. 7: Arduino UNO]]
[[Datei: Infrarotsensor Arduino UNO.png |thumb|250px|right|Abb. 7: Arduino UNO]]


Arduino UNO Abbildung einfügen
Der DIST-Nx-v3 Sensor verfügt über zusätzliche vorverarbeitende Elektronik, welche es ermöglicht, die rohen Sensorsignale des Sharp 2Y0A21 zu filtern und eine Kommunikation mit einem Mikrocontroller über I²C herzustellen. Im Fall der Aufgabenstellung ist es nötig, einen Mikrocontroller hinzuzuziehen, welcher die Umwandlung der analogen in digitalen Signale durchführt und diese zur Weiterverarbeitung an einen MATLAB ausführenden PC überträgt.  Hierzu wurde ein Arduino UNO gewählt. (Abbildung 7) Dieser verfügt über AD-Wandler, welche in der Lage sind, das analoge Signal zu digitalisieren. Das gewandelte Signal wird daraufhin über die vorhandene USB-Schnittstelle an einen PC zur Weiterverarbeitung übertragen. Der Arduino UNO arbeitet mit 5 Volt Versorgungsspannung, welche er gleichzeitig zur Datenübertragung über die USB-Schnittstelle des PCs bezieht.
Der DIST-Nx-v3 Sensor verfügt über zusätzliche vorverarbeitende Elektronik, welche es ermöglicht die rohen Sensorsignale des Sharp 2Y0A21 zu Filtern und eine Kommunikation mit einem Mikrocontroller über I²C herzustellen. Im Fall der Aufgabenstellung ist es nötig einen Mikrocontroller hinzuzuziehen, welcher die Umwandlung der analogen in digitalen Signale durchführt und diese zur Weiterverarbeitung an einen MATLAB ausführenden PC überträgt.  Hierzu wurde ein Arduino UNO gewählt, dieser ist in Abbildung 7 zu sehen. Dieser verfügt über AD-Wandler, welche in der Lage sind das analoge Signal zu digitalisieren. Das gewandelte Signal wir daraufhin über die vorhandene USB-Schnittstelle einem PC zur Weiterverarbeitung zur Verfügung gestellt. Der Arduino UNO arbeitet mit 5 Volt Versorgungsspannung, welche er gleichzeitig zur Datenübertragung über die USB-Schnittstelle des PCs bezieht.
<br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/>


Zeile 63: Zeile 62:


[[Datei: Infrarotsensor Mikrocontroller.png |thumb|250px|right|Abb. 8: ATmega328p Mikrocontroller des Arduino UNO]]
[[Datei: Infrarotsensor Mikrocontroller.png |thumb|250px|right|Abb. 8: ATmega328p Mikrocontroller des Arduino UNO]]
Um die analogen Sensorsignale des Infrarotsensors verarbeiten zu können, müssen diese zunächst digitalisiert werden. Zu diesem Zweck können die Analog-Digital-Umsetzer (ADU) des auf dem Arduino UNO operierenden ATmega328p Mikrocontrollers genutzt werden. Der Mikrocontroller verfügt über 10 Bit aufgelöste ADUs welche nach dem Prinzip der sukzessiven Approximation agieren. Bei diesem Vorgehen wird ein ständiger Vergleich zwischen der analogen Eingangsspannung des ADUs mit einer Referenzspannung durchgeführt. Bei jedem Durchlauf wird die Referenzspannung so geändert, dass sie sich der Eingangsspannung annähert. Die Auflösung des ADUs beschreibt gleichzeitig die Anzahl an Taktzyklen die erforderlich sind um ein analoges Signal zu digitalisieren. <br/><br/>
Um die analogen Sensorsignale des Infrarotsensors verarbeiten zu können, müssen diese zunächst digitalisiert werden. Diese Aufgabe übernehmen die Analog-Digital-Umsetzer (ADU) des ATmega328p Mikrocontrollers, welcher auf dem Arduino UNO verbaut ist. Der Mikrocontroller verfügt über 10 Bit aufgelöste ADUs, welche nach dem Prinzip der sukzessiven Approximation agieren. Es wird bei diesem Vorgehen ein ständiger Vergleich zwischen der analogen Eingangsspannung des ADUs mit einer Referenzspannung durchgeführt. Bei jedem Durchlauf wird die Referenzspannung so angepasst, dass sie sich der Eingangsspannung annähert. Die Auflösung des ADUs beschreibt gleichzeitig die Anzahl an Taktzyklen, die erforderlich sind um ein analoges Signal zu digitalisieren. <br/><br/>
Der Analog-Digital-Umsetzter besitzt folgende Technische Daten:
Der Analog-Digital-Umsetzter weist folgende Technische Daten auf:
[[Datei: Infrarotsensor Sukzessive Approximation.gif |thumb|450px|right|Abb. 7: Sukzessive Approximation <ref name=" Sukzessive Approximation ">  http://extras.springer.com/2005/978-3-540-20942-3/MRT/mrt-html/pict/B70404.gif] Abgerufen am 02.07.2018</ref>]]
[[Datei: Infrarotsensor Sukzessive Approximation.gif |thumb|450px|right|Abb. 7: Sukzessive Approximation <ref name=" Sukzessive Approximation ">  http://extras.springer.com/2005/978-3-540-20942-3/MRT/mrt-html/pict/B70404.gif] Abgerufen am 02.07.2018</ref>]]


Zeile 72: Zeile 71:
*Eingangsspannung 0 Volt (Ground) bis Eingangsspannung des Mikrocontrollers abzüglich eines LSB
*Eingangsspannung 0 Volt (Ground) bis Eingangsspannung des Mikrocontrollers abzüglich eines LSB
<br/>
<br/>
Die Vorgehensweise des ADUs lässt sich anhand von Abbildung 7 erläutern. Im ersten Schritt wird das höchstwertige Bit (most significat bit) mit der Eingangsspannung des ADU verglichen. Wenn die Eingangsspannung größer als das MSB ist, wird das Bit gesetzt. Wenn die Eingangsspannung jedoch kleiner als das MSB ist wird das Bit auf Null zurückgesetzt. Dieser Schritt dauert einen Taktzyklus. Im zweiten Schritt wird das nächst niedrigere Bit gesetzt. Bei jedem Schritt halbiert sich die Wertigkeit des Bits. Bei dem erneuten Vergleich der Spannungen werden die Wertigkeiten aller vorherigen Bits addiert. Wenn diese Summe kleiner als die Eingangsspannung ist, wir das zweite Bit gesetzt. Wenn die Eingangsspannung jedoch niedriger ist als die Summe, wird das Bit wiederum zurückgesetzt. Dieser Ablauf wird für jedes Bit der Auflösung durchgeführt. Sind alle Bits überprüft worden, resultiert die entstandene Bitfolge als digitales Abbild der Eingangsspannung.
Die Vorgehensweise des ADUs lässt sich anhand von Abbildung 7 erläutern. Im ersten Schritt wird das höchstwertige Bit (most significat bit) mit der Eingangsspannung des ADU verglichen. Wenn die Eingangsspannung größer als das MSB ist, wird das Bit gesetzt. Wenn die Eingangsspannung jedoch kleiner als das MSB ist, wird das Bit auf Null zurückgesetzt. Dieser Schritt dauert einen Taktzyklus. Im zweiten Schritt wird das nächst niedrigere Bit gesetzt. Bei jedem Schritt halbiert sich die Wertigkeit des Bits. Bei dem erneuten Vergleich der Spannungen werden die Wertigkeiten aller vorherigen Bits addiert. Wenn diese Summe kleiner als die Eingangsspannung ist, wir das zweite Bit gesetzt. Wenn die Eingangsspannung jedoch niedriger ist als die Summe, wird das Bit wiederum zurückgesetzt. Dieser Ablauf erfolgt für jedes Bit der 10 Bits Auflösung. Sind alle Bits überprüft worden, resultiert die entstandene Bitfolge als digitales Abbild der Eingangsspannung.
Bei der vorliegenden Anwendung wird die maximale Ausgangsspannung des Sensors von 5 Volt durch die 10 Bit Auflösung des ADUs die Spannung als Wert zwischen 0 und 1024 (210) darstellt.  
Bei der vorliegenden Anwendung wird die maximale Ausgangsspannung des Sensors von 5 Volt durch die 10 Bit Auflösung des ADUs geteilt. Damit ist der ADU in der Lage, die Spannung auf die Werte von 0 bis 1024 (<math>2^{10}</math>) abzubilden.  
<br/><br/>
<br/><br/>
Das LSB hat eine Wertigkeit und der Sensor somit eine Auflösung von:
Das LSB hat eine Wertigkeit und der Sensor somit eine Auflösung von:
Zeile 79: Zeile 78:
<math>  \frac{5 V}{1023} = 4,89 mV. </math>
<math>  \frac{5 V}{1023} = 4,89 mV. </math>
<br/><br/>
<br/><br/>
Der erste Vergleich des ADU startet mit dem MSB, welches folgende Wertigkeit Aufweist:  
Der erste Vergleich des ADU startet mit dem MSB, welches folgende Wertigkeit aufweist:  
<br/><br/>
<br/><br/>
<math>  \frac{5 V}{2} = 2,5 mV. </math>
<math>  \frac{5 V}{2} = 2,5 mV. </math>
Zeile 87: Zeile 86:
===Digitale Signalverarbeitung===
===Digitale Signalverarbeitung===


Die digitale Signalverarbeitung beginnt, sobald die analogen Sensorwerte von dem Analog-Digital-Umsetzter vom Mikrocontroller des Arduino UNO in digitale Signale umgewandelt wurden. Dem Datenblatt des Sensors ist zu entnehmen, dass für eine Messung 38.3ms ± 9.6ms benötigt. Daher wird ein Code für den Arduino geschrieben, welcher die Sensorsignale mit einem Takt von 50 Millisekunden abgetastet. Als Sensorwert wird ein Wert vom analogen Eingangs-Pin A0 eingelesen. Der Sensorwert wird daraufhin an die serielle Schnittstelle des Arduino UNOs gesendet. <br/><br/>
Die digitale Signalverarbeitung beginnt, sobald die analogen Sensorwerte durch den Analog-Digital-Umsetzter des Mikrocontrollers in digitale Signale umgewandelt wurden. Dem Datenblatt des Sensors ist zu entnehmen, dass für eine Messung 38.3 Millisekunden ± 9.6 Millisekunden benötigt werden. Daher wird ein Code für den Arduino geschrieben, welcher die Sensorsignale in einem Takt von 50 Millisekunden abgetastet. Als Sensorwert wird ein Wert vom analogen Eingangs-Pin A0 eingelesen. Der Sensorwert wird daraufhin an die serielle Schnittstelle des Arduino UNOs gesendet. <br/><br/>
Der Code des '''Arduino''' lautet wie folgt: <br/><br/>
Der Code des '''Arduino''' lautet wie folgt: <br/><br/>
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
Zeile 105: Zeile 104:
</syntaxhighlight>
</syntaxhighlight>
<br/><br/>
<br/><br/>
Die Daten welche an der seriellen Schnittstelle anliegen werden daraufhin von MATLAB ausgelesen. Das MATLAB Programm nutzt dazu die  funktionen fopen, fgetl und fclose um mit der seriellen Schnittstelle zu Kommunizieren. Dazu muss ein Objekt erzeugt werden welches die Informationen
Die Daten, welche an der seriellen Schnittstelle anliegen, werden daraufhin von MATLAB ausgelesen. Das MATLAB Programm nutzt dazu die  funktionen fopen, fgetl und fclose, um mit der seriellen Schnittstelle zu kommunizieren. Dazu muss ein Objekt erzeugt werden, welches die Informationen
*Nummer des COM-Ports
*Nummer des COM-Ports
*Baud Rate des Arduino UNOs
*Baud Rate des Arduino UNOs
*Bit Breite
*Bit Breite
enthält. Mit diesen Informationen kann eine Verbindung zur seriellen Schnittstelle hergestellt werden. Die Rückgabewerte der fgetl-Funktion sind jedoch in ASCII Format und müssen daher zunächst auf einen Zahlenwert gecastet werden. Erst nach diesen Schritten kann mit dem Sensorwert gerechnet werden. Um aus dem übertragenen Zahlenwert den Spannungswert des Infrarotsensors zu errechnen wir eine Umrechnung benötigt
enthält. Mit diesen Informationen kann eine Verbindung zur seriellen Schnittstelle hergestellt werden. Die Rückgabewerte der fgetl-Funktion sind jedoch in ASCII Format und müssen daher zunächst auf einen Zahlenwert gecastet werden. Erst nach diesen Schritten kann mit dem Sensorwert gerechnet werden. Um aus dem übertragenen Zahlenwert den Spannungswert des Infrarotsensors zu errechnen, wird eine Umrechnung benötigt
<br/><br/>
<br/><br/>
<math> V= Zahlenwert \cdot \frac{5 V}{1023} </math>
<math> V= Zahlenwert \cdot \frac{5 V}{1023} </math>
Zeile 129: Zeile 128:
</syntaxhighlight>
</syntaxhighlight>
<br/><br/>
<br/><br/>
Um die richtigen Distanzen zu den gemessenen Spannungen zu erhalten wurde eine Lookup-Tabelle implementiert. Diese ist eine Nachbildung der Infrarotsensor Kennlinie aus Abbildung 4 für die Distanzen zwischen 10 um 80 Zentimetern. Dies wurde auf Grund dessen, dass die Kennlinie aus Geraden zusammengesetzt wurde, ebenfalls als zusammengesetzte Funktion aus Geradengleichungen realisiert. Um eine Berechnung der Distanzen zu den jeweiligen Spannungen zu realisieren wurde die Funktion umgestellt. Die im Datenblatt dargestellte Kennlinie stellt den Zusammenhang zwischen Distanz und Spannung dar. Jedoch wird die Distanz auf der x-Achse angegeben. Die die benötigte Berechnung wird die Spannung auf der x-Achse benötigt. Dazu wurden bei der Aufstellung der Geradengleichungen die Achsen vertauscht.  
Um die richtigen Distanzen zu den gemessenen Spannungen zu erhalten, wurde eine Lookup-Tabelle implementiert. Diese ist eine Nachbildung der Infrarotsensor Kennlinie aus Abbildung 4 für die Distanzen zwischen 10 und 80 Zentimetern. Die sich die Kennlinie aus Geraden zusammengesetzt, wurde auch die zusammengesetzte Funktion aus Geradengleichungen realisiert. Um eine Berechnung der Distanzen zu den jeweiligen Spannungen zu erhalten, wurde die Funktion umgestellt. Die im Datenblatt dargestellte Kennlinie stellt den Zusammenhang zwischen Distanz und Spannung dar. Jedoch wird die Distanz auf der x-Achse angegeben. Für die benötigte Berechnung wird die Spannung auf der x-Achse benötigt. Dazu werden bei der Aufstellung der Geradengleichungen die Achsen vertauscht.  
Es ergibt sich folgende Funktion: <br/><br/>
Es ergibt sich folgende Funktion: <br/><br/>
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
Zeile 159: Zeile 158:
<br/><br/>
<br/><br/>


Mit Hilfe dieser Lookup-Tabelle werden die Sensorsignale in MATLAB in Distanzen umgerechnet. Dazu wird der Funktion ein Spannungswert übergeben. Die Funktion unterscheidet mit Hilfe der if-Bedingungen zwischen den verschiedenen Abschnitten. Daraufhin wird durch die hinterlegte Geradengleichung eine Distanz bestimmt. Diese Distanz wird als Rückgabewert der Funktion an das Hauptprogramm zurückgegeben.
Mit Hilfe dieser Lookup-Tabelle werden die Sensorsignale in MATLAB zu Distanzen umgerechnet. Dazu wird der Funktion ein Spannungswert übergeben. Die Funktion unterscheidet mit Hilfe der if-Bedingungen zwischen den verschiedenen Abschnitten. Daraufhin wird durch die hinterlegte Geradengleichung eine Distanz bestimmt. Diese Distanz wird als Rückgabewert der Funktion an das Hauptprogramm übergeben.
<br/><br/>
<br/><br/>
==Ergebnis==
==Ergebnis==

Version vom 5. Juli 2018, 19:47 Uhr


Autor: Janis Ostermann
Sensor: High Precision Medium Range Infrared distance sensor for NXT or EV3
Software: Arduino Software, MATLAB R2018a
Lehrveranstaltung: Signalverarbeitende Systeme im Sommersemester 2018
Dozent und Betreuer: Prof. Dr.-Ing. Ulrich Schneider

Aufgabenstellung

Im Rahmen der Lehrveranstaltung Signalverarbeitende Systeme im Master-Studiengang Business and Systems Engineering der Hochschule Hamm-Lippstadt war es Aufgabe, einen zugeteilten Sensor mit der Hilfe der Sowftware MATLAB/Simulink auszulesen und dessen Signalverarbeitungskette zu beschreiben, zu untersuchen und zu verstehen.

Sensor

Abb. 1: High Precision Medium Range Infrarotsensor für NXT und EV3[1]

Bei dem in der Lehrveranstaltung genutzten Sensor mit dem Namen DIST-Nx-v3 handelt es sich um ein Sensormodul der Firma mindsensors.com, welches es ermöglicht einen Infrarotsensor mit einem Lego Mindstorms NXT oder EV3 zu verbinden, um eine Distanz zu messen. Der verwendete Infrarotsensor ist ein Sensor der Firma Sharp mit der Bezeichung 2Y0A21. Das DIST-Nx-v3 Modul ist kein Lego Produkt und wurde von mindsensors.com für die Verwendung in Verbindung mit Lego Mindstorms Produkten entwickelt. Dazu wurde die in Abbildung 1 zu sehende I²C Schnittstelle inklusive einer vorverarbeitenden Schaltung in dem Modul verbaut. Diese Schaltung ist nicht bekannt und geht auch nicht aus den Dokumentationen von mindsensors.com hervor. Es ist anzunehmen, dass ein Mikrocontroller verbaut wurde, welcher zum Aufbau einer Verbindung über I²C benötigt wird. Darüber hinaus ist die sensorseitig vorhandene Schnittstelle des Sharp Sensors weiterhin nutzbar. Diese besteht aus einer JST (Japan Solderless Terminals) Buchse mit drei Pins.

Da die Aufgabenstellung eine möglichst detaillierte Auseinandersetzung mit einem Sensor behandelt, wird im folgenden Artikel der Sensor ausschließlich über die sensorseitige Schnittstelle ausgelesen. Somit wird die modulseitige Nachverarbeitung der Sensorwerte umgangen, um einen genaueren Blick auf die Funktionswiese und das Verhalten des Sharp Sensors zu erhalten.

Sharp 2Y0A21:

Bei dem verbauten Infrarotsensor handelt es sich um einen Infrarot Abstandssensor der Firma Sharp mit der Bezeichnung 2Y0A21.

Der Sensor besitzt folgende Technische Daten:

  • Arbeitsbereich von 10 bis 80 Zentimetern
  • Präzisionsbereich zwischen 10 und 40 Zentimetern (laut Hersteller)
  • Stromaufnahme 30 Milliampere
  • Betriebsspannung zwischen 4,5 und 5,5 Volt
  • analoge Ausgangsspannung zwischen 0 und 5 Volt
  • Abmessungen 13 x 44,5 x 13,5 Millimeter (Höhe x Breite x Tiefe).



Wie in Abbildung 2 zu erkennen ist, besteht der Infrarotsensor aus einem optischen Positionssensor (Position Sensitive Device), einer Infrarot Diode und einer signalverarbeitenden Schaltung. Die Reflektivität des gemessenen Objekts, die Umgebungstemperatur und die Betriebsdauer des Sensors werden nicht in die Abstandsmessung eingerechnet. Bei der Triangulation wird der Winkel des Infrarotlichts, welches vom zu messenden Gegenstand reflektiert wird, gemessen. (siehe Abbildung 3) In Abhängigkeit vom Winkel verändert sich die Ausgangsspannung des Sensors zwischen 0 und 5 Volt. Mithilfe der im Datenblatt angegebenen Kennlinie (siehe Abbildung 4) kann die Ausgangsspannung in den Abstand umgerechnet werden. Der Mindestabstand des Sensors (10 Zentimeter) entspricht somit 2,3 Volt Ausgangsspannung. Bei dem maximal messbaren Abstand von 80 Zentimetern beträgt die Ausgangsspannung 0,4 Volt. Der Sensor wird, entsprechend Abbildung 5, mit einem Mikrocontroller verbunden.

Abb. 2: Blockschaltbild des Infrarotsensors [2]
Abb. 3: Darstellung der Triangulation [3]
Abb. 4: Kennlinie des Infrarotsensors [4]
Abb. 5: Pin Belegung [5]

















Signalverarbeitung

Um die analogen Sensordaten des Sharp 2Y0A21 Infrarotsensors in MATLAB oder für eine andere Anwendung nutzen zu können, ist es nötig, diese zu verarbeiten und in digitaler Form an einer Schnittstelle (in dies Fall USB) für die weitere Verarbeitung, wie zum Beispiel in einem MATLAB Programm, zur Verfügung zu stellen. Die Werte sollen wie in der Aufgabenstellung beschrieben in MATLAB verarbeitet, möglicherweise gefiltert und grafisch dargestellt werden. Im Folgenden werden die Schritte beschrieben, die benötigt werden um dies zu realisieren.

Hardwareaufbau

Abb. 6: Hardwareaufbau

Herzstück des Hardwareaufbaus ist das Sensormodul, welches den Sharp 2Y0A21 beinhaltet. Dieses ist, wie Abbildung 6 zeigt, mit Hilfe von Jumper-Kabeln über den sensorseitigen Anschluss mit dem Arduino UNO verbunden. Der Vo Pin des Sensors ist mit der Ausgangsspannung belegt und wird an den analogen Input Port A0 des Arduino UNO angeschlossen. Der GND Pin des Sensors wird mit dem Ground des Arduino UNO verbunden. Der Vcc Pin des Sensors ist mit der Versorgungsspannung des Sensors belegt und wird an die 5V Spannung des Arduino UNO angeschlossen. Da die Sensorsignale analog an den Arduino UNO übertragen werden, ist kein Bussystem zur Übertragung der Sensordaten nötig. Der Arduino UNO ist über die vorhandene USB Schnittstelle mit einem PC verbunden. Der PC führt MATLAB aus, welches das Programm zur weiteren Verarbeitung der Daten beinhaltet. Das Programm erhält über den COM-Port des PCs Zugriff auf die digitalen Sensordaten vom Mikrocontroller.













Mikrocontroller

Abb. 7: Arduino UNO

Der DIST-Nx-v3 Sensor verfügt über zusätzliche vorverarbeitende Elektronik, welche es ermöglicht, die rohen Sensorsignale des Sharp 2Y0A21 zu filtern und eine Kommunikation mit einem Mikrocontroller über I²C herzustellen. Im Fall der Aufgabenstellung ist es nötig, einen Mikrocontroller hinzuzuziehen, welcher die Umwandlung der analogen in digitalen Signale durchführt und diese zur Weiterverarbeitung an einen MATLAB ausführenden PC überträgt. Hierzu wurde ein Arduino UNO gewählt. (Abbildung 7) Dieser verfügt über AD-Wandler, welche in der Lage sind, das analoge Signal zu digitalisieren. Das gewandelte Signal wird daraufhin über die vorhandene USB-Schnittstelle an einen PC zur Weiterverarbeitung übertragen. Der Arduino UNO arbeitet mit 5 Volt Versorgungsspannung, welche er gleichzeitig zur Datenübertragung über die USB-Schnittstelle des PCs bezieht.







Analog-Digital-Umsetzter

Abb. 8: ATmega328p Mikrocontroller des Arduino UNO

Um die analogen Sensorsignale des Infrarotsensors verarbeiten zu können, müssen diese zunächst digitalisiert werden. Diese Aufgabe übernehmen die Analog-Digital-Umsetzer (ADU) des ATmega328p Mikrocontrollers, welcher auf dem Arduino UNO verbaut ist. Der Mikrocontroller verfügt über 10 Bit aufgelöste ADUs, welche nach dem Prinzip der sukzessiven Approximation agieren. Es wird bei diesem Vorgehen ein ständiger Vergleich zwischen der analogen Eingangsspannung des ADUs mit einer Referenzspannung durchgeführt. Bei jedem Durchlauf wird die Referenzspannung so angepasst, dass sie sich der Eingangsspannung annähert. Die Auflösung des ADUs beschreibt gleichzeitig die Anzahl an Taktzyklen, die erforderlich sind um ein analoges Signal zu digitalisieren.

Der Analog-Digital-Umsetzter weist folgende Technische Daten auf:

Abb. 7: Sukzessive Approximation [6]
  • Auflösung von 10 Bit
  • Wandlungszeit 13 bis 260 Mikrosekunden
  • Genauigkeit +- 2 LSB (least significant bit)
  • Eingangsspannung 0 Volt (Ground) bis Eingangsspannung des Mikrocontrollers abzüglich eines LSB


Die Vorgehensweise des ADUs lässt sich anhand von Abbildung 7 erläutern. Im ersten Schritt wird das höchstwertige Bit (most significat bit) mit der Eingangsspannung des ADU verglichen. Wenn die Eingangsspannung größer als das MSB ist, wird das Bit gesetzt. Wenn die Eingangsspannung jedoch kleiner als das MSB ist, wird das Bit auf Null zurückgesetzt. Dieser Schritt dauert einen Taktzyklus. Im zweiten Schritt wird das nächst niedrigere Bit gesetzt. Bei jedem Schritt halbiert sich die Wertigkeit des Bits. Bei dem erneuten Vergleich der Spannungen werden die Wertigkeiten aller vorherigen Bits addiert. Wenn diese Summe kleiner als die Eingangsspannung ist, wir das zweite Bit gesetzt. Wenn die Eingangsspannung jedoch niedriger ist als die Summe, wird das Bit wiederum zurückgesetzt. Dieser Ablauf erfolgt für jedes Bit der 10 Bits Auflösung. Sind alle Bits überprüft worden, resultiert die entstandene Bitfolge als digitales Abbild der Eingangsspannung. Bei der vorliegenden Anwendung wird die maximale Ausgangsspannung des Sensors von 5 Volt durch die 10 Bit Auflösung des ADUs geteilt. Damit ist der ADU in der Lage, die Spannung auf die Werte von 0 bis 1024 () abzubilden.

Das LSB hat eine Wertigkeit und der Sensor somit eine Auflösung von:



Der erste Vergleich des ADU startet mit dem MSB, welches folgende Wertigkeit aufweist:




Digitale Signalverarbeitung

Die digitale Signalverarbeitung beginnt, sobald die analogen Sensorwerte durch den Analog-Digital-Umsetzter des Mikrocontrollers in digitale Signale umgewandelt wurden. Dem Datenblatt des Sensors ist zu entnehmen, dass für eine Messung 38.3 Millisekunden ± 9.6 Millisekunden benötigt werden. Daher wird ein Code für den Arduino geschrieben, welcher die Sensorsignale in einem Takt von 50 Millisekunden abgetastet. Als Sensorwert wird ein Wert vom analogen Eingangs-Pin A0 eingelesen. Der Sensorwert wird daraufhin an die serielle Schnittstelle des Arduino UNOs gesendet.

Der Code des Arduino lautet wie folgt:

int sensorPin = 0;
int sensorDelay = 50;
int sensorAdValue;
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  sensorAdValue = analogRead(sensorPin);
  Serial.println(sensorAdValue);
  delay(sensorDelay);
}



Die Daten, welche an der seriellen Schnittstelle anliegen, werden daraufhin von MATLAB ausgelesen. Das MATLAB Programm nutzt dazu die funktionen fopen, fgetl und fclose, um mit der seriellen Schnittstelle zu kommunizieren. Dazu muss ein Objekt erzeugt werden, welches die Informationen

  • Nummer des COM-Ports
  • Baud Rate des Arduino UNOs
  • Bit Breite

enthält. Mit diesen Informationen kann eine Verbindung zur seriellen Schnittstelle hergestellt werden. Die Rückgabewerte der fgetl-Funktion sind jedoch in ASCII Format und müssen daher zunächst auf einen Zahlenwert gecastet werden. Erst nach diesen Schritten kann mit dem Sensorwert gerechnet werden. Um aus dem übertragenen Zahlenwert den Spannungswert des Infrarotsensors zu errechnen, wird eine Umrechnung benötigt



Diese Vorgehensweise wird in MATLAB folgendermaßen umgesetzt:

port =  'COM4';
baudRate = 9600;

serialArduino = serial(port,'BaudRate',baudRate,'DataBits',8);
fopen(serialArduino) % Verbindung mit serieller Schnittstelle aufbauen

ASCII = fgetl(serialArduino); % Sensorwert von serieller Schnittstelle auslesen
ArdV = str2num(ASCII); % Sensorwert von ASCII in Zahlenwert umwandeln
V = ArdV*(5/1023); % Umrechnungsfaktor auf Volt

fclose(serialArduino); % Verbindung mit serieller Schnittstelle beenden



Um die richtigen Distanzen zu den gemessenen Spannungen zu erhalten, wurde eine Lookup-Tabelle implementiert. Diese ist eine Nachbildung der Infrarotsensor Kennlinie aus Abbildung 4 für die Distanzen zwischen 10 und 80 Zentimetern. Die sich die Kennlinie aus Geraden zusammengesetzt, wurde auch die zusammengesetzte Funktion aus Geradengleichungen realisiert. Um eine Berechnung der Distanzen zu den jeweiligen Spannungen zu erhalten, wurde die Funktion umgestellt. Die im Datenblatt dargestellte Kennlinie stellt den Zusammenhang zwischen Distanz und Spannung dar. Jedoch wird die Distanz auf der x-Achse angegeben. Für die benötigte Berechnung wird die Spannung auf der x-Achse benötigt. Dazu werden bei der Aufstellung der Geradengleichungen die Achsen vertauscht. Es ergibt sich folgende Funktion:

function [ CM ] = LUT( V )

if V < 0.44
    CM = (-1)*(500)*V+290;
elseif V < 0.51
    CM = (-1)*(1000/7)*V+(930/7);
elseif V < 0.6 
    CM = (-1)*(1000/9)*V+(350/3);    
elseif V < 0.74 
    CM = (-1)*(500/7)*V+(650/7);    
elseif V < 0.93    
    CM = (-1)*(1000/19)*V+(1500/19);
elseif V < 1.01   
    CM = (-1)*(469/8)*V+(67617/800);
elseif V < 1.31    
    CM = (-1)*(177/10)*V+43.187;
elseif V < 1.65    
    CM = (-1)*(487/34)*V+38.76382353;    
else
    CM = (-1)*(171/22)*V+27.955;
 
end

end



Mit Hilfe dieser Lookup-Tabelle werden die Sensorsignale in MATLAB zu Distanzen umgerechnet. Dazu wird der Funktion ein Spannungswert übergeben. Die Funktion unterscheidet mit Hilfe der if-Bedingungen zwischen den verschiedenen Abschnitten. Daraufhin wird durch die hinterlegte Geradengleichung eine Distanz bestimmt. Diese Distanz wird als Rückgabewert der Funktion an das Hauptprogramm übergeben.

Ergebnis

Die durchgeführte Datenverarbeitung ermöglicht es erste Messungen durchzuführen. Die Ergebnisse der Messung sollen zeigen wie hoch ein möglicher Fehler der Messungen ausfällt. Dazu werden im Folgenden die verarbeiteten ungefilterten Messwerte analysiert, bewertet und möglicherweise anschließend daran eine Filterung durchgeführt.

Messunsicherheit:

Mit Hilfe der Lookup-Tabelle konnten Erste Messungen durchgeführt werden. Es zeigte sich dabei schnell, dass die gemessenen Werte stark rauschten. Um dies darzustellen wurde eine Messreihe durchgeführt.

Dabei wurde auch die Messunsicherheit berechnet. Sie berechnet sich wie folgt:



Die Messunsicherheit berechnet mit Hilfe der Konstanten der Stundent-t-Verteilung. Dieser kann aus der zugehörigen Tabelle Abgelesen werden. Für den Sensor wird dabei eine Überschreitungswahrscheinlichkeit von 95% gewählt, da dies bei industriellen Anwendungen, wie auch Messtechnik, einem üblichen Vertrauensniveau entspricht. Zusammen mit dem Stichprobenumfang n von 10 Messungen ergibt sich eine Konstante von 2,26. Des weiteren wird für die Berechnung der Messunsicherheit die Standardabweichung s benötigt. Diese berechnet sich folgendermaßen:




Die Standardabweichung berechnet sich aus dem Stichprobenumfang n, dem Mittelwert aller Werte der Stichprobe und den Messwerten .

Die Berechnungen der Messreihe lieferten folgende Ergebnisse:

Wahrer Wert (in cm) Messungen in cm Standardabweichung Messunsicherheit Vertrauensbereich
1 2 3 4 5 6 7 8 9 10
10 9,738 9,092 9,282 9,472 9,737 9,624 8,941 9,206 9,738 9,548 0,291 0,208 10 ± 0,208
15 15,474 15,684 15,013 15,127 15,264 15,684 14,709 14,937 15,089 15,684 0,350 0,250 15 ± 0,250
20 19,950 20,241 20,332 20,650 20,559 19,740 20,104 20,650 20,422 20,559 0,311 0,222 20 ± 0,222
25 22,742 22,697 21,969 22,242 22,742 22,515 22,560 21,969 22,742 22,378 0,306 0,219 25 ± 0,219
30 34,231 33,460 29,847 30,633 33,974 32,432 33,203 33,717 34,231 31,661 1,554 1,110 30 ± 1,110
35 9,114 34,488 37,058 38,086 38,086 38,857 37,829 35,516 36,544 38,343 1,489 1,064 35 ± 1,064
40 40,193 42,285 43,331 43,680 44,727 39,628 41,588 42,634 43,331 44,029 1,651 1,180 40 ± 1,180
45 46,819 47,866 48,214 42,634 44,727 46,470 47,168 47,866 47,168 44,029 1,869 1,336 45 ± 1,336
50 53,733 54,818 49,261 51,020 52,105 55,360 49,958 48,214 49,958 55,360 2,680 1,916 50 ± 1,916
55 55,903 58,073 59,158 52,648 54,818 56,445 59,158 52,105 51,563 54,818 2,799 2,001 55 ± 2,001
60 61,010 58,073 55,360 56,988 59,158 61,010 63,103 53,190 56,445 59,158 2,966 2,120 60 ± 2,120
65 66,590 64,498 54,818 67,288 62,405 63,800 67,288 67,985 61,010 63,103 3,958 2,828 65 ± 2,828
70 61,010 65,195 67,985 77,598 59,158 62,405 65,893 80,039 75,156 60,313 7,566 5,408 70 ± 5,408
75 69,381 89,805 59,701 65,195 67,288 70,273 60,313 65,195 69,381 80,039 9,105 6,507 75 ± 6,507
80 75,156 89,805 65,195 68,683 75,156 87,363 62,405 67,288 70,273 89,805 10,369 7,410 80 ± 7,410


Die Messung ergab, dass eine extrem hohe Messunsicherheit bei den Messwerten vorliegt. Bis 25 cm scheint die Messung sehr genau zu sein. Wenn die Distanz über 50 Zentimeter erreicht steigt auch die Messunsicherheit auf über +- 2 Zentimeter an. Das scheint die aussage des Herstellers zu unterstreichen, dass der Präzisionsbereich des Sensors bei 10 bis 40 Zentimetern liegt.

Um das vorhandene Rauschen zu verringern wird ein "Gleitender Mittelwert"-Filter auf die Sensorsignale des Infrarotsensors angewendet. Dieser soll den Mittelwert über den letzten 10 Messwerten bilden und so ein Rauschen dämpfen. Es besteht jedoch die Gefahr, das kleinere Werteänderungen durch diesen Filter ebenfalls abgeschwächt werden und somit eine ungenaue Messung resultiert.

Im Folgenden ist die Messung nach der Filterung durch den "Gleitender Mittelwert"-Filter dargestellt:

Wahrer Wert (in cm) Messungen in cm Standardabweichung Messunsicherheit Vertrauensbereich
1 2 3 4 5 6 7 8 9 10
10 10,007 9,988 9,958 9,920 9,935 9,931 9,916 9,867 9,829 9,852 0,058 0,041 10 ± 0,041
15 15,414 15,493 15,552 15,531 15,552 15,552 15,642 15,621 15,663 15,684 0,083 0,059 15 ± 0,059
20 20,511 20,450 20,380 20,296 20,207 20,114 20,058 19,987 19,908 19,810 0,237 0,169 20 ± 0,169
25 23,937 24,312 24,340 24,683 25,021 25,050 25,079 25,440 25,787 26,125 0,685 0,490 25 ± 0,490
30 32,124 31,995 31,790 31,558 31,661 31,635 31,533 31,353 31,122 31,147 0,329 0,235 30 ± 0,235
35 38,420 38,317 37,983 37,726 37,418 37,521 37,186 37,007 36,775 36,544 0,631 0,451 35 ± 0,451
40 43,122 42,913 42,669 42,320 41,902 41,867 41,727 41,518 41,134 41,239 0,690 0,493 40 ± 0,493
45 48,547 48,303 47,989 47,640 47,115 47,080 46,871 46,592 46,122 45,773 0,916 0,654 45 ± 0,654
50 48,688 49,054 49,315 49,471 49,417 49,678 50,114 50,410 50,356 50,477 0,618 0,441 50 ± 0,441
55 56,391 56,174 55,903 55,577 55,414 55,469 55,143 54,655 54,329 53,733 0,835 0,597 55 ± 0,597
60 60,751 60,696 60,093 59,559 59,993 60,101 59,567 59,312 58,778 59,158 0,644 0,460 60 ± 0,460
65 65,533 64,955 65,095 64,955 64,955 64,378 64,796 64,936 65,075 64,498 0,320 0,229 65 ± 0,229
70 73,707 72,397 72,064 70,754 71,312 70,246 70,246 69,668 70,691 69,381 1,341 0,958 70 ±0,958
75 72,148 72,935 73,583 74,071 74,997 74,753 75,400 75,645 75,645 75,156 1,208 0,863 75 ± 0,863
80 79,178 78,202 76,737 78,640 78,884 78,152 76,931 78,345 79,551 80,039 1,048 0,749 80 ± 0,749


Abb. 8: Vergleich von ungefilterten und gefilterten Sensorsignalen

Das Ergebnis der Messung zeigt ein klar besseres Ergebnis. Die Messunsicherheiten überschreiten bei keiner Distanz einen Zentimeter. Damit ist eine enorme Verbesserung des Wahrheitsgehaltes der Messung mit dem Sharp Infrarotsensor möglich.

Abbildung 8 zeigt eine Beispielhaft aufgezeichnete Messkurve. Der Zeitpunkt 0 beschreibt dabei den zuletzt aufgezeichneten Messwert, die weiteren Zeitangaben beschreiben wie weit die Messungen in der Vergangenheit liegen, gemessen in Dezisekunden. Bei der Darstellung der Messwerte im Graphen zeigt sich, dass sich der gleitende Mittelwert träger verhält als die unverarbeiteten Sensorsignale und minimal verzögert zum rauschenden Wert angezeigt wird. Dies ist auf die Art der Glättung zurückzuführen. Durch die Mittelelwert Bildung mit den letzten 10 Messwerten wird der Wert bei aufsteigenden Werten herabgesetzt und bei absteigenden Werten heraufgesetzt.


Ausblick: Trotz umfänglicher Auseinandersetzung mit dem Thema bestehen einige Möglichkeiten das Projekt zu optimieren. Dadurch könnte eine noch korrektere Darstellung der Messwerte für reale Anwendungen realisiert werden. Folgende Vorschläge könnten zu dieser Optimierung beitragen:

  • Es besteht die Möglichkeit die Lookup-Tabelle durch eigene Referenzmessungen noch genauer an die Wahren werte anzupassen um so die Umrechnung der Signale schon möglichst genau durchführen zu können
  • Des weiteren besteht Verbesserungs Potential in der Auswahl eines anderen Filters, welche möglicherweise weniger träge ist und eine gleiche oder sogar bessere glättungs Wirkung hat






YouTube Video

Das YouTube Video als visueller Beleg findet sich unter folgendem Link:

Infrarotsensor DIST-Nx-v3 Sensorwerte mit Arduino UNO an MATLAB übertragen

Quellenverweise


→ zurück zum Hauptartikel: Signalverarbeitende Systeme