HiTechnics EOPD mit Matlab/Simulink: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(42 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''!!Diese Seite befindet sich im Aufbau!!'''
Signalverarbeitungskette eines [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NEO1048 HiTechnic EOPD] Sensors und auslesen in MATLAB/Simulink
Signalverarbeitungskette eines [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NEO1048 HiTechnic EOPD] Sensors und auslesen in MATLAB/Simulink




Zeile 9: Zeile 6:
== Einleitung ==
== Einleitung ==


Dieser Artikel befasst sich im Rahmen der Lehrveranstalltung mit dem [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NEO1048 HiTechnic EOPD] Sensor. Dazu wird der Sensor an sich und die Signalverarbeitungskette beschrieben. Am Anschluss wird gezeigt, wie die Sensordaten ausgelesen und in Matlab Simulink bereit gestellt werden können.
Dieser Artikel befasst sich im Rahmen der Lehrveranstalltung Signalverarbeitende Systeme mit dem [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NEO1048 HiTechnic EOPD] Sensor. Dazu wird der Sensor an sich und die Signalverarbeitungskette beschrieben. Am Anschluss wird gezeigt, wie die Sensordaten ausgelesen und in Matlab Simulink weiterverarbeitet und visualisiert werden können.
 
== Projektplanung ==
 
Zur Strukturierung von diesem Projekt und zum Projekttracking wurde zu Beginn ein Projektplan mit MS Project erstellt. Der [http://193.175.248.52/wiki/images/a/a3/Projektplan_EOPD.pdf Projektplan] zeigt auf, dass zuerst eine Einarbeitung in die Aufgabenstellung erfolgte. Im Anschluss daran wurde eine Literaturrecherche zum Sensor und den Möglichkeiten zur Datenübertragung nach Matlab/Simulink durchgeführt. Nachdem das Arbeitspensum überblickt werden konnte, wurde der Projektplan erstellt. Darauf folgten die Beschreibung der Signalverarbeitungskette sowie das Schreiben eines Programms zum Auslesen der Sensordaten. Nachdem Test musste der Puffer für weitere Lösungswege in Anspruch genommen werden. Im Anschluss daran folgte die Messdatenaufnahmen und Dokumentation sowie die Überprüfung der Dokumentation. Letztendlich wird ein Youtube Video erstellt und der Sensor abgegeben.


== Sensor und Signalverarbeitungskette ==
== Sensor und Signalverarbeitungskette ==
[[Datei:EOPD NXT Sensor.jpeg|rechts|mini|Abb. 1: HiTechnic EOPD Sensor <ref> HiTechnic EOPD Sensor [https://www.generationrobots.com/de/401376-naherungssensor-fur-programmierbare-lego-mindstorms-nxt-roboter-eopd-sensor.html Generation Robots] </ref>]]
[[Datei:EOPD NXT Sensor.jpeg|rechts|mini|Abb. 1: HiTechnic EOPD Sensor <ref> HiTechnic EOPD Sensor [https://www.generationrobots.com/de/401376-naherungssensor-fur-programmierbare-lego-mindstorms-nxt-roboter-eopd-sensor.html Generation Robots] </ref>]]


In diesem Abschnitt wird der elektro optische Nährungssensor (engl. Electro Optical Proximity Detector)(kurz EOPD) beschrieben und die Signalverarbeitungskette erläutert.
In diesem Abschnitt wird der elektro optische Nährungssensor (engl. Electro Optical Proximity Detector); kurz EOPD) beschrieben und die Signalverarbeitungskette erläutert.


=== Wie funktioniert der Sensor ===
=== Wie funktioniert der Sensor ===
Der EOPD emittiert über eine integrierte LED infrarote Strahlung. Durch die auf den photoelektrischen Sensor einfallende Lichtmenge kann indirekt auf die Distanz zwischen Objekt und Sensor geschlossen werden. Der EOPD schickt infrarote Strahlung mit einer Frequenz raus. Dies hat zur Folge, dass externe infrarote Quellen keinen Einfluss auf die Messung haben. Des Weiteren haben die EOPD unterschiedliche interne Frequenzen und können sich somit nicht gegenseitig stören. Zu beachten ist, dass ein EOPD je nach Beschaffenheit der Oberfläche des reflektierenden Objektes, eine andere Lichtmenge misst. So misst der Sensor bei einer glatten Oberfläche mehr Licht als bei einer rauen. Dies führt zu einen Fehler bei der Abstandsmessung. Außerdem ist bei einer weißen Oberfläche der gemessene Abstand niedriger als bei einer schwarzen. Dies muss bei der Messung mit EOPD berücksichtigt werden. Der HiTechnics EOPD kann mit dieser Messmethode Objekte in einer Distanz von bis zu 20 cm detektieren. Aus der Beschreibung des Sensorherstellers geht außerdem hervor, dass der EOPD in zwei Betriebsmodi betrieben werden kann. Zum einem im Modus zum messen von kurzen Distanzen und zum andern im Modus zum messen von weiten Distanzen.<ref> HiTechnic EOPD Sensor [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NEO1048 HiTechnic NXT EOPD] </ref>
Der EOPD emittiert über eine integrierte LED infrarote Strahlung. Durch die auf den photoelektrischen Sensor einfallende Lichtmenge kann indirekt auf die Distanz zwischen Objekt und Sensor geschlossen werden. Der EOPD schickt infrarote Strahlung mit einer Frequenz raus. Dies hat zur Folge, dass externe infrarote Quellen keinen Einfluss auf die Messung haben. Des Weiteren haben die EOPD unterschiedliche interne Frequenzen und können sich somit nicht gegenseitig stören. Zu beachten ist, dass ein EOPD je nach Beschaffenheit der Oberfläche des reflektierenden Objektes, eine andere Lichtmenge misst. So misst der Sensor bei einer glatten Oberfläche mehr Licht als bei einer rauen. Dies führt zu einen Fehler bei der Abstandsmessung. Außerdem ist bei einer weißen Oberfläche der gemessene Abstand niedriger als bei einer schwarzen. Dies muss bei der Messung mit EOPD berücksichtigt werden. Der HiTechnics EOPD kann mit dieser Messmethode Objekte in einer Distanz von 2 cm bis zu 20 cm detektieren. Aus der Beschreibung des Sensorherstellers geht außerdem hervor, dass der EOPD in zwei Betriebsmodi betrieben werden kann. Zum einem im Modus zum Messen von kurzen Distanzen und zum andern im Modus zum Messen von weiten Distanzen.<ref> HiTechnic EOPD Sensor [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NEO1048 HiTechnic NXT EOPD] </ref>


=== Welche Rohsignale liefert der Sensor? ===
=== Welche Rohsignale liefert der Sensor? ===
Das auf den photoelektrischen Sensor einfallende Licht führt je nach Lichtmenge zu einer elektrischen Spannung. Über die genauen internen Komponenten des HiTechnic EOPD sind keine Informationen vorhanden. Eine Recherche zeigt, dass eine [https://www.conrad.de/de/lichtsensor-kingbright-kps-3227sp1c-smd-1-st-l-x-b-x-h-32-x-27-x-11-mm-180380.html photoelektischer Sensor] ohnen Verstärkerschaltung eine Spannung von bis zu 6 V erzeugen kann. Daher wird davon ausgegangen, dass der photoelektische Sensor des EOPD als Rohwert direkt eine Spannung von 0 V bis 5 V erzeugt.  
Das auf den photoelektrischen Sensor einfallende Licht führt je nach Lichtmenge zu einer elektrischen Spannung. Über die genauen internen Komponenten des HiTechnic EOPD sind keine Informationen vorhanden. Eine Recherche zeigt, dass eine [https://www.conrad.de/de/lichtsensor-kingbright-kps-3227sp1c-smd-1-st-l-x-b-x-h-32-x-27-x-11-mm-180380.html photoelektischer Sensor] ohnen Verstärkerschaltung eine Spannung von bis zu 6 V erzeugen kann. Daher wird davon ausgegangen, dass der photoelektische Sensor des EOPD als Rohwert direkt eine Spannung von 0 V bis 5 V erzeugt.  
Der Zusammenhang zwischen elektrischer Spannung um Abstand wird im folgenden beschrieben. Diese Zusammenhänge stammen aus der  [http://www.hitechnic.com/blog/eopd-sensor/eopd-how-to-measure-distance/ Sensorbeschreibung der Firma HiTechnic]<ref> EOPD – How to measure distance [http://www.hitechnic.com/blog/eopd-sensor/eopd-how-to-measure-distance/ http://www.hitechnic.com/blog/eopd-sensor/eopd-how-to-measure-distance/]</ref>.
Der Zusammenhang zwischen elektrischer Spannung um Abstand wird im folgenden beschrieben. Diese Zusammenhänge stammen aus der  [http://www.hitechnic.com/blog/eopd-sensor/eopd-how-to-measure-distance/ Sensorbeschreibung der Firma HiTechnic]<ref> EOPD – How to measure distance [http://www.hitechnic.com/blog/eopd-sensor/eopd-how-to-measure-distance/ http://www.hitechnic.com/blog/eopd-sensor/eopd-how-to-measure-distance/]</ref>.
Daraus geht hervor, dass die Rohwerte <math>roh</math> quadratisch zum Abstand <math>x</math> abnehmen:
Daraus geht hervor, dass die Rohwerte <math>roh</math> quadratisch zum Abstand <math>x</math> abnehmen:
  <math> roh = \frac{k}{x^2} </math> (1)
  <math> roh = \frac{k}{x^2} </math> (1)
 
Außerdem ist dies noch mit einen Saklierungsfaktor <math>k</math> versehen.Stellt man die Gleichung (1) nach dem Abstand um, so ergibt sich:
Außerdem ist dies noch mit einen Saklierungsfaktor <math>k</math> versehen.
 
Stellt man die Gleichung (1) nach dem Abstand um, so ergibt sich:
 
   <math> x = \frac{\sqrt{k}}{\sqrt{roh}} </math> (2)
   <math> x = \frac{\sqrt{k}}{\sqrt{roh}} </math> (2)
Aus der Sensorbeschreibung ergibt sich für den Skalierungsfaktor:
Aus der Sensorbeschreibung ergibt sich für den Skalierungsfaktor:
  <math> \sqrt{k}= 1095 </math> (3)
  <math> \sqrt{k}= 1095 </math> (3)
 
Nun ist bekannt, dass der photoelektrische Sensor des EOPD eine elektrische Spannung liefert, welche mit dem Abstand in Abhängigkeit steht. Das Informationsblatt zeigt, dass die elektrische Spannung im Verhältnis zum Abstand abnimmt. Im Weiteren Verlauf von diesem Artikel ist zu sehen, dass die Spannung, die der Arduino erhält mit dem Abstand zunimmt. Daher wird im nächsten Kapitel die Signalvorverarbeitung erläutert.
Nun ist bekannt, dass der photoelektrische Sensor des EOPD eine elektrische Spannung liefert, welche mit dem Abstand in Abhängigkeit steht. Das Informationsblatt zeigt, dass die elektrische Spannung im Verhältnis zum Abstand abnimmt. Im Weiteren ist zu sehen, dass die Spannung, die der Arduino erhält mit dem Abstand zunehmen. Daher wird im nächsten Kapitel die Signalvorverarbeitung erläutert.


=== Signalvorverarbeitung ===
=== Signalvorverarbeitung ===
Aus dem Kapitel [[#Welche Rohsignale liefert der Sensor?|Welche Rohsignale liefert der Sensor?]] geht hervor, dass bei einen elektrooptischem Entfernungsmesser die Ausgangsspannung quadratisch mit dem Abstand abnimmt. Folgend ist dem Artikel, in Kapitel [[#Digitale Signalverarbeitung|Digitale Signalverarbeitung]] zu entnehmen, dass die vom Arduino gemessene Spannung mit dem Abstand zunimmt. Dies bedeutet, dass der EOPD Sensor intern noch eine digitale Signalvorverarbeitung durchführt.  
Aus dem Kapitel [[#Welche Rohsignale liefert der Sensor?|Welche Rohsignale liefert der Sensor?]] geht hervor, dass bei einem elektro optischen Entfernungsmesser die Ausgangsspannung quadratisch mit dem Abstand abnimmt. Folgend ist dem Artikel, in Kapitel [[#Digitale Signalverarbeitung|Digitale Signalverarbeitung]] zu entnehmen, dass die vom Arduino gemessene Spannung mit dem Abstand zunimmt. Dies bedeutet, dass der EOPD Sensor intern noch eine digitale Signalvorverarbeitung durchführt.  


Da es zu dem Sensor kein ausführliches Datenblatt gibt und ein zerstörungsfreies analysieren der internen Komponenten des EOPD nicht möglich ist, kann keine genau Information zu der internen Vorverarbeitung gegeben werde. Es können nur Vermutungen getroffen werden.
Da es zu dem Sensor kein ausführliches Datenblatt gibt und ein zerstörungsfreies analysieren der internen Komponenten des EOPD nicht möglich ist, kann keine genau Information zu der internen Vorverarbeitung gegeben werde. Es können nur Vermutungen getroffen werden.
Da der EOPD auf unterschiedliche Betriebsmodi gesetzt werden kann, kann davon ausgegangen werden, dass der EOPD einen Mikrocontroller beinhaltet. Vermutlich macht dieser Controller auch die Vorverarbeitung des Rohwertes und wandelt die Spannung, welche mit der Entfernung abnimmt zu einer elektrischen Spannung, welche mit der Entfernung zunimmt, um.
Da der EOPD auf unterschiedliche Betriebsmodi gesetzt werden kann, kann davon ausgegangen werden, dass der EOPD einen Mikrocontroller beinhaltet. Vermutlich macht dieser Controller auch die Vorverarbeitung des Rohwertes und wandelt die Spannung, welche mit der Entfernung abnimmt zu einer elektrischen Spannung, welche mit der Entfernung zunimmt, um. Die Spannung, die der EOPD ausgibt wird mit dem Arduino gemessen. Der Arduino verwendet dazu ein Analgo zu Digital Umsetzer. Dieser wird im kommenden Kapitel beschrieben.


=== Analog-Digital-Umsetzer ===
=== Analog-Digital-Umsetzer ===
Ziel von diesem Projekt soll sein, die analoge Spannung des EOPD mit einem analogen Eingang des Arduino zu messen und zu digitalisieren. Daher wird in folgeden die Funktion des Analog-Digital-Umsetzers (ADC) beschrieben.
Ziel von diesem Projekt soll sein, die analoge Spannung des EOPD mit einem analogen Eingang des Arduino zu messen und zu digitalisieren. Daher wird in folgeden die Funktion des Analog-Digital-Umsetzers (ADC) beschrieben, welcher die analoge Spannung des EOPD digitalisiert.
[[Datei:SukzessiveApproximation.JPG|rechts|mini|Abb. 2: ADC Sukzessive Approximation <ref> Angewandte Mikroelektronik [http://www.vias.org/mikroelektronik/adc_succapprox.html vias.org] </ref>]]
[[Datei:SukzessiveApproximation.JPG|rechts|mini|Abb. 2: ADC Sukzessive Approximation <ref> Angewandte Mikroelektronik [http://www.vias.org/mikroelektronik/adc_succapprox.html vias.org] </ref>]]


Auf dem Arduino Uno ist ein [http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf ATMEGA328P-PU] verbaut. Aus dem Datenblatt des Microcontrollers geht hervor, dass 10-Bit ADC´s verbaut sind. Diese ADC´s arbeiten mit dem Prinzip der sukzessiven Approximation. Dabei wird das zu messende Signal, hier die Spannung des EOPD, schrittweise durch Vergleich digitalisiert. Vergleicht wird mit einer Referenzspannung, welche genauso viele Bit hat wie der verbaute ADC. Im rechten Bild ist die Vorgehensweise über die Zeit dargestellt. Im ersten Schritt wird das höherwertigste Bit (repräsentiert 2,5 V) der Referenzspannung eingestellt. Stellt ein Vergleicher fest, dass die Referenzspannung höher ist als das zu messende Signal, so wird dieses Bit wieder deaktiviert. Danach folgt das zweite Bit (repräsentiert 1,25 V). Ist auch dann die Referenzspannung höher als die Spannung am analogen Eingang, so wird dieses Bit auch wieder deaktiviert. Danach folgt das dritte Bit (repräsentiert 1,25 V). Ist die Referenzspannung niedriger, so bleiben das Bit und somit auch die Spannung eingeschaltet und es wird das nächste Bit und somit auch dessen Spannung eingeschaltet und auf die vorherige Referenzspannung addiert. Dies wird so lange wiederholt, bis alle 10 Bit durchlaufen sind. Die eingeschalteten und ausgeschalteten Referenzspannungen repräsentieren dann den digitalisierten Wert des analogen Eingangs.<ref> [http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf ATMEGA328P-PU] </ref>
Auf dem Arduino Uno ist ein [http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf ATMEGA328P-PU] verbaut. Aus dem Datenblatt des Microcontrollers geht hervor, dass 10-Bit ADC´s verbaut sind. Diese ADC´s arbeiten mit dem Prinzip der sukzessiven Approximation. Dabei wird das zu messende Signal, hier die Spannung des EOPD, schrittweise durch Vergleich digitalisiert. Vergleicht wird mit einer Referenzspannung, welche genauso viele Bit hat wie der verbaute ADC. In Abbildung 2 ist die Vorgehensweise über der Zeit dargestellt. Im ersten Schritt wird das höherwertigste Bit (repräsentiert 2,5 V) der Referenzspannung eingestellt. Ein Vergleicher stellt fest, dass die Referenzspannung höher ist als das zu messende Signal, so wird dieses Bit wieder deaktiviert. Danach folgt das zweite Bit (repräsentiert 1,25 V). Wenn auch dann die Referenzspannung höher als die Spannung am analogen Eingang ist, so wird dieses Bit auch wieder deaktiviert. Danach folgt das dritte Bit (repräsentiert 0,625 V). Ist die Referenzspannung niedriger, so bleiben das Bit und somit auch die Spannung eingeschaltet und es wird das nächste Bit und somit auch dessen Spannung eingeschaltet und auf die vorherige Referenzspannung addiert. Dies wird so lange wiederholt, bis alle 10 Bit durchlaufen sind. Die eingeschalteten und ausgeschalteten Referenzspannungen repräsentieren dann den digitalisierten Wert des analogen Eingangs.<ref> [http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf ATMEGA328P-PU] </ref>


Vorteile von diesem ADC sind, dass eine Umsetzung in einen digitalen Wert relative schnell erfolgt. Laut Datenblatt in 13 - 260 &mu;s. Es gibt natürlich auch schnellere ADC´s wie z.B. ein paralleler ADC, welche die Digitalisierung im einen Schritt durchführen. Allerdings benötigen diese auch deutlich mehr Chipfläche und sind komplexer. Parallele ADC´s sind für Abtastraten im GHZ Bereich gedacht. Allerdings ist der verwendetet ADC schneller als ein Single-Slope-Umsetzer. Dieser Umsetzer arbeitet mit einem Rampenverfahren und vergleicht dem Eingang mit dem Rampenwert. Nachteil ist, dass ein Umsetzung in einen digitalen Wert relative langsam ist und von der Höhe des zu messenden Wertes abhängig ist. <ref>[https://de.wikipedia.org/wiki/Analog-Digital-Umsetzer#Parallel-Umsetzer Wikipedia ADC]</ref>
Vorteile von diesem ADC sind, dass eine Umsetzung in einen digitalen Wert relative schnell erfolgt. Laut Datenblatt in 13 - 260 &mu;s. Es gibt natürlich auch schnellere ADC´s wie z.B. ein paralleler ADC, welche die Digitalisierung in einem Schritt durchführt. Allerdings benötigen diese auch deutlich mehr Chipfläche und sind komplexer. Parallele ADC´s sind für Abtastraten im GHz Bereich gedacht. Der verwendetet ADC ist für eine Abtastrate im Bereich von mehreren kHz geeignet. Anders sieht es da bei Single-Slope-Umsetzern aus. Dieser Umsetzer arbeitet mit einem Rampenverfahren und vergleicht dem Eingang mit dem Rampenwert. Nachteil ist, dass ein Umsetzung in einen digitalen Wert relative langsam ist und von der Höhe des zu messenden Wertes abhängig ist. <ref>[https://de.wikipedia.org/wiki/Analog-Digital-Umsetzer#Parallel-Umsetzer Wikipedia ADC]</ref>


Auf dem Markt gibt es noch eine Vielzahl weiterer ADC. Auf diese wird im Rahmen dieses Projektes nicht weiter eingegangen.
Auf dem Markt gibt es noch eine Vielzahl weiterer ADC. Auf diese wird im Rahmen dieses Projektes nicht weiter eingegangen.


===Bussystem===
===Bussystem===
Da sich im Rahmen dieser Arbeit dazu entschieden wurde, den analogen Wert vom Sensor mit dem analogen Eingang des Arduino Uno zu verbinden, werden so keine Informationen über einen Bus übertragen. Zwischen ADC des Arduino Uno und der CPU ist zwar ein 8 Bit Datenbus, allerdings sind im [http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf Datenblatt für den ATMEGA328P-PU], welcher sich auf dem Arduino Uno befindet, keine Infomationen zu dem verwendeten Bus vorhanden.
Da sich im Rahmen dieser Arbeit dazu entschieden wurde, den analogen Wert vom Sensor mit dem analogen Eingang des Arduino Uno zu verbinden, werden so keine Informationen zwischen Sensor und Mikrocontroller über einen Bus übertragen. Beziehungsweise ist über die Verwendung eines Bussystems im Sensor nichts bekannt. Zwischen ADC des Arduino Uno und der CPU ist zwar ein 8 Bit Datenbus vorhanden, allerdings sind im [http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf Datenblatt für den ATMEGA328P-PU], welcher sich auf dem Arduino Uno befindet, keine Infomationen zu dem verwendeten Bus vorhanden. Daher kann an im Rahmen von diesem Artikel kein Bussystem beschrieben werden.


===Digitale Signalverarbeitung und Darstellung der Ergebnisse===
===Digitale Signalverarbeitung und Darstellung der Ergebnisse===
Eine Erfassung der Messdaten des EOPD erfolgt mit dem analogen Eingang des Arduino Uno. Der EOPD misst die einfallende Lichtmenge und wandelt diese mit einem photoelektrischen Sensor in eine Spannung um. Diese Spannung steht in Abhängigkeit zur Distanz zwischen EOPD und Objekt.
Eine Erfassung der Messdaten des EOPD erfolgt mit dem analogen Eingang des Arduino Uno. Der EOPD misst die einfallende Lichtmenge und wandelt diese mit einem photoelektrischen Sensor in eine Spannung um. Diese Spannung steht in Abhängigkeit zur Distanz zwischen EOPD und Objekt.
Gemessen wird diese Spannung mit dem 10 Bit ADC von Arduino Uno. Wird ein Signal, welches in einem Bereich von 0 V bis 5 V digitalisiert, so hat das Signal eine maximale Auflösung von  
Gemessen wird diese Spannung mit dem 10 Bit ADC vom Arduino Uno. Ein Signal, welches in einem Bereich von 0 V bis 5 V mit einem 10 Bit ADC digitalisiert wird, hat eine maximale Auflösung von  
 
 
  <math>  \frac{5 V}{1023} = 4,88 mV. </math> (4)
  <math>  \frac{5 V}{1023} = 4,88 mV. </math> (4)
Durch die Digitalisierung sind somit nur noch diskrete Werte möglich. Wie im späteren Verlauf des Artikels zu sehen, verläuft die Kennlinie zwischen Spannung in Distanz nicht linear. Dies führt dazu, dass die Auflösung über der Distanz auch nicht konstant ist. So beträgt die Auflösung bei einer Distanz zwischen 2 cm und 3 cm etwa 59,57 &mu;m und im Bereich von 18 cm bis 20 cm sind es etwa 2,99 mm. Somit ist die Auflösung bei größeren Distanzen deutlich geringer.


Hat der Arduino Uno die elektrische Spannung digitalisiert, welche in Abhängigkeit zur Distanz steht, so wird diese über eine serielle Schnittstelle zu Matlab übertragen. Der Programmablaufplan zum Matlab Code ist im Kapitel [[#EV3 und Arduino |EV3 und Arduino ]] gezeigt. In Matlab wird die Spannung einmal als Rohwert visualisiert und einmal in den Abstand umgerechnet. Des Weiteren wird der gemessene Wert noch mit einem gleitenden Mittelwertsfilter geglättet.
Hat der Arduino Uno die elektrische Spannung digitalisiert, welche in Abhängigkeit zur Distanz steht, so wird diese über eine serielle Schnittstelle zu Matlab übertragen. Der Programmablaufplan zum Matlab Code ist im Kapitel [[#EV3 und Arduino |EV3 und Arduino ]] gezeigt. In Matlab wird die Spannung einmal als Rohwert visualisiert und einmal in den Abstand umgerechnet. Des Weiteren wird der gemessene Wert noch mit einem gleitenden Mittelwertsfilter geglättet.


Die folgende Tabelle zeigt zum einen die Spannungen des EOPD zu unterschiedlichen Distanzen, welche mit dem Arduino Uno gemessen und an Matlab übertragen wurden und zum anderen den Mittelwert zu den gemessenden Distanzen. Die aufgenommenden Werte wurde ermittelt, bei der Distzanmessung zu einem weiß matten Blatt Papier. Des Weiteren war die Raumbeleuchtung eingeschaltet.
Die folgende Tabelle zeigt zum einen die Spannungen des EOPD zu unterschiedlichen Distanzen, welche mit dem Arduino Uno gemessen und an Matlab übertragen wurden und zum anderen den Mittelwert zu den gemessenden Distanzen. Die aufgenommenden Werte wurde ermittelt bei der Distzanmessung zu einem weißen matten Blatt Papier. Des Weiteren war die Raumbeleuchtung eingeschaltet.




Zeile 106: Zeile 94:
Im Kapitel [[#Welche Rohsignale liefert der Sensor?|Welche Rohsignale liefert der Sensor?]] wird beschrieben, dass die elektrische Spannung am Ausgang des EOPD mit der Distanz abnimmt. Die oben dargestellten Messwerte zeigen einen entgegengesetzten Zusammenhang. Und zwar, dass die elektrische Spannung mit der Distanz zunimmt. Informationen zu der Signalverarbeitung innerhalb des Sensor, welche diesen Zusammenhang beschreiben konnten nicht gefunden werden.
Im Kapitel [[#Welche Rohsignale liefert der Sensor?|Welche Rohsignale liefert der Sensor?]] wird beschrieben, dass die elektrische Spannung am Ausgang des EOPD mit der Distanz abnimmt. Die oben dargestellten Messwerte zeigen einen entgegengesetzten Zusammenhang. Und zwar, dass die elektrische Spannung mit der Distanz zunimmt. Informationen zu der Signalverarbeitung innerhalb des Sensor, welche diesen Zusammenhang beschreiben konnten nicht gefunden werden.


Die Sensorkennlinie welche sich aus den Mittelwerten der Spannungen zu dem Distanzen ergibt ist in der rechten Abbildung gezeigt.
Die Sensorkennlinie, welche sich aus den Mittelwerten der Spannungen zu dem Distanzen ergibt, ist in Abbildung 3 gezeigt.
Eine Analyse der Messwerte zeigt, dass der Zusammenhang zwischen Distanz und Spannung nicht durch eine Funktion beschrieben werden kann. Um in Matlab zu der elektrischen Ausgangsspannung des Sensors die Distanz anzuzeigen, wird die lineare Interpolation angewendet. Die führt dazu, dass vor allem zwischen den Stützstellen, also zwischen den Referenzpunkten eine verhältnismäßig große Abweichung entstehen kann. Sollte die Abweichung zu groß sein, kann eine Interpolation mit nicht linearem Zusammenhang angewendet werden. Im Rahmen dieser Arbeit reicht eine Betrachtung mit linearer Interpolation.  
Eine Analyse der Messwerte zeigt, dass der Zusammenhang zwischen Distanz und Spannung nicht durch eine Funktion beschrieben werden kann. Um in Matlab zu der elektrischen Ausgangsspannung des Sensors die Distanz anzuzeigen, wird die lineare Interpolation, als das Beschreiben einer Kennlinie durch mehrere lineare Funktionen, angewendet. Diees führt dazu, dass vor allem zwischen den Stützstellen, also zwischen den Referenzpunkten der linearen Interpolation eine verhältnismäßig große Abweichung entstehen kann. Sollte die Abweichung zu groß sein, kann eine Interpolation mit nicht linearem Zusammenhang angewendet werden oder die Abstände der Stützstellen verringert werden. Im Rahmen dieser Arbeit reicht eine Betrachtung mit linearer Interpolation.  


Denn bei der Messwertaufnahme ist aufgefallen, dass der EOPD, anders als im Informationsblatt angegeben, empflindlich gegenüber anderen Lichtquellen ist. So hat eine Messreihe ohne Raumbeleuchtung folgende Ergebnisse geliefert:
Denn bei der Messwertaufnahme ist aufgefallen, dass der EOPD, anders als im Informationsblatt angegeben, empflindlich gegenüber anderen Lichtquellen ist. So hat eine Messreihe ohne Raumbeleuchtung folgende Ergebnisse geliefert:
Zeile 123: Zeile 111:
| 14 || 4,719453 || 14,88
| 14 || 4,719453 || 14,88
|-
|-
| 20 || 4,874878 || Außerhalb des Messbereichs
| 20 || 4,874878 || Außerhalb des Messbereichs (>22 cm)
|}
|}
[[Datei:EOPDEmpfindlichkeit2.jpg|rechts|mini|250px|Abb. 4: EOPD Kennlinie Empfindlichkeit]]
[[Datei:EOPDEmpfindlichkeit2.jpg|rechts|mini|250px|Abb. 4: EOPD Kennlinie Empfindlichkeit]]


Aus der Tabelle geht hervor, dass bei Messungen ohne Beleuchtung im Raum ein systematischer Fehler entsteht. Dieser ist je nach Distanz unterschiedlich un beträgt ca. +/- 2 mm.
Aus der Tabelle geht hervor, dass bei Messungen ohne Beleuchtung im Raum ein systematischer Fehler entsteht. Dieser ist je nach Distanz unterschiedlich und beträgt ca. +/- 2 mm. Bei einer Distanz von 20 cm ist der gemessene Wert außerhalb der Kennlinie, also größer 22 cm


Ein weiteres Maß für die Qualität des Sensors ist die Empfindlichkeit. Diese gibt an, wie groß die Änderung des Wertes der Ausgangsgroße eine Messsystems bezogen auf die Änderung der Eingangsgröße ist. Eine Änderung wird durch die Steigung einer Funktion beschrieben. Um die Steigung zu bestimmt ermittelt man die Ableitung einer Funktion. Daher ist im Rechten Bild die Ableitung der interpolierten Funktion der Ausgangsgröße (Sensorspannung in V) in Bezug auf die Eingangsgröße (Distanz in cm) gezeigt. Zu sehen ist, dass die Empfindlichkeit des Sensors bei niedrigen Distanzen deutlich größer ist als bei Entfernungen im Bereich von wenigen Zentimetern.
Ein weiteres Maß für die Qualität des Sensors ist die Empfindlichkeit. Diese gibt an, wie groß die Änderung des Wertes der Ausgangsgroße eines Messsystems bezogen auf die Änderung der Eingangsgröße ist. Eine Änderung wird durch die Steigung einer Funktion beschrieben. Um die Steigung zu bestimmt ermittelt man die Ableitung einer Funktion. Daher ist in Abbildung 4 die Ableitung der interpolierten Funktion der Ausgangsgröße (Sensorspannung in V) in Bezug auf die Eingangsgröße (Distanz in cm) gezeigt. Zu sehen ist, dass die Empfindlichkeit des Sensors bei niedrigen Distanzen deutlich größer ist als bei Entfernungen im Bereich von 10 cm bis 20 cm.


Im Folgenden wird die Standardabweichung, Messunsicherheit und das Vertrauensintervall des EOPD bei unterschiedlichem Distanzen bestimmt. Dazu wurden zu jeder Distanz 5 Messwerte aufgenommen, die Standardabweichung nach der Student t Verteilung bestimmt und die Messunsicherheit
Im Folgenden wird die Standardabweichung, Messunsicherheit und das Vertrauensintervall des EOPD bei unterschiedlichem Distanzen bestimmt. Dazu wurden zu jeder Distanz 5 Messwerte aufgenommen, die Standardabweichung und die Messunsicherheit nach der Student t Verteilung




  <math>  \Delta d =\frac{t(n) \cdot s}{\sqrt{n}} = </math> (5)
  <math>  \Delta d =\frac{t(n) \cdot s}{\sqrt{n}}  </math> (5)
 
ermittelt. Dabei ist n die Anzahl der Messungen und s die Standardabweichung. t(n) beschreibt den Vertrauensfaktor für die Student t Verteilung, welcher aus einer Tabelle abgelesen werden kann. In diesem Fall ist t=2,78 für ein Vertrauensniveau von 95 %.


bestimmt. Dabei ist n die Anzahl der Messungen und s die Standardabweichung. t(n) beschreibt den Vertrauensfaktor für die Student t Verteilung, welcher aus einer Tabelle abgelesen werden kann. In diesem Fall ist t=2,78 für ein Vertrauensniveau von 95 %. Bei industriellen Anwendung und in der Messtechnik für üblicherweise ein Vertrauensniveau von 95 % genommen. Daher kann dieses Vertrauensniveau im Rahmen dieser Ausarbeitung verwendet werden.


{| class="wikitable"
{| class="wikitable"
Zeile 171: Zeile 158:


[[Datei:Sensorkennline_Vertrauensintervall.jpg|rechts|mini|230px|Abb. 5: EOPD Sensorkennlinie in schwarz mit Vertrauensintervall in blau]]
[[Datei:Sensorkennline_Vertrauensintervall.jpg|rechts|mini|230px|Abb. 5: EOPD Sensorkennlinie in schwarz mit Vertrauensintervall in blau]]
Aus der Tabelle ist zu entnehmen, dass die Messunsicherheit bei größeren Distanzen zunimmt. Dies ist in der Abbildung 5 visualisiert. Die Messunsicherheit nimmt bei größeren Distanzen zu, da die Empfindlichkeit bei größeren Distanzen abnimmt. Daraus folgt, dass eine geringere Empfindlichkeit des Sens0rs zu einer größeren Messunsicherheit führen kann.
Aus der Tabelle ist zu entnehmen, dass die Messunsicherheit bei größeren Distanzen zunimmt. Dies ist in der Abbildung 5 visualisiert. Die Messunsicherheit nimmt bei größeren Distanzen zu, da die Empfindlichkeit bei größeren Distanzen abnimmt. Daraus folgt, dass eine geringere Empfindlichkeit des Sensors zu einer größeren Messunsicherheit führen kann.


== Messdaten nach MATLAB/Simulink ==
== Messdaten nach MATLAB/Simulink ==
Um die Messdaten nach MATLAB/Simulink zu übertragen und dort zu verwenden gibt es unterschiedlichste möglichkeiten. Zu Beginn wird versucht die Messdaten über den analogen Port des Sensors mittels Arduino auszulesen und an MATLAB/Simulink zu übertragen. Dazu wird in der folgenden Tabelle der Belegungsplan des Sensorsteckers gezeigt. Diese Information wurde aus dem [https://education.lego.com/de-de/support/mindstorms-ev3/developer-kits Lego Mindstorms EV3 Hardware Developer Kit] entnommen.
Um die Messdaten nach MATLAB/Simulink zu übertragen und dort zu verwenden gibt es unterschiedlichste Möglichkeiten. Zu Beginn wird versucht die Messdaten über den analogen Port des Sensors mittels Arduino auszulesen und an MATLAB/Simulink zu übertragen. Dazu wird in der folgenden Tabelle der Belegungsplan des Sensorsteckers gezeigt. Diese Information wurde aus dem [https://education.lego.com/de-de/support/mindstorms-ev3/developer-kits Lego Mindstorms EV3 Hardware Developer Kit] entnommen.


{| class="wikitable"
{| class="wikitable"
Zeile 195: Zeile 182:
=== Über Arduino ===
=== Über Arduino ===
[[Datei:EOPDanalogReadPlan.jpeg|rechts|mini|Abb. 6: Beschaltungsplan vom EOPD Sensor und Arduino Uno <ref> Fritzing Foto </ref>]]
[[Datei:EOPDanalogReadPlan.jpeg|rechts|mini|Abb. 6: Beschaltungsplan vom EOPD Sensor und Arduino Uno <ref> Fritzing Foto </ref>]]
Die Idee ist es, den analogen Port des EOPD Sensors mit einem der analogen Eingänge von [https://store.arduino.cc/arduino-uno-rev3 Arduino Uno]auszulesen. Um dies zu realisieren wurde eine Schaltung nach dem im rechten Bild gezeigt Schema aufgebaut. Dabei ist der analoge Ausgang des EOPD Sensors am Analogen Eingang A0 des Arduinos angeschlossen. Mit dem folgenden Programmcode kann sich der Wert des EOPD Sensors am seriellen Monitor angezeigt werden.
Die Idee ist es, den analogen Port des EOPD Sensors mit einem der analogen Eingänge von [https://store.arduino.cc/arduino-uno-rev3 Arduino Uno]auszulesen. Um dies zu realisieren wurde eine Schaltung nach dem in Abbildung 6 gezeigt Schema aufgebaut. Dabei ist der analoge Ausgang des EOPD Sensors am analogen Eingang A0 des Arduinos angeschlossen. Mit dem folgenden Programmcode kann sich der Wert des EOPD Sensors am seriellen Monitor angezeigt werden.


<source lang=c>
<source lang=c>
Zeile 215: Zeile 202:
</source>
</source>


Im seriellen Monitor ist zu sehen, dass die gemessenen Rohwerte, beim testen von Abständen zwischen 0 cm und 20 cm, im Bereich von 6 bis 8 pendeln. (Bild folgt)
Im seriellen Monitor ist zu sehen, dass die gemessenen Rohwerte, beim Testen von Abständen zwischen 0 cm und 20 cm, im Bereich von 6 bis 8 pendeln. Diese Messwerte erscheinen nicht plausibel. Nach Recherche kommt die Erkenntnis, dass der Sensor zuerst in einen geeigneten Betriebsmodus gesetzt werden muss um einen analogen Wert zu erhalten. Daraus Folgt, dass dieser Ansatz nicht so realisierbar wie gedacht. Daher wird im Folgenden versucht den Sensorwert über den EV3 auszulesen.
Diese Messwerte erscheinen unplausibel. Nach Recherche kommt die Erkenntnis, das der Sensor zuerst in einen geeigneten Modus gesetzt werden muss um einen analogen Wert zu erhalten. Daher ist dieser Ansatz nicht so realisierbar wie gedacht. Daher wird im folgenden versucht den Sensorwert über den EV3 auszulesen.


=== Über EV3 ===
=== Über EV3 ===
Im Folgenden wird die Möglichkeit beschrieben, den EOPD Sensor über einen Lego Mindstorms EV3 auszulesen.
Im Folgenden wird die Möglichkeit beschrieben, den EOPD Sensor über einen Lego Mindstorms EV3 auszulesen.
Zum Anzeigen der Sensorwerte wird ein MATLAB/Simulink Demo Modell aus dem [https://svn.hshl.de/svn/BSE_SigSys/trunk/SRC/Demos/EV3_HiTechnic_Gyro/ SVN Ordner] der Veranstalltung Signalverarbeitende Systeme genommen <ref> EOPD_Demo von Prof. Schneider [https://svn.hshl.de/svn/BSE_SigSys/trunk/SRC/Demos/EV3_HiTechnic_Gyro/ https://svn.hshl.de/svn/BSE_SigSys/trunk/SRC/Demos/EV3_HiTechnic_EOPD/]</ref>.
Zum Anzeigen der Sensorwerte wird ein MATLAB/Simulink Demo Modell aus dem [https://svn.hshl.de/svn/BSE_SigSys/trunk/SRC/Demos/EV3_HiTechnic_Gyro/ SVN Ordner] der Veranstalltung Signalverarbeitende Systeme genommen <ref> EOPD_Demo von Prof. Schneider [https://svn.hshl.de/svn/BSE_SigSys/trunk/SRC/Demos/EV3_HiTechnic_Gyro/ https://svn.hshl.de/svn/BSE_SigSys/trunk/SRC/Demos/EV3_HiTechnic_EOPD/]</ref>.
Vorgegangen werden kann wie im Artikel [[EV3 mit Simulink|EV3 mit Simulink]] beschrieben.
Zur Inbetriebnahme von EV3 und EOPD kann wie im Artikel [[EV3 mit Simulink|EV3 mit Simulink]] beschrieben, vorgegangen werden.
Ergebniss ist, dass der EV3 die Rohwerte und den Abstand in cm zum Objekt anzeigt. Wie in der Abbildung rechts zu sehen. Allerdings kann das Programm, zum Auslesen des Sensors mit dem EV3, nur von Simulink übertragen werden. Im Matlab/Simulink stehen die Informationen nicht zur Verfügung. Vorteil ist, dass der Modus des Sensors geändert wurde. Daher ist die Überlegung, den Sensor über den EV3 in den richtigen Modus zu setzen um über dem Arduino mit Matlab auszulesen. Dies wird im folgenden beschrieben.
Ergebnis ist, dass der EV3 die Rohwerte und den Abstand in cm zum Objekt anzeigt. Wie in der Abbildung rechts zu sehen. Allerdings kann das Programm, zum Auslesen des Sensors mit dem EV3, nur von Simulink übertragen werden. Im Matlab/Simulink stehen die Informationen nicht zur Verfügung. Vorteil ist, dass der Modus des Sensors geändert wurde. Daher ist die Überlegung, den Sensor über den EV3 in den richtigen Modus zu setzen um über dem Arduino mit Matlab auszulesen. Dies wird im Folgenden beschrieben.


=== EV3 und Arduino ===
[[Datei:PAP Sensor Auslesen EOPD.jpg |links|mini|120px|Abb. 7: Programmablaufplan zum Auslesen des EOPD Sensors mit Matlab.]]
[[Datei:PAP Sensor Auslesen EOPD.jpg |links|mini|120px|Abb. 7: Programmablaufplan zum Auslesen des EOPD Sensors mit Matlab.]]
 
Die Idee ist, den Sensor mit dem EV3 in dem richtigen Betriebsmodus zu setzen und dann mit dem Arduino und dem [https://de.mathworks.com/matlabcentral/fileexchange/47522-matlab-support-package-for-arduino-hardware Matlab Support Package für Arduino Hardware] die Verbindung zu Matlab herzustellen. Die Vorgehensweise dabei wird im Weiteren beschrieben.
=== EV3 und Arduino ===
 
 
Die Idee ist, den Sensor mit dem EV3 in dem richtigen Betriebsmodus zu setzen und dann mit dem Arduino und dem [https://de.mathworks.com/matlabcentral/fileexchange/47522-matlab-support-package-for-arduino-hardware Matlab Support Package für Arduino Hardware] die Verbindung zu Matlab herzustellen. Die Vorgehensweise dabei wird im weiteren beschrieben.


[[Datei:Plan Analog read mit EV3.jpg |rechts|mini|Abb. 8: Anschlussplan EOPD, Arduino und EV3 zum Auslesen des Sensorwertes]]
[[Datei:Plan Analog read mit EV3.jpg |rechts|mini|Abb. 8: Anschlussplan EOPD, Arduino und EV3 zum Auslesen des Sensorwertes]]
[[Datei:Messreihe_EOPD.jpg |rechts|mini|Abb. 9: Messreihe des EOPD, welche von Matlab ausgegeben wird]]
[[Datei:Messreihe_EOPD.jpg |rechts|mini|Abb. 9: Messreihe des EOPD, welche von Matlab ausgegeben wird]]


Der Sensor wirde wie im Abschnitt [[#Über EV3|Über EV3]] angeschlossen und konfiguriert. Der Arduino wird wie im Anschlussplan, welcher in Abbildung 8 zu sehen ist, an den Sensor bzw. dem Sensorkabel abgeschlossen. So sind sowohl der EV3 als auch der Arduino mit dem Sensor verbunden. Über den Pin 1, die weiße Ader des Sensorkabels, kann nun mit dem Arduino und Matlab der analoge Wert ausgelesen werden. Durch den ADC des Arduino wird die gemessene Distanz in eine Spannung von 0 bis 5 V digitalisiert. Dieser Wert wird mit Matlab ausgelesen und weiterverarbeitet. Dazu muss das [https://de.mathworks.com/matlabcentral/fileexchange/47522-matlab-support-package-for-arduino-hardware Matlab Support Pckage für Arduino Hardware] installiert sein. Zum Auslesen, Filtern und Darstellen des Sensorwertes in Echtzeit wurde nach dem Programmablaufplan eine Matlab Code erstellt. Dieser ist im SVN Ordner hinterlegt. Als Filter wird ein gleitender Mittelwertsfilter verwendet. Es wird über 5 Messwerte gefiltert. Der Code dazu kommt aus dem [https://svn.hshl.de/svn/BSE_Moderne_Trackingsysteme/trunk/Demos/GleitenderMittelwert/ SVN Ordner] der Veranstalltung Moderne Tracking Systeme <ref> Filter gleitender Mittelwert von Prof. Schneider [https://svn.hshl.de/svn/BSE_Moderne_Trackingsysteme/trunk/Demos/GleitenderMittelwert/ https://svn.hshl.de/svn/BSE_Moderne_Trackingsysteme/trunk/Demos/GleitenderMittelwert/]</ref>.
Der Sensor wird wie im Abschnitt [[#Über EV3|Über EV3]] angeschlossen und konfiguriert. Der Arduino wird wie im Anschlussplan, welcher in Abbildung 8 zu sehen ist, an den Sensor bzw. dem Sensorkabel abgeschlossen. So sind sowohl der EV3 als auch der Arduino mit dem Sensor verbunden. Über den Pin 1, der weißen Ader des Sensorkabels, kann nun mit dem Arduino und Matlab der analoge Wert ausgelesen werden. Durch den ADC des Arduino wird die gemessene Distanz in eine Spannung von 0 bis 5 V digitalisiert. Dieser Wert wird mit Matlab ausgelesen und weiterverarbeitet. Dazu muss das [https://de.mathworks.com/matlabcentral/fileexchange/47522-matlab-support-package-for-arduino-hardware Matlab Support Package für Arduino Hardware] installiert sein. Zum Auslesen, Filtern und Darstellen des Sensorwertes in Echtzeit wurde nach dem Programmablaufplan, zu sehen in Abbildung 7, eine Matlab Code erstellt. Dieser ist im [https://svn.hshl.de/svn/BSE_Kempe/trunk/Sig_Sys/Projekt_EOPD/02_Software/Arduino mit Matlab auslesen/ SVN Ordner] hinterlegt. Als Filter wird ein gleitender Mittelwert Filter verwendet. Es wird über 5 Messwerte gefiltert. Der Code dazu kommt aus dem [https://svn.hshl.de/svn/BSE_Moderne_Trackingsysteme/trunk/Demos/GleitenderMittelwert/ SVN Ordner] der Veranstaltung Moderne Tracking Systeme <ref> Filter gleitender Mittelwert von Prof. Schneider [https://svn.hshl.de/svn/BSE_Moderne_Trackingsysteme/trunk/Demos/GleitenderMittelwert/ https://svn.hshl.de/svn/BSE_Moderne_Trackingsysteme/trunk/Demos/GleitenderMittelwert/]</ref>.


Die Ausgabe erfolgt zyklisch alle 100 ms. Dabei ist sind im ersten Subplot die Rohwerte über die Messung aufgezeigt. Der zweiten Subplot stellt die Distanz in cm sowie die Distanz gefiltert durch einen gleitenden Mittelwert, welche durch den Rohwert und der Sensorkennlinie mittels linearer Interpolation berechnet werden, dar. Durch diese Visualisierung ist es dem Anwender möglich alle 100 ms den aktuellen Sensorwert sowie die vorherigen Sensorwerte zu beobachten.
Die Ausgabe erfolgt zyklisch alle 100 ms. Dabei sind im ersten Subplot die Rohwerte über die Messung aufgezeigt. Der zweiten Subplot stellt die Distanz in cm sowie die Distanz gefiltert durch einen gleitenden Mittelwert Filter, welche durch den Rohwert und der Sensorkennlinie mittels linearer Interpolation berechnet werden, dar. Durch diese Visualisierung ist es dem Anwender möglich alle 100 ms den aktuellen Sensorwert sowie die vorherigen Sensorwerte zu beobachten. Diese Ausgabe ist in Abbildung 9 dargestellt.


==Fazit==
==Fazit==
 
Der EOPD ist ein Sensor, welcher mittels infraroter Strahlung die Distanz messen kann. Dabei ist der Sensor anders als vom Hersteller beschrieben empfindlich gegen andere Lichtquellen. Über das technische Innenleben des Sensors verrät der Hersteller wenig bis nichts. Dies führt dazu, dass nicht alles im kleinsten Detail analysiert werden kann. Der EOPD besitzt die Möglichkeit von unterschiedlichen Betriebsmodi mit unterschiedlichen Funktionen. Dies macht das Auslesen des Sensors unnötig kompliziert. Mit EV3, Arduino und Matlab ist es gelungen den EOPD auszulesen, eine Sensorkennlinie aufzunehmen und die Messwerte „on the fly“ zu messen, filtern und visualisieren.
Was ist das Ergbnis?
In einem zukünftigen Projekt ist es denkbar, dass eine Lösung erarbeitet wird, mit der der EV3 wegrationalisiert werden kann. So dass nur noch der Arduino benötigt wird. Somit müsste im Rahmen eines weiteren Projektes eine Kommunikation zwischen EOPD und Arduino oder Matlab aufgebaut werden, mit welcher der Sensor in den richtigen Betriebsmodus gesetzt werden kann.
Was kann/muss noch verbessert werden?
Fügen Sie einen Link ein, der zu dem organisatorischen Rahmen des Projekts zurückführt (z. B. zu einer Übersichtsseite einer Lehrveranstaltung)


==Lessons Learned==
==Lessons Learned==
Im Rahmen vom diesem Projekt habe ich gelernt, einen Sensor und seine Signalverarbeitungskette zu analysieren. Besonders wichtig dabei ist es, sich von Rückschlägen nicht entmutigen zu lassen. So waren drei Anläufe nötig, die Messwerte des Sensors nach Matlab/Simulink zu übertragen. Vorteilhaft war, dass zu Beginn bei der Projektplanung Puffer für weitere Lösungswege eingeplant wurde. So ist zum Ende der Projektzeit eine Funktionsfähige Lösung entstanden.


==YouTube Video==
==YouTube Video==
Zeile 252: Zeile 233:
https://www.youtube.com/watch?v=5EFkA05O5Bk&feature=youtu.be
https://www.youtube.com/watch?v=5EFkA05O5Bk&feature=youtu.be


Herausgeber: Tim Kempe
Herausgeber: Tim Kempe
Hochschule: Hochschule Hamm-Lippstadt  
Hochschule: Hochschule Hamm-Lippstadt  
Studiengang: Business and Systems Engineering  
Studiengang: Business and Systems Engineering 1. Fachsemester  
1. Fachsemester Projektkurs: Signalverarbeitende Systeme (HiTechnics EOPD mit Matlab/Simulink)  
Projektkurs: Signalverarbeitende Systeme (HiTechnics EOPD mit Matlab/Simulink)
Betreuer: Prof. Dr. Ulrich Schneider  
Ziel: Sensordaten in live auslesen, in Matlab/Simulink bereitstellen und verwenden
Praktikumsziele/Beschreibung: Sensordaten live mit Matlab/ Simulink einlesen und verarbeiten.
Ergebnis: Die Sensordaten werden mit einem Arduino UNO ausgelesen. Matlab kann mit dem Arduino UNO die Sensordaten auslesen und verwenden
Betreuer: Prof. Dr. Ulrich Schneider
Beschreibung: Dieses Video zeigt, dass die Sensordaten live ausgelesen und mit Matlab verwendet werden können
 
==SVN Projektordner==
 
Hier ist [https://svn.hshl.de/svn/BSE_Kempe/trunk/Sig_Sys/Projekt_EOPD/ SVN Projektordner] mit allen Unterlagen zum rekonstroktion von den Ergebnissen.


== Literaturverzeichnis ==
== Literaturverzeichnis ==

Aktuelle Version vom 4. Juli 2018, 10:37 Uhr

Signalverarbeitungskette eines HiTechnic EOPD Sensors und auslesen in MATLAB/Simulink


Autor: Tim Kempe

Einleitung

Dieser Artikel befasst sich im Rahmen der Lehrveranstalltung Signalverarbeitende Systeme mit dem HiTechnic EOPD Sensor. Dazu wird der Sensor an sich und die Signalverarbeitungskette beschrieben. Am Anschluss wird gezeigt, wie die Sensordaten ausgelesen und in Matlab Simulink weiterverarbeitet und visualisiert werden können.

Projektplanung

Zur Strukturierung von diesem Projekt und zum Projekttracking wurde zu Beginn ein Projektplan mit MS Project erstellt. Der Projektplan zeigt auf, dass zuerst eine Einarbeitung in die Aufgabenstellung erfolgte. Im Anschluss daran wurde eine Literaturrecherche zum Sensor und den Möglichkeiten zur Datenübertragung nach Matlab/Simulink durchgeführt. Nachdem das Arbeitspensum überblickt werden konnte, wurde der Projektplan erstellt. Darauf folgten die Beschreibung der Signalverarbeitungskette sowie das Schreiben eines Programms zum Auslesen der Sensordaten. Nachdem Test musste der Puffer für weitere Lösungswege in Anspruch genommen werden. Im Anschluss daran folgte die Messdatenaufnahmen und Dokumentation sowie die Überprüfung der Dokumentation. Letztendlich wird ein Youtube Video erstellt und der Sensor abgegeben.

Sensor und Signalverarbeitungskette

Abb. 1: HiTechnic EOPD Sensor [1]

In diesem Abschnitt wird der elektro optische Nährungssensor (engl. Electro Optical Proximity Detector); kurz EOPD) beschrieben und die Signalverarbeitungskette erläutert.

Wie funktioniert der Sensor

Der EOPD emittiert über eine integrierte LED infrarote Strahlung. Durch die auf den photoelektrischen Sensor einfallende Lichtmenge kann indirekt auf die Distanz zwischen Objekt und Sensor geschlossen werden. Der EOPD schickt infrarote Strahlung mit einer Frequenz raus. Dies hat zur Folge, dass externe infrarote Quellen keinen Einfluss auf die Messung haben. Des Weiteren haben die EOPD unterschiedliche interne Frequenzen und können sich somit nicht gegenseitig stören. Zu beachten ist, dass ein EOPD je nach Beschaffenheit der Oberfläche des reflektierenden Objektes, eine andere Lichtmenge misst. So misst der Sensor bei einer glatten Oberfläche mehr Licht als bei einer rauen. Dies führt zu einen Fehler bei der Abstandsmessung. Außerdem ist bei einer weißen Oberfläche der gemessene Abstand niedriger als bei einer schwarzen. Dies muss bei der Messung mit EOPD berücksichtigt werden. Der HiTechnics EOPD kann mit dieser Messmethode Objekte in einer Distanz von 2 cm bis zu 20 cm detektieren. Aus der Beschreibung des Sensorherstellers geht außerdem hervor, dass der EOPD in zwei Betriebsmodi betrieben werden kann. Zum einem im Modus zum Messen von kurzen Distanzen und zum andern im Modus zum Messen von weiten Distanzen.[2]

Welche Rohsignale liefert der Sensor?

Das auf den photoelektrischen Sensor einfallende Licht führt je nach Lichtmenge zu einer elektrischen Spannung. Über die genauen internen Komponenten des HiTechnic EOPD sind keine Informationen vorhanden. Eine Recherche zeigt, dass eine photoelektischer Sensor ohnen Verstärkerschaltung eine Spannung von bis zu 6 V erzeugen kann. Daher wird davon ausgegangen, dass der photoelektische Sensor des EOPD als Rohwert direkt eine Spannung von 0 V bis 5 V erzeugt. Der Zusammenhang zwischen elektrischer Spannung um Abstand wird im folgenden beschrieben. Diese Zusammenhänge stammen aus der Sensorbeschreibung der Firma HiTechnic[3]. Daraus geht hervor, dass die Rohwerte quadratisch zum Abstand abnehmen:

 (1)

Außerdem ist dies noch mit einen Saklierungsfaktor versehen.Stellt man die Gleichung (1) nach dem Abstand um, so ergibt sich:

  (2)

Aus der Sensorbeschreibung ergibt sich für den Skalierungsfaktor:

 (3)

Nun ist bekannt, dass der photoelektrische Sensor des EOPD eine elektrische Spannung liefert, welche mit dem Abstand in Abhängigkeit steht. Das Informationsblatt zeigt, dass die elektrische Spannung im Verhältnis zum Abstand abnimmt. Im Weiteren Verlauf von diesem Artikel ist zu sehen, dass die Spannung, die der Arduino erhält mit dem Abstand zunimmt. Daher wird im nächsten Kapitel die Signalvorverarbeitung erläutert.

Signalvorverarbeitung

Aus dem Kapitel Welche Rohsignale liefert der Sensor? geht hervor, dass bei einem elektro optischen Entfernungsmesser die Ausgangsspannung quadratisch mit dem Abstand abnimmt. Folgend ist dem Artikel, in Kapitel Digitale Signalverarbeitung zu entnehmen, dass die vom Arduino gemessene Spannung mit dem Abstand zunimmt. Dies bedeutet, dass der EOPD Sensor intern noch eine digitale Signalvorverarbeitung durchführt.

Da es zu dem Sensor kein ausführliches Datenblatt gibt und ein zerstörungsfreies analysieren der internen Komponenten des EOPD nicht möglich ist, kann keine genau Information zu der internen Vorverarbeitung gegeben werde. Es können nur Vermutungen getroffen werden. Da der EOPD auf unterschiedliche Betriebsmodi gesetzt werden kann, kann davon ausgegangen werden, dass der EOPD einen Mikrocontroller beinhaltet. Vermutlich macht dieser Controller auch die Vorverarbeitung des Rohwertes und wandelt die Spannung, welche mit der Entfernung abnimmt zu einer elektrischen Spannung, welche mit der Entfernung zunimmt, um. Die Spannung, die der EOPD ausgibt wird mit dem Arduino gemessen. Der Arduino verwendet dazu ein Analgo zu Digital Umsetzer. Dieser wird im kommenden Kapitel beschrieben.

Analog-Digital-Umsetzer

Ziel von diesem Projekt soll sein, die analoge Spannung des EOPD mit einem analogen Eingang des Arduino zu messen und zu digitalisieren. Daher wird in folgeden die Funktion des Analog-Digital-Umsetzers (ADC) beschrieben, welcher die analoge Spannung des EOPD digitalisiert.

Abb. 2: ADC Sukzessive Approximation [4]

Auf dem Arduino Uno ist ein ATMEGA328P-PU verbaut. Aus dem Datenblatt des Microcontrollers geht hervor, dass 10-Bit ADC´s verbaut sind. Diese ADC´s arbeiten mit dem Prinzip der sukzessiven Approximation. Dabei wird das zu messende Signal, hier die Spannung des EOPD, schrittweise durch Vergleich digitalisiert. Vergleicht wird mit einer Referenzspannung, welche genauso viele Bit hat wie der verbaute ADC. In Abbildung 2 ist die Vorgehensweise über der Zeit dargestellt. Im ersten Schritt wird das höherwertigste Bit (repräsentiert 2,5 V) der Referenzspannung eingestellt. Ein Vergleicher stellt fest, dass die Referenzspannung höher ist als das zu messende Signal, so wird dieses Bit wieder deaktiviert. Danach folgt das zweite Bit (repräsentiert 1,25 V). Wenn auch dann die Referenzspannung höher als die Spannung am analogen Eingang ist, so wird dieses Bit auch wieder deaktiviert. Danach folgt das dritte Bit (repräsentiert 0,625 V). Ist die Referenzspannung niedriger, so bleiben das Bit und somit auch die Spannung eingeschaltet und es wird das nächste Bit und somit auch dessen Spannung eingeschaltet und auf die vorherige Referenzspannung addiert. Dies wird so lange wiederholt, bis alle 10 Bit durchlaufen sind. Die eingeschalteten und ausgeschalteten Referenzspannungen repräsentieren dann den digitalisierten Wert des analogen Eingangs.[5]

Vorteile von diesem ADC sind, dass eine Umsetzung in einen digitalen Wert relative schnell erfolgt. Laut Datenblatt in 13 - 260 μs. Es gibt natürlich auch schnellere ADC´s wie z.B. ein paralleler ADC, welche die Digitalisierung in einem Schritt durchführt. Allerdings benötigen diese auch deutlich mehr Chipfläche und sind komplexer. Parallele ADC´s sind für Abtastraten im GHz Bereich gedacht. Der verwendetet ADC ist für eine Abtastrate im Bereich von mehreren kHz geeignet. Anders sieht es da bei Single-Slope-Umsetzern aus. Dieser Umsetzer arbeitet mit einem Rampenverfahren und vergleicht dem Eingang mit dem Rampenwert. Nachteil ist, dass ein Umsetzung in einen digitalen Wert relative langsam ist und von der Höhe des zu messenden Wertes abhängig ist. [6]

Auf dem Markt gibt es noch eine Vielzahl weiterer ADC. Auf diese wird im Rahmen dieses Projektes nicht weiter eingegangen.

Bussystem

Da sich im Rahmen dieser Arbeit dazu entschieden wurde, den analogen Wert vom Sensor mit dem analogen Eingang des Arduino Uno zu verbinden, werden so keine Informationen zwischen Sensor und Mikrocontroller über einen Bus übertragen. Beziehungsweise ist über die Verwendung eines Bussystems im Sensor nichts bekannt. Zwischen ADC des Arduino Uno und der CPU ist zwar ein 8 Bit Datenbus vorhanden, allerdings sind im Datenblatt für den ATMEGA328P-PU, welcher sich auf dem Arduino Uno befindet, keine Infomationen zu dem verwendeten Bus vorhanden. Daher kann an im Rahmen von diesem Artikel kein Bussystem beschrieben werden.

Digitale Signalverarbeitung und Darstellung der Ergebnisse

Eine Erfassung der Messdaten des EOPD erfolgt mit dem analogen Eingang des Arduino Uno. Der EOPD misst die einfallende Lichtmenge und wandelt diese mit einem photoelektrischen Sensor in eine Spannung um. Diese Spannung steht in Abhängigkeit zur Distanz zwischen EOPD und Objekt. Gemessen wird diese Spannung mit dem 10 Bit ADC vom Arduino Uno. Ein Signal, welches in einem Bereich von 0 V bis 5 V mit einem 10 Bit ADC digitalisiert wird, hat eine maximale Auflösung von

 (4)

Durch die Digitalisierung sind somit nur noch diskrete Werte möglich. Wie im späteren Verlauf des Artikels zu sehen, verläuft die Kennlinie zwischen Spannung in Distanz nicht linear. Dies führt dazu, dass die Auflösung über der Distanz auch nicht konstant ist. So beträgt die Auflösung bei einer Distanz zwischen 2 cm und 3 cm etwa 59,57 μm und im Bereich von 18 cm bis 20 cm sind es etwa 2,99 mm. Somit ist die Auflösung bei größeren Distanzen deutlich geringer.

Hat der Arduino Uno die elektrische Spannung digitalisiert, welche in Abhängigkeit zur Distanz steht, so wird diese über eine serielle Schnittstelle zu Matlab übertragen. Der Programmablaufplan zum Matlab Code ist im Kapitel EV3 und Arduino gezeigt. In Matlab wird die Spannung einmal als Rohwert visualisiert und einmal in den Abstand umgerechnet. Des Weiteren wird der gemessene Wert noch mit einem gleitenden Mittelwertsfilter geglättet.

Die folgende Tabelle zeigt zum einen die Spannungen des EOPD zu unterschiedlichen Distanzen, welche mit dem Arduino Uno gemessen und an Matlab übertragen wurden und zum anderen den Mittelwert zu den gemessenden Distanzen. Die aufgenommenden Werte wurde ermittelt bei der Distzanmessung zu einem weißen matten Blatt Papier. Des Weiteren war die Raumbeleuchtung eingeschaltet.


Distanz / cm Messwert / V Mittelwert / V
1 2 3 4 5
2 1,915934 1,915934 1,915934 1,915934 1,915934 1,915934
3 2,737048 2,737048 2,732160 2,732160 2,737048 2,735093
4 3,396872 3,396872 3,401760 3,391984 3,401760 3,397850
5 3,768328 3,768328 3,768328 3,753666 3,763441 3,764418
6 4,017595 4,017595 4,017595 4,012708 4,022483 4,017595
8 4,345064 4,345064 4,349951 4,345064 4,349951 4,347019
10 4,501466 4,506354 4,506354 4,506354 4,506354 4,505376
12 4,613881 4,608993 4,613881 4,608993 4,608993 4,610948
14 4,696970 4,687195 4,696970 4,696970 4,696970 4,695015
16 4,750733 4,745846 4,750733 4,750733 4,755621 4,750733
18 4,789834 4,794721 4,789834 4,789834 4,794721 4,791789
20 4,824047 4,828935 4,819159 4,824047 4,824047 4,824047
Abb. 3: EOPD Sensorkennlinie mit linearer Interpolation

Im Kapitel Welche Rohsignale liefert der Sensor? wird beschrieben, dass die elektrische Spannung am Ausgang des EOPD mit der Distanz abnimmt. Die oben dargestellten Messwerte zeigen einen entgegengesetzten Zusammenhang. Und zwar, dass die elektrische Spannung mit der Distanz zunimmt. Informationen zu der Signalverarbeitung innerhalb des Sensor, welche diesen Zusammenhang beschreiben konnten nicht gefunden werden.

Die Sensorkennlinie, welche sich aus den Mittelwerten der Spannungen zu dem Distanzen ergibt, ist in Abbildung 3 gezeigt. Eine Analyse der Messwerte zeigt, dass der Zusammenhang zwischen Distanz und Spannung nicht durch eine Funktion beschrieben werden kann. Um in Matlab zu der elektrischen Ausgangsspannung des Sensors die Distanz anzuzeigen, wird die lineare Interpolation, als das Beschreiben einer Kennlinie durch mehrere lineare Funktionen, angewendet. Diees führt dazu, dass vor allem zwischen den Stützstellen, also zwischen den Referenzpunkten der linearen Interpolation eine verhältnismäßig große Abweichung entstehen kann. Sollte die Abweichung zu groß sein, kann eine Interpolation mit nicht linearem Zusammenhang angewendet werden oder die Abstände der Stützstellen verringert werden. Im Rahmen dieser Arbeit reicht eine Betrachtung mit linearer Interpolation.

Denn bei der Messwertaufnahme ist aufgefallen, dass der EOPD, anders als im Informationsblatt angegeben, empflindlich gegenüber anderen Lichtquellen ist. So hat eine Messreihe ohne Raumbeleuchtung folgende Ergebnisse geliefert:

Distanz / cm Mittelwert / V Ermittelte Distanz von Matlab / cm
2 1,841642 Außerhalb des Messbereichs
6 3,987292 5,88
10 4,481916 9,74
14 4,719453 14,88
20 4,874878 Außerhalb des Messbereichs (>22 cm)
Abb. 4: EOPD Kennlinie Empfindlichkeit

Aus der Tabelle geht hervor, dass bei Messungen ohne Beleuchtung im Raum ein systematischer Fehler entsteht. Dieser ist je nach Distanz unterschiedlich und beträgt ca. +/- 2 mm. Bei einer Distanz von 20 cm ist der gemessene Wert außerhalb der Kennlinie, also größer 22 cm

Ein weiteres Maß für die Qualität des Sensors ist die Empfindlichkeit. Diese gibt an, wie groß die Änderung des Wertes der Ausgangsgroße eines Messsystems bezogen auf die Änderung der Eingangsgröße ist. Eine Änderung wird durch die Steigung einer Funktion beschrieben. Um die Steigung zu bestimmt ermittelt man die Ableitung einer Funktion. Daher ist in Abbildung 4 die Ableitung der interpolierten Funktion der Ausgangsgröße (Sensorspannung in V) in Bezug auf die Eingangsgröße (Distanz in cm) gezeigt. Zu sehen ist, dass die Empfindlichkeit des Sensors bei niedrigen Distanzen deutlich größer ist als bei Entfernungen im Bereich von 10 cm bis 20 cm.

Im Folgenden wird die Standardabweichung, Messunsicherheit und das Vertrauensintervall des EOPD bei unterschiedlichem Distanzen bestimmt. Dazu wurden zu jeder Distanz 5 Messwerte aufgenommen, die Standardabweichung und die Messunsicherheit nach der Student t Verteilung


 (5)

bestimmt. Dabei ist n die Anzahl der Messungen und s die Standardabweichung. t(n) beschreibt den Vertrauensfaktor für die Student t Verteilung, welcher aus einer Tabelle abgelesen werden kann. In diesem Fall ist t=2,78 für ein Vertrauensniveau von 95 %. Bei industriellen Anwendung und in der Messtechnik für üblicherweise ein Vertrauensniveau von 95 % genommen. Daher kann dieses Vertrauensniveau im Rahmen dieser Ausarbeitung verwendet werden.

(wahre) Distanz / cm gemessene Distanz / cm Standard- abweichung / cm Messunsicherheit / cm Vertrauens- intervall / cm
1 2 3 4 5
2 2,000 2,000 2,000 2,000 2,000 0,000 0,000 2 ± 0,000
3 3,003 3,003 2,996 2,996 3,003 0,004 0,004 3 ± 0,004
4 3,999 3,999 4,011 3,991 4,011 0,009 0,011 4 ± 0,011
5 5,015 5,015 5,015 4,971 4,997 0,020 0,024 5 ± 0,024
6 6,000 6,000 6,000 5,981 6,030 0,018 0,022 6 ± 0,022
8 7,988 7,988 8,037 7,988 8,037 0,027 0,033 8 ± 0,033
10 9,951 10,019 10,019 10,019 10,019 0,030 0,038 10 ± 0,038
12 12,070 11,963 12,070 11,963 11,963 0,058 0,073 12 ± 0,073
14 14,070 13,814 14,070 14,070 14,070 0,115 0,142 14 ± 0,142
16 16,000 15,825 16,000 16,000 16,238 0,147 0,183 16 ± 0,183
18 17,905 18,182 17,905 17,905 18,182 0,152 0,189 18 ± 0,189
20 20,000 20,625 19,697 20,000 20,000 0,340 0,422 20 ± 0,422
Abb. 5: EOPD Sensorkennlinie in schwarz mit Vertrauensintervall in blau

Aus der Tabelle ist zu entnehmen, dass die Messunsicherheit bei größeren Distanzen zunimmt. Dies ist in der Abbildung 5 visualisiert. Die Messunsicherheit nimmt bei größeren Distanzen zu, da die Empfindlichkeit bei größeren Distanzen abnimmt. Daraus folgt, dass eine geringere Empfindlichkeit des Sensors zu einer größeren Messunsicherheit führen kann.

Messdaten nach MATLAB/Simulink

Um die Messdaten nach MATLAB/Simulink zu übertragen und dort zu verwenden gibt es unterschiedlichste Möglichkeiten. Zu Beginn wird versucht die Messdaten über den analogen Port des Sensors mittels Arduino auszulesen und an MATLAB/Simulink zu übertragen. Dazu wird in der folgenden Tabelle der Belegungsplan des Sensorsteckers gezeigt. Diese Information wurde aus dem Lego Mindstorms EV3 Hardware Developer Kit entnommen.

Pin Farbe Eigenschaft
1 weiß ADC@5 V ref, 9V mit Vorwiderstand
2 schwarz GPIO, Auto ID
3 rot Masse
4 grün Versorgung 5 V
5 gelb Digital I/O, SCL (I2C), UART RX
6 blau Digital I/O, SDA (I2C), ADC@5 V ref, UART RX

Über Arduino

Abb. 6: Beschaltungsplan vom EOPD Sensor und Arduino Uno [7]

Die Idee ist es, den analogen Port des EOPD Sensors mit einem der analogen Eingänge von Arduino Unoauszulesen. Um dies zu realisieren wurde eine Schaltung nach dem in Abbildung 6 gezeigt Schema aufgebaut. Dabei ist der analoge Ausgang des EOPD Sensors am analogen Eingang A0 des Arduinos angeschlossen. Mit dem folgenden Programmcode kann sich der Wert des EOPD Sensors am seriellen Monitor angezeigt werden.

int sensorPin = A0;  // Analogen Port 0
int value=0; // Wert auf 0 setzen

void setup() {
  
  Serial.begin(115200); // Serielle Kommunikation aktivieren
  Serial.println(Serielle Kommunikation gestartet); 
}
 
void loop() {
 
  value = analogRead(A0); // Spannung an analogen Eingang messen  
  Serial.println(value);  // Rohwert über seriellen Monitor ausgaben           
  delay(500); // 500 ms Warten
}

Im seriellen Monitor ist zu sehen, dass die gemessenen Rohwerte, beim Testen von Abständen zwischen 0 cm und 20 cm, im Bereich von 6 bis 8 pendeln. Diese Messwerte erscheinen nicht plausibel. Nach Recherche kommt die Erkenntnis, dass der Sensor zuerst in einen geeigneten Betriebsmodus gesetzt werden muss um einen analogen Wert zu erhalten. Daraus Folgt, dass dieser Ansatz nicht so realisierbar wie gedacht. Daher wird im Folgenden versucht den Sensorwert über den EV3 auszulesen.

Über EV3

Im Folgenden wird die Möglichkeit beschrieben, den EOPD Sensor über einen Lego Mindstorms EV3 auszulesen. Zum Anzeigen der Sensorwerte wird ein MATLAB/Simulink Demo Modell aus dem SVN Ordner der Veranstalltung Signalverarbeitende Systeme genommen [8]. Zur Inbetriebnahme von EV3 und EOPD kann wie im Artikel EV3 mit Simulink beschrieben, vorgegangen werden. Ergebnis ist, dass der EV3 die Rohwerte und den Abstand in cm zum Objekt anzeigt. Wie in der Abbildung rechts zu sehen. Allerdings kann das Programm, zum Auslesen des Sensors mit dem EV3, nur von Simulink übertragen werden. Im Matlab/Simulink stehen die Informationen nicht zur Verfügung. Vorteil ist, dass der Modus des Sensors geändert wurde. Daher ist die Überlegung, den Sensor über den EV3 in den richtigen Modus zu setzen um über dem Arduino mit Matlab auszulesen. Dies wird im Folgenden beschrieben.

EV3 und Arduino

Abb. 7: Programmablaufplan zum Auslesen des EOPD Sensors mit Matlab.

Die Idee ist, den Sensor mit dem EV3 in dem richtigen Betriebsmodus zu setzen und dann mit dem Arduino und dem Matlab Support Package für Arduino Hardware die Verbindung zu Matlab herzustellen. Die Vorgehensweise dabei wird im Weiteren beschrieben.

Abb. 8: Anschlussplan EOPD, Arduino und EV3 zum Auslesen des Sensorwertes
Abb. 9: Messreihe des EOPD, welche von Matlab ausgegeben wird

Der Sensor wird wie im Abschnitt Über EV3 angeschlossen und konfiguriert. Der Arduino wird wie im Anschlussplan, welcher in Abbildung 8 zu sehen ist, an den Sensor bzw. dem Sensorkabel abgeschlossen. So sind sowohl der EV3 als auch der Arduino mit dem Sensor verbunden. Über den Pin 1, der weißen Ader des Sensorkabels, kann nun mit dem Arduino und Matlab der analoge Wert ausgelesen werden. Durch den ADC des Arduino wird die gemessene Distanz in eine Spannung von 0 bis 5 V digitalisiert. Dieser Wert wird mit Matlab ausgelesen und weiterverarbeitet. Dazu muss das Matlab Support Package für Arduino Hardware installiert sein. Zum Auslesen, Filtern und Darstellen des Sensorwertes in Echtzeit wurde nach dem Programmablaufplan, zu sehen in Abbildung 7, eine Matlab Code erstellt. Dieser ist im mit Matlab auslesen/ SVN Ordner hinterlegt. Als Filter wird ein gleitender Mittelwert Filter verwendet. Es wird über 5 Messwerte gefiltert. Der Code dazu kommt aus dem SVN Ordner der Veranstaltung Moderne Tracking Systeme [9].

Die Ausgabe erfolgt zyklisch alle 100 ms. Dabei sind im ersten Subplot die Rohwerte über die Messung aufgezeigt. Der zweiten Subplot stellt die Distanz in cm sowie die Distanz gefiltert durch einen gleitenden Mittelwert Filter, welche durch den Rohwert und der Sensorkennlinie mittels linearer Interpolation berechnet werden, dar. Durch diese Visualisierung ist es dem Anwender möglich alle 100 ms den aktuellen Sensorwert sowie die vorherigen Sensorwerte zu beobachten. Diese Ausgabe ist in Abbildung 9 dargestellt.

Fazit

Der EOPD ist ein Sensor, welcher mittels infraroter Strahlung die Distanz messen kann. Dabei ist der Sensor anders als vom Hersteller beschrieben empfindlich gegen andere Lichtquellen. Über das technische Innenleben des Sensors verrät der Hersteller wenig bis nichts. Dies führt dazu, dass nicht alles im kleinsten Detail analysiert werden kann. Der EOPD besitzt die Möglichkeit von unterschiedlichen Betriebsmodi mit unterschiedlichen Funktionen. Dies macht das Auslesen des Sensors unnötig kompliziert. Mit EV3, Arduino und Matlab ist es gelungen den EOPD auszulesen, eine Sensorkennlinie aufzunehmen und die Messwerte „on the fly“ zu messen, filtern und visualisieren. In einem zukünftigen Projekt ist es denkbar, dass eine Lösung erarbeitet wird, mit der der EV3 wegrationalisiert werden kann. So dass nur noch der Arduino benötigt wird. Somit müsste im Rahmen eines weiteren Projektes eine Kommunikation zwischen EOPD und Arduino oder Matlab aufgebaut werden, mit welcher der Sensor in den richtigen Betriebsmodus gesetzt werden kann.

Lessons Learned

Im Rahmen vom diesem Projekt habe ich gelernt, einen Sensor und seine Signalverarbeitungskette zu analysieren. Besonders wichtig dabei ist es, sich von Rückschlägen nicht entmutigen zu lassen. So waren drei Anläufe nötig, die Messwerte des Sensors nach Matlab/Simulink zu übertragen. Vorteilhaft war, dass zu Beginn bei der Projektplanung Puffer für weitere Lösungswege eingeplant wurde. So ist zum Ende der Projektzeit eine Funktionsfähige Lösung entstanden.

YouTube Video

Das Youtube Video ist unter den folgenden Link zu erreichen:

https://www.youtube.com/watch?v=5EFkA05O5Bk&feature=youtu.be

Herausgeber: Tim Kempe
Hochschule: Hochschule Hamm-Lippstadt 
Studiengang: Business and Systems Engineering 1. Fachsemester 
Projektkurs: Signalverarbeitende Systeme (HiTechnics EOPD mit Matlab/Simulink)
Ziel: Sensordaten in live auslesen, in Matlab/Simulink bereitstellen und verwenden
Ergebnis: Die Sensordaten werden mit einem Arduino UNO ausgelesen. Matlab kann mit dem Arduino UNO die Sensordaten auslesen und verwenden
Betreuer: Prof. Dr. Ulrich Schneider
Beschreibung: Dieses Video zeigt, dass die Sensordaten live ausgelesen und mit Matlab verwendet werden können

SVN Projektordner

Hier ist SVN Projektordner mit allen Unterlagen zum rekonstroktion von den Ergebnissen.

Literaturverzeichnis

  1. HiTechnic EOPD Sensor Generation Robots
  2. HiTechnic EOPD Sensor HiTechnic NXT EOPD
  3. EOPD – How to measure distance http://www.hitechnic.com/blog/eopd-sensor/eopd-how-to-measure-distance/
  4. Angewandte Mikroelektronik vias.org
  5. ATMEGA328P-PU
  6. Wikipedia ADC
  7. Fritzing Foto
  8. EOPD_Demo von Prof. Schneider https://svn.hshl.de/svn/BSE_SigSys/trunk/SRC/Demos/EV3_HiTechnic_EOPD/
  9. Filter gleitender Mittelwert von Prof. Schneider https://svn.hshl.de/svn/BSE_Moderne_Trackingsysteme/trunk/Demos/GleitenderMittelwert/


→ zurück zum Hauptartikel: SigSys SoSe2018