Distanzerkennung mit Beschleunigungssensor mit Matlab/Simulink und EV3
Autor: Fabian Lehnert
Betreuer: Prof. Dr.-Ing. Ulrich Schneider
Für die Lehrveranstaltung Signalverarbeitende Systeme des Studiengangs Business and Systems Engineering sollten eine Reihe von signalverarbeitenden Techniken praktisch angewandt werden. Dazu wurde den Studierenden jeweils ein Sensor, sowie ein Lego Mindstorms EV3 zur Verfügung gestellt. Die Aufgabe bestand im groben darin, den EV3 vorwärts fahren zu lassen und in einem definierten Abstand vor einer Wand anhalten zu lassen. Die Software für den EV3 war mit Matlab/Simulink zu realisieren. Dieser Artikel befasst sich mit der Messung einer gefahrenen Distanz mittels Beschleunigungssensor. Weitere Information zur Lehrveranstaltung befinden sich im Artikel SigSys SoSe2017.
Primärsensor
Der für dieses Projekt verwendete Primärsensor (vergl. Abb. 2) ist ein Beschleunigungssensor der Firma HiTechnic mit der Bezeichnung NXT Acceleration / Tilt Sensor (NAC1040). Dieser Sensor wurde ursprünglich für den Lego Mindstorms NXT entwickelt. Der Sensor kann zum einen Beschleunigungen in drei Richtungen messen. Zum anderen lassen sich mit ihm auch Neigungen in drei Richtungen feststellen. [1]
Beschleunigungssensoren gehören zu den sogenannten MEMS-Bauelementen (Micro-Electro-Mechanical-System), welche elektronische und mechanische Bauteile auf winzigen Bauraum vereinen. Prägnant für ein MEMS-Bauelement ist der Sensormechanismus, sowie ein verbauter Mikrocontroller. MEMS-Bauelemente werden hauptsächlich für Messungen von Beschleunigungen oder auch von Drehbewegungen verwendet. Je nach Komplexität des Sensors kann die Messung einachsig oder auch mehrachsig erfolgen. Beschleunigungen werden in der Regel indirekt bestimmt. Nach dem zweiten Bewegungsgesetz nach Newton ist die Beschleunigung eines Körpers proportional und gleichgerichtet zu der Kraft, die auf den Körper wirkt. Weiterhin ist die Beschleunigung abhängig von der Masse des Körpers. Je schwerer der Körper, desto geringer fällt die Beschleunigung bei gleicher Krafteinwirkung aus. Durch einen Körper mit bekannter Masse und der gemessenen Kraft, die bei der Beschleunigung auf den Körper wirkt, lässt sich die unbekannte wirkende Beschleunigung berechnen. Diese Kraft wird jedoch auch nicht direkt gemessen, sondern über eine Positionsänderung der Masse, welche Auswirkung auf die Kapazität eines Kondensators hat.
Der Aufbau für eine solche Messung zeigt Abb. 3. Zwischen zwei fixierten Kondensatorplatten (K1 und K2) wird eine zwischen den Platten schwingfähige Masse in Form einer dritten Kondensatorplatte (Kbew) aufgehangen. Durch diese Konstruktion ist es möglich, zwei Kapazitäten zu messen (K1 und Kbew ergeben C1, K2 und Kbew ergeben C2). Subtrahiert man diese beiden Kapazitäten von einander, kann man die Weite und die Richtung der verschobenen Masse bestimmen. Da die Verschiebung der Masse im Mikrometerbereich liegt, ist auch die Kapazitätsänderung extrem gering. Durch eine Erhöhung der Anzahl dieser Konstruktion, lässt sich eine höhere Kapazitätsänderung generieren, die leichtere und präzisere Messungen ermöglicht. [2]
Der Beschleunigungssensor misst in den drei Achsen x, y und z (vergl. Abb. 4) und kann Werte im Bereich von -2 g bis 2 g messen. 1 g entspricht einem Rohwert von 200, wodurch sich eine Schrittweite von 0,049 m/s² ergibt (1 g entspricht 9,81 m/s²). Der Sensor nutzt zur Datenübertragung das I²C-Protokoll und kann bis zu 100 unterschiedliche Messwerte pro Sekunde übertragen. [1]
Sensorinterne Signalvorverarbeitung
Mit Hilfe eines Ladungsverstärkers wird aus der Differenz der anliegenden Kapazitäten eine Spannung erzeugt, diese wird aufbereitet und tiefpassgefiltert. Für die Umwandlung von einem analogen Signal zu einem digitalen Signal werden sogenannte Analog-Digital-Umsetzer oder auch A/D-Wandler eingesetzt. Für die Umwandung von Messsignalen eines Beschleunigungssensors eignet sich am besten ein Sigma-Delta-A/D-Wandler, da dieser eine geringe Signalbandbreite und eine hohe Auflösung besitzt. Die Messwerte werden vom A/D-Wandler als digitaler Bitstrom ausgegeben, der einem FIFO-Puffer zugeführt wird. Der Bitstrom wird durch das I²C-Protokoll transformiert und ist zur weiteren Verarbeitung und Übertragung bereit. [3]
Diese Funktionen werden vom verwendeten Sensor übernommen und müssen nicht zusätzlich umgesetzt werden.
Digitale Signalverarbeitung
Der erste Lösungsansatz bestand darin, den Sensor direkt mit dem EV3 über einen der Sensoreingängen zu verbinden und die Werte über eine auf den EV3 überspielte Software zu verarbeiten. Dafür wurde der Sensor mit dem EV3 verbunden und dieser über den USB-Anschluss mit einem Rechner. An diesem wurde für Matlab das Lego Mindstorms EV3 Support Package heruntergeladen. Dieses beinhaltet unter anderem zusätzliche Matlab-Dateien (.m) mit Funktionen zum Ansteuern des EV3. Da der Beschleunigungssensor nicht im Support Package enthalten ist, wurde die Matlab-Datei für einen der unterstützen Sensoren kopiert und modifizert, sodass mit Matlab auf den Beschleunigungssensor zugegriffen werden kann. Die vorhandenen Funktionen zum Auslesen eines Sensors lieferten jedoch nicht die benötgiten Daten vom Sensor. Auch nach längerer Recherche und längerem Experimentieren konnten die gewünschten Daten nicht geliefert werden. Somit wurde dieser Ansatz vorläufig verworfen.
Der zweite Ansatz sieht den Einsatz eines Arduino Uno vor, der mit dem Sensor kommunizieren soll. Die Kommunikation zwischen Arduino Uno und dem Beschleunigungssensor ist klarer und einfacher zu verstehen, als die Kommunikation zwischen EV3 und Matlab. Tatsächlich konnten die benötigten Daten durch diesen Ansatz empfangen und somit genutzt werden.
Für die Realisierung des Projekts werden benötigt:
- Ein Lego Mindstorms EV3
- Ein Beschleunigungssensor von HiTechnic
- Ein Arduino Uno
- Ein Rechner mit Matlab
- USB-Kabel (Rechner zum Arduino Uno, Rechner zum EV3)
- Ein zusätzliches Lego Mindstorms Kabel
Der Aufbau und die Verbindung der einzelnen Komponenten wird in Abb. 5 dargestellt Der Beschleunigungssensor wird mit Hilfe eines aufgeschnittenen Lego Mindstorms Kabel mit dem Arduino Uno verbunden. Die Pin-Belegung ist in Tab. 1 beschrieben.
EV3 Westernstecker | Arduino Uno |
---|---|
Pin1 Weiß | Nicht verwendet |
Pin2 Schwarz | Nicht verwendet |
Pin3 Rot | GND |
Pin4 Grün | Vin |
Pin5 Gelb | A5 |
Pin6 Blau | A4 |
(Weitere Informationen hierzu sind unter mindstormsforum.de und arduino.cc zu finden) [4] [5]
Durch das Importieren der Wire.h Bibliothek in das Arduino Programm, lassen sind somit Daten vom Sensor zum Arduino Uno übertragen. Der Beschleunigungssensor überträgt mittels I²C Protokoll ganzzahlige Rohdaten. Ein Rohwert von 0 entspricht auch einer Beschleunigung von 0 m/s². Die Schrittweite der Rohdaten entspricht 0,049 m²s bzw 1/200 g. Die Rohwerte können mit einer einfachen Multiplikation den gewünschten Messwert liefern. Dafür wird keine Kennlinie benötigt. Nach der Umrechnung der Rohwerte können diese nun per serieller Schnittstelle an den mit einem USB-Kabel verbundenen Rechner übertragen werden. An diesem werden die gesendeten Daten mit Matlab ausgewertet. Zudem wird über Matlab der Lego Mindstorms EV3 angesteuert, welcher ebenfalls mit einem USB-Kabel an den Rechner angeschlossen ist.
(Weitere Informationen zum Aufbau einer seriellen Schnittstelle mit Matlab finden sich unter mathworks.com - Serial Port Devices. Weitere Informationen zur Ansteuerung des EV3 mittels Matlab finden sich unter mathworks.com - MATLAB Support Package for LEGO MINDSTORMS EV3 Hardware) [6] [7]
Die Auswertung der Daten und die Steuerung des EV3 wird als Projektablaufplan in Abb. 6 dargestellt. Zu Beginn werden die Verbindungen zum EV3 und zum Arduino aufgebaut. Ist die Verbindung erfolgreich, wird der erste Messwert vom Sensor über den Arduino empfangen. Dieser dient als Referenzwert (RSysErr) um einen systematischen Fehler zu beseitigen, der durch das Neigen des Sensors entsteht (vergl. Primärsensor). Anschließend wird mit dem sekundären Ultraschallsensor einmalig die Entfernung zur Wand gemessen um einen zweiten Referenzwert (RDistWand) zu ermitteln. Dieser wird für den Abstandabgleich benötigt. Nachdem diese Vorbereitungen getroffen wurden, beginnt der Schleifendurchlauf. Zu Beginn eines jeden Durchlaufs wird der Abstand zur Wand geprüft. Dafür wird die berechnete gefahrene Strecke (Zu Beginn ist diese 0) vom Referenzwert RDistWand abgezogen. Daraus ergibt sich die aktuelle Entfernung zur Wand. Ist der Wert kleiner als die eingestellte Stop-Distanz, so wird die Motor-Power des EV3 auf 0 gesetzt. Andernfalls wird die Motor-Power auf einen festgelegten Wert gesetzt. Nach der Überprüfung wird der nächste Wert des Sensors empfangen. Aus dem empfangenen Wert für die Beschleunigung lässt sich die Geschwindigkeit mit der Formel berechnen. ist die Geschwindigkeit, ist der empfangene Sensorwert und ist die benötigte Zeit für einen Schleifendurchlauf. Auf gleiche Weise lässt sich aus der Geschwindigkeit die gefahrene Distanz ermitteln. Dazu dient die Formel mit den Parametern für die gefahrene Strecke, für die Geschwindigkeit und erneut für die benötigte Zeit für einen Schleifendurchlauf. Nach der Berechnung beginnt die Schleife wieder bei der Abfrage der Distanz zur Wand. Die Schleife hat als Sicherheitsmaßnahme eine festgelegte Anzahl an Durchläufen, um eine unendliche Schleife und damit einhergehende Probleme zu vermeiden. Nachdem die Abbruchbedingung der Schleife eintrifft, wird die Serielle Schnittstelle zum Arduino gelöst, um einen sauberen Abschluss des Programms zu erzeugen. Zusätzlich lassen sich die Daten Beschleunigung, Geschwindigkeit und Strecke in Arrays speichern, um diese Daten zu plotten und Rückschlüsse auf die Verarbeitung der Messdaten erhalten zu können.
Darstellung der Ergebnisse
Abb. 7 zeigt die Ergebnisse einer Reihe von Testfahrten. Dabei wurde der EV3 in einem Abstand von etwa 60 cm von einer Wand entfernt aufgestellt und das Programm zur Distanzmessung gestartet. Die blauen Markierungen geben die Entfernung zur Wand an, nachdem der EV3 angehalten hat. Die grüne Linie zeigt an, an welcher der EV3 idealerweise halten soll. Abb. 8 zeigt exemplarisch die gemessene Beschleunigung, die berechnete Geschwindigkeit und die berechnete gefahrene Distanz einer Versuchsdurchführung. Markant hierbei ist die verhältnismäßig starke Schwankung der gemessenen Beschleunigung im Stillstand (Ab dem 70. Schleifendurchlauf). In Tab. 2 werden die Ergebnisse der Versuchsreihe numerisch dargestellt. Zusätzlich werden die absolute und die relative Messabweichung dargestellt.
Messung | Entfernung zur Wand in cm | Abs. Messabweichung in cm | Rel. Messabweichung |
---|---|---|---|
1 | 9.8 | -0.2 | -2% |
2 | 8.9 | -1.1 | -11% |
3 | 11.1 | 1.1 | 11% |
4 | 11 | 1 | 10% |
5 | 10.9 | 0.9 | 9% |
6 | 11.4 | 1.4 | 14% |
7 | 11.1 | 1.1 | 11% |
8 | 10.1 | 0.1 | 1% |
9 | 10.7 | 0.7 | 7% |
10 | 9.6 | -0.4 | -4% |
11 | 11.3 | 1.3 | 13% |
12 | 9.2 | -0.8 | -8% |
13 | 9.3 | -0.7 | -7% |
14 | 9.6 | -0.4 | -4% |
15 | 13.5 | 3.5 | 35% |
16 | 11.8 | 1.8 | 18% |
17 | 10.7 | 0.7 | 7% |
18 | 9.6 | -0.4 | -4% |
19 | 11.8 | 1.8 | 18% |
20 | 9.2 | -0.8 | -8% |
Zusätzlich lässt sich noch die empirische Standardabweichung berechnen. ist die Anzahl der durchgeführten Messungen und ist die Messabweichung der Messung . Mit der empirischen Standardabweichung lässt sich die mittlere (quadratische) Abweichung der Einzelmesswerte vom Mittelwert angeben. Außerdem lässt sich durch diese die Standardunsicherheit oder auch Messunsicherheit berechnen. [8] Es ergeben sich folgende Rechnungen:
Standardabweichung:
Messunsicherheit:
Die Empfindlichkeit des Sensors wird durch die kleinstmögliche Änderung eines Wertes angegeben. Diese beträgt 0.049 m/s² (siehe Digitale Signalverarbeitung).
In diesem Youtube-Video wird exemplarisch die Ausführung von zwei Versuchsdurchführungen festgehalten.
Weiterleitung zu SVN
Die Projektdaten sind in diesem SVN-Verzeichnis zu finden.
Einzelnachweise
- ↑ 1,0 1,1 [1], hitechnic.com - NXT Acceleration / Tilt Sensor (NAC1040). Abgerufen am 01.07.2017
- ↑ [2], elektronikpraxis.vogel.de/ - Funktion und Anwendungen von Beschleunigungssensoren und Gyroskopen. Abgerufen am 01.07.2017
- ↑ [3], elektronikpraxis.vogel.de/ - Funktion und Anwendungen von Beschleunigungssensoren und Gyroskopen - Seite 2. Abgerufen am 01.07.2017
- ↑ [4], mindstormsforum.de - Pin-Belegung der NXT & EV3 Western-Stecker / Kabel. Abgerufen am 01.07.2017
- ↑ [5], arduino.cc - Master Reader/Slave Sender. Abgerufen am 01.07.2017
- ↑ [6], mathworks.com - Serial Port Devices. Abgerufen am 01.07.2017
- ↑ [7], mathworks.com - MATLAB Support Package for LEGO MINDSTORMS EV3 Hardware. Abgerufen am 01.07.2017
- ↑ [8], MIEKE, Stephan. Berechnung der Messunsicherheit nach GUM. Abgerufen am 05.07.2017
→ zurück zum Hauptartikel: Signalverarbeitende Systeme SoSe2017