Barometer mit Matlab/Simulink

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Sensor: NXT Barometric Sensor (NBR1036)

NXT Barometric Sensor (NBR1036)

Autor: Tobias Wemmer

Einleitung

Dieser Wiki-Artikel beschreibt die Semesterarbeit von Tobias Wemmer im Modul SigSys SoSe2018. In diesem Modul sollte jeder Teilnehmer die Funktionsweise eines jeweils anderen Sensors verstehen und diesen via Matlab/Simulik auslesen und kalibrieren. Gegeben waren neben dem eingentlichen Sensor noch die Tools Matlab und Simulink. Die Funktionsweise des Sensors sowie Datenblätter musste, falls vorhanden bei der Recherche gesichtet werden. Letzteres war für diesen Sensor nicht mehr zugänglich. Es gab jedoch ein Beiblatt zum Sensor, welches sich in erster Line mit dem Auslesen des Sensors via NXT Stein beschäftigte. Daher musste experimentell an der Lösung gearbeitet werden.

Aufgabenstellung

  • Lesen Sie den Sensor mit MATLAB/Simulink aus (MATLAB/Simulink Toolbox).
  • Beschreiben, untersuchen und verstehen Sie Ihre Signalverarbeitungskette.


NXT Baromitric Sensor (NBR1036)

NXT Barometer

Vorstellung des Sensors

Bei dem Sensor handelt es sich um den „NXT Baromitric Sensor (NBR1036)". Wie der Name schon sagt, ist dieser Sensor ein Barometer, jedoch kann der Sensor neben dem Druck auch die Temperatur messen. Dadurch eignet sich der Sensor gut als Komponente einer Wetterstation.[1]
Wie Abbildung 1 zu entnehmen ist, lässt sich der Sensor auf den ersten Blick nicht von anderen NXT Sensoren unterscheiden, da er das Standard NXT-Gehäuse besitzt. Zur Unterscheidung der einzelnen Sensoren ist eine Beschriftung auf der Unterseite des Gehäuses vorhanden.


Messgenauigkeit

Der Sensor misst Analoge Werte (Druck und Temperatur). Die Messwerte werden mittels Analog-Digital-Umwandler (ADU) digitalisiert und somit für die Digitale Auswertung via PC verarbeitbar gemacht. Diese Digitalisierung führt zu Messbereichen bzw. Schritten statt unendlichen einzelnen Werten. Der Grund dafür ist ein endlicher Speicher, welcher nicht in der Lage ist unendliche Werte speichern. Daraus resultiert eine Messgenauigkeit bzw. Ungenauigkeit für den Sensor. Diese ist vom ADU abhängig. Die Messgenauigkeit des Sensors beläuft sich beim Druck auf ein Tausendstel Zoll auf der Quecksilbersäule. Umgerechnet in Pascal ergibt dies 3,386 Pascal pro Schritt. Die Temperatur wird in 0,1°C Schritten gemessen.[1]


Einstellungsmöglichkeiten für die Einheiten der Messung

Der Sensor lässt sich dahingehend einstellen, dass die Druck-Signale in inHg (Zoll auf der Quecksilbersäule) oder in hPa ausgegeben werden können. Für die Temperatur lassen sich die Signale in °C oder °F ausgeben.[1]


Kommunikation des Sensors

Der Sensor kommuniziert über eine I²C-Schnittstelle.[2]

Anschluss des Sensors

Normalerweise würde der Sensor über einen NXT Stein angesteuert und ausgelesen werden. Das Ganze funktioniert als Plug-and-Play. Zum Einlesen des Sensors in Matlab/Simulink wird eine Toolbox der RWTH Aachen benötigt. Mehr Informationen dazu gibt es unter folgendem Link:

https://de.mathworks.com/hardware-support/lego-mindstorms-matlab.html


Alternative Herangehensweisen

Pin-Belegung des Kabels und des NXT Sensors

Wenn kein NXT-Stein vorhanden ist oder andere Gründe gegen die Verwendung sprechen, so gibt es mehrere Alternativen den Sensor trotzdem auszulesen. Je nach Durchführung und Möglichkeit kann dazu das NXT-Kabel direkt angeschlossen werden. In machen Fällen lässt es sich jedoch nicht vermeiden, dass Kabel aufzuschneiden und die Litzen einzeln auszulesen. Die Pinbelegung ist in der nachfolgenden Tabelle aufgeführt. In der rechten Abbildung ist ein aufgeschnittenes und umbebautes Kabel für die Verwendung am Arduino/Sigrok nutzbar gemacht worden.

Tabelle 1: Pin-Belegung[3]

# Farbe Funktion
1 Weiß +9V Suplly (Analog)
2 Schwarz GND
3 [Rot GND
4 Grün +4,3V Supply
5 Gelb I²C Clock (SCL)
6 Blau I²C Data (SDA)


Decoder/Analyser-Ansatz

Es ist möglich den Sensor mittels eines Decoder/Analyser auszulesen. Der Vorteil dabei besteht darin, dass dieser in der Lage ist die Bus-Adresse des Sensors direkt auszulesen. Dies erspart Zeit sofern die Adresse nicht bekannt ist. Weiterhin können die Daten direkt verarbeitet werden. Ein möglicher Decoder ist der Sigrok. Ein Nachteil bei diesem Ansatz ist die Notwendigkeit des Aufschneidens des Kabels. Ein weiterer Nachteil besteht darin, dass eine Gewisse Vorkenntnis benötigt wird, was Programmierung angeht.[4]
Weitere Informationen zum Sigrok sind unter dem folgenden Link zu erhalten:

https://sigrok.org/wiki/Protocol_decoders


Arduino-Ansätze

Pin Belegung am Arduino

Es gibt zwei Ansätze, mit denen der Sensor via Arduino ausgelesen werden kann. Beide Ansätze sind relativ ähnlich, sie unterscheiden sich lediglich in der Art und Weise, wie der Sensor an den Arduino angeschlossen wird.

Beim leichten Ansatz wird der Sensor mit seinem NXT-Kabel über ein Dongle an den Arduino angeschlossen. Dabei müssen lediglich die Spannungsversorgung, GND, Die Clock-Leitung und die Signalleitung richtig angeschlossen werden. Der Vorteil dieses Ansatzes liegt darin, dass der Anschluss leichter ist. Auf der anderen Seite ist die Anschaffung eines solchen Dongles mit Kosten verbunden. Ein solches Dongle ist unter folgendem Link erhältlich:

http://www.mindsensors.com/ev3-and-nxt/58-breadboard-connector-kit-for-nxt-or-ev3


Beim schwierigeren Ansatz wird der Sensor über ein Steckbrett oder eine Platine an den Arduino angeschlossen. Dazu muss allerdings das Kabel des Arduinos aufgeschnitten werden. Anschließend müssen die Litzen einzeln ausgelesen werden. Der Vorteil bei diesem Ansatz besteht darin, dass kein Dongle gekauft werden muss. Wenn allerdings ein solches Dongle bereits vorhanden ist, macht es wenig Sinn den schwierigeren Ansatz zu verfolgen.

Bei beiden Ansätzen gilt es einige Regeln zu beachten, diese werden im folgenden Kapitel näher erläutert.



Vorgehen beim Arduino-Ansatz

Der Arduino wurde wie in der schematischen Abbildung mit dem Sensor verbunden. Die 2K7 Ohm Pullup-Widerstände waren dabei essenziell, um die Clock und die Datenleitung auf eine positive Gleichspannung zu ziehen. Ohne die Widerstände ist ein Auslesen des Sensors nicht möglich, es sei denn es wird ein Spannungsteiler verwendet, dabei müssen jedoch größere Widerstände verwendet werde. Jeweils ein 100K Ohm Widerstand auf die Masse ist dabei eine mögliche Herangehensweise, mit der es zumindest möglich ist die Adresse des Sensors auszulesen. In wie weit die einen Einfluss auf die Messwerte hat, wurde nicht getestet.

Wichtig: Auch bei der Verwendung des Dongles müssen die Pullups verwendet werde, es sei denn diese sind bereits im Dongle integriert.

Arduino Ansatz am Steckbrett
Anschluss des Barometers an den Arduino














Nachdem der Sensor angeschlossen wurde, muss die Bus-Adresse des Sensors ausgelesen werden, um diesen auswerten zu können. Dazu gibt es Arduino Programme, welche die I²C-Adresse herausfinden, alternativ kann auch direkt über Matlab die Adresse ausgelesen werden.

Einen I²C-Scanner gibt es z.B. unter folgendem Link:

https://arduino-projekte.webnode.at/i2c-scanner/

Vorgehen bei der Messung

Impovisierter Klimaschrank (Beutel)


Auswertung Messergebnisse

Auswertung Messunsicherheit

Matlab-Auswertung

Datei:Temperatur Plot.jpeg
Temperatur_Plot
Datei:Druck Plot.jpeg
Druck_Plot


Youtube-Video

Zusammenfassung

Ausblick

Für eine genauere Auswertung und eine daraus resultierende bessere Kalibrierung des Sensors ist es nötig, mit besserem Test-Equipment die Werte aufzunehmen. Ein Klimaschrank wäre an der Stelle optimal. Ansonsten bestände eine Verbesserung darin ein Vergleichs-Barometer bzw. Thermometer zu verwenden, welches mindestens eine genau so feine Messgenauigkeit, wie das NXT Barometer aufweist. Bei den verwendeten Vergleichsgerätschaften war diese Messgenauigkeit nicht gegeben.


Hilfreiche Links


Quellenverzeichnis

  1. 1,0 1,1 1,2 NXT_Barometer. Abgerufen am 3. Juli 2018.
  2. I²C Sensor. Abgerufen am 3. Juli 2018.
  3. Pin Belegung. Abgerufen am 3. Juli 2018.
  4. Sigrok. Abgerufen am 3. Juli 2018.


→ zurück zum Hauptartikel: Signalverarbeitende Systeme