Arduino Mini-Segway: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
(94 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Projekte]] | [[Kategorie:Projekte]] | ||
[[Kategorie:ProjekteET MTR BSE WS2020]] | [[Kategorie:ProjekteET MTR BSE WS2020]] | ||
[[Datei:Segwey Seite.jpg|510px|thumb|rechts| Prototyp des Segways]] | [[Datei:Segwey Seite.jpg|510px|thumb|rechts| Abbildung 1: Prototyp des Segways [5]]] | ||
<!-- Kopieren Sie diesen Header in Ihren Artikel, damit er aufgelistet wird. --> | <!-- Kopieren Sie diesen Header in Ihren Artikel, damit er aufgelistet wird. --> | ||
'''Autoren:''' [[Benutzer:Manfred_Listner| Manfred Listner]], [[Benutzer:Patricio-emiliano_hernandez-murga| Patricio Emiliano Hernandez Murga]]<br/> | '''Autoren:''' [[Benutzer:Manfred_Listner| Manfred Listner]], [[Benutzer:Patricio-emiliano_hernandez-murga| Patricio Emiliano Hernandez Murga]]<br/> | ||
Zeile 26: | Zeile 26: | ||
unter dem Segway-Körper antreiben, sodass der Körper in vertikaler Position stabilisiert werden kann. | unter dem Segway-Körper antreiben, sodass der Körper in vertikaler Position stabilisiert werden kann. | ||
[[Datei:Schematische Darstellung des Mini-Segways.jpg|400px|thumb|left|Das Bild zeigt den schematischen Aufbau des Arduino Mini-Segways]]<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> | [[Datei:Schematische Darstellung des Mini-Segways.jpg|400px|thumb|left|Abbildung 2: Das Bild zeigt den schematischen Aufbau des Arduino Mini-Segways[5]]]<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> | ||
<br/><br/><br/> | <br/><br/><br/> | ||
Der Regelkreis erhält als Eingabe einen Sollwinkel welcher vom Regler verarbeitet wird. Der Motor fungiert als Steller und wirkt eine Kraft auf das System "Segway" aus. Als Messeinrichtung dient ein Gyroskop. Dieser Sensor führt den gemessenen Winkel an den Regler zurück, sodass die vorhandene Winkelabweichung bestimmt und dem Regler erneut zugeführt werden kann. | Der Regelkreis erhält als Eingabe einen Sollwinkel welcher vom Regler verarbeitet wird. Der Motor fungiert als Steller und wirkt eine Kraft auf das System "Segway" aus. Als Messeinrichtung dient ein Gyroskop. Dieser Sensor führt den gemessenen Winkel an den Regler zurück, sodass die vorhandene Winkelabweichung bestimmt und dem Regler erneut zugeführt werden kann. | ||
[[Datei:Regelkreis des Mini-Segways.jpg|600px|thumb|left|Das Bild zeigt den Regelkreis der für die Stabilisierung des Arduino Mini-Segways genutzt werden soll]] | [[Datei:Regelkreis des Mini-Segways.jpg|600px|thumb|left|Abbildung 3: Das Bild zeigt den Regelkreis der für die Stabilisierung des Arduino Mini-Segways genutzt werden soll [5]]] | ||
Zeile 53: | Zeile 53: | ||
== Komponentenspezifikation == | == Komponentenspezifikation == | ||
=== | ===Beschleunigungssensor MPU-6050=== | ||
=== | [[Datei:MPU6050 Segway.jpg|300px|thumb|rechts|Abbildung 4: Beschleunigungssensor MPU6050 [1] ]] | ||
Der Beschleunigungssensor MPU-6050 ist ein Sensor der die Beschleunigung um die x-, y- und z-Achse ermittelt. Die Kommunikation mit dem Mikrocontroller erfolgt über eine I2C Schnittstelle. Dafür sind die Anschlüsse SDA und SCL zuständig. Über diese Schnittstelle können die ermittelten Daten des Sensors ausgelesen und weiterverarbeitet werden. Die Anschlüsse VCC und GND sorgen für die Spannungsversorgung des Sensors mit entweder 3,3 V oder 5 V Spannung. | |||
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> | |||
===DC-Motoren=== | |||
[[Datei:Funduino DC-Motoren.jpg|300px|thumb|rechts|Abbildung 5: Funduino DC-Motoren[5]]] | |||
Zur Bewegung des Arduino Mini-Segways werden zwei DC-Motoren verwendet. Die Motoren verfügen jeweils über eine Spule durch die ein Magnetfeld erzeugt wird. Je nach Polung an den Eingängen des Motors kann so eine Drehung im, oder gegen den Uhrzeigersinn erzeugt werden. Diese Rotation wird daraufhin über ein Getriebe an die Räder übertragen. | |||
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> | |||
===H-Brücke L298N=== | ===H-Brücke L298N=== | ||
Um die Motoren über das Arduino Board steuern zu können, wird die H-Brücke L298N benötigt. Das Bauteil ist in der Lage zwei DC-Motoren mit einer Spannung von bis zu 46 V zu versorgen. Für die verwendeten Motoren sind allerdings lediglich 9 V notwendig. Über die Anschlüsse 1, 2, wird ein erster und über die Anschlüsse 13 und 14 ein zweiter Gleichstrommotor angeschlossen. Gleichzeitig wird über die über die selben Anschlüsse die Drehrichtung der Motoren bestimmt. Dies geschieht in Abhängigkeit zu den digitalen Pins 8 - 11. Durch unterschiedliche Kombinationen aus "LOW" und "HIGH" drehen die Motoren entweder Vor- oder Rückwärts. Durch die Anschlüsse 7 und 12 können die Gleichstrommotoren durch eine PWM gesteuert werden. Über die Anschlüsse 4 und 5 wird die H-Brücke selbst mit Spannung versorgt. Darüber hinaus besteht die Möglichkeit über Anschluss 6 einen Mikrocontroller mit 5 V zu versorgen. | |||
Um die Motoren über das Arduino Board steuern zu können, wird die H-Brücke L298N benötigt. Das Bauteil ist in der Lage zwei DC-Motoren mit einer Spannung von bis zu 46 V zu versorgen. Für die verwendeten Motoren sind allerdings lediglich 9 V notwendig | [[Datei:L298 Nummern.jpg|300px|thumb|rechts|Abbildung 6: Pinbelegung der H-Brücke L298N [2]]] | ||
{| class="mw-datatable" | {| class="mw-datatable" | ||
! style="font-weight: bold;" | Anschlussnummer | ! style="font-weight: bold;" | Anschlussnummer | ||
! style="font-weight: bold;" | Funktion | ! style="font-weight: bold;" | Funktion | ||
|- | |- | ||
| 1 | | 1<br/> || Anschluss für den Gleichstrommotor 1 "+"<br/> | ||
|- | |- | ||
| 2<br/> || Anschluss für den Gleichstrommotor 1 "-"<br/> | |||
|- | |- | ||
| | | 4<br/> || Eingang für die Spannungsversorgung der H-Brücke<br/> | ||
|- | |- | ||
| 5<br/> || Eingang für GND<br/> | |||
|- | |- | ||
| | | 6<br/> || 5 V Ausgang<br/> | ||
|- | |- | ||
| 7<br/> || Pin zur Steuerung von Gleichstrommotor 1 über PWM<br/> | |||
|- | |- | ||
| | | 8, 9<br/> || Steuerung von Gleichstrommotor 1<br/> | ||
|- | |- | ||
| | | 10, 11<br/> || Steuerung von Gleichstrommotor 2<br/> | ||
|- | |- | ||
| | | 12<br/> ||Pin zur Steuerung Gleichstrommotor 2 über PWM<br/> | ||
|- | |- | ||
| | | 13<br/> || Anschluss für den Gleichstrommotor 2 "+"<br/> | ||
|- | |- | ||
| | | 14<br/> || Anschluss für den Gleichstrommotor 2 "-"<br/> | ||
|} | |} | ||
<br/> | |||
===Arduino Mega 2560=== | |||
[[Datei:Arduino MEGA 2560.jpg|300px|thumb|rechts|Abbildung 7: Arduino MEGA 2560[3]]] | |||
Der Arduino Mega ist ein Mikrocontroller auf Basis des ATmega2560-Mikrocontrollers vom Hersteller Arduino. Das Board verfügt über 54 digitale Ein- oder Ausgänge von denen 15 als PWM-Ausgänge verwendet werden können. Zusätzlich verfügt der Mikrocontroller über 16 analoge Pins, 4 serielle Anschlüsse und einen USB-Anschluss um die Datenverbindung mit einem Rechner zu gewährleisten. | |||
<br/><br/><br/><br/><br/><br/><br/> | |||
===Kippschlater=== | |||
[[Datei:Schalter.jpg|300px|thumb|rechts|Abbildung 8: Kippschalter zum ein- und ausschalten[4]]] | |||
Um das Arduino Mini-Segway ein- und ausschalten zu können, wird ein Kippschalter verwendet. Dieser wird direkt in die Leitung zur Stromversorgung des Systems eingesetzt. Durch betätigen des Kippschalters wird so die Spannungsversorgung entweder unterbrochen, oder erfolgen. | |||
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> | <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> | ||
== Verwendete Software == | == Verwendete Software == | ||
Für das ganze Projekt wird Simulink und die Simulink-Erweiterung, '''Stateflow'''. Denn bei Simulink ist es möglich, die Parameter des Programms während seiner Ausführung durch die Funktion " Monitor and Tune" zu verändern. Dies ist sehr hilfreich, wenn ein Regler im System benötigt wird. | |||
===Simulink=== | ===Simulink=== | ||
Bei Simulink wird die Bibliothek "Simulink Support Package for Arduino Hardware" benutzt, welche ermöglicht durch Blöcke von Simulink die Pins von Arduino anzusteuern und einzustellen. | |||
Simulink ermöglicht die modellbasierte Programmierung. Diese passt dann sehr gut zu unserem Projekt, da dadurch Signale schnell verarbeitet und dargestellt werden können. Das Projekt benötigt auch ein PID-Regler, welches durch die Funktion "Monitor and Tune" von Simulink während der Programmausführung anpasst werden kann. Dadurch kann viel Zeit bei der Anpassung der Parameter KP, KD und KI gespart werden. | |||
=== Stateflow=== | |||
Stateflow ermöglicht ein System durch Zustandsautomaten zu betreiben. Unser System benutzt Zustandsautomaten, da die Motoren unterschiedliche Kombinationen digitaler Signale für die Wahl der Antriebsrichtung benötigen. | |||
== Umsetzung (HW/SW) == | == Umsetzung (HW/SW) == | ||
===Hardware=== | ===Hardware=== | ||
Als Grundgerüst für das Arduino Mini-Segway wird das "Zwei Ebenen Chassis mit 2-Motoren - Smart Car" [5] des Herstellers Funduino verwendet. Durch die zentrierte Positionierung der Motoren und Räder unterhalb der ersten Ebene eignet sich das Set gut als Rahmen für das Mini-Segway. Auf der unteren Ebene wird der Beschleunigungssensor MPU6050 montiert. Die H-Brücke zur Steuerung der DC-Motoren befindet sich auf der Unterseite der zweiten Ebene. Der Mikrocontroller, Arduino Mega 2560, wird auf der Oberseite der zweiten Ebene angebracht um ein leichtes bedienen des Mikrocontrollers zu ermöglichen. | |||
Um eine Kommunikation zwischen Arduino Mikrocontroller und Beschleunigungssensor MPU5060 zu gewährleisten werden dazu die SDA und SCL Anschlüsse der beiden Bauteile miteinander verbunden. Vom Mikrocontroller ausgehend werden ebenfalls die Digitalen Pins 2 und 3 mit den PWM-fähigen Anschlüssen der H-Brücke verbunden. Dadurch können die DC-Motoren präzise angesteuert werden. Zusätzlich werden die Pins 8 - 11 vom Mikrocontroller mit den Anschlüssen 8 - 11 der H-Brücke verbunden. Diese Verbindungen ermöglichen die Steuerung der Drehrichtungen an den DC-Motoren.<br/> | |||
Unter Zuhilfenahme eines Netzteils mit Transformator wird die H-Brücke mit Spannung versorgt. Der Arduino Mega bezieht die benötigte Versorgungsspannung ebenfalls von der H-Brücke, da diese durch Anschluss 6 über einen 5 V Ausgang verfügt.<br/> | |||
Das Mini-Segway wird zum Schluss in ein Gehäuse aus Karton Eingehaust um die Bauteile vor äußeren Einflüssen zu schützen. | |||
<gallery widths="250" heights="270" perrow="3"> | |||
Mini-Segway_Draufsicht.jpg|Abbildung 9: Draufsicht des Mini-Segways[5] | |||
Mini-Segway Vorderansicht.jpg|Abbildung 10: Vorderansicht des Mini-Segways[5] | |||
Mini-Segway Innen.jpg| Abbildung 11: Ansicht auf MPU5060 & H-Brücke[5] | |||
</gallery> | |||
===Software=== | ===Software=== | ||
Die verwendete Software ist als Simulink Modell (siehe Abbildung 12) aufgebaut. Zuerst werden die Messwerte des Beschleunigungssensors durch den Block ausgelesen (siehe Abbildung 13). Der Block des MPU6050 liefert vier unterschiedliche Ausgabewerte. Für das Projekt des Arudino Mini-Segways ist aber lediglich die Winkelgeschwindigkeit um die y-Achse von Relevanz. Um den Winkel zu berechnen wird die Winkelgeschwindigkeit durch den Integrator-Block integriert. Die gemessene Winkelgeschwindigkeit und der berechnete Winkel werden daraufhin an den PID-Regler übergeben (siehe Abbildung 14). Um das Rauschen des Beschleunigungssensors zu entfernen, muss die gemessene Winkelgeschwindigkeit vor der Weiterverarbeitung gefiltert werden. | |||
<br/> | |||
Um die Fahrtrichtung des Segways zu bestimmen, benötigt der Zustandsautomat zwei Ereignisse (digitale Signale) um unterscheiden zu können in welche Richtung gefahren werden muss. Durch das Subsystem in Abbildung 15, wird geprüft, welches Vorzeichen die Stellgröße am Ausgang des PID-Reglers aufweist. Ist der Wert > 0, wird PHI_V auf 1 und PHI_R auf 0 gesetzt. Sollte der Wert jedoch < 0 sein, wird PHI_V auf 0 und PHI_R auf 1 gesetzt. Diese Werte werden als Ereignisse für den Zustandsautomaten (siehe Abbildung 16) zur Verfügung gestellt. Im Zustandsautomaten durchläuft das Programm am Anfang einen Kalibrierungszustand, in dem das Programm kurz pausiert, sodass der gewünschte Sollwinkel eingestellt werden kann. Ist der durch den Timer-Baustein gegebene Timer abglaufen, wechselt das Programm in den Superstate "Fahren". Hier wird nun auf Basis von PHI_V und PHI_R die Fahrtrichtung bestimmt. Das State-Flow Diagram funktioniert durch Ereignisse und ist auf steigende Flanken gestellt. Sobald die Fahrtrichtung feststeht, werden die digitalen Signale, die für die Richtung zuständig sind, an den Arudino übermittelt (siehe Abbildung 17). Zusätzlich zu den digitalen Signalen der Fahrtrichtung wird ebenfalls das Signal zur PWM-Steuerung an den Arduino gesendet. | |||
<gallery widths="250" heights="120" perrow="6"> | |||
Simulink Modell Hauptsicht.png|Abbildung 12: Simulink Modell[5] | |||
Messung Gyro.png|Abbildung 13: Messung und Umrechnung der Werte des Beschleunigungssensors[5] | |||
PID Regler.png|Abbildung 14: eingestellter PID-Regler[5] | |||
Verarbeitung Ereignise phi.png|Abbildung 15: Verarbeitung des gemessenen Winkels zur Entscheidung der Drehrichtung der DC-Motoren[5] | |||
Zustandsautomat Richtung DC.png|Abbildung 16: Zustandsautomat für die Drehrichtung der DC-Motoren[5] | |||
Output Signale.png|Abbildung 17: Übergabe der Ausgangssignale an den Arduino[5] | |||
</gallery> | |||
== Komponententest == | == Komponententest == | ||
Bevor die einzelnen Bauteile im eingebetteten System in Betrieb genommen werden, werden zunächst alle Bauteile auf ihre Funktionsfähigkeit überprüft. | |||
===H-Brücke L298N=== | |||
====Prüfung auf Funktionalität==== | |||
Durch eine Versorgungsspannung von 12 V wird an den Anschlüssen geprüft, wie viel Spannung an den Anschlüssen abgegeben wird. Die Tests ergeben, dass bei eine Eingangsspannung von 12 V ungefähr 9 V an den Ausgängen für die DC-Motoren abgegeben werden. Für die verwendeten DC-Motoren eignet sich diese Spannung, ohne die DC-Motoren im Betrieb bei voller Belastung zu beschädigen. <br/> | |||
Im darauffolgenden Test wird überprüft, ob die Anschlüsse für die PWM-Steuerung funktionsfähig sind. Um dies zu überprüfen wird ein Motor an die Ausgänge der H-Brücke angeschlossen und eine PWM von 0 - 255 in zehner Schritten an das Modul gesendet. Dieser Test ergibt, dass die H-Brücke in der Lage ist, die Leistung an den DC-Motoren durch ein PWM-Signal zu steuern.<br/> | |||
===DC-Motoren=== | |||
====Prüfung auf Funktionalität==== | |||
Durch die Tests der H-Brücke ist festzustellen, dass die Motoren erst bei einem PWM-Signal von etwa 50 reagieren. Durch die Implementierung eines PID-Regler ist dieser Effekt allerdings zu vernachlässigen, da der PID-Regler die Steuerung übernimmt. <br/> | |||
===Beschleunigungssensor MPU6050=== | |||
====Prüfung auf Funktionalität==== | |||
Durch den Block des MPU6050 aus der Simulink-Bibliothek "Simulink Support Package for Arduino Hardware/Sensors" wird die Funktionalität des Beschleunigungssensors überprüft. Es kann festgestellt werden, dass der verwendete Sensor sehr sensibel ist und auf kleinste Änderungen reagiert. | |||
== Ergebnis == | == Zusammenfassung == | ||
=== Ergebnis === | |||
Das Projekt "Arduino Mini-Segway" konnte erfolgreich umgesetzt werden, da die zu Beginn an das Projekt gestellten Anforderungen erfüllt werden konnten. Durch die PID-Regelung stellt sich nach kurzer Zeit ein gutes Regelverhalten ein, wodurch sich das Segway von selbst stabilisiert und selbst beim Einwirken von äußeren Kräften stabil bleibt. Durch die H-Brücke können beide DC-Motoren gut gesteuert werden. Um das Projekt weiter verbessern zu können, könnte in Zukunft ein Joystick für das Fahren und Lenken des Segways verwendet werden. | |||
=== Lessons Learned === | === Lessons Learned === | ||
====Vertiefte Kenntnisse aus dem Studium==== | |||
-'''Mess- und Regelungstechnik:''' Implementierung und Einstellung eines PID-Reglers<br/> | |||
-'''Softwarearchitektur:''' Zustandsautomat durch Stateflow<br/> | |||
-'''GET:''' Ansteuern von Sensoren und Aktoren | |||
<br/> | |||
====Herausforderungen des Projektes==== | |||
-'''DC-Motoren:''' allgemein lässt sich sagen, dass DC-Motoren sehr ungenau sind. Es ist zu empfehlen, Schrittmotoren zu verwenden. | |||
-'''MPU6050:'''Verbindung zwischen Sensor und Arduino ist stabil, solange keine plötzlichen, großen Winkeländerungen auftreten. Andernfalls wird der Arduino neu gestartet. | |||
== Projektunterlagen == | == Projektunterlagen == | ||
=== Projektplan === | === Projektplan === | ||
[https://svn.hshl.de/svn/Elektrotechnik_Fachpraktikum/trunk/Projekte/Arduino_Mini_Segway/ SVN Ordner ] | |||
=== Projektdurchführung === | === Projektdurchführung === | ||
====Fritzing Beschaltungsplan==== | |||
[[Datei:Fritzing Segway.png|500px|thumb|links|Abbildung 18: Fritzing Beschaltungsplan [5]]] | |||
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> | |||
== YouTube Video == | == YouTube Video == | ||
[https://youtu.be/RwlAGFeflb8 Link zum Youtube Video] | |||
== Literatur == | == Literatur == | ||
[1] Elementzonline:moduleMPU6050 MPU-6050 GY-521 3 Axis analog gyro sensor + 3 Axis Accelerometer Module. URL: https://www.elementzonline.com/mpu6050-gy-521-3-axis-analog-gyro-sensors-accelerometer-module?search=mpu%206050&description=true <br/> | |||
[2] Funduino: Nr. 34 – Motoren mit H-Brücke L298N ansteuern. URL: https://funduino.de/nr-34-motoren-mit-h-bruecke-l298n-ansteuern <br/> | |||
[3] Amazon: Arduino ARD-A000067 Mega2560 Rev3 Microcontroller Board. URL: https://www.amazon.de/Arduino-ATmega2560-Mikroprozessor-Datenblatt-REV3-Arduino-ard-a000067/dp/B00QAH9M06/ref=asc_df_B00QAH9M06/?tag=googshopde-21&linkCode=df0&hvadid=232121216851&hv…<br/> | |||
[4] Sven Posner<br/> | |||
[5] Eigene Darstellungen <br/> | |||
Aktuelle Version vom 21. Januar 2021, 15:42 Uhr
Autoren: Manfred Listner, Patricio Emiliano Hernandez Murga
Betreuer: Prof. Schneider
→ zurück zur Übersicht: WS 20/21: Fachpraktikum Elektrotechnik (MTR)
Einleitung
Dieser Artikel beschreibt die Erstellung eines Arduino gesteuerten Mini-Segways. Das Projekt wird als Teil des GET-Fachpraktikums im fünften Fachsemester im Studiengang Mechatronik durchgeführt. Das Mini-Segway soll über zwei Motoren und einen Lagesensor stabilisiert werden. Die Stabilisierung erfolgt über eine Regelschleife. Die Regelung selbst übernimmt dabei eine PID-Regelung. Der Lagesensor dient hierbei als Messeinrichtung und ermittelt die Winkelabweichungen. Durch die gemessenen Winkelabweichungen wird durch die PID-Regelung die Beschleunigung an den Motoren gesteuert, sodass sich das Mini-Segway von selbst stabilisiert.
Anforderungen
Allgemein
Das Mini-Segway muss dazu in der Lage sein, Winkeländerungen zu erkennen, um diesen entgegen wirken zu können. Bei Änderungen der Lage des Schwerpunktes, z.B. durch hinzufügen von Gewichten, muss das Mini-Segway sich automatisch stabilisieren können.
Elektronik und Steuerung
Die Prüfung des Winkels soll über ein Gyroskop erfolgen. Die Änderung des Winkels wird anschließend vom Arduino Mikrocontroller ausgewertet. Durch eine Regelschleife sollen dann die beiden Motoren über den Mikrocontroller angesteuert werden, sodass sich das Mini-Segway wieder ausbalanciert. Zur Ausgabe von Daten soll zusätzlich ein LCD-Display angeschlossen werden.
Funktionaler Systementwurf/Technischer Systementwurf
Das Arduino Mini-Segway verfügt über einen Segway-Körper an dem ein Gyroskop montiert sein soll.
Zusätzlich sollen zwei DC-Motoren die Räder
unter dem Segway-Körper antreiben, sodass der Körper in vertikaler Position stabilisiert werden kann.
Der Regelkreis erhält als Eingabe einen Sollwinkel welcher vom Regler verarbeitet wird. Der Motor fungiert als Steller und wirkt eine Kraft auf das System "Segway" aus. Als Messeinrichtung dient ein Gyroskop. Dieser Sensor führt den gemessenen Winkel an den Regler zurück, sodass die vorhandene Winkelabweichung bestimmt und dem Regler erneut zugeführt werden kann.
Komponentenspezifikation
Beschleunigungssensor MPU-6050
Der Beschleunigungssensor MPU-6050 ist ein Sensor der die Beschleunigung um die x-, y- und z-Achse ermittelt. Die Kommunikation mit dem Mikrocontroller erfolgt über eine I2C Schnittstelle. Dafür sind die Anschlüsse SDA und SCL zuständig. Über diese Schnittstelle können die ermittelten Daten des Sensors ausgelesen und weiterverarbeitet werden. Die Anschlüsse VCC und GND sorgen für die Spannungsversorgung des Sensors mit entweder 3,3 V oder 5 V Spannung.
DC-Motoren
Zur Bewegung des Arduino Mini-Segways werden zwei DC-Motoren verwendet. Die Motoren verfügen jeweils über eine Spule durch die ein Magnetfeld erzeugt wird. Je nach Polung an den Eingängen des Motors kann so eine Drehung im, oder gegen den Uhrzeigersinn erzeugt werden. Diese Rotation wird daraufhin über ein Getriebe an die Räder übertragen.
H-Brücke L298N
Um die Motoren über das Arduino Board steuern zu können, wird die H-Brücke L298N benötigt. Das Bauteil ist in der Lage zwei DC-Motoren mit einer Spannung von bis zu 46 V zu versorgen. Für die verwendeten Motoren sind allerdings lediglich 9 V notwendig. Über die Anschlüsse 1, 2, wird ein erster und über die Anschlüsse 13 und 14 ein zweiter Gleichstrommotor angeschlossen. Gleichzeitig wird über die über die selben Anschlüsse die Drehrichtung der Motoren bestimmt. Dies geschieht in Abhängigkeit zu den digitalen Pins 8 - 11. Durch unterschiedliche Kombinationen aus "LOW" und "HIGH" drehen die Motoren entweder Vor- oder Rückwärts. Durch die Anschlüsse 7 und 12 können die Gleichstrommotoren durch eine PWM gesteuert werden. Über die Anschlüsse 4 und 5 wird die H-Brücke selbst mit Spannung versorgt. Darüber hinaus besteht die Möglichkeit über Anschluss 6 einen Mikrocontroller mit 5 V zu versorgen.
Anschlussnummer | Funktion |
---|---|
1 |
Anschluss für den Gleichstrommotor 1 "+" |
2 |
Anschluss für den Gleichstrommotor 1 "-" |
4 |
Eingang für die Spannungsversorgung der H-Brücke |
5 |
Eingang für GND |
6 |
5 V Ausgang |
7 |
Pin zur Steuerung von Gleichstrommotor 1 über PWM |
8, 9 |
Steuerung von Gleichstrommotor 1 |
10, 11 |
Steuerung von Gleichstrommotor 2 |
12 |
Pin zur Steuerung Gleichstrommotor 2 über PWM |
13 |
Anschluss für den Gleichstrommotor 2 "+" |
14 |
Anschluss für den Gleichstrommotor 2 "-" |
Arduino Mega 2560
Der Arduino Mega ist ein Mikrocontroller auf Basis des ATmega2560-Mikrocontrollers vom Hersteller Arduino. Das Board verfügt über 54 digitale Ein- oder Ausgänge von denen 15 als PWM-Ausgänge verwendet werden können. Zusätzlich verfügt der Mikrocontroller über 16 analoge Pins, 4 serielle Anschlüsse und einen USB-Anschluss um die Datenverbindung mit einem Rechner zu gewährleisten.
Kippschlater
Um das Arduino Mini-Segway ein- und ausschalten zu können, wird ein Kippschalter verwendet. Dieser wird direkt in die Leitung zur Stromversorgung des Systems eingesetzt. Durch betätigen des Kippschalters wird so die Spannungsversorgung entweder unterbrochen, oder erfolgen.
Verwendete Software
Für das ganze Projekt wird Simulink und die Simulink-Erweiterung, Stateflow. Denn bei Simulink ist es möglich, die Parameter des Programms während seiner Ausführung durch die Funktion " Monitor and Tune" zu verändern. Dies ist sehr hilfreich, wenn ein Regler im System benötigt wird.
Simulink
Bei Simulink wird die Bibliothek "Simulink Support Package for Arduino Hardware" benutzt, welche ermöglicht durch Blöcke von Simulink die Pins von Arduino anzusteuern und einzustellen. Simulink ermöglicht die modellbasierte Programmierung. Diese passt dann sehr gut zu unserem Projekt, da dadurch Signale schnell verarbeitet und dargestellt werden können. Das Projekt benötigt auch ein PID-Regler, welches durch die Funktion "Monitor and Tune" von Simulink während der Programmausführung anpasst werden kann. Dadurch kann viel Zeit bei der Anpassung der Parameter KP, KD und KI gespart werden.
Stateflow
Stateflow ermöglicht ein System durch Zustandsautomaten zu betreiben. Unser System benutzt Zustandsautomaten, da die Motoren unterschiedliche Kombinationen digitaler Signale für die Wahl der Antriebsrichtung benötigen.
Umsetzung (HW/SW)
Hardware
Als Grundgerüst für das Arduino Mini-Segway wird das "Zwei Ebenen Chassis mit 2-Motoren - Smart Car" [5] des Herstellers Funduino verwendet. Durch die zentrierte Positionierung der Motoren und Räder unterhalb der ersten Ebene eignet sich das Set gut als Rahmen für das Mini-Segway. Auf der unteren Ebene wird der Beschleunigungssensor MPU6050 montiert. Die H-Brücke zur Steuerung der DC-Motoren befindet sich auf der Unterseite der zweiten Ebene. Der Mikrocontroller, Arduino Mega 2560, wird auf der Oberseite der zweiten Ebene angebracht um ein leichtes bedienen des Mikrocontrollers zu ermöglichen.
Um eine Kommunikation zwischen Arduino Mikrocontroller und Beschleunigungssensor MPU5060 zu gewährleisten werden dazu die SDA und SCL Anschlüsse der beiden Bauteile miteinander verbunden. Vom Mikrocontroller ausgehend werden ebenfalls die Digitalen Pins 2 und 3 mit den PWM-fähigen Anschlüssen der H-Brücke verbunden. Dadurch können die DC-Motoren präzise angesteuert werden. Zusätzlich werden die Pins 8 - 11 vom Mikrocontroller mit den Anschlüssen 8 - 11 der H-Brücke verbunden. Diese Verbindungen ermöglichen die Steuerung der Drehrichtungen an den DC-Motoren.
Unter Zuhilfenahme eines Netzteils mit Transformator wird die H-Brücke mit Spannung versorgt. Der Arduino Mega bezieht die benötigte Versorgungsspannung ebenfalls von der H-Brücke, da diese durch Anschluss 6 über einen 5 V Ausgang verfügt.
Das Mini-Segway wird zum Schluss in ein Gehäuse aus Karton Eingehaust um die Bauteile vor äußeren Einflüssen zu schützen.
-
Abbildung 9: Draufsicht des Mini-Segways[5]
-
Abbildung 10: Vorderansicht des Mini-Segways[5]
-
Abbildung 11: Ansicht auf MPU5060 & H-Brücke[5]
Software
Die verwendete Software ist als Simulink Modell (siehe Abbildung 12) aufgebaut. Zuerst werden die Messwerte des Beschleunigungssensors durch den Block ausgelesen (siehe Abbildung 13). Der Block des MPU6050 liefert vier unterschiedliche Ausgabewerte. Für das Projekt des Arudino Mini-Segways ist aber lediglich die Winkelgeschwindigkeit um die y-Achse von Relevanz. Um den Winkel zu berechnen wird die Winkelgeschwindigkeit durch den Integrator-Block integriert. Die gemessene Winkelgeschwindigkeit und der berechnete Winkel werden daraufhin an den PID-Regler übergeben (siehe Abbildung 14). Um das Rauschen des Beschleunigungssensors zu entfernen, muss die gemessene Winkelgeschwindigkeit vor der Weiterverarbeitung gefiltert werden.
Um die Fahrtrichtung des Segways zu bestimmen, benötigt der Zustandsautomat zwei Ereignisse (digitale Signale) um unterscheiden zu können in welche Richtung gefahren werden muss. Durch das Subsystem in Abbildung 15, wird geprüft, welches Vorzeichen die Stellgröße am Ausgang des PID-Reglers aufweist. Ist der Wert > 0, wird PHI_V auf 1 und PHI_R auf 0 gesetzt. Sollte der Wert jedoch < 0 sein, wird PHI_V auf 0 und PHI_R auf 1 gesetzt. Diese Werte werden als Ereignisse für den Zustandsautomaten (siehe Abbildung 16) zur Verfügung gestellt. Im Zustandsautomaten durchläuft das Programm am Anfang einen Kalibrierungszustand, in dem das Programm kurz pausiert, sodass der gewünschte Sollwinkel eingestellt werden kann. Ist der durch den Timer-Baustein gegebene Timer abglaufen, wechselt das Programm in den Superstate "Fahren". Hier wird nun auf Basis von PHI_V und PHI_R die Fahrtrichtung bestimmt. Das State-Flow Diagram funktioniert durch Ereignisse und ist auf steigende Flanken gestellt. Sobald die Fahrtrichtung feststeht, werden die digitalen Signale, die für die Richtung zuständig sind, an den Arudino übermittelt (siehe Abbildung 17). Zusätzlich zu den digitalen Signalen der Fahrtrichtung wird ebenfalls das Signal zur PWM-Steuerung an den Arduino gesendet.
-
Abbildung 12: Simulink Modell[5]
-
Abbildung 13: Messung und Umrechnung der Werte des Beschleunigungssensors[5]
-
Abbildung 14: eingestellter PID-Regler[5]
-
Abbildung 15: Verarbeitung des gemessenen Winkels zur Entscheidung der Drehrichtung der DC-Motoren[5]
-
Abbildung 16: Zustandsautomat für die Drehrichtung der DC-Motoren[5]
-
Abbildung 17: Übergabe der Ausgangssignale an den Arduino[5]
Komponententest
Bevor die einzelnen Bauteile im eingebetteten System in Betrieb genommen werden, werden zunächst alle Bauteile auf ihre Funktionsfähigkeit überprüft.
H-Brücke L298N
Prüfung auf Funktionalität
Durch eine Versorgungsspannung von 12 V wird an den Anschlüssen geprüft, wie viel Spannung an den Anschlüssen abgegeben wird. Die Tests ergeben, dass bei eine Eingangsspannung von 12 V ungefähr 9 V an den Ausgängen für die DC-Motoren abgegeben werden. Für die verwendeten DC-Motoren eignet sich diese Spannung, ohne die DC-Motoren im Betrieb bei voller Belastung zu beschädigen.
Im darauffolgenden Test wird überprüft, ob die Anschlüsse für die PWM-Steuerung funktionsfähig sind. Um dies zu überprüfen wird ein Motor an die Ausgänge der H-Brücke angeschlossen und eine PWM von 0 - 255 in zehner Schritten an das Modul gesendet. Dieser Test ergibt, dass die H-Brücke in der Lage ist, die Leistung an den DC-Motoren durch ein PWM-Signal zu steuern.
DC-Motoren
Prüfung auf Funktionalität
Durch die Tests der H-Brücke ist festzustellen, dass die Motoren erst bei einem PWM-Signal von etwa 50 reagieren. Durch die Implementierung eines PID-Regler ist dieser Effekt allerdings zu vernachlässigen, da der PID-Regler die Steuerung übernimmt.
Beschleunigungssensor MPU6050
Prüfung auf Funktionalität
Durch den Block des MPU6050 aus der Simulink-Bibliothek "Simulink Support Package for Arduino Hardware/Sensors" wird die Funktionalität des Beschleunigungssensors überprüft. Es kann festgestellt werden, dass der verwendete Sensor sehr sensibel ist und auf kleinste Änderungen reagiert.
Zusammenfassung
Ergebnis
Das Projekt "Arduino Mini-Segway" konnte erfolgreich umgesetzt werden, da die zu Beginn an das Projekt gestellten Anforderungen erfüllt werden konnten. Durch die PID-Regelung stellt sich nach kurzer Zeit ein gutes Regelverhalten ein, wodurch sich das Segway von selbst stabilisiert und selbst beim Einwirken von äußeren Kräften stabil bleibt. Durch die H-Brücke können beide DC-Motoren gut gesteuert werden. Um das Projekt weiter verbessern zu können, könnte in Zukunft ein Joystick für das Fahren und Lenken des Segways verwendet werden.
Lessons Learned
Vertiefte Kenntnisse aus dem Studium
-Mess- und Regelungstechnik: Implementierung und Einstellung eines PID-Reglers
-Softwarearchitektur: Zustandsautomat durch Stateflow
-GET: Ansteuern von Sensoren und Aktoren
Herausforderungen des Projektes
-DC-Motoren: allgemein lässt sich sagen, dass DC-Motoren sehr ungenau sind. Es ist zu empfehlen, Schrittmotoren zu verwenden. -MPU6050:Verbindung zwischen Sensor und Arduino ist stabil, solange keine plötzlichen, großen Winkeländerungen auftreten. Andernfalls wird der Arduino neu gestartet.
Projektunterlagen
Projektplan
Projektdurchführung
Fritzing Beschaltungsplan
YouTube Video
Literatur
[1] Elementzonline:moduleMPU6050 MPU-6050 GY-521 3 Axis analog gyro sensor + 3 Axis Accelerometer Module. URL: https://www.elementzonline.com/mpu6050-gy-521-3-axis-analog-gyro-sensors-accelerometer-module?search=mpu%206050&description=true
[2] Funduino: Nr. 34 – Motoren mit H-Brücke L298N ansteuern. URL: https://funduino.de/nr-34-motoren-mit-h-bruecke-l298n-ansteuern
[3] Amazon: Arduino ARD-A000067 Mega2560 Rev3 Microcontroller Board. URL: https://www.amazon.de/Arduino-ATmega2560-Mikroprozessor-Datenblatt-REV3-Arduino-ard-a000067/dp/B00QAH9M06/ref=asc_df_B00QAH9M06/?tag=googshopde-21&linkCode=df0&hvadid=232121216851&hv…
[4] Sven Posner
[5] Eigene Darstellungen
→ zurück zur Übersicht: WS 20/21: Fachpraktikum Elektrotechnik (MTR)