Ultraschall mit Matlab/Simulink: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(97 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:
'''Autor:''' [[Benutzer:Sven_Gaida| Sven Gaida]] <br/>
'''Autor:''' [[Benutzer:Sven_Gaida| Sven Gaida]] <br/>
'''Betreuer:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Ulrich Schneider]] <br/>
'''Betreuer:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Ulrich Schneider]] <br/>
'''Sensor:''' [https://shop.lego.com/de-DE/Ultraschallsensor-9846 Lego Ultraschall 9846] <br/><br/>
'''Sensor:''' [https://shop.lego.com/de-DE/Ultraschallsensor-9846 Lego Ultraschall 9846] <br/>
'''SVN Ordner:''' [https://svn.hshl.de/svn/BSE_Gaida/trunk SVN] <br/><br/>
[[Bild:NXT Ultraschallsensor.PNG|thumb|300px|right|Abb1.: Lego Mindstorms NXT Ultraschallsensor]]
Das Ziel der Lehrveranstaltung „Signalverarbeitende Systeme“ mit dieser semesterbegleitenden Prüfung ist es eine Signalverarbeitungskette beschreiben, untersuchen und verstehen zu können. Die Untersuchung des Sensors wird mit der Entwicklungsumgebung MATLAB/Simulink durchgeführt.  
Das Ziel der Lehrveranstaltung „Signalverarbeitende Systeme“ mit dieser semesterbegleitenden Prüfung ist es eine Signalverarbeitungskette beschreiben, untersuchen und verstehen zu können. Die Untersuchung des Sensors wird mit der Entwicklungsumgebung MATLAB/Simulink durchgeführt.  
<br/>
<br/>
<br/>
<br/>
== Einleitung ==
== Einleitung ==
Der Lego Mindstorms NXT Ultraschallsensor (Artikel 9846), weiterhin nur NXT Ultraschallsensor genannt, ist ein von Lego entwickelter Sensor um Abstände zwischen sich und der Umgebung zu messen. Der NXT Ultraschallsensor wurde erstmalig Anfang 2006 auf der Messe „Consumer Electroncis Show“ vorgestellt und war seitdem ein fester Bestandteil verschiedener Lego Mindstorms NXT-Sets. Heutzutage ist der NXT Ultraschallsensor nur noch ein Auslaufmodell, da die NXT-Serie Anfang 2013 durch die EV3-Serie abgelöst wurde. Aufgrund dieser Erneuerung wurden einige NXT-Bauteile, darunter auch der NXT Ultraschallsensor, durch neuere und verbesserte Bauteile ausgetauscht. <ref name="Lego Mindstorms NXT"> "Lego Mindstorms NXT" von [https://de.wikipedia.org/w/index.php?title=Lego_Mindstorms_NXT&oldid=174258008 Wikipedia]</ref> Der NXT Ultraschallsensor ermöglicht dem System Abstände zu verschiedenen Objekten berührungslos zu erkennen und ebenfalls die Distanz zum Sensor zu messen.
Der Lego Mindstorms NXT Ultraschallsensor (Artikelnummer 9846), weiterhin nur NXT Ultraschallsensor genannt, ist ein von Lego entwickelter Sensor um Abstände zwischen sich und der Umgebung zu messen. Der NXT Ultraschallsensor wurde erstmalig Anfang 2006 auf der Messe „Consumer Electroncis Show“ vorgestellt und war seitdem ein fester Bestandteil verschiedener Lego Mindstorms NXT-Sets. Heutzutage ist der NXT Ultraschallsensor nur noch ein Auslaufmodell, da die NXT-Serie Anfang 2013 durch die EV3-Serie abgelöst wurde. Aufgrund dieser Erneuerung wurden einige NXT-Bauteile, darunter auch der NXT Ultraschallsensor, durch neuere und verbesserte Bauteile ausgetauscht. <ref name="Lego Mindstorms NXT"> "Lego Mindstorms NXT" von [https://de.wikipedia.org/w/index.php?title=Lego_Mindstorms_NXT&oldid=174258008 Wikipedia]</ref>
<br/>
<br/>
Lego klassifiziert ihre Sensoren in drei verschiedene Kategorieren: die passiven, aktiven und digitalen Sensoren. Als digitale Sensoren werden die Sensoren bezeichnet, die einen zusätzlichen Mikrocontroller im Sensor besitzen. Der NXT Ultraschallsensor war der erste digitale Legosensor mit dem es möglich war Abstände zu verschiedenen Objekten berührungslos zu ermitteln und ebenfalls die Distanz zum Sensor zu messen. Dabei misst der Sensor Distanzen wahlweise in Zentimetern oder in Zoll. Laut dem Hersteller können Abstände von 0 bis 250cm mit einer Messungenauigkeit von ±3 cm ermittelt werden.<ref name="Mindstorms Education"> "Mindstorms Education" von [https://www.generationrobots.com/media/Lego-Mindstorms-NXT-Education-Kit.pdf Generationrobots]</ref>
<br/>
== Messprinzip ==  
== Messprinzip ==  
[[Bild:Geschwindigkeit zur Luftfeuchte.PNG|thumb|500px|right|Abb.: Schallgeschwindigkeit in Abhängigkeit zur relativen Luftfeuchte bei 20°C ]]
Das Prinzip des Sensors beruht auf der physikalischen Grundlage der Akustik und der Ausbreitung des Schalls. Der Ultraschall liegt bei Frequenzen oberhalb des menschlichen Hörbereiches und diese werden von 20 kHz bis 1 GHz definiert. Er kann entweder pneumatisch oder elektrisch erzeugt werden und kann sich im Gegensatz zu elektromagnetischen Wellen nur in Materie ausbreiten. In vielen Anwendungen ist diese Materie hauptsächlich Luft. Die Abstandsmessung mit dem Ultraschall basiert auf einer Laufzeitmessung eines Schallpulses. Dafür ist die genaue Kenntnis der Schallgeschwindigkeit, ebenfalls Ausbreitungsgeschwindigkeit genannt, für die Messungen eine primäre Größe. Aufgrund physikalischer Gegebenheiten der Schallausbreitung ergeben sich Abhängigkeiten der Reichweite und der Ausbreitungsgeschwindigkeit des Schalls durch die Lufttemperatur, dem Luftdruck und der relativen Luftfeuchte. Abschließend sei zusammenfassend zu erwähnen, dass die Schallgeschwindigkeit somit die Geschwindigkeit, mit der sich Schallwellen in einem Medium bewegen, beschreibt. <ref name="Grundlagen Automatisierung - Sensorik, Regelung, Steuerung"> "Glöckler, Heinrich, Linke (2015): Grundlagen Automatisierung - Sensorik, Regelung, Steuerung; Springer Vieweg
Das Prinzip des Sensors beruht auf der physikalischen Grundlage der Akustik und der Ausbreitung des Schalls. Der Ultraschall liegt bei Frequenzen oberhalb des menschlichen Hörbereiches und wird von 20kHz bis 1GHz definiert. Der Ultraschall kann entweder pneumatisch oder elektrisch erzeugt werden und dieser kann sich im Gegensatz zu elektromagnetischen Wellen nur in Materie ausbreiten. In vielen Anwendungen ist diese Materie hauptsächlich Luft. Die Abstandsmessung mit Ultraschall basiert auf einer Laufzeitmessung eines Schallpulses. Dafür ist die genaue Kenntnis der Schallgeschwindigkeit, ebenfalls Ausbreitungsgeschwindigkeit genannt, für die Messungen eine primäre Größe. Die Schallgeschwindigkeit hängt von zwei weiteren Größen ab, die die Messung stark beeinflussen können: die Lufttemperatur und die relative Luftfeuchte. <br/>
" </ref><br/>
=== Lufttemperatur ===
=== Lufttemperatur ===
Hierfür gilt folgende Gleichung:
[[Bild:Schallgeschwindigkeit Temp.PNG|thumb|350px|right|Abb.2: Zusammenhang zwischen Lufttemperatur, Luftdruck und Schallgeschwindigkeit ]]
Folgende Gleichung berücksichtigt die Lufttemperatur bei der Berechnung der Schallgeschwindigkeit:
<br/>
<br/>
<br/>
<math>c=\sqrt{c_{0}(1+\frac{T}{273})}</math>
<math>c=\sqrt{c_{0}(1+\frac{T}{273})}</math>
<br/>
<br/>
<br/>
<br/>
Dabei ist <math>T</math> die Temperatur in °C und <math>c_{0}</math> die Schallgeschwindigkeit bei <math>T=0^{o}C</math>.
Dabei ist <math>T</math> die Temperatur in °C und <math>c_{0}</math> die Schallgeschwindigkeit bei <math>T=0 ^{o}C</math> (331,6 m/s).
Die Schallgeschwindigkeit ist somit proportional zur Wurzel der Temperatur.
Die Schallgeschwindigkeit ist somit proportional zur Wurzel der Temperatur.
{| class="wikitable"
{| class="wikitable"
|+ Tab. x: Schallgeschwindigkeit als Funktion zur Lufttemperatur
|+ Tab.1: Richtwerte der Schallgeschwindigkeit als Funktion zur Lufttemperatur
|-align="middle
|-align="middle
| '''''T''''' in °C || -20 || 0 || +20 || +40 || +60 || +80
| '''''T''''' in °C || -20 || 0 || +20 || +40 || +60 || +80
Zeile 27: Zeile 34:
| '''''c''''' in m/s || 319,3 || 331,6 || 343,8 || 355,3 || 366,5 || 377,5           
| '''''c''''' in m/s || 319,3 || 331,6 || 343,8 || 355,3 || 366,5 || 377,5           
|}
|}
=== Luftdruck ===
Neben der Temperaturabhängigkeit der Schallgeschwindigkeit existiert auch eine starke Abhängigkeit vom Luftdruck. Steigt dieser nimmt ebenfalls die Schallgeschwindigkeit zu. Die Zusammenhänge werden in der Abbildung 2 dargestellt.
<br/>
<br/>
=== Relative Luftfeuchte ===
=== Relative Luftfeuchte ===
Die nebenstehende Grafik zeigt die Abhängigkeit der Schallgeschwindigkeit als Funktion zur relativen Luftfeuchte bei 20°C. Hierbei ist zu erkennen, dass mit zunehmender Luftfeuchte sich die Schallgeschwindigkeit erhöht.  
Die nachfolgende Abbildung 3 gibt die Abhängigkeit der Schallgeschwindigkeit als Funktion zur relativen Luftfeuchte bei 20 °C wieder. Hierbei ist zu erkennen, dass mit zunehmender Luftfeuchte sich die Schallgeschwindigkeit erhöht. Die anderen Abbildungen 4 und 5 stellen die Abhängigkeit zwischen der Reichweite, rel. Luftfeuchte und der Temperatur dar. Es ist deutlich zu erkennen, dass die Reichweite bei niedrigen Temperaturen unabhängig von der rel. Luftfeuchte steigt. Bei geringen Reichweiten hat die Luftfeuchte erst bei ungefähr 0 °C und bei hohen Reichweiten bei ungefähr -20 °C einen erheblichen Einfluss auf die Reichweite.
<gallery class="center" caption="Einfluss der relativen Luftfeuchte" widths="300" heights="300">
Datei:Geschwindigkeit zur Luftfeuchte.PNG|Abb.3: Schallgeschwindigkeit in Abhängigkeit zur relativen Luftfeuchte bei 20 °C
Datei:Reichweite Temp2.PNG|Abb.4: Zusammenhang zwischen geringer Reichweite, rel. Luftfeuchte und Temperatur
Datei:Reichweite Temp1.PNG|Abb.5: Zusammenhang zwischen hoher Reichweite, rel. Luftfeuchte und Temperatur
</gallery>
== Funktionsprinzip ==
[[Bild:Funktionsweise eines Ultraschallsensors.PNG|thumb|300px|right|Abb.6: Funktionsweise eines Ultraschallsensors]]
Mithilfe des Taktgenerators aktiviert die Steuerelektronik den Leistungsverstärker periodisch, sodass dieser die Sendeeinheit für kurze Zeit mit einer hohen Spannung und damit auch einer hohen elektrischen Leistung ansteuert. Beim Anlegen der sinusartigen Spannung wird das Piezoelement zum Schwingen angeregt. Hierdurch wird elektrische Energie in mechanische Energie umgewandelt, wodurch der Ultraschallimpuls (Sendeimpuls) entsteht. Dabei arbeitet der Sensor mit einer festen Frequenz und einer Sendedauer von t=300 µs (ergibt 12 Schwingungen). Nach dieser Zeit benötigt der Sender eine gewisse Ausschwingzeit, um wieder in den Anfangszustand zu kommen. In dieser Zeit wechselt die Steuerelektronik vom Sendemodus in den Empfangsmodus. Bei der Empfangseinheit wird der umgekehrte Effekt ausgenutzt. Eine äußere Kraft (einwirkendes Echo) bewirkt auf dem Piezoelement Oberflächenladungen, die als Spannung messbar sind. Somit wird mechanische Energie in elektrische Energie umgewandelt. <ref name="Sensoren in Wissenschaft und Technik"> "Hering, Schönfelder (2012): Sensoren in Wissenschaft und Technik; Vieweg + Teubner" </ref>
<br/>
=== Erfassungsbereich ===
Jeder Ultraschallsensor hat einen gewissen Erfassungsbereich in dem der Sensor die Objekte erkennen kann. Dieser wird von der kleinsten und größten Reichweite begrenzt. Laut Datenblatt beträgt die Reichweite 0 bis 250 cm mit einer Messungenauigkeit von ±3cm. Eine sehr geringe Entfernung kann mit einem Ultraschallsensor nicht erreicht werden, da dieser Bereich als Blindzone bezeichnet wird. In dieser Blindzone kann der Ultraschallsensor kein Objekt detektieren. Sie wird von der Sendeimpulsdauer und der Ausschwingzeit des Senders verursacht, da während der Übertragung des Sendeimpulses kein Echosignal empfangen werden kann.
<br/>
=== Distanzmessung ===
Die Zeit zwischen dem Senden und Empfangen des Impulses/Schalls ist proportional zum Abstand zwischen Objekt und Sensor. Wie bereits erwähnt ist die Ultraschallgeschwindigkeit eine sehr wichtige Größe, da diese beschreibt mit welcher Geschwindigkeit sich Schallwellen in einem Medium bewegen. 
Die Distanzmessung zum nächstgelegenen Objekt kann nun mit folgender Formel berechnet werden:
<br/>
<br/>
<math>s=0,5\times t_{Echo}\times c</math>
<br/>
<br/>
Die Entfernung <math>s</math> wird aus der Multiplikation der gesamten benötigten Echolaufzeit <math>t_{Echo}</math> und der Schallgeschwindigkeit <math>c</math> errechnet. Da der Ultraschall zum Objekt und wieder zum Empfänger zurücklaufen muss, legt er damit die doppelte Entfernung zurück und muss somit schlussendlich noch halbiert werden.  
<br/>
<br/>
=== Beispiel ===
Der NXT Ultraschallsensor wird vor einem Objekt platziert und es wird die Entfernung zwischen dem Objekt und dem Sensor gesucht. Die Echolaufzeit wird von einem Mikrocontroller ermittelt und soll <math>t_{Echo} = 1200\mu s</math> betragen. Die Lufttemperatur beträgt 20 °C und der Luftdruck, sowie die relative Feuchte können vernachlässigt werden. <br/>
Nach der Formel zur Distanzmessung beträgt die Entfernung:
<br/>
<br/>
<math>s = 0,5 \times 1200\mu s \times 343,8\frac{m}{s}=0,2062 m = 20,62 cm</math>
<br/>
<br/>
Bei idealisierten Verhältnissen befindet sich der Sensor 20,62 cm vor dem Objekt.
<br/>
== Aufbau und Schaltplan ==  
== Aufbau und Schaltplan ==  
[[Bild:Schaltplan_NXTUltrasonic.jpeg|thumb|800px|right|Abb.: Schaltplan des Lego Mindstorms NXT Ultraschallsensors]]
[[Bild:Schaltplan_NXTUltrasonic.jpeg|thumb|600px|right|Abb.7: Schaltplan des Lego Mindstorms NXT Ultraschallsensors]]
Primäre Elemente des Sensors sind der Mikrocontroller ESC015 und der dazugehörige externe Oszillator mit einer Frequenz von 3.58MHz, die Piezo Sender und Empfänger TCT40-12F2 / TCT40-12S2 und die 6-fache invertierende Treiberstufe mit dem Baustein CD4049. <br/>
Primäre Elemente des Sensors sind der Mikrocontroller ESC015 und der dazugehörige externe Oszillator mit einer Frequenz von 3.58MHz, die Sende- und Empfangseinheiten TCT40-12F2 / TCT40-12S2 und die 6-fach invertierende Treiberstufe mit dem Baustein CD4049. <br/>
Der ESC015 ist ein spezieller 4-bit RISC Sound Prozessor mit drei verschiedenen I/O Ports, wobei Port 1 nur als reiner Input-Port verwendet werden darf. Alle Ports haben Softwarekontrollierte "Pull Low" Widerstände. Zudem verfügt der Mikrocontroller über eine I2C-Schnittstelle.
Der ESC015 ist ein spezieller 4-bit RISC Sound Prozessor mit drei verschiedenen I/O Ports, wobei Port 1 nur als reiner Input-Port verwendet werden darf. Alle Ports haben Softwarekontrollierte "Pull Low" Widerstände. Zudem verfügt der Mikrocontroller über eine I2C-Schnittstelle und übernimmt die Aufgabe der Steuerelektronik.
{| class="wikitable"
{| class="wikitable"
|+ Tab. x: ESC015 Pinbelegung
|+ Tab.2: ESC015 Pinbelegung
|-align="middle
|-align="middle"
! Symbol !! I/0 !! Funktionsbeschreibung   
! Symbol !! I/0 !! Funktionsbeschreibung   
|-
|-
Zeile 44: Zeile 86:
| OSCO      || O || Oszillator Out           
| OSCO      || O || Oszillator Out           
|-
|-
| P1.0~3          || I                || Bits 0~3 Port 1
| P1.0~3          || I                || bits 0~3 Port 1
|-
|-
| P2.0~3          || I/O                || Bits 0~3 Port 2
| P2.0~3          || I/O                || bits 0~3 Port 2
|-
|-
| P3.0~3          || I/O                || Bits 0~3 Port 3
| P3.0~3          || I/O                || bits 0~3 Port 3
|-
|-
| VCC          || I                  || 2.2V bis 5.1V Versorgungsspannung
| VCC          || I                  || 2.2 V bis 5.1 V Versorgungsspannung
|-
|-
| GND          || I                  || Masse
| GND          || I                  || Masse
Zeile 56: Zeile 98:
| RESETB          || I                  || Reset Pin (intern pull-high)
| RESETB          || I                  || Reset Pin (intern pull-high)
|}
|}
{| class="wikitable"
|+ Tab.3: Interrupt Mode
|-align="middle"
! Interrupt !! Funktionsbeschreibung 
|-
| Speech          || 8-bit resolution with pre-load counter
|-
| High resolution Timer      || 8-bit resolution with pre-load counter         
|-
| Timer          || 4 bits pre-load counter
|-
| External Interrupt          || Occurs when P1.3 pad has a rising edge change
|}
<br/>
Der Baustein CD4049 ist ein sogenannter Hex invertierender Treiber/Verstärker. Das Hex (=6) bezieht sich auf die Anzahl der vorhandenen Treiber. Der CD4049 hat primär zwei verschiedene Anwendungsfälle. Zum Einen kann dieser Baustein als Logikbaustein eingesetzt werden, womit der Ausgang immer das entgegengesetzte Signal als das am Eingang erhält. Das Eingangssignal wird also invertiert. Zum Anderen und wie hier in der Schaltung kann der Baustein als Leistungsverstärker eingesetzt werden. Dadurch ist es möglich die Sendeeinheit mit einer kurzzeitigen hohen Spannung zu betreiben. <br/>
Die Sende- und Empfangseinheiten sind für die Ein- und Auskopplung des Ultraschalls zuständig. Hieraus resultiert auch die Empfindlichkeit und die Reichweite den Sensors. Beide Einheiten arbeiten bei einer festen Frequenz von 40 kHz.
<br/>
<br/>
Der Baustein CD4049 ist ein sogenannter Hex invertierender Treiber/Verstärker. Das Hex (=6) bezieht sich auf die Anzahl der vorhandenen Treiber. Der CD4049 hat primär zwei verschiedene Anwendungsfälle. Zum Einen kann dieser Baustein als Logikbaustein eingesetzt werden, womit der Ausgang immer das entgegengesetzte Signal als am Eingang erhält. Das Eingangssignal wird also invertiert. Zum Anderen und wie hier in der Schaltung kann der Baustein als Stromverstärker eingesetzt werden. Dadurch ist es möglich den Piezosender mit einem relativ geringen Strom zu betreiben. <br/>
<br/>
Die Piezo Sender und Empfänger
<gallery class="center" caption="Geöffneter Ultraschallsensor" widths="300" heights="300">
Datei:NXT offen1.jpg|Abb.8: Kompletter Aufbau
Datei:NXT offen3.jpg|Abb.9: Ansicht oben
Datei:NXT offen4.jpg|Abb.10: Ansicht unten
Datei:NXT offen2.jpg|Abb.11: Ansicht Sensoren
</gallery>
 
== Analog-Digital-Converter ==
Die folgenden Erkenntnisse sind Annahmen, die auf dem Datenblatt des ESC015 und vorallem auf dem Schaltplan, Abbildung 7, basieren. <br/>Laut dem Datenblatt des ESC015 besitzt dieser Mikrocontroller keine integrierte ADC-Umwandlung, sodass eine alternative Methode zum Einsatz kommen muss. Wie schon im Kapitel "Funktionsprinzip" erklärt, wird eine Echolaufzeit benötigt, um die korrekte Distanz zwischen dem Objekt und dem Sensor zu ermitteln. Der Mikrocontroller ist das eigentliche Steuerelement um die Sende- und Empfangseinheiten zu kontrollieren, die Messwerte (Zeitmessung) aufzunehmen und für die I2C Kommunikation zu verarbeiten. Mit den Ausgängen P2.1 und P2.2 kann der Mikrocontroller die Sendeeinheit periodisch steuern, indem er seine Ports auf High/Low schaltet und die Transistoren abwechselnd durchschalten und sperren lässt. Dadurch wird zum Beispiel die Versorgungsspannung auf Masse gezogen und die Sendeeinheit (TCT40-12F2) hört auf zu senden. In Kombination mit dem Leistungsverstärker und der Möglichkeit die Sendeeinheit periodisch anzusteuern, kann die Ultraschallwelle erzeugt werden. Wenn der Mikrocontroller nun den Befehl zum Ansteuern gibt, startet er ebenfalls seinen integrierten 8Bit Timer, der für hohe Auflösungen bestimmt ist. Die Ultraschallwelle wird erzeugt und trifft beim Reflektieren am Objekt danach auf die Empfangseinheit (TCT40-12S2). Das sinusartige Echosignal steuert daraufhin die weiteren Transistoren, die einen mehrstufigen Verstärker bilden, in der Schaltung an. Der Eingangskondensator C1 dient dazu, die Basis vom Eingangssignal gleichstrommäßig abzukoppeln. Der Mikrocontroller hat an seinem P1.0 Eingangsport solange die Kollektorspannung des Eingangs anliegen (High Signal) bis das Echosignal auch diesen Transistor umschaltet und das Signal auf Masse gezogen wird. Dieses ist das Zeichen für den Mikrocontroller seinen laufenden 8 bit Timer zu stoppen, die Echolaufzeit in die Distanz zwischen Objekt und Sensor umzurechnen und einer Master I2C-Anfrage bereitzustellen. Falls der Mikrocontroller wieder einen Sendebefehl geben will und der Schwingvorgang bei der Empfangseinheit noch nicht abgeklungen ist, wird dieser Schwingvorgang abrupt durch die Transistoren, die der Ausgang P2.0 ebenfalls ansteuert, durch die bereitgestellte Masse beendet.   
<br/>
=== Alternative ===
Als Alternative zu diesem Verfahren kann sicherlich die Methode der sukzessiven Approximation angewandt werden. Hierfür kann ein Mikrocontroller genutzt werden, der die Methode schon integriert hat. Das beste Beispiel hierfür ist die Weiterentwicklung des klassischen NXT Ultraschallsensors zum EV3 Ultraschallsensor. Als der NXT Ultraschallsensor im Jahre 2006 vorgestellt wurde, war sicherlich der Kostenfaktor des Mikrocontrollers ein wesentlicher Punkt um auf den ADC zu verzichten und stattdessen einen Timer zu nutzen. Hierfür mussten aber weitere Transistoren, Widerstände und Kondensatoren eingeplant werden mit denen diese Funktion gewährleisten werden konnte. Dieses wird durch einen direkten Vergleich der beiden Sensorschaltpläne sichtbar. <ref name="Objekterkennung mit rotierenden Ultraschall mit Matlab/Simulink und EV3"> "Objekterkennung mit rotierenden Ultraschall mit Matlab/Simulink und EV3" von [https://193.175.248.52/wiki/index.php/Objekterkennung_mit_rotierenden_Ultraschall_mit_Matlab/Simulink_und_EV3 Cosima Eckert-Ludwig ]</ref>
<br/>
<br/>


== Bussystem ==  
== Bussystem ==  
Der Sensor kommuniziert mittels dem I2C-Protokoll auf dem I2C-Bus. I2C, auch TWI (Two-Wire-Interface) genannt, ist eine von der Firma Philips (heute NXT) entwickelte synchrone serielle Zweidraht-Verbindung, somit werden für die Kommunikation mit dem Sensor nur zwei weitere Leitungen, die Taktleitung SCL (Serial Clock) und die Datenleitung SDA (Serial Data), benötigt. Obwohl der I2C Bus vor guten 30 Jahren entwickelt worden ist, ist es heutzutage aufgrund der einfachen Implementierung, der niedrigen Kosten und der hohen Übertragungsrate noch immer ein Industriestandard für Steuerungs-, Diagnose und Überwachungslösungen in eingebetteten Systemen. <ref name="I2C-Bus"> "I2C-Bus" von [https://www.elv.de/Arduino-verstehen-und-anwenden-Teil-22-I%C2%B2C-der-Inter-IC-Bus-Grundlagen-und-Anwendungen/x.aspx/cid_726/detail_60435 ELV Journal]</ref> <br/>
[[Datei:Arduino I2C.PNG|550px|mini|right|Abb.12: Arduino kommuniziert mit dem Ultraschallsensor per I2C]]
I2C wurde als Master-Slave-Bus konzipiert, sodass ein Datentransfer immer durch einen Master gestartet wird. Der Master gibt den Takt und den Betriebsmodus vor und initiiert die byteweise Datenübertragung. Mit einer 7-Bit-Adresse können bis zu 112 Slaves und einer 10-Bit-Adresse bis zu 1008 Slaves angesprochen werden. <br/>
Der Sensor kommuniziert mittels dem I2C-Protokoll auf dem I2C-Bus. I2C, auch TWI (Two-Wire-Interface) genannt, ist eine von der Firma Philips (heute NXP Semiconductors) entwickelte synchrone serielle Zweidraht-Verbindung, somit werden für die Kommunikation mit dem Sensor nur zwei weitere Leitungen, die Taktleitung SCL (Serial Clock) und die Datenleitung SDA (Serial Data), benötigt. Obwohl der I2C Bus vor guten 30 Jahren entwickelt worden ist, ist er heutzutage aufgrund der einfachen Implementierung, der niedrigen Kosten und der hohen Übertragungsrate noch immer ein Industriestandard für Steuerungs-, Diagnose und Überwachungslösungen in eingebetteten Systemen. <br/>
I2C wurde als Master-Slave-Bus konzipiert, sodass ein Datentransfer immer durch einen Master gestartet wird. Der Master gibt den Takt und den Betriebsmodus vor und initiiert die byteweise Datenübertragung. Dazu selektiert der Master einen Slave durch seine Slave-Adresse, die innerhalb eines Busses eindeutig sein muss. Zu jeder Zeit bleibt der Slave passiv und lauscht nur auf die Slave-Adresse und vergleicht diese mit seiner eigenen Slave-Adresse. Erst wenn die Adressen identisch sind, greift der Slave auch aktiv ins Protokoll ein. Mit einer 7-bit-Adresse können bis zu 112 Slaves und einer 10-bit-Adresse bis zu 1008 Slaves angesprochen werden. <ref name="I2C-Bus"> "I2C-Bus" von [https://www.elv.de/Arduino-verstehen-und-anwenden-Teil-22-I%C2%B2C-der-Inter-IC-Bus-Grundlagen-und-Anwendungen/x.aspx/cid_726/detail_60435 ELV Journal]</ref><br/>
=== Hardwareaufbau ===
Die nebenstehende Abbildung 12 zeigt, wie die einzelnen Buskomponenten hardwaremäßig miteinander verbunden werden. Hierbei fungiert der Arduino Uno als Master und der NXT Ultraschallsensor als Slave. Die beiden Busleitungen sind an sogenannte Pull-up-Widerstände angeschlossen. Dieses ist in der Abbildung nur zur Illustration dargestellt, da die beiden Widerstände laut dem Schaltplan schon im Sensor integriert sind. Die Widerstände haben eine Größe von 82 kΩ und zusammen mit dem Sensor, der Open-Collector-Ausgänge, bzw. Open-Drain, besitzt, entsteht eine Wired- AND-Schaltung. Das bedeutet, wenn die Versorgungsspannung von 5 V am Open-Collector-Ausgang liegt UND der Open-Collector geschaltet ist, wird das Signal auf Masse/Low-Pegel gezogen andernfalls auf einen High-Pegel. <ref name="I2C-Bus"> "I2C-Bus" von [https://www.elv.de/Arduino-verstehen-und-anwenden-Teil-22-I%C2%B2C-der-Inter-IC-Bus-Grundlagen-und-Anwendungen/x.aspx/cid_726/detail_60435 ELV Journal]</ref>
[[Datei:I2c opendrain pullup.png|300px|mini|center|Abb.13: I2C Funktionsbeschreibung]]
<br/>
Um klare und definierte Pegel zu erhalten, darf der Lowpegel maximal 0,3·VDD (<1,5 V) und der Highpegel mindestens 0,7·VDD (>=3,5 V) betragen. Der Bereich zwischen 1,5 V und 3,5 V wird als undefinierter Bereich bezeichnet. Zudem arbeitet der I2C mit einer positiven Logik, sodass ein High-Pegel auf der Datenleitung einer logischen "Eins" entspricht. <ref name="I2C-Bus"> "I2C-Bus" von [https://www.elv.de/Arduino-verstehen-und-anwenden-Teil-22-I%C2%B2C-der-Inter-IC-Bus-Grundlagen-und-Anwendungen/x.aspx/cid_726/detail_60435 ELV Journal]</ref>
<br/>
 
=== Protokoll und Adressierung ===
Das I2C Protokoll kann grob in sechs Zustände eingeteilt werden: Bus frei, Startbedingung, Datenbit, Acknowledge, No Acknowledge und Stoppbedingung. Im folgenden soll kurz auf die einzelnen Zustände eingegangen werden. <ref name="I2C-Zustände"> "I2C-Zustände" von [http://www.cc-zwei.de/wiki/index.php?title=I2C_Bus_Hintergrundwissen Computer:club^2]</ref> Verschiedene I2C-Besonderheiten, wie die 10-bit Adressierung oder Clock Stretching, werden an dieser Stelle nicht erläutert.
==== (1) Bus frei ====
Zu Beginn jeder Kommunikation muss der zusendende Master überprüfen, ob der Bus frei ist und kein anderer Master bei einem Mehr-Mastersystem gerade den Bus belegt. Der Bus ist nun frei, wenn SCL und SDA dauerhaft High sind. Dieser Zustand wird auch ebenfalls Ruhezustand genannt <br/>
    _________________
       
SCL
   
    _________________
             
SDA
==== (2) Startbedingung ====
Bei einem Start-Signal schließt der Master zuerst den SDA- und dann den SCL-Schalter. Dadurch zieht er beide Pegel nacheinander auf Low. Dadurch werden alle Slaves in Bereitschaft versetzt und warten nun auf das Adressbyte.
          __________
        /          \
SCL ___/            \__
   
    __________
              \
SDA            \_______
==== (3) Datenbits ====
Die Datenbits können zwei logische Zustände einnehmen: 0 (SDA Low) oder 1 (SDA High). Diese Daten sind gültig während SCL auf High liegt. <br/><br/>
 
Logisch 0:
            ____
          /    \
SCL _____/      \____
   
    ___            __
        \          /
SDA    \________/
 
 
Logisch 1:
            ____
          /    \
SCL _____/      \____
   
          ________
        /        \
SDA ___/          \__
 
==== (4) Acknowledge ====
Acknowledge, ebenfalls kurz ACK genannt, ist eine Quittierung/Bestätigung des Masters und des Slaves. Diese Bestätigung wird bei Schreib- und Lesesequenzen benötigt. Hierfür zieht der Master/Slave den SDA auf Low bei einem gültigen Takt.
            ____
          /    \
SCL _____/      \____
   
    ___         
        \         
SDA    \____________
==== (5) No Acknowledge ====
Falls der Master nach dem Lesen des letzten Bytes keine Bestätigung schickt, möchte dieser keine weiteren Daten mehr lesen.
            ____
          /    \
SCL _____/      \____
   
          ____________
        /     
SDA ___/     
==== (6) Stoppbedingung ====
Mit der Stoppbedingung signalisiert der Master dem Slave, dass er die Datenübertragung beenden möchte. Hierzu zieht er bei einem High der Taktleitung ebenfalls die Datenleitung auf High.
          ____________
        /
SCL ___/
   
                ______
              /
SDA _________/
<br/>
Nach der Startbedingung sendet der Master das erste Byte (MSB zuerst), das die eigentliche Slave-Adressierung erhält, aus. Die Adressierungsbits sind insgesamt 7 bit groß und das letzte bit (LSB) gibt die Datenrichtung an. Dieses letzte bit wird als Read/Write (R/W) bit bezeichnet, wobei 0 für schreiben und 1 für lesend steht. Bei korrekter Slave-Adressierung antwortet der Slave nun mit einem ACK. Hierauf folgt nun die Datenübertragung mit dem höchstwertigen bit (MSB zuerst). Dieses geschieht solange, bis der Master mit einer Stoppbedingung die Datenübertragung beenden möchte. <ref name="I2C-Bus"> "I2C-Bus" von [https://www.elv.de/Arduino-verstehen-und-anwenden-Teil-22-I%C2%B2C-der-Inter-IC-Bus-Grundlagen-und-Anwendungen/x.aspx/cid_726/detail_60435 ELV Journal]</ref>
<gallery class="center" caption="I2C Protokoll, Adressierung und Befehle" widths="300" heights="300">
Datei:I2C Protokoll.png|Abb.14: I2C Protokoll
Datei:I2C Ultraschall1.PNG|Abb.15: I2C Adressierung und Befehle (1/2)
Datei:I2C Ultraschall2.PNG|Abb.16: I2C Adressierung und Befehle (2/2)
</gallery>
 
== Projektrealisierung ==
[[Datei:Projektskizze.PNG|700px|mini|right|Abb.17: Projektskizze]]
Vor der Projektdurchführung wurden einige Ideen und Pläne zur späteren Realisierung erarbeitet. Die größte Fragestellung war, wie man mit einem einzelnen Sensor und dem dazugehörigen Datenkabel eine Signalauswertung durchführen kann. Sicherlich wäre die einfachste und schnellste Lösung die gewesen den NXT Ultraschallsensor direkt an das Lego Mindstorms Zielsystem anzuschließen, die Lego Toolbox zu benutzen und auszuwerten. Dieses Vorgehen wäre aber keine Herausforderung gewesen, sodass der Umweg über einen Arduino Uno als Zielsystem gegangen wurde. Hierbei kommuniziert der Arduino mit dem NXT Ultraschallsensor per I2C. Die empfangenen Messwerte werden daraufhin per USB in MATLAB/Simulink verarbeitet. Dazu wird der COM-Port in der Entwicklungsumgebung ausgelesen.
<br/>
=== Arduino Uno ===
[[Datei:Arduino Uno Pinout.png|700px|mini|right|Abb.18: Arduino Uno Pinbelegung]]
Für das Projekt wurde ein Arduino Uno in der Version R3 genutzt. Heutzutage ist dieser Arduino der "Standard-Arduino" und ist für die meisten Projekte völlig ausreichend. Herzstück des Einplatinenrechners ist der Mikrocontroller von ATMEL, der ATmega 328P. Mit der Bootloader-Software und einem zweiten Mikrocontoller dem ATmega8U2, der die USB Kommunikation herstellt,  können eigene Arduino-Programme schnell per USB übertragen werden. Insgesamt verfügt der Arduino Uno über 14 digitale I/O Pins, wovon sechs als PWM-Kanäle genutzt werden können und sechs analoge Input Ports. Zudem kann der Arduino Uno mit den Bussystemen UART, SPI und I2C kommunizieren. <ref name="Arduino Uno"> "Arduino UNO" von [http://www.arduino-tutorial.de/arduino-uno/ Arduino Tutorial]</ref>
{| class="wikitable"
|+ Tab.4: Technische Daten
|-align="left 
| Mikrocontroller || ATmega328P
|-
| Betriebsspanunng || 5 V       
|-
| Empfohlene Eingangsspannung || 7-12 V
|-
| Digitale I/O Pins || 14 (wovon 6 PWM-Kanäle sind)
|-
| Analoge Input Pins || 6
|-
| Ausgangsstrom pro I/O Pin || 20 mA
|-
| Ausgangsstrom am 3.3 V Pin || 50m A
|-
| Flash Speicher || 32 KB, davon wird 0,5 KB vom Bootloader verwendet
|-
| SRAM || 2 KB
|-
| EEPROM || 1 KB
|-
| Clook Speed || 16 MHz
|}
 
{| class="wikitable"
|+ Tab.5: Besondere Pins
|-align="left
| Serielle Kommunikation (UART) || 0 (RX), 1 (TX)
|-
| Externe Interrupts || 2, 3       
|-
| PWM Pins || 3, 5, 6, 9, 10, 11
|-
| SPI || 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)
|-
| I2C || A4 (SDA), A5 (SCL)
|-
| Analoge Referenzspannung || AREF
|-
| Integrierte LED || 13
|}
 
=== Kommunikation ===
Für die eigentliche Kommunikation zwischen dem Arduino und dem Sensor wurde das Datenkabel aufgetrennt und mit Female-Jumperkabeln erweitert. So konnte eine schnelle Realisierung der Schaltung auf dem Breadboard durchgeführt werden. Lego ist vom Standard Protokoll des I2Cs abgewichen und hat eine Besonderheit eingebaut. Aus diesem Grund muss zusätzlich ein Jumperkabel vom digitalen Port an die Clockleitung SCL gelegt werden. Nähere Informationen dazu können hier nachgelesen werden. <ref name="Direct manipulation of I2C pins"> "Direct manipulation of I2C pins" von [https://os.mbed.com/forum/mbed/topic/804/ Mbed ]</ref> Die 9 V Versorgungsspannung des Sensors wurde durch eine 9V Blockbatterie realisiert und die zweite Versorgungsspannung von 4,3 V kann mit der Versorgungsspannung des Arduinos ersetzt werden. Die Bauteile im Sensor können 5 V tolerieren.   
<gallery class="center" caption="Kommunikation" widths="300" heights="300">
Datei:Sensor Pinout.png|Abb.19: Verkabelung Stecker
Datei:SchaltplanFritzing.PNG|Abb.20: Schaltplan erstellt in Fritzing
</gallery>
=== Arduino und MATLAB Code ===
Im SVN Ordner befinden sich ein MATLAB und zwei Arduino Programme. Die beiden Arduino Programme kommunizieren als Master mit dem als Slave registrierten Sensor und zeichnen die gemessene Distanz des Sensors auf. Der Unterschied zwischen den beiden Programmen ist die Programmierweise. Das erste Programm nutzt eine modifizierte I2C-Bibliothek (i2cmaster.h) für die Kommunikation und das komplette I2C-Protokoll wurde nach dem Kapitel "Protokoll und Adressierung" programmiert. Dieses ist sehr nützlich um einen tiefen Einblick ins Protokoll zu bekommen und um gegebenenfalls Änderungen/Verbesserungen einzubauen. Das zweite Arduino Programm nutzt die fertige Bibliothek (NXTShield.h) und die Standard Wire.h-Bibliothek. Die NXTShield Bibliothek ermöglicht eine sehr schnelle und leichte Kommunikation mit dem Sensor, da das komplette I2C-Protokoll die Bibliothek übernimmt und der Distanzwert mit einem Befehl ausgelesen werden kann. Die Bibliothek basiert auf den käuflich erwerblichen Arduino NXT Motor Shield. <ref name="Arduino NXT Motor Shield - Kit"> "Arduino NXT Motor Shield - Kit" von [http://shop.tkjelectronics.dk/product_info.php?products_id=29 TKJ electronics ]</ref> <br/>
Das MATLAB Programm ist einem Echtzeitdatenlogger nachempfunden, welches die Ergebnisse im laufenden Betrieb aufnimmt und visualisiert. Der Nutzer muss nur Anfangs manuell seinen richtigen COMPort auswählen, an welchem der Arduino angeschlossen ist, und in welchen Grenzen das Visualisierungsfenster die Daten darstellen soll. Daraufhin öffnet sich das Visualisierungsfenster und zeichnet die Daten auf. Nachdem das Fenster geschlossen wird, wird eine Logtextdatei im selben Verzeichnis mit der dargestellten Zeit und der Distanz gespeichert.
<gallery class="center" caption="Arduino und MATLAB Code" widths="300" heights="300">
Datei:PAP Arduino.png|Abb.21: Arduino Code in PAP
Datei:PAP MATLAB.png|Abb.22: MATLAB Code in PAP
Datei:Datenlogger.PNG|Abb.23: Visualisierungsfenster des Datenloggers
</gallery>
 
== Messung ==
=== Versuchsaufbau ===
Die Messergebnisse der Ultraschallmessung wurden statisch und für kurze Distanzen ermittelt. Hierzu wurde ein DIN A4 Millimeterpapier ausgedruckt und Markierungen in 1,2 cm Abständen eingezeichnet. Da der Sensor seine Messwerte nur ganzzahlig ausgibt, sollte damit sein Rundungsverhalten ebenfalls analysiert werden. Der Distanz-Nullpunkt des Sensors wurde experimentell ermittelt indem er an verschiedenen ganzzahligen Markierungen geschoben wurde und soweit justiert wurde bis die Markierungen den ausgebenden Werten in MATLAB entsprachen.
Der Ultraschallsensor wurde horizontal positioniert und ohne weitere Vorrichtungen in Richtung des quaderförmigen Objektes (Karton: 32 cm x 7 cm x 23 cm) geschoben, sodass die Höhe zwischen dem Millimeterpapier und dem vermutlichen Mittelpunkt des Sensors ungefähr 2 cm betrug. Die Wetterstation am Messplatz hat die Temperatur und die rel. Luftfeuchte während der Messung angezeigt. Die Temperatur (20 °C) und die rel. Luftfeuchte (41 %) haben sich während der gesamten Messung nicht verändert. Laut Wetterbericht betrug der Luftdruck zu dieser Zeit 1019,6 hPa. Diese drei Werte (Temperatur, rel. Luftfeuchte und Luftdruck) sollen nur grobe Richtwerte darstellen zu welchen Bedingungen die Messungen stattgefunden haben, da diese Parameter für eventuelle Sensormessabweichungen verantwortlich sein können und ebenfalls selber mit einzelnen Messabweichungen behaftet sind. Zudem wurde die 9 V Blockbatterie, die zur Versorgungsspannung des Sensors genutzt wurde, vorher aufgeladen und auf Nennspannung gebracht.
<gallery class="center" caption="Versuchsaufbau" widths="300" heights="300">
Datei:Messplatz.PNG|Abb.24: Messplatz
Datei:DistanzNullpunkt.PNG|Abb.25: Distanz-Nullpunkt des Sensors
</gallery>
=== Messergebnisse ===   
Insgesamt wurden drei Messreihen mit der gemessenen Distanz ermittelt. Diese Messreihen wurden zeitlich nacheinander festgehalten und in nachfolgender Tabelle eingetragen: 
{| class="wikitable"
|+ Tab.6: Messergebnisse der Ultraschallmessung für kurze Distanzen
|-align="middle"
! Wahre Distanz <br/> in cm !! Gemessene Distanz in cm <br/> 1. Messreihe !! Gemessene Distanz in cm <br/> 2. Messreihe !! Gemessene Distanz in cm <br/> 3. Messreihe !! Absolute Messabweichung <br/> in cm !! Relative Messabweichung <br/> in % !! Arithmetischer Mittelwert <br/> in cm !! Standardabweichung <br/> in cm !! Messunsicherheit <br/> in cm !! Vertrauensintervall <br/> in cm
|-align="middle"
| 2,4 || 7 || 6 || 5 ||  3,60 || 150,00 || 6,00 || 1,00 || 1,36 || 2,4 ± 1,36
|-align="middle"
| 3,6 || 4 || 5 || 5 ||  1,07 || 29,72 || 4,67 || 0,58 || 0,79 || 3,6 ± 0,79 
|-align="middle"
| 4,8 || 6 || 6 || 6 ||  1,20 || 25,00 || 6,00 || 0,00 || 0,00 || 4,8 ± 0,00
|-align="middle"
| 6,0 || 6 || 6 || 6 || 0,00 || 0,00 || 6,00 || 0,00 || 0,00 || 6,0 ± 0,00
|-align="middle"
| 7,2 || 7 || 7 || 7 || -0,20 || -2,77 || 7,00 || 0,00 || 0,00 || 7,2 ± 0,00
|-align="middle"
| 8,4 || 8 || 8 || 8 || -0,40 || -4,76 || 8,00 || 0,00 || 0,00 || 8,4 ± 0,00
|-align="middle"
| 9,6 || 9 || 9 || 9 || -0,60 || -6,25 || 9,00 || 0,00 || 0,00 || 9,6 ± 0,00
|-align="middle"
| 10,8 || 10 || 10 || 10 || -0,80 || -7,40 || 10,00 || 0,00 || 0,00 || 10,8 ± 0,00
|-align="middle"
| 12,0 || 11 || 11 || 11 || -1,00 || -8,33 || 11,00 || 0,00 || 0,00 || 12,0 ± 0,00
|-align="middle"
| 13,2 || 13 || 13 || 13 || -0,20 || -1,51 || 13,00 || 0,00 || 0,00 || 13,2 ± 0,00
|-align="middle"
| 14,4 || 14 || 14 || 14 || -0,40 || -2,77 || 14,00 || 0,00 || 0,00 || 14,4 ± 0,00
|-align="middle"
| 15,6 || 15 || 15 || 15 || -0,60 || -3,84 || 15,00 || 0,00 || 0,00 || 15,6 ± 0,00
|-align="middle"
| 16,8 || 16 || 16 || 17 || -0,47 || -2,79 || 16,33 || 0,58 || 0,79 || 16,8 ± 0,79
|-align="middle"
| 18,0 || 18 || 18 || 18 ||  0,00 || 0,00 || 18,00 || 0,00 || 0,00 || 18,0 ± 0,00
|-align="middle"
| 19,2 || 19 || 19 || 20 || 0,13 || 0,67 || 19,33 || 0,58 || 0,79 || 19,2 ± 0,79
|-align="middle"
| 20,4 || 20 || 21 || 21 || 0,27 || 1,32 || 20,67 || 0,58 || 0,79 || 19,2 ± 0,79
|-align="middle"
| 21,6 || 21 || 21 || 22 || -0,27 || -1,25 || 21,33 || 0,58 || 0,79 || 21,6 ± 0,79
|-align="middle"
| 22,8 || 22 || 23 || 22 || -0,47 || -2,06 || 22,33 || 0,58 || 0,79 || 22,8 ± 0,79
|-align="middle"
| 24,0 || 23 || 23 || 23 || -1,00 || -4,16 || 23,00 || 0,00 || 0,00 || 24,0 ± 0,00
|-align="middle"
| 25,2 || 24 || 24 || 24 || -1,20 || -4,76 || 24,00 || 0,00 || 0,00 || 25,2 ± 0,00
|}
=== Berechnungen ===
Die Messabweichung <math>F</math> beschreibt die Abweichung des Messwertes <math>x_{a}</math> vom wahren Wert <math>x_{w}</math> der Messgröße. Die folgende Gleichung definiert die absolute Messabweichung: 
<br/>
<br/>
<math>F = x_{a} - x_{w}</math>
<br/>
<br/>
Die relative Messabweichung kann bezogen auf den wahren Wert mit folgender Gleichung erfolgen:
<br/>
<br/>
<math>f = \frac{F}{x_{w}}</math>
<br/>
<br/>
Die absolute Messabweichung hat immer die Dimension der Messgröße und die relative Messabweichung ist dagegen einheitslos und wird häufig in Prozent angegeben. <br/> Der arithmetische Mittelwert <math>\overline{x}</math> ist ein Schätzwert für den wahren Wert der Messgröße. Er wird berechnet, indem die Summe der Einzelwerte durch die Zahl der Elemente dividiert wird:
<br/>
<br/>
<math>\overline{x} = \frac{1}{n} \sum\limits_{i=1}^{n} x_{i}</math>
<br/>
<br/>
Die Standardabweichung <math>s</math> ist ein ein Maß für die Streuung, der anzeigt, inwieweit die Werte um den arithmetischen Mittelwert streuen. Je größer die Standardabweichung in Relation zum Mittelwert ist, desto größer ist die Streuung und desto schlechter spiegelt der Mittelwert die Daten wider. Er hat dieselbe Einheit wie der Mittelwert:
<br/>
<br/>
<math>s = \sqrt{\frac{\sum\limits_{i=1}^{n} ( x_{i} - \overline{x})^2}{n - 1}}</math>
<br/>
<br/>
Die Messunsicherheit wird nach der Student t Verteilung bestimmt. Hierbei ist <math>n</math> die Anzahl der Messungen und <math>s</math> die Standardabweichung. Zusätzlich beschreibt <math>t(n)</math> den Vertrauensfaktor für die Verteilung, die aus einer speziellen Tabelle  abgelesen werden kann. Bei industriellen Anwendungen und in der Messtechnik wird üblicherweise ein Vertrauensniveau von 95 % angenommen. In diesem Fall ist t=2,35 für ein Vertrauensniveau von 95 %.
<br/>
<br/>
<math>  \Delta x =\frac{t(n) \cdot s}{\sqrt{n}}  </math>
<br/>
<br/>
 
=== Auswertung ===
Anhand der aufgenommenen und daraus berechneten Messwerte ist zu erkennen, dass der NXT Ultraschallsensor erst ab einer Distanz von 6 cm brauchbare Messwerte liefert. Davor befindet sich der Erfassungsbereich des Sensors in der sogenannten Blindzone, die im Kapitel Funktionsprinzip beschrieben wird. Bei den Distanzen 6 cm und 18 cm liefert der Sensor die besten Ergebnisse. Anhand der relativen Abweichungen ist ersichtlich, dass der Sensor nicht für präzise Abstandsmessungen entwickelt worden ist und somit für präzise Messungen ungeeignet ist.
<br/>
 
=== Objekt- und Umwelteinflüsse ===
Quelle <ref name="Ultraschallsensoren - Messprinzip"> "Ultraschallsensoren - Messprinzip" von [https://www.waycon.de/produkte/ultraschallsensoren/messprinzip-ultraschallsensoren/ WayCon]</ref>
*Heiße Messobjekte mit hohen Temperaturen können das Echo des Sensors ablenken, sodass es geschwächt wird oder nicht mehr empfangen werden kann.
*Weiche Materialen, wie z.B. Filz, Watte, grobe Gewebe und Schaumstoffe absorbieren fast die gesamte Impulsenergie und sind daher kaum zu messen. Dünnwändige Folien verhalten sich wie weiche Materialen. Die Folienstärke sollte mindestens 0,01 mm betragen.
*Harte Materialen und Flüssigkeiten sind in der Regel gut erfassbar.
*Regen oder Schneeniederschläge führen zu keiner Funktionsbeeinträchtigung des Sensors.
*Starke Luftbewegungen und Turbulenzen führen zu Instabilitäten in der Messung. Die Strömungsgeschwindigkeiten müssen aber sehr hoch sein, sodass es zu Problemen kommen kann. Eine Anwendung unter üblichen Bedingungen in Produktionsstätten oder im Freien können deshalb durchgeführt werden.
<br/>
 
== Fazit ==
Der Lego NXT Ultraschallsensor kann aufgrund seines Rundungsverhaltens und seiner ganzzahligen Messwerte nur für Distanzmessungen eingesetzt werden, die keine hohe Präzision benötigen. Hierbei sollte darauf geachtet werden, dass der Sensor erst ab 6 cm seine Objekte detektiert. Mögliche Einsatzgebiete wären zum Beispiel eine simple Anwesenheitskontrolle (prüfe, ob Objekt am Einsatzort ist) oder eine Personendetektierung. Für präzisere Distanzmessungen oder Detektierungsmessungen ist das Nachfolgemodell der EV3 Ultraschallsensor zu empfehlen. <ref name="Objekterkennung mit rotierenden Ultraschall mit Matlab/Simulink und EV3"> "Objekterkennung mit rotierenden Ultraschall mit Matlab/Simulink und EV3" von [https://193.175.248.52/wiki/index.php/Objekterkennung_mit_rotierenden_Ultraschall_mit_Matlab/Simulink_und_EV3 Cosima Eckert-Ludwig ]</ref>
<br/> 
=== Mögliche Verbesserungen und weitere Betrachtungen ===
In der vorliegenden Versuchsreihe stand primär der Fokus auf statisch aufgenommene Messwerte für kurze Distanzen. Da der Ultraschallsensor laut Hersteller bis zu einer Distanz von 250 cm Objekte messen kann, kann die Messreihe bis dahin erweitert werden. Zudem kann die Anzahl der Messreihen vergrößert werden, um einen besseren Ausblick der Schätzwerte auf die Grundgesamtheit zu erhalten. Nachfolgend folgt eine kurze Beschreibung mit möglichen weiteren Versuchsreihen, um den Sensor in allen seinen Eigenschaften zu beschreiben:
* Distanzgenauigkeit des Sensors bei hohen Distanzen
* Distanzgenauigkeit des Sensors bezüglich Objekte unterschiedlicher Materialen und Formen
* Erfassungsbereich des Ultraschallsensors aufnehmen; bis zu welchem Winkel werden Objekte noch erkannt?
* Dynamische Sensorversuche; welche Messwerte liefert der Sensor in Bewegung?
<br/>
 
== Projektplan ==
[[Bild:Projekttracking Ultraschallsensor.png|thumb|600px|left|Abb.26: Projekttracking Lego NXT Ultraschallsensor]]
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
== YouTube Video ==
[https://youtu.be/qpcEGNwfzI8 Lego NXT Ultraschallsensor mit Matlab auslesen]
<br/>
<br/>
== Einzelnachweise ==  
== Einzelnachweise ==  
<references />
<references />
<br/>
----
→ zurück zum Hauptartikel: [[SigSys_SoSe2018| Signalverarbeitende Systeme]]

Aktuelle Version vom 4. Juli 2018, 19:54 Uhr

Autor: Sven Gaida
Betreuer: Prof. Dr.-Ing. Ulrich Schneider
Sensor: Lego Ultraschall 9846
SVN Ordner: SVN

Abb1.: Lego Mindstorms NXT Ultraschallsensor

Das Ziel der Lehrveranstaltung „Signalverarbeitende Systeme“ mit dieser semesterbegleitenden Prüfung ist es eine Signalverarbeitungskette beschreiben, untersuchen und verstehen zu können. Die Untersuchung des Sensors wird mit der Entwicklungsumgebung MATLAB/Simulink durchgeführt.

Einleitung

Der Lego Mindstorms NXT Ultraschallsensor (Artikelnummer 9846), weiterhin nur NXT Ultraschallsensor genannt, ist ein von Lego entwickelter Sensor um Abstände zwischen sich und der Umgebung zu messen. Der NXT Ultraschallsensor wurde erstmalig Anfang 2006 auf der Messe „Consumer Electroncis Show“ vorgestellt und war seitdem ein fester Bestandteil verschiedener Lego Mindstorms NXT-Sets. Heutzutage ist der NXT Ultraschallsensor nur noch ein Auslaufmodell, da die NXT-Serie Anfang 2013 durch die EV3-Serie abgelöst wurde. Aufgrund dieser Erneuerung wurden einige NXT-Bauteile, darunter auch der NXT Ultraschallsensor, durch neuere und verbesserte Bauteile ausgetauscht. [1]
Lego klassifiziert ihre Sensoren in drei verschiedene Kategorieren: die passiven, aktiven und digitalen Sensoren. Als digitale Sensoren werden die Sensoren bezeichnet, die einen zusätzlichen Mikrocontroller im Sensor besitzen. Der NXT Ultraschallsensor war der erste digitale Legosensor mit dem es möglich war Abstände zu verschiedenen Objekten berührungslos zu ermitteln und ebenfalls die Distanz zum Sensor zu messen. Dabei misst der Sensor Distanzen wahlweise in Zentimetern oder in Zoll. Laut dem Hersteller können Abstände von 0 bis 250cm mit einer Messungenauigkeit von ±3 cm ermittelt werden.[2]

Messprinzip

Das Prinzip des Sensors beruht auf der physikalischen Grundlage der Akustik und der Ausbreitung des Schalls. Der Ultraschall liegt bei Frequenzen oberhalb des menschlichen Hörbereiches und diese werden von 20 kHz bis 1 GHz definiert. Er kann entweder pneumatisch oder elektrisch erzeugt werden und kann sich im Gegensatz zu elektromagnetischen Wellen nur in Materie ausbreiten. In vielen Anwendungen ist diese Materie hauptsächlich Luft. Die Abstandsmessung mit dem Ultraschall basiert auf einer Laufzeitmessung eines Schallpulses. Dafür ist die genaue Kenntnis der Schallgeschwindigkeit, ebenfalls Ausbreitungsgeschwindigkeit genannt, für die Messungen eine primäre Größe. Aufgrund physikalischer Gegebenheiten der Schallausbreitung ergeben sich Abhängigkeiten der Reichweite und der Ausbreitungsgeschwindigkeit des Schalls durch die Lufttemperatur, dem Luftdruck und der relativen Luftfeuchte. Abschließend sei zusammenfassend zu erwähnen, dass die Schallgeschwindigkeit somit die Geschwindigkeit, mit der sich Schallwellen in einem Medium bewegen, beschreibt. [3]

Lufttemperatur

Abb.2: Zusammenhang zwischen Lufttemperatur, Luftdruck und Schallgeschwindigkeit

Folgende Gleichung berücksichtigt die Lufttemperatur bei der Berechnung der Schallgeschwindigkeit:



Dabei ist die Temperatur in °C und die Schallgeschwindigkeit bei (331,6 m/s). Die Schallgeschwindigkeit ist somit proportional zur Wurzel der Temperatur.

Tab.1: Richtwerte der Schallgeschwindigkeit als Funktion zur Lufttemperatur
T in °C -20 0 +20 +40 +60 +80
c in m/s 319,3 331,6 343,8 355,3 366,5 377,5

Luftdruck

Neben der Temperaturabhängigkeit der Schallgeschwindigkeit existiert auch eine starke Abhängigkeit vom Luftdruck. Steigt dieser nimmt ebenfalls die Schallgeschwindigkeit zu. Die Zusammenhänge werden in der Abbildung 2 dargestellt.

Relative Luftfeuchte

Die nachfolgende Abbildung 3 gibt die Abhängigkeit der Schallgeschwindigkeit als Funktion zur relativen Luftfeuchte bei 20 °C wieder. Hierbei ist zu erkennen, dass mit zunehmender Luftfeuchte sich die Schallgeschwindigkeit erhöht. Die anderen Abbildungen 4 und 5 stellen die Abhängigkeit zwischen der Reichweite, rel. Luftfeuchte und der Temperatur dar. Es ist deutlich zu erkennen, dass die Reichweite bei niedrigen Temperaturen unabhängig von der rel. Luftfeuchte steigt. Bei geringen Reichweiten hat die Luftfeuchte erst bei ungefähr 0 °C und bei hohen Reichweiten bei ungefähr -20 °C einen erheblichen Einfluss auf die Reichweite.

Funktionsprinzip

Abb.6: Funktionsweise eines Ultraschallsensors

Mithilfe des Taktgenerators aktiviert die Steuerelektronik den Leistungsverstärker periodisch, sodass dieser die Sendeeinheit für kurze Zeit mit einer hohen Spannung und damit auch einer hohen elektrischen Leistung ansteuert. Beim Anlegen der sinusartigen Spannung wird das Piezoelement zum Schwingen angeregt. Hierdurch wird elektrische Energie in mechanische Energie umgewandelt, wodurch der Ultraschallimpuls (Sendeimpuls) entsteht. Dabei arbeitet der Sensor mit einer festen Frequenz und einer Sendedauer von t=300 µs (ergibt 12 Schwingungen). Nach dieser Zeit benötigt der Sender eine gewisse Ausschwingzeit, um wieder in den Anfangszustand zu kommen. In dieser Zeit wechselt die Steuerelektronik vom Sendemodus in den Empfangsmodus. Bei der Empfangseinheit wird der umgekehrte Effekt ausgenutzt. Eine äußere Kraft (einwirkendes Echo) bewirkt auf dem Piezoelement Oberflächenladungen, die als Spannung messbar sind. Somit wird mechanische Energie in elektrische Energie umgewandelt. [4]

Erfassungsbereich

Jeder Ultraschallsensor hat einen gewissen Erfassungsbereich in dem der Sensor die Objekte erkennen kann. Dieser wird von der kleinsten und größten Reichweite begrenzt. Laut Datenblatt beträgt die Reichweite 0 bis 250 cm mit einer Messungenauigkeit von ±3cm. Eine sehr geringe Entfernung kann mit einem Ultraschallsensor nicht erreicht werden, da dieser Bereich als Blindzone bezeichnet wird. In dieser Blindzone kann der Ultraschallsensor kein Objekt detektieren. Sie wird von der Sendeimpulsdauer und der Ausschwingzeit des Senders verursacht, da während der Übertragung des Sendeimpulses kein Echosignal empfangen werden kann.

Distanzmessung

Die Zeit zwischen dem Senden und Empfangen des Impulses/Schalls ist proportional zum Abstand zwischen Objekt und Sensor. Wie bereits erwähnt ist die Ultraschallgeschwindigkeit eine sehr wichtige Größe, da diese beschreibt mit welcher Geschwindigkeit sich Schallwellen in einem Medium bewegen. Die Distanzmessung zum nächstgelegenen Objekt kann nun mit folgender Formel berechnet werden:



Die Entfernung wird aus der Multiplikation der gesamten benötigten Echolaufzeit und der Schallgeschwindigkeit errechnet. Da der Ultraschall zum Objekt und wieder zum Empfänger zurücklaufen muss, legt er damit die doppelte Entfernung zurück und muss somit schlussendlich noch halbiert werden.

Beispiel

Der NXT Ultraschallsensor wird vor einem Objekt platziert und es wird die Entfernung zwischen dem Objekt und dem Sensor gesucht. Die Echolaufzeit wird von einem Mikrocontroller ermittelt und soll betragen. Die Lufttemperatur beträgt 20 °C und der Luftdruck, sowie die relative Feuchte können vernachlässigt werden.
Nach der Formel zur Distanzmessung beträgt die Entfernung:



Bei idealisierten Verhältnissen befindet sich der Sensor 20,62 cm vor dem Objekt.

Aufbau und Schaltplan

Abb.7: Schaltplan des Lego Mindstorms NXT Ultraschallsensors

Primäre Elemente des Sensors sind der Mikrocontroller ESC015 und der dazugehörige externe Oszillator mit einer Frequenz von 3.58MHz, die Sende- und Empfangseinheiten TCT40-12F2 / TCT40-12S2 und die 6-fach invertierende Treiberstufe mit dem Baustein CD4049.
Der ESC015 ist ein spezieller 4-bit RISC Sound Prozessor mit drei verschiedenen I/O Ports, wobei Port 1 nur als reiner Input-Port verwendet werden darf. Alle Ports haben Softwarekontrollierte "Pull Low" Widerstände. Zudem verfügt der Mikrocontroller über eine I2C-Schnittstelle und übernimmt die Aufgabe der Steuerelektronik.

Tab.2: ESC015 Pinbelegung
Symbol I/0 Funktionsbeschreibung
OSCI I Oszillator In
OSCO O Oszillator Out
P1.0~3 I bits 0~3 Port 1
P2.0~3 I/O bits 0~3 Port 2
P3.0~3 I/O bits 0~3 Port 3
VCC I 2.2 V bis 5.1 V Versorgungsspannung
GND I Masse
RESETB I Reset Pin (intern pull-high)
Tab.3: Interrupt Mode
Interrupt Funktionsbeschreibung
Speech 8-bit resolution with pre-load counter
High resolution Timer 8-bit resolution with pre-load counter
Timer 4 bits pre-load counter
External Interrupt Occurs when P1.3 pad has a rising edge change


Der Baustein CD4049 ist ein sogenannter Hex invertierender Treiber/Verstärker. Das Hex (=6) bezieht sich auf die Anzahl der vorhandenen Treiber. Der CD4049 hat primär zwei verschiedene Anwendungsfälle. Zum Einen kann dieser Baustein als Logikbaustein eingesetzt werden, womit der Ausgang immer das entgegengesetzte Signal als das am Eingang erhält. Das Eingangssignal wird also invertiert. Zum Anderen und wie hier in der Schaltung kann der Baustein als Leistungsverstärker eingesetzt werden. Dadurch ist es möglich die Sendeeinheit mit einer kurzzeitigen hohen Spannung zu betreiben.
Die Sende- und Empfangseinheiten sind für die Ein- und Auskopplung des Ultraschalls zuständig. Hieraus resultiert auch die Empfindlichkeit und die Reichweite den Sensors. Beide Einheiten arbeiten bei einer festen Frequenz von 40 kHz.

Analog-Digital-Converter

Die folgenden Erkenntnisse sind Annahmen, die auf dem Datenblatt des ESC015 und vorallem auf dem Schaltplan, Abbildung 7, basieren.
Laut dem Datenblatt des ESC015 besitzt dieser Mikrocontroller keine integrierte ADC-Umwandlung, sodass eine alternative Methode zum Einsatz kommen muss. Wie schon im Kapitel "Funktionsprinzip" erklärt, wird eine Echolaufzeit benötigt, um die korrekte Distanz zwischen dem Objekt und dem Sensor zu ermitteln. Der Mikrocontroller ist das eigentliche Steuerelement um die Sende- und Empfangseinheiten zu kontrollieren, die Messwerte (Zeitmessung) aufzunehmen und für die I2C Kommunikation zu verarbeiten. Mit den Ausgängen P2.1 und P2.2 kann der Mikrocontroller die Sendeeinheit periodisch steuern, indem er seine Ports auf High/Low schaltet und die Transistoren abwechselnd durchschalten und sperren lässt. Dadurch wird zum Beispiel die Versorgungsspannung auf Masse gezogen und die Sendeeinheit (TCT40-12F2) hört auf zu senden. In Kombination mit dem Leistungsverstärker und der Möglichkeit die Sendeeinheit periodisch anzusteuern, kann die Ultraschallwelle erzeugt werden. Wenn der Mikrocontroller nun den Befehl zum Ansteuern gibt, startet er ebenfalls seinen integrierten 8Bit Timer, der für hohe Auflösungen bestimmt ist. Die Ultraschallwelle wird erzeugt und trifft beim Reflektieren am Objekt danach auf die Empfangseinheit (TCT40-12S2). Das sinusartige Echosignal steuert daraufhin die weiteren Transistoren, die einen mehrstufigen Verstärker bilden, in der Schaltung an. Der Eingangskondensator C1 dient dazu, die Basis vom Eingangssignal gleichstrommäßig abzukoppeln. Der Mikrocontroller hat an seinem P1.0 Eingangsport solange die Kollektorspannung des Eingangs anliegen (High Signal) bis das Echosignal auch diesen Transistor umschaltet und das Signal auf Masse gezogen wird. Dieses ist das Zeichen für den Mikrocontroller seinen laufenden 8 bit Timer zu stoppen, die Echolaufzeit in die Distanz zwischen Objekt und Sensor umzurechnen und einer Master I2C-Anfrage bereitzustellen. Falls der Mikrocontroller wieder einen Sendebefehl geben will und der Schwingvorgang bei der Empfangseinheit noch nicht abgeklungen ist, wird dieser Schwingvorgang abrupt durch die Transistoren, die der Ausgang P2.0 ebenfalls ansteuert, durch die bereitgestellte Masse beendet.

Alternative

Als Alternative zu diesem Verfahren kann sicherlich die Methode der sukzessiven Approximation angewandt werden. Hierfür kann ein Mikrocontroller genutzt werden, der die Methode schon integriert hat. Das beste Beispiel hierfür ist die Weiterentwicklung des klassischen NXT Ultraschallsensors zum EV3 Ultraschallsensor. Als der NXT Ultraschallsensor im Jahre 2006 vorgestellt wurde, war sicherlich der Kostenfaktor des Mikrocontrollers ein wesentlicher Punkt um auf den ADC zu verzichten und stattdessen einen Timer zu nutzen. Hierfür mussten aber weitere Transistoren, Widerstände und Kondensatoren eingeplant werden mit denen diese Funktion gewährleisten werden konnte. Dieses wird durch einen direkten Vergleich der beiden Sensorschaltpläne sichtbar. [5]

Bussystem

Abb.12: Arduino kommuniziert mit dem Ultraschallsensor per I2C

Der Sensor kommuniziert mittels dem I2C-Protokoll auf dem I2C-Bus. I2C, auch TWI (Two-Wire-Interface) genannt, ist eine von der Firma Philips (heute NXP Semiconductors) entwickelte synchrone serielle Zweidraht-Verbindung, somit werden für die Kommunikation mit dem Sensor nur zwei weitere Leitungen, die Taktleitung SCL (Serial Clock) und die Datenleitung SDA (Serial Data), benötigt. Obwohl der I2C Bus vor guten 30 Jahren entwickelt worden ist, ist er heutzutage aufgrund der einfachen Implementierung, der niedrigen Kosten und der hohen Übertragungsrate noch immer ein Industriestandard für Steuerungs-, Diagnose und Überwachungslösungen in eingebetteten Systemen.
I2C wurde als Master-Slave-Bus konzipiert, sodass ein Datentransfer immer durch einen Master gestartet wird. Der Master gibt den Takt und den Betriebsmodus vor und initiiert die byteweise Datenübertragung. Dazu selektiert der Master einen Slave durch seine Slave-Adresse, die innerhalb eines Busses eindeutig sein muss. Zu jeder Zeit bleibt der Slave passiv und lauscht nur auf die Slave-Adresse und vergleicht diese mit seiner eigenen Slave-Adresse. Erst wenn die Adressen identisch sind, greift der Slave auch aktiv ins Protokoll ein. Mit einer 7-bit-Adresse können bis zu 112 Slaves und einer 10-bit-Adresse bis zu 1008 Slaves angesprochen werden. [6]

Hardwareaufbau

Die nebenstehende Abbildung 12 zeigt, wie die einzelnen Buskomponenten hardwaremäßig miteinander verbunden werden. Hierbei fungiert der Arduino Uno als Master und der NXT Ultraschallsensor als Slave. Die beiden Busleitungen sind an sogenannte Pull-up-Widerstände angeschlossen. Dieses ist in der Abbildung nur zur Illustration dargestellt, da die beiden Widerstände laut dem Schaltplan schon im Sensor integriert sind. Die Widerstände haben eine Größe von 82 kΩ und zusammen mit dem Sensor, der Open-Collector-Ausgänge, bzw. Open-Drain, besitzt, entsteht eine Wired- AND-Schaltung. Das bedeutet, wenn die Versorgungsspannung von 5 V am Open-Collector-Ausgang liegt UND der Open-Collector geschaltet ist, wird das Signal auf Masse/Low-Pegel gezogen andernfalls auf einen High-Pegel. [6]

Abb.13: I2C Funktionsbeschreibung


Um klare und definierte Pegel zu erhalten, darf der Lowpegel maximal 0,3·VDD (<1,5 V) und der Highpegel mindestens 0,7·VDD (>=3,5 V) betragen. Der Bereich zwischen 1,5 V und 3,5 V wird als undefinierter Bereich bezeichnet. Zudem arbeitet der I2C mit einer positiven Logik, sodass ein High-Pegel auf der Datenleitung einer logischen "Eins" entspricht. [6]

Protokoll und Adressierung

Das I2C Protokoll kann grob in sechs Zustände eingeteilt werden: Bus frei, Startbedingung, Datenbit, Acknowledge, No Acknowledge und Stoppbedingung. Im folgenden soll kurz auf die einzelnen Zustände eingegangen werden. [7] Verschiedene I2C-Besonderheiten, wie die 10-bit Adressierung oder Clock Stretching, werden an dieser Stelle nicht erläutert.

(1) Bus frei

Zu Beginn jeder Kommunikation muss der zusendende Master überprüfen, ob der Bus frei ist und kein anderer Master bei einem Mehr-Mastersystem gerade den Bus belegt. Der Bus ist nun frei, wenn SCL und SDA dauerhaft High sind. Dieser Zustand wird auch ebenfalls Ruhezustand genannt

    _________________
        
SCL 
   
    _________________
              
SDA

(2) Startbedingung

Bei einem Start-Signal schließt der Master zuerst den SDA- und dann den SCL-Schalter. Dadurch zieht er beide Pegel nacheinander auf Low. Dadurch werden alle Slaves in Bereitschaft versetzt und warten nun auf das Adressbyte.

         __________
        /          \
SCL ___/            \__
   
    __________
              \
SDA            \_______

(3) Datenbits

Die Datenbits können zwei logische Zustände einnehmen: 0 (SDA Low) oder 1 (SDA High). Diese Daten sind gültig während SCL auf High liegt.

Logisch 0:

           ____
          /    \ 
SCL _____/      \____
   
    ___            __
       \          /
SDA     \________/


Logisch 1:

           ____
          /    \ 
SCL _____/      \____
   
         ________
        /        \
SDA ___/          \__

(4) Acknowledge

Acknowledge, ebenfalls kurz ACK genannt, ist eine Quittierung/Bestätigung des Masters und des Slaves. Diese Bestätigung wird bei Schreib- und Lesesequenzen benötigt. Hierfür zieht der Master/Slave den SDA auf Low bei einem gültigen Takt.

           ____
          /    \ 
SCL _____/      \____
   
    ___          
       \           
SDA     \____________

(5) No Acknowledge

Falls der Master nach dem Lesen des letzten Bytes keine Bestätigung schickt, möchte dieser keine weiteren Daten mehr lesen.

           ____
          /    \ 
SCL _____/      \____
   
         ____________
        /      
SDA ___/       

(6) Stoppbedingung

Mit der Stoppbedingung signalisiert der Master dem Slave, dass er die Datenübertragung beenden möchte. Hierzu zieht er bei einem High der Taktleitung ebenfalls die Datenleitung auf High.

         ____________
        /
SCL ___/
   
               ______
              /
SDA _________/


Nach der Startbedingung sendet der Master das erste Byte (MSB zuerst), das die eigentliche Slave-Adressierung erhält, aus. Die Adressierungsbits sind insgesamt 7 bit groß und das letzte bit (LSB) gibt die Datenrichtung an. Dieses letzte bit wird als Read/Write (R/W) bit bezeichnet, wobei 0 für schreiben und 1 für lesend steht. Bei korrekter Slave-Adressierung antwortet der Slave nun mit einem ACK. Hierauf folgt nun die Datenübertragung mit dem höchstwertigen bit (MSB zuerst). Dieses geschieht solange, bis der Master mit einer Stoppbedingung die Datenübertragung beenden möchte. [6]

Projektrealisierung

Abb.17: Projektskizze

Vor der Projektdurchführung wurden einige Ideen und Pläne zur späteren Realisierung erarbeitet. Die größte Fragestellung war, wie man mit einem einzelnen Sensor und dem dazugehörigen Datenkabel eine Signalauswertung durchführen kann. Sicherlich wäre die einfachste und schnellste Lösung die gewesen den NXT Ultraschallsensor direkt an das Lego Mindstorms Zielsystem anzuschließen, die Lego Toolbox zu benutzen und auszuwerten. Dieses Vorgehen wäre aber keine Herausforderung gewesen, sodass der Umweg über einen Arduino Uno als Zielsystem gegangen wurde. Hierbei kommuniziert der Arduino mit dem NXT Ultraschallsensor per I2C. Die empfangenen Messwerte werden daraufhin per USB in MATLAB/Simulink verarbeitet. Dazu wird der COM-Port in der Entwicklungsumgebung ausgelesen.

Arduino Uno

Abb.18: Arduino Uno Pinbelegung

Für das Projekt wurde ein Arduino Uno in der Version R3 genutzt. Heutzutage ist dieser Arduino der "Standard-Arduino" und ist für die meisten Projekte völlig ausreichend. Herzstück des Einplatinenrechners ist der Mikrocontroller von ATMEL, der ATmega 328P. Mit der Bootloader-Software und einem zweiten Mikrocontoller dem ATmega8U2, der die USB Kommunikation herstellt, können eigene Arduino-Programme schnell per USB übertragen werden. Insgesamt verfügt der Arduino Uno über 14 digitale I/O Pins, wovon sechs als PWM-Kanäle genutzt werden können und sechs analoge Input Ports. Zudem kann der Arduino Uno mit den Bussystemen UART, SPI und I2C kommunizieren. [8]

Tab.4: Technische Daten
Mikrocontroller ATmega328P
Betriebsspanunng 5 V
Empfohlene Eingangsspannung 7-12 V
Digitale I/O Pins 14 (wovon 6 PWM-Kanäle sind)
Analoge Input Pins 6
Ausgangsstrom pro I/O Pin 20 mA
Ausgangsstrom am 3.3 V Pin 50m A
Flash Speicher 32 KB, davon wird 0,5 KB vom Bootloader verwendet
SRAM 2 KB
EEPROM 1 KB
Clook Speed 16 MHz
Tab.5: Besondere Pins
Serielle Kommunikation (UART) 0 (RX), 1 (TX)
Externe Interrupts 2, 3
PWM Pins 3, 5, 6, 9, 10, 11
SPI 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)
I2C A4 (SDA), A5 (SCL)
Analoge Referenzspannung AREF
Integrierte LED 13

Kommunikation

Für die eigentliche Kommunikation zwischen dem Arduino und dem Sensor wurde das Datenkabel aufgetrennt und mit Female-Jumperkabeln erweitert. So konnte eine schnelle Realisierung der Schaltung auf dem Breadboard durchgeführt werden. Lego ist vom Standard Protokoll des I2Cs abgewichen und hat eine Besonderheit eingebaut. Aus diesem Grund muss zusätzlich ein Jumperkabel vom digitalen Port an die Clockleitung SCL gelegt werden. Nähere Informationen dazu können hier nachgelesen werden. [9] Die 9 V Versorgungsspannung des Sensors wurde durch eine 9V Blockbatterie realisiert und die zweite Versorgungsspannung von 4,3 V kann mit der Versorgungsspannung des Arduinos ersetzt werden. Die Bauteile im Sensor können 5 V tolerieren.

Arduino und MATLAB Code

Im SVN Ordner befinden sich ein MATLAB und zwei Arduino Programme. Die beiden Arduino Programme kommunizieren als Master mit dem als Slave registrierten Sensor und zeichnen die gemessene Distanz des Sensors auf. Der Unterschied zwischen den beiden Programmen ist die Programmierweise. Das erste Programm nutzt eine modifizierte I2C-Bibliothek (i2cmaster.h) für die Kommunikation und das komplette I2C-Protokoll wurde nach dem Kapitel "Protokoll und Adressierung" programmiert. Dieses ist sehr nützlich um einen tiefen Einblick ins Protokoll zu bekommen und um gegebenenfalls Änderungen/Verbesserungen einzubauen. Das zweite Arduino Programm nutzt die fertige Bibliothek (NXTShield.h) und die Standard Wire.h-Bibliothek. Die NXTShield Bibliothek ermöglicht eine sehr schnelle und leichte Kommunikation mit dem Sensor, da das komplette I2C-Protokoll die Bibliothek übernimmt und der Distanzwert mit einem Befehl ausgelesen werden kann. Die Bibliothek basiert auf den käuflich erwerblichen Arduino NXT Motor Shield. [10]
Das MATLAB Programm ist einem Echtzeitdatenlogger nachempfunden, welches die Ergebnisse im laufenden Betrieb aufnimmt und visualisiert. Der Nutzer muss nur Anfangs manuell seinen richtigen COMPort auswählen, an welchem der Arduino angeschlossen ist, und in welchen Grenzen das Visualisierungsfenster die Daten darstellen soll. Daraufhin öffnet sich das Visualisierungsfenster und zeichnet die Daten auf. Nachdem das Fenster geschlossen wird, wird eine Logtextdatei im selben Verzeichnis mit der dargestellten Zeit und der Distanz gespeichert.

Messung

Versuchsaufbau

Die Messergebnisse der Ultraschallmessung wurden statisch und für kurze Distanzen ermittelt. Hierzu wurde ein DIN A4 Millimeterpapier ausgedruckt und Markierungen in 1,2 cm Abständen eingezeichnet. Da der Sensor seine Messwerte nur ganzzahlig ausgibt, sollte damit sein Rundungsverhalten ebenfalls analysiert werden. Der Distanz-Nullpunkt des Sensors wurde experimentell ermittelt indem er an verschiedenen ganzzahligen Markierungen geschoben wurde und soweit justiert wurde bis die Markierungen den ausgebenden Werten in MATLAB entsprachen. Der Ultraschallsensor wurde horizontal positioniert und ohne weitere Vorrichtungen in Richtung des quaderförmigen Objektes (Karton: 32 cm x 7 cm x 23 cm) geschoben, sodass die Höhe zwischen dem Millimeterpapier und dem vermutlichen Mittelpunkt des Sensors ungefähr 2 cm betrug. Die Wetterstation am Messplatz hat die Temperatur und die rel. Luftfeuchte während der Messung angezeigt. Die Temperatur (20 °C) und die rel. Luftfeuchte (41 %) haben sich während der gesamten Messung nicht verändert. Laut Wetterbericht betrug der Luftdruck zu dieser Zeit 1019,6 hPa. Diese drei Werte (Temperatur, rel. Luftfeuchte und Luftdruck) sollen nur grobe Richtwerte darstellen zu welchen Bedingungen die Messungen stattgefunden haben, da diese Parameter für eventuelle Sensormessabweichungen verantwortlich sein können und ebenfalls selber mit einzelnen Messabweichungen behaftet sind. Zudem wurde die 9 V Blockbatterie, die zur Versorgungsspannung des Sensors genutzt wurde, vorher aufgeladen und auf Nennspannung gebracht.

Messergebnisse

Insgesamt wurden drei Messreihen mit der gemessenen Distanz ermittelt. Diese Messreihen wurden zeitlich nacheinander festgehalten und in nachfolgender Tabelle eingetragen:

Tab.6: Messergebnisse der Ultraschallmessung für kurze Distanzen
Wahre Distanz
in cm
Gemessene Distanz in cm
1. Messreihe
Gemessene Distanz in cm
2. Messreihe
Gemessene Distanz in cm
3. Messreihe
Absolute Messabweichung
in cm
Relative Messabweichung
in %
Arithmetischer Mittelwert
in cm
Standardabweichung
in cm
Messunsicherheit
in cm
Vertrauensintervall
in cm
2,4 7 6 5 3,60 150,00 6,00 1,00 1,36 2,4 ± 1,36
3,6 4 5 5 1,07 29,72 4,67 0,58 0,79 3,6 ± 0,79
4,8 6 6 6 1,20 25,00 6,00 0,00 0,00 4,8 ± 0,00
6,0 6 6 6 0,00 0,00 6,00 0,00 0,00 6,0 ± 0,00
7,2 7 7 7 -0,20 -2,77 7,00 0,00 0,00 7,2 ± 0,00
8,4 8 8 8 -0,40 -4,76 8,00 0,00 0,00 8,4 ± 0,00
9,6 9 9 9 -0,60 -6,25 9,00 0,00 0,00 9,6 ± 0,00
10,8 10 10 10 -0,80 -7,40 10,00 0,00 0,00 10,8 ± 0,00
12,0 11 11 11 -1,00 -8,33 11,00 0,00 0,00 12,0 ± 0,00
13,2 13 13 13 -0,20 -1,51 13,00 0,00 0,00 13,2 ± 0,00
14,4 14 14 14 -0,40 -2,77 14,00 0,00 0,00 14,4 ± 0,00
15,6 15 15 15 -0,60 -3,84 15,00 0,00 0,00 15,6 ± 0,00
16,8 16 16 17 -0,47 -2,79 16,33 0,58 0,79 16,8 ± 0,79
18,0 18 18 18 0,00 0,00 18,00 0,00 0,00 18,0 ± 0,00
19,2 19 19 20 0,13 0,67 19,33 0,58 0,79 19,2 ± 0,79
20,4 20 21 21 0,27 1,32 20,67 0,58 0,79 19,2 ± 0,79
21,6 21 21 22 -0,27 -1,25 21,33 0,58 0,79 21,6 ± 0,79
22,8 22 23 22 -0,47 -2,06 22,33 0,58 0,79 22,8 ± 0,79
24,0 23 23 23 -1,00 -4,16 23,00 0,00 0,00 24,0 ± 0,00
25,2 24 24 24 -1,20 -4,76 24,00 0,00 0,00 25,2 ± 0,00

Berechnungen

Die Messabweichung beschreibt die Abweichung des Messwertes vom wahren Wert der Messgröße. Die folgende Gleichung definiert die absolute Messabweichung:



Die relative Messabweichung kann bezogen auf den wahren Wert mit folgender Gleichung erfolgen:



Die absolute Messabweichung hat immer die Dimension der Messgröße und die relative Messabweichung ist dagegen einheitslos und wird häufig in Prozent angegeben.
Der arithmetische Mittelwert ist ein Schätzwert für den wahren Wert der Messgröße. Er wird berechnet, indem die Summe der Einzelwerte durch die Zahl der Elemente dividiert wird:



Die Standardabweichung ist ein ein Maß für die Streuung, der anzeigt, inwieweit die Werte um den arithmetischen Mittelwert streuen. Je größer die Standardabweichung in Relation zum Mittelwert ist, desto größer ist die Streuung und desto schlechter spiegelt der Mittelwert die Daten wider. Er hat dieselbe Einheit wie der Mittelwert:



Die Messunsicherheit wird nach der Student t Verteilung bestimmt. Hierbei ist die Anzahl der Messungen und die Standardabweichung. Zusätzlich beschreibt den Vertrauensfaktor für die Verteilung, die aus einer speziellen Tabelle abgelesen werden kann. Bei industriellen Anwendungen und in der Messtechnik wird üblicherweise ein Vertrauensniveau von 95 % angenommen. In diesem Fall ist t=2,35 für ein Vertrauensniveau von 95 %.



Auswertung

Anhand der aufgenommenen und daraus berechneten Messwerte ist zu erkennen, dass der NXT Ultraschallsensor erst ab einer Distanz von 6 cm brauchbare Messwerte liefert. Davor befindet sich der Erfassungsbereich des Sensors in der sogenannten Blindzone, die im Kapitel Funktionsprinzip beschrieben wird. Bei den Distanzen 6 cm und 18 cm liefert der Sensor die besten Ergebnisse. Anhand der relativen Abweichungen ist ersichtlich, dass der Sensor nicht für präzise Abstandsmessungen entwickelt worden ist und somit für präzise Messungen ungeeignet ist.

Objekt- und Umwelteinflüsse

Quelle [11]

  • Heiße Messobjekte mit hohen Temperaturen können das Echo des Sensors ablenken, sodass es geschwächt wird oder nicht mehr empfangen werden kann.
  • Weiche Materialen, wie z.B. Filz, Watte, grobe Gewebe und Schaumstoffe absorbieren fast die gesamte Impulsenergie und sind daher kaum zu messen. Dünnwändige Folien verhalten sich wie weiche Materialen. Die Folienstärke sollte mindestens 0,01 mm betragen.
  • Harte Materialen und Flüssigkeiten sind in der Regel gut erfassbar.
  • Regen oder Schneeniederschläge führen zu keiner Funktionsbeeinträchtigung des Sensors.
  • Starke Luftbewegungen und Turbulenzen führen zu Instabilitäten in der Messung. Die Strömungsgeschwindigkeiten müssen aber sehr hoch sein, sodass es zu Problemen kommen kann. Eine Anwendung unter üblichen Bedingungen in Produktionsstätten oder im Freien können deshalb durchgeführt werden.


Fazit

Der Lego NXT Ultraschallsensor kann aufgrund seines Rundungsverhaltens und seiner ganzzahligen Messwerte nur für Distanzmessungen eingesetzt werden, die keine hohe Präzision benötigen. Hierbei sollte darauf geachtet werden, dass der Sensor erst ab 6 cm seine Objekte detektiert. Mögliche Einsatzgebiete wären zum Beispiel eine simple Anwesenheitskontrolle (prüfe, ob Objekt am Einsatzort ist) oder eine Personendetektierung. Für präzisere Distanzmessungen oder Detektierungsmessungen ist das Nachfolgemodell der EV3 Ultraschallsensor zu empfehlen. [5]

Mögliche Verbesserungen und weitere Betrachtungen

In der vorliegenden Versuchsreihe stand primär der Fokus auf statisch aufgenommene Messwerte für kurze Distanzen. Da der Ultraschallsensor laut Hersteller bis zu einer Distanz von 250 cm Objekte messen kann, kann die Messreihe bis dahin erweitert werden. Zudem kann die Anzahl der Messreihen vergrößert werden, um einen besseren Ausblick der Schätzwerte auf die Grundgesamtheit zu erhalten. Nachfolgend folgt eine kurze Beschreibung mit möglichen weiteren Versuchsreihen, um den Sensor in allen seinen Eigenschaften zu beschreiben:

  • Distanzgenauigkeit des Sensors bei hohen Distanzen
  • Distanzgenauigkeit des Sensors bezüglich Objekte unterschiedlicher Materialen und Formen
  • Erfassungsbereich des Ultraschallsensors aufnehmen; bis zu welchem Winkel werden Objekte noch erkannt?
  • Dynamische Sensorversuche; welche Messwerte liefert der Sensor in Bewegung?


Projektplan

Abb.26: Projekttracking Lego NXT Ultraschallsensor

















YouTube Video

Lego NXT Ultraschallsensor mit Matlab auslesen

Einzelnachweise

  1. "Lego Mindstorms NXT" von Wikipedia
  2. "Mindstorms Education" von Generationrobots
  3. "Glöckler, Heinrich, Linke (2015): Grundlagen Automatisierung - Sensorik, Regelung, Steuerung; Springer Vieweg "
  4. "Hering, Schönfelder (2012): Sensoren in Wissenschaft und Technik; Vieweg + Teubner"
  5. 6,0 6,1 6,2 6,3 "I2C-Bus" von ELV Journal
  6. "I2C-Zustände" von Computer:club^2
  7. "Arduino UNO" von Arduino Tutorial
  8. "Direct manipulation of I2C pins" von Mbed
  9. "Arduino NXT Motor Shield - Kit" von TKJ electronics
  10. "Ultraschallsensoren - Messprinzip" von WayCon



→ zurück zum Hauptartikel: Signalverarbeitende Systeme