Balance Bot: Unterschied zwischen den Versionen
(9 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Projekte]] | |||
[[Kategorie:ProjekteET_MTR_BSE_WS2021]] | |||
<!-- --> | |||
[[Datei:Rendering.JPG|500px|thumb|right|Rendering des Balance-Bots]] | |||
[[Datei:BalanceBot.jpg|500px|thumb|right|BalanceBot]] | |||
'''Autoren: [[Benutzer: Moritz-Ben-Joe Kühnrich|Moritz Kühnrich]] & [[Benutzer: Daniel Klassen|Daniel Klassen]]''' <br/> | |||
'''Betreuer: [[Benutzer:Prof._Mirek_Göbel| Prof. Göbel]]''' <br/> | |||
→ zurück zur Übersicht: [[:Kategorie:ProjekteET_MTR_BSE_WS2021|WS 21/22: Angewandte Elektrotechnik]] | |||
==Einleitung== | ==Einleitung== | ||
Der | Das „BalanceBot“-Projekt wurde im Rahmen des GET-Fachpraktikums im 5.Fachsemester des Studienganges Mechatronik absolviert. Die Grundlagen und Kenntnisse aus verschiedenen Vorlesungen, besonders aus Mess- und Regelungstechnik und anderen Praktika, die bereits absolviert wurden, sollen dabei eingesetzt und vertieft werden. Außerdem stehen die Planung, das eigenständige Durchführen und die Dokumentation eines selbst ausgewählten Projektes im Vordergrund, sodass nach Abschluss des Projektes ein Entwicklungsprozess durchlaufen wurde. | ||
Der BalanceBot vereint, passend zum Studiengang Mechatronik, Mechanik, Elektronik und Informatik in einem Projekt und wird im Folgenden erläutert. | |||
Der BalanceBot ist ein kleiner zweirädriger Roboter, der das Ziel hat mithilfe der eingebauten elektronischen Bauteile, durch die Ansteuerung der zwei Motoren, die jeweils ein Rad antreiben, im Gleichgewicht zu bleiben und gerade auf der Stelle zu stehen. | |||
==Anforderungen== | |||
Nach dem Anschalten des BalanceBot, soll der Roboter auf der Stelle stehen bzw. balancieren ohne zu kippen, indem die Räder in die entsprechende Richtung angetrieben werden. Nach Einwirkung äußerer Kraft durch leichtes anstoßen des Roboters, soll dieser wieder in die Ausgangslage zurückkehren und weiter auf der Stelle das Gleichgewicht halten. | |||
==Funktionaler Systementwurf/Technischer Systementwurf== | |||
Nach der Ideenfindung wurde mit einer ersten Skizze begonnen, um grob abzuschätzen mit welchem Verfahren die mechanischen und elektronischen Bauteile gefertigt und angeordnet werden. Die elektronischen Bauteile sollen bei voller technischer Funktion im Design versteckt sein. Als Trägheit, die den Roboter aus dem Gleichgewicht bringen soll, sind entweder ein Akku, der gleichzeitig Energie für den Roboter bereitstellt, denkbar, oder (bei Netzbetrieb) eine andere Art von Gewicht. | |||
<br> | <br> | ||
<gallery widths="200" heights="200"> | |||
Bild:ErsteSkizze.jpg|Erste Skizze | |||
Bild:ErsterSystementwurf.jpg|Erster Systementwurf</gallery> | |||
== | ==Komponentenspezifikation== | ||
[[Datei:Kostenkalkulation.jpg|thumb|right|Aufstellung der Kosten der verwendeten Bauteile]] | |||
===Mechanische Komponenten=== | |||
# Zwei selbstgestaltete Felgen (3D-Druck, ca. 110g PLA) | |||
# Selbstgestaltetes Grundgestell (3D-Druck, ca. 70g PLA) | |||
# M3 x 5mm Schrauben zur Befestigung der Motoren und der Leiterplatte an das Grundgestell | |||
# Kabelbinder zur Befestigung des Gewichtes/Akkus an das Grundgestell | |||
# Anti-Rutschmatte-Streifen als Reifen | |||
===Elektrische Komponenten=== | |||
# 2x Nema-17 Schrittmotoren (17HS4023) als Antrieb für den BalanceBot | |||
# 5cm x 7cm Leiterplatte als Träger für die elektrische Schaltung | |||
# 2x DRV-8825 Stepper Treiber als Ansteuerung für die beiden Motoren | |||
# MPU-6050 Gyro-Sensor zur Messung des Neigungswinkels und der Gierrate des Roboters | |||
# Arduino Nano Mikrocontroller | |||
# 100 µF Kondensator als Bauteilschutz | |||
# 12V/1A Netzteil | |||
==Umsetzung (HW/SW)== | |||
Generell wichtig bei der Umsetzung der Bauteile war, vorhandene Materialien zu verwenden und diese so zu verarbeiten, dass diese möglichst über das Projekt hinaus wiederverwendet werden können. Im folgenden wird auf die Umsetzung eingegangen. | |||
===Hardware=== | |||
Da zwei 3D-Drucker zur Verfügung stehen, wurden die mechanischen Bauteile mit diesen gefertigt. Durch das Verfahren ist ein großer Gestaltungsfreiraum gegeben, der bei der Konstruktion in SolidWorks voll ausgenutzt wurde. Das Design der Felgen erfolgte selbständig in Anlehnung an das ikonische Design der "MAE Crown Jewel"-Felge. Bei der Konstruktion des Grundgestells und der Felgen mussten die Maße des zuvor gewählten Motors berücksichtigt werden, um passende Anschraubpunkte am Grundgestell und Wellenaufnahmen an den Felgen zu realisieren. Bei der Konstruktion des Grundgestells wurde zusätzlich an der Unterseite eine Aufnahme für die Leiterplatte, auf der sich die elektrischen Bauteile befinden realisiert. Um fehlerhafte Drucke, aufgrund von nicht berücksichtigten Maßen zu vermeiden, wurden die einzelnen Bauteile in SolidWorks zu einer Baugruppe zusammengefügt. Entsprechende Modelle z.B. für die Motoren wurden aus dem Internet bezogen, sodass sichergestellt werden konnte, dass die Bauteile passen werden. Die CAD-Modelle wurden anschließend in einer Slicer-Software für den Druck vorbereitet. | |||
Nach Eintreffen aller bestellten Komponenten und einer Druckzeit von insgesamt etwa 20 Stunden konnte mit dem mechanischen Aufbau begonnen werden. Dazu musste zuerst das angefallene Supportmaterial von den gedruckten Teilen entfernt werden. Die Motoren sind mit jeweils vier M3 x 5mm Schrauben am Grundgestell befestigt. Die Felgen wurden mit einer Schraubzwinge auf die Motorwelle gepresst, sodass keine Möglichkeit von Schlupf an der Welle besteht. | |||
== | <gallery widths="450" heights="300" perrow="3"> | ||
Felgen.PNG|CAD-Modell Felge | |||
Basis.PNG|CAD-Modell Grundgestell | |||
BalanceBotSeite.jpg| Seitenansicht | |||
</gallery> | |||
Versorgt wird der Roboter mit einem 12V/1A Netzteil, um genügend Energie für die Motoren bereitstellen zu können. Die Elektrischen Bauteile sind auf einer Leiterplatte angebracht. Um diese wiederverwenden zu können, sind diese nicht direkt auf der Platine verlötet, sondern stattdessen Steckkontakte. In diese sind die Bauteile eingesteckt, um sie wiederverwenden, oder bei Bauteilversagen leicht austauschen zu können. Nach Erstellung des Schaltplanes wurden die Steckkontakte für elektrischen Komponenten auf der Leiterplatte verlötet. Die Leiterplatte ist an einer Seite in eine Schiene eingelegt und auf der anderen Seite mit einer M3 Schraube mit dem Grundgestell verbunden. Dafür wurde zuvor mit einem Lötkolben eine Hülse mit einem M3 Innengewinde erhitzt und in ein dafür vorgesehenes Loch eingeschmolzen. Durch die Platine konne dann ein Loch mit 4mm Durchmesser gebohrt werden um die Platine am Grundgestell zu befestigen. | |||
== | <gallery widths="450" heights="300" perrow="3"> | ||
SchaltplanBalanceBot.jpg|Schaltplan BalanceBot | |||
BalanceBotUnten.jpg|Fertige Leiterplatte im eingebautem Zustand | |||
BalanceBotHeck.jpg| Heckansicht | |||
</gallery> | |||
===Software=== | |||
Bei der Erstellung der Software wurde sich an [https://github.com/rekomerio/self-balancing-robot/blob/master/src/main.cpp vorhandenem Quellcode orientiert]. In diesem wird zur Regelung des Neigungswinkels ein [https://github.com/rekomerio/simple-pid PID-Regler für die Arduino IDE] verwendet. Die Regelung funktioniert gemäß folgendem Regelkreis. Das Gyroskop kommuniziert mit dem Arduino über eine I2C-Verbindung. Um die Schrittmotoren anzusteuern werden pro Treiber zwei Digitalis des Arduino verwendet. Der eine Pin gibt die Drehrichtung des Treibers an. Ein High am Dir-Pin des Treibers sorgt für einen Vorwärtsdrehenden Motor, ein Low sorgt dafür, dass der Stepper Rückwärts dreht. Durch eine steigende Flanke am Step-Eingang des Treibers, wird der Stepper um eine Schritt (1,8 Grad) gedreht. | |||
[[Datei:RegelkreisBalanceBot.png|600px|thumb|left|Regelkreis BalanceBot]] | |||
Da der Balance Bot keine Fernsteuerung und als Energiequelle keinen Akku besitzt, mussten die entsprechenden Stellen im Code angepasst werden. Beim Einschalten des Roboters wird die aktuelle Neigung als Referenz gespeichert. Das Kalibrieren wird durch schnelles Blinken der LED auf dem Arduino Nano signalisiert. Das heißt, dass der Roboter beim Anschalten gerade gehalten werden muss, bis die Kalibrierung abgeschlossen ist. Die Kalibrierung des Balance Bots ist notwendig um den Offset des Gyroskops zu ermitteln. Danach beginnt der Roboter alleine zu balancieren. Falls der Neigungswinker mehr als 30 Grad vom Sollwert entfernt ist, werden die Motoren abgeschaltet, um zu verhindern, dass der Roboter fährt, während er auf der Seite liegt. | |||
Zu Beginn werden in der Setup-Funktion des Quelltext die benötigten IO-Pins des Arduino definiert. Zudem wird eine I2C-Verbindung zum Gyroskop hergestellt. | |||
Außerdem werden die Timer-Register beschrieben, sodass eine Interrupt-Service-Routine alle 20 microsekunden ausgeführt wird, welche genutzt wird um die Schrittmotoren anzusteueren. Dann beginnt die Kalibrierung des Gyroskops. Darauf hin beginnt die Loop-Funktion, welche endlos ausgeführt wird. Bei jedem durchlauf wird zuerst das Gyroskop ausgelesen und der Neigungswinkel errechnet und der Wert bereinigt. Dann wird der PID-Regler mit dem neu errechneten Wert gefüttert. Der Regler gibt darauf hin einen Wert für die Drehgeschwindigkeit der Räder aus. Dies wiederholt sich dann bis die Stromversorgung abgeschaltet wird. Die tatsächliche Ansteuerung der Motoren geschieht nicht in der Loop-Funktion, sondern abgesondert in der Interrupt-Service-Routine eines Timers. | |||
Damit der PID-Regler korrekte Werte ausgibt, müssen der P- , I- und D-Anteil richtig eingestellt werden. Dies geschieht indem zuerst alle Werte auf null gesetzt werden. Dann wird der P-Wert erhöht bis, der Roboter sich an den Sollwert ganz nah nähert, aber nie erreicht. Dann wird der I-Wert eingestellt und zwar so, dass der Sollwert nun erreicht wird, der Roboter aber nicht anfängt um den Sollwert zu schwingen. Und zu letzt wird er D-Wert eingestellt und zwar so dass der Regler den Balance-Bot den Sollwert, zügig erreicht, aber auch nicht anfängt zu pendeln | |||
==Komponententest== | ==Komponententest== | ||
Die mechanischen Komponenten wie die Felgen und das Grundgestell wurden bereits in der Planungsphase in SolidWorks auf Maßhaltigkeit überprüft, sodass diese bei der Umsetzung gut passten. Die elektrischen Bauteile wurden Stück für Stück durch den Aufbau von Testschaltungen in Kombination mit Testprogrammen auf ihre Funktion überprüft. In diesem Rahmen musste die Strombegrenzung für die Motoren an den DRV-8825 Motortreibernd eingestellt werden. Um mit dem Motor hohe Schrittraten erreichen zu können, wie es bei dem BalanceBot bei einer hohen Regelabweichung der Fall sein kann, ist die Versorgung des Motors typischerweise deutlich höher als es ohne Strombegrenzung zulässig wäre. Die Motoren haben einen Nennstrom von max. 1A pro Phase, der nicht überschritten werden darf. Um den Strom zu begrenzen muss am Treiber, über eine Einstellschraube auf diesem, eine Referenzspannung eingestellt werden. Dazu wird die Spannung zwischen dem "REF"-Pin (Messwiderstand 0,1 Ohm) und GND gemessen. Die Stromgrenze verhält sich zur Referenzspannung wie folgt: | |||
:<math> VREF = \frac{Nennstrom}{2} </math> | |||
Die Referenzspannung wurde also auf 0,5V eingestellt. | |||
<br> | |||
Die Einstellung des PID-Reglers stellte die wichtigste Einstellung im Quellcode da. Um den Regler einzustellen, wurden zuerst der I- und der D-Anteil auf 0 gesetzt, um den P-Anteil einzustellen. Dazu wurde zuerst ein geringer P-Wert (geringe Verstärkung) von 1,5 gewählt, das Programm auf den Arduino geladen und anschließend das Verhalten beobachtet und beurteilt. Anhand des Balancierverhaltens und dem Verhalten beim Ändern der Eingangsgröße, konnte dann darauf geschlossen werden, ob der Wert zu hoch (System schwingt) oder zu niedrig (Regelgröße zu klein, hohe Regelabweichung) ist, um ihn anzupassen. Nach Erprobung, hat sich ein P-Anteil von 2 als geeignet erwiesen. Als nächstes musste der D-Anteil, der den bleibenden Regelfehler des P-Anteils ausgleichen soll eingestellt werden. Hier wurde mit einem hohen Wert begonnen, was einem trägen System entspricht. Zur Erprobung wurde auch hier vorgegangen wie beim P-Anteil, und der Wert für den D-Anteil wurde immer weiter verringert um die "Aggressivität" des Reglers passend einzustellen. An dieser Stelle balanciert der Balance Bot schon sehr gut. Um die Annäherung an den Sollwert noch zu verbessern, kann hier die Näherung an einen geeigneten D-Anteil vorgenommen werden. | |||
==Ergebnis== | ==Ergebnis== | ||
Das Projekt wurde wie geplant umgesetzt und beendet. Die geplante Anforderung wird erfüllt und der Balance Bot funktioniert zuverlässig. Bei der Energieversorgung wurde aus Kostengründen auf einen Akku verzichtet und auf ein vorhandenes Netzteil zurückgegriffen, was die Funktion nicht beeinträchtigt. Die Materialbeschaffung war problemlos, da bei den mechanischen Bauteilen auf vorhandene Ressourcen zurückgegriffen werden konnte. Bei den elektronischen Bauteilen war die Beschaffung ebenfalls leicht, da weit verbreitete Standardkomponenten verwendet wurden, welche bei verschiedenen Online-Versandhändlern vorrätig sind. Als Erweiterung wären zusätzlich noch eine Fernsteuerung, Akkubetrieb und evtl. eine Änderung der Regler Anteile über Taster, eine App o.ä. denkbar. | |||
==Zusammenfassung== | ==Zusammenfassung== | ||
===Lessons Learned=== | ===Lessons Learned=== | ||
Bei diesem Projekt im Rahmen des GET-Fachpraktikums wurden folgene Kompetenzen erlernt bzw. angewandt: | |||
* Einschätzung eigener Kompetenzen | |||
* Planung eines Projektes | |||
* Zeitmanagement | |||
* Konstruktuion in CAD-Programm und Aufbereitung für 3D-Druck | |||
* Löten | |||
* Einstellung elektrischer Bauteile und Schaltungen | |||
* Einstellung eines PID-Reglers | |||
==Projektunterlagen== | ==Projektunterlagen== | ||
===Projektplan=== | ===Projektplan=== | ||
Das Projekt wurde gemäß diesem in Excel erstellten Gantt-Diagrammes durchgeführt. | |||
<gallery widths="600" heights="300" perrow="2"> | |||
Gantt-Diagramm-Screenshot.png | |||
</gallery> | |||
===Projektdurchführung=== | ===Projektdurchführung=== | ||
Nach der Wahl des Projektes und der Formulierung der Anforderungen konnte mit der Konzeption des BalanceBot begonnen werden. Als der grobe Aufbau und die Anordnung der Bauteile geklärt war konnte mit der Auflistung und anschließenden Beschaffung der Komponenten begonnen werden. Während der Lieferzeit der Komponenten wurden die Bauteile, für den 3D-Druck konstruiert und gedruckt. Nach Eintreffen der Bauteile konnte mit den Einzelkomponententest weiter gemacht werden, um mit dem verlöten der elektrischen Bauteile fortzufahren. Um sicherzustellen, dass beim Einschalten keine Bauteile beschädigt werden wurde die Leiterplatte zur Sicherheit durchgemessen und dann mit den anderen Bauteilen final zusammengebaut. Dann konnte mit der Programmierung bzw. der Anpassung des Programmes weitergemacht werden um den BalanceBot einem Funktionstest zu unterziehen. An dieser Stelle wurde der Regler eingestellt. Als die Funktion des BalanceBot sichergestellt war, konnte mit der Erstellung der Dokumentation, des Wiki-Artikel und des Youtube-Videos das Projekt abgeschlossen werden. | |||
==YouTube Video== | ==YouTube Video== | ||
Hier ein Video des BalanceBot: | |||
{{#ev:youtube|https://youtu.be/j6GslEspW10| 600 | |}} | |||
[https://youtu.be/j6GslEspW10] | |||
==Weblinks== | ==Weblinks== |
Aktuelle Version vom 11. Januar 2022, 00:37 Uhr
Autoren: Moritz Kühnrich & Daniel Klassen
Betreuer: Prof. Göbel
→ zurück zur Übersicht: WS 21/22: Angewandte Elektrotechnik
Einleitung
Das „BalanceBot“-Projekt wurde im Rahmen des GET-Fachpraktikums im 5.Fachsemester des Studienganges Mechatronik absolviert. Die Grundlagen und Kenntnisse aus verschiedenen Vorlesungen, besonders aus Mess- und Regelungstechnik und anderen Praktika, die bereits absolviert wurden, sollen dabei eingesetzt und vertieft werden. Außerdem stehen die Planung, das eigenständige Durchführen und die Dokumentation eines selbst ausgewählten Projektes im Vordergrund, sodass nach Abschluss des Projektes ein Entwicklungsprozess durchlaufen wurde. Der BalanceBot vereint, passend zum Studiengang Mechatronik, Mechanik, Elektronik und Informatik in einem Projekt und wird im Folgenden erläutert.
Der BalanceBot ist ein kleiner zweirädriger Roboter, der das Ziel hat mithilfe der eingebauten elektronischen Bauteile, durch die Ansteuerung der zwei Motoren, die jeweils ein Rad antreiben, im Gleichgewicht zu bleiben und gerade auf der Stelle zu stehen.
Anforderungen
Nach dem Anschalten des BalanceBot, soll der Roboter auf der Stelle stehen bzw. balancieren ohne zu kippen, indem die Räder in die entsprechende Richtung angetrieben werden. Nach Einwirkung äußerer Kraft durch leichtes anstoßen des Roboters, soll dieser wieder in die Ausgangslage zurückkehren und weiter auf der Stelle das Gleichgewicht halten.
Funktionaler Systementwurf/Technischer Systementwurf
Nach der Ideenfindung wurde mit einer ersten Skizze begonnen, um grob abzuschätzen mit welchem Verfahren die mechanischen und elektronischen Bauteile gefertigt und angeordnet werden. Die elektronischen Bauteile sollen bei voller technischer Funktion im Design versteckt sein. Als Trägheit, die den Roboter aus dem Gleichgewicht bringen soll, sind entweder ein Akku, der gleichzeitig Energie für den Roboter bereitstellt, denkbar, oder (bei Netzbetrieb) eine andere Art von Gewicht.
-
Erste Skizze
-
Erster Systementwurf
Komponentenspezifikation
Mechanische Komponenten
- Zwei selbstgestaltete Felgen (3D-Druck, ca. 110g PLA)
- Selbstgestaltetes Grundgestell (3D-Druck, ca. 70g PLA)
- M3 x 5mm Schrauben zur Befestigung der Motoren und der Leiterplatte an das Grundgestell
- Kabelbinder zur Befestigung des Gewichtes/Akkus an das Grundgestell
- Anti-Rutschmatte-Streifen als Reifen
Elektrische Komponenten
- 2x Nema-17 Schrittmotoren (17HS4023) als Antrieb für den BalanceBot
- 5cm x 7cm Leiterplatte als Träger für die elektrische Schaltung
- 2x DRV-8825 Stepper Treiber als Ansteuerung für die beiden Motoren
- MPU-6050 Gyro-Sensor zur Messung des Neigungswinkels und der Gierrate des Roboters
- Arduino Nano Mikrocontroller
- 100 µF Kondensator als Bauteilschutz
- 12V/1A Netzteil
Umsetzung (HW/SW)
Generell wichtig bei der Umsetzung der Bauteile war, vorhandene Materialien zu verwenden und diese so zu verarbeiten, dass diese möglichst über das Projekt hinaus wiederverwendet werden können. Im folgenden wird auf die Umsetzung eingegangen.
Hardware
Da zwei 3D-Drucker zur Verfügung stehen, wurden die mechanischen Bauteile mit diesen gefertigt. Durch das Verfahren ist ein großer Gestaltungsfreiraum gegeben, der bei der Konstruktion in SolidWorks voll ausgenutzt wurde. Das Design der Felgen erfolgte selbständig in Anlehnung an das ikonische Design der "MAE Crown Jewel"-Felge. Bei der Konstruktion des Grundgestells und der Felgen mussten die Maße des zuvor gewählten Motors berücksichtigt werden, um passende Anschraubpunkte am Grundgestell und Wellenaufnahmen an den Felgen zu realisieren. Bei der Konstruktion des Grundgestells wurde zusätzlich an der Unterseite eine Aufnahme für die Leiterplatte, auf der sich die elektrischen Bauteile befinden realisiert. Um fehlerhafte Drucke, aufgrund von nicht berücksichtigten Maßen zu vermeiden, wurden die einzelnen Bauteile in SolidWorks zu einer Baugruppe zusammengefügt. Entsprechende Modelle z.B. für die Motoren wurden aus dem Internet bezogen, sodass sichergestellt werden konnte, dass die Bauteile passen werden. Die CAD-Modelle wurden anschließend in einer Slicer-Software für den Druck vorbereitet. Nach Eintreffen aller bestellten Komponenten und einer Druckzeit von insgesamt etwa 20 Stunden konnte mit dem mechanischen Aufbau begonnen werden. Dazu musste zuerst das angefallene Supportmaterial von den gedruckten Teilen entfernt werden. Die Motoren sind mit jeweils vier M3 x 5mm Schrauben am Grundgestell befestigt. Die Felgen wurden mit einer Schraubzwinge auf die Motorwelle gepresst, sodass keine Möglichkeit von Schlupf an der Welle besteht.
-
CAD-Modell Felge
-
CAD-Modell Grundgestell
-
Seitenansicht
Versorgt wird der Roboter mit einem 12V/1A Netzteil, um genügend Energie für die Motoren bereitstellen zu können. Die Elektrischen Bauteile sind auf einer Leiterplatte angebracht. Um diese wiederverwenden zu können, sind diese nicht direkt auf der Platine verlötet, sondern stattdessen Steckkontakte. In diese sind die Bauteile eingesteckt, um sie wiederverwenden, oder bei Bauteilversagen leicht austauschen zu können. Nach Erstellung des Schaltplanes wurden die Steckkontakte für elektrischen Komponenten auf der Leiterplatte verlötet. Die Leiterplatte ist an einer Seite in eine Schiene eingelegt und auf der anderen Seite mit einer M3 Schraube mit dem Grundgestell verbunden. Dafür wurde zuvor mit einem Lötkolben eine Hülse mit einem M3 Innengewinde erhitzt und in ein dafür vorgesehenes Loch eingeschmolzen. Durch die Platine konne dann ein Loch mit 4mm Durchmesser gebohrt werden um die Platine am Grundgestell zu befestigen.
-
Schaltplan BalanceBot
-
Fertige Leiterplatte im eingebautem Zustand
-
Heckansicht
Software
Bei der Erstellung der Software wurde sich an vorhandenem Quellcode orientiert. In diesem wird zur Regelung des Neigungswinkels ein PID-Regler für die Arduino IDE verwendet. Die Regelung funktioniert gemäß folgendem Regelkreis. Das Gyroskop kommuniziert mit dem Arduino über eine I2C-Verbindung. Um die Schrittmotoren anzusteuern werden pro Treiber zwei Digitalis des Arduino verwendet. Der eine Pin gibt die Drehrichtung des Treibers an. Ein High am Dir-Pin des Treibers sorgt für einen Vorwärtsdrehenden Motor, ein Low sorgt dafür, dass der Stepper Rückwärts dreht. Durch eine steigende Flanke am Step-Eingang des Treibers, wird der Stepper um eine Schritt (1,8 Grad) gedreht.
Da der Balance Bot keine Fernsteuerung und als Energiequelle keinen Akku besitzt, mussten die entsprechenden Stellen im Code angepasst werden. Beim Einschalten des Roboters wird die aktuelle Neigung als Referenz gespeichert. Das Kalibrieren wird durch schnelles Blinken der LED auf dem Arduino Nano signalisiert. Das heißt, dass der Roboter beim Anschalten gerade gehalten werden muss, bis die Kalibrierung abgeschlossen ist. Die Kalibrierung des Balance Bots ist notwendig um den Offset des Gyroskops zu ermitteln. Danach beginnt der Roboter alleine zu balancieren. Falls der Neigungswinker mehr als 30 Grad vom Sollwert entfernt ist, werden die Motoren abgeschaltet, um zu verhindern, dass der Roboter fährt, während er auf der Seite liegt.
Zu Beginn werden in der Setup-Funktion des Quelltext die benötigten IO-Pins des Arduino definiert. Zudem wird eine I2C-Verbindung zum Gyroskop hergestellt. Außerdem werden die Timer-Register beschrieben, sodass eine Interrupt-Service-Routine alle 20 microsekunden ausgeführt wird, welche genutzt wird um die Schrittmotoren anzusteueren. Dann beginnt die Kalibrierung des Gyroskops. Darauf hin beginnt die Loop-Funktion, welche endlos ausgeführt wird. Bei jedem durchlauf wird zuerst das Gyroskop ausgelesen und der Neigungswinkel errechnet und der Wert bereinigt. Dann wird der PID-Regler mit dem neu errechneten Wert gefüttert. Der Regler gibt darauf hin einen Wert für die Drehgeschwindigkeit der Räder aus. Dies wiederholt sich dann bis die Stromversorgung abgeschaltet wird. Die tatsächliche Ansteuerung der Motoren geschieht nicht in der Loop-Funktion, sondern abgesondert in der Interrupt-Service-Routine eines Timers.
Damit der PID-Regler korrekte Werte ausgibt, müssen der P- , I- und D-Anteil richtig eingestellt werden. Dies geschieht indem zuerst alle Werte auf null gesetzt werden. Dann wird der P-Wert erhöht bis, der Roboter sich an den Sollwert ganz nah nähert, aber nie erreicht. Dann wird der I-Wert eingestellt und zwar so, dass der Sollwert nun erreicht wird, der Roboter aber nicht anfängt um den Sollwert zu schwingen. Und zu letzt wird er D-Wert eingestellt und zwar so dass der Regler den Balance-Bot den Sollwert, zügig erreicht, aber auch nicht anfängt zu pendeln
Komponententest
Die mechanischen Komponenten wie die Felgen und das Grundgestell wurden bereits in der Planungsphase in SolidWorks auf Maßhaltigkeit überprüft, sodass diese bei der Umsetzung gut passten. Die elektrischen Bauteile wurden Stück für Stück durch den Aufbau von Testschaltungen in Kombination mit Testprogrammen auf ihre Funktion überprüft. In diesem Rahmen musste die Strombegrenzung für die Motoren an den DRV-8825 Motortreibernd eingestellt werden. Um mit dem Motor hohe Schrittraten erreichen zu können, wie es bei dem BalanceBot bei einer hohen Regelabweichung der Fall sein kann, ist die Versorgung des Motors typischerweise deutlich höher als es ohne Strombegrenzung zulässig wäre. Die Motoren haben einen Nennstrom von max. 1A pro Phase, der nicht überschritten werden darf. Um den Strom zu begrenzen muss am Treiber, über eine Einstellschraube auf diesem, eine Referenzspannung eingestellt werden. Dazu wird die Spannung zwischen dem "REF"-Pin (Messwiderstand 0,1 Ohm) und GND gemessen. Die Stromgrenze verhält sich zur Referenzspannung wie folgt:
Die Referenzspannung wurde also auf 0,5V eingestellt.
Die Einstellung des PID-Reglers stellte die wichtigste Einstellung im Quellcode da. Um den Regler einzustellen, wurden zuerst der I- und der D-Anteil auf 0 gesetzt, um den P-Anteil einzustellen. Dazu wurde zuerst ein geringer P-Wert (geringe Verstärkung) von 1,5 gewählt, das Programm auf den Arduino geladen und anschließend das Verhalten beobachtet und beurteilt. Anhand des Balancierverhaltens und dem Verhalten beim Ändern der Eingangsgröße, konnte dann darauf geschlossen werden, ob der Wert zu hoch (System schwingt) oder zu niedrig (Regelgröße zu klein, hohe Regelabweichung) ist, um ihn anzupassen. Nach Erprobung, hat sich ein P-Anteil von 2 als geeignet erwiesen. Als nächstes musste der D-Anteil, der den bleibenden Regelfehler des P-Anteils ausgleichen soll eingestellt werden. Hier wurde mit einem hohen Wert begonnen, was einem trägen System entspricht. Zur Erprobung wurde auch hier vorgegangen wie beim P-Anteil, und der Wert für den D-Anteil wurde immer weiter verringert um die "Aggressivität" des Reglers passend einzustellen. An dieser Stelle balanciert der Balance Bot schon sehr gut. Um die Annäherung an den Sollwert noch zu verbessern, kann hier die Näherung an einen geeigneten D-Anteil vorgenommen werden.
Ergebnis
Das Projekt wurde wie geplant umgesetzt und beendet. Die geplante Anforderung wird erfüllt und der Balance Bot funktioniert zuverlässig. Bei der Energieversorgung wurde aus Kostengründen auf einen Akku verzichtet und auf ein vorhandenes Netzteil zurückgegriffen, was die Funktion nicht beeinträchtigt. Die Materialbeschaffung war problemlos, da bei den mechanischen Bauteilen auf vorhandene Ressourcen zurückgegriffen werden konnte. Bei den elektronischen Bauteilen war die Beschaffung ebenfalls leicht, da weit verbreitete Standardkomponenten verwendet wurden, welche bei verschiedenen Online-Versandhändlern vorrätig sind. Als Erweiterung wären zusätzlich noch eine Fernsteuerung, Akkubetrieb und evtl. eine Änderung der Regler Anteile über Taster, eine App o.ä. denkbar.
Zusammenfassung
Lessons Learned
Bei diesem Projekt im Rahmen des GET-Fachpraktikums wurden folgene Kompetenzen erlernt bzw. angewandt:
- Einschätzung eigener Kompetenzen
- Planung eines Projektes
- Zeitmanagement
- Konstruktuion in CAD-Programm und Aufbereitung für 3D-Druck
- Löten
- Einstellung elektrischer Bauteile und Schaltungen
- Einstellung eines PID-Reglers
Projektunterlagen
Projektplan
Das Projekt wurde gemäß diesem in Excel erstellten Gantt-Diagrammes durchgeführt.
Projektdurchführung
Nach der Wahl des Projektes und der Formulierung der Anforderungen konnte mit der Konzeption des BalanceBot begonnen werden. Als der grobe Aufbau und die Anordnung der Bauteile geklärt war konnte mit der Auflistung und anschließenden Beschaffung der Komponenten begonnen werden. Während der Lieferzeit der Komponenten wurden die Bauteile, für den 3D-Druck konstruiert und gedruckt. Nach Eintreffen der Bauteile konnte mit den Einzelkomponententest weiter gemacht werden, um mit dem verlöten der elektrischen Bauteile fortzufahren. Um sicherzustellen, dass beim Einschalten keine Bauteile beschädigt werden wurde die Leiterplatte zur Sicherheit durchgemessen und dann mit den anderen Bauteilen final zusammengebaut. Dann konnte mit der Programmierung bzw. der Anpassung des Programmes weitergemacht werden um den BalanceBot einem Funktionstest zu unterziehen. An dieser Stelle wurde der Regler eingestellt. Als die Funktion des BalanceBot sichergestellt war, konnte mit der Erstellung der Dokumentation, des Wiki-Artikel und des Youtube-Videos das Projekt abgeschlossen werden.
YouTube Video
Hier ein Video des BalanceBot: