Projekt 57: Arduino Segway: Unterschied zwischen den Versionen
Zeile 445: | Zeile 445: | ||
[[Datei:Zwei Akkus.jpg|350px|thumb|right|Zwei 9.6V Akkus im Segway 2.0 optional möglich]] | [[Datei:Zwei Akkus.jpg|350px|thumb|right|Zwei 9.6V Akkus im Segway 2.0 optional möglich]] | ||
[[Datei:Akku des segway.jpg|350px|thumb|middel|9.6V Akku mit 1100mAh]] | |||
Version vom 31. Dezember 2017, 03:40 Uhr
Autoren: Philipp Tewes, Janis Ostermann, Gaida Sven
Betreuer: Prof. Dr. Mirek Göbel
Das Projekt
Das Projekt wurde von Philipp Tewes und Janis Ostermann im Rahmen des Elektrotechnik Fachpraktikums im WS 2015/16 bearbeitet. Das Ziel sollte es sein, ein Segway auf der Basis eines Arduino UNO's zu entwerfen, welches sich selbst balancieren sollte um somit ohne Hilfe stehen zu können. Bevor mit dem Bau und der Programmierung des Segways begonnen wurde, sollten erst einmal einige Ziele definiert werden. Zuerst sollte die Hardware des Segways geplant werden. Dazu wurde eine Teile-Liste angefertigt. Nachdem alle benötigten Teile eingetroffen waren, wurde mit dem Bau der einzelnen Etagen begonnen. Fortgesetzt wurde die Arbeit mit dem Bau der Steuerbox welche den Gyro Sensor und die Potentiometer enthalten sollte. Die Potentiometer sollten zur einfachen Regulierung der Regelparameter dienen.
Nachdem alle Einzelteile fertiggestellt waren ging es um die Verkabelung der Komponenten. Nach Montage und der Verkabelung wurde das Segway anschließend durch Anbringung der Räder fertig gestellt.
Anschließend bestand die Aufgabe darin eine passende Software für die Regelung des Segways zu entwerfen und abzustimmen.
Weitergeführt wurde das Projekt im Wintersemester 2017/2018 von Sven Gaida und Philipp Tewes. Hierbei wurden die Punkte verfolgt die im letzten Bearbeitungs-Zeitraum nicht umgesetzt werden konnten. Umgesetzt wurden die Fernsteuerung durch eine Fernbedienung die mit Wifi mit dem Segway verbunden wird und die überarbeitung des Regelers und die Radbefestigungen wurden überarbeitet.
Bau
Teile-Liste
- 2x RC Reifen 1:8 (Durchmesser 10cm)
- 1x Bastelglas 25cm x 34cm
- 1x Holzstab 70cm x 1,2cm
- 1x Arduino Uno R3
- 1x Saint Smart Sensor Shield
- 2x Motor Drive L298N
- 1x Beschleunigungs- und Gyro Sensor MPU-6050
- 2x Getriebemotor 12V DC MFA 919D1481 148:1
- 3x Potentiometer 10K
- 1x Ladegerät APC300
- 1x Akku-Pack PP2
- 2x Achskupplung (M5 auf M5)
- 2x Gummi Unterlegscheibe (Innendurchmesser 0,4cm Außendurchmesser 1,7cm)
- 7x Metall Unterlegscheibe (Innendurchmesser 0,8cm Außendurchmesser 2,3cm)
- 3x Metallschrauben M5 Länge 3cm
- 4x M5 Unterlegscheiben
- 10x Isolierende Gummi-Abstandsscheiben (für M3 Schrauben, 3mm Stärke)
- 1x M5 Mutter
- 1x M4 Gewindestange 1m
- 24x M4 Muttern
- 1x Tamya Stecker mit 5cm Kabel
- 18x M3 Schrauben (1,5cm) mit Muttern
- 4x Kleine Nägel
- 4x Kleine Schrauben
Etagen
Beim Aufbau des Segways wurde sich für ein Konzept aus drei Etagen entschieden. Dabei diente Etage eins für die Befestigung des Holzstiels mit der Steuerbox und dem Lenker. Etage zwei war dabei die Etage an der die MotorShields, der Arduino UNO R3 und die Motoren verschraubt wurden. Etage drei diente dabei als Auflage für das Akku Pack. Beim Aufbau wurde darauf geachtet, dass der Schwerpunkt möglichst tief und unter der Fahrzeugachse lag. Daher befanden sich das Akku Pack und der Motor unter der Fahrzeugachse. Dadurch entstand ein Pendeleffekt der das Segway stabilisierte.
Etage 1
- 3mm Bohrungen für M4 Gewindestangen
- Langloch für die Bohrung eingeschnitten
Etage 2
- 3mm Bohrungen für M4 Gewindestangen
- 2mm Bohrungen für Motoren und Motor-Shield
- Rote Löcher für Motor-Shields, nur Außen bemaßt. Innere Löcher können je nach Shield abweichen. Außen wurde gebohrt und dann Innen entsprechend angezeichnet
- Grüne Löcher für Motoren, nur Außen bemaßt. Innere Löcher können je nach Motor abweichen. Außen wurde gebohrt und dann innen entsprechend angezeichnet
- Die Löcher für die Befestigungen der elektrischen Bauteile wurden gesenkt
- Arduino nur zur Kannte bemaßt, mittig aufgesetzt und angezeichnet
Etage 3
- 3mm Bohrungen für M4 Gewindestandgen
- Gummi überziehen
Steuerbox
- 5mm Löcher in das Plexiglas für die Potentiometer gebohrt
- Potentiometer in das Plexiglas eingeschraubt. Über Gewinde am Potentiometer.
- Folgende Komponenten mit einer Gummi Abstandsscheibe versehen
- Gyroskop an die mit 3mm vorgeborten Löcher mit M3 Schrauben geschraubt und mit Mutter auf der Unterseite befestigt
- Platine Ebenfalls mit M3 Schrauben verschraubt und befestigt
- In die Unterseite ein 9mm Loch gebohrt um die Kabel herausführen zu können
- Zusätzlich wurde eine kleine Schaltung entworfen. Diese besaß einen 10 nanofarad Keramik Kondensator (C1) zwischen Plus und Minus für die Entstörung. Ein weiterer 10 Mikrofarad Elektrolyt Kondensator (C2) war dabei für eine Strom Speicherung für den Gyrosensor vorhanden. Denn der Gyrosensor benötigte eine sehr stabile Spannung um fehlerfreie Werte liefern zu können.
Stiel und Querstange
- Holzstiel in zwei Stücke geschnitten, einmal 50,5cm und 14cm
- Den 14cm Stiel mittig in eine Stirnfläche des längeren Stiels verschrauben, mit M5 Schraube 3cm und M5 Unterlegscheibe (vorgebohrt)
Verkabelung
Die Verkabelung wurde in Fritzing geplant und wie in der Abbildung umgesetzt, einzig das Sensor Shield stand dort nicht zur Verfügung. Dies stellte aber kein Problem bei der Planung der Verkabelung dar, denn auf dem Sensor Shield gab es einen extra Anschluss für den Gyro Sensor. Bei den Motoren wurde dabei auf ein Kabel mit 0,5mm Querschnitt gesetzt, für die restlichen Kabel 0,25mm. Der Akku wurde dabei mit dem Tamya Stecker und 5cm Kabel in die Klemmen des rechten Shields geklemmt. Von hier aus gingen noch zwei Kabel zum linken Shield, um dieses ebenfalls mit Spannung vom Akku zu versorgen. Die Kabel der Steuerbox wurden von der Bohrung oder der Bodenplatte der Steuerbox aus am Stiel verlegt, an diesem wurden sie mit Kabelbindern befestigt. Bevor die Verkablung nach dem Fritzing Plan vorgenommen wurde, musste das Sensor Shield auf den Arduino UNO aufgesteckt werden.
Reifen
Weil es sich bei den Reifen um RC Reifen in der Größe 1:8 handelte waren diese nicht für den Betrieb an den Getriebemotoren vorgesehen. Aus diesem Grund musste ein eigener kleiner Adapter nach der folgenden Abbildung zusammengebaut werden. Bei dieser Verbindung war auf besonders hohe Stabilität zu achten, denn sie bildeten gleichzeitig die Achse. Die Schrauben wurden dabei noch an einer Stelle etwa 1mm mit einer Pfeile abgeflacht. So wurde sichegestell, dass sich die Achse nicht durch das Anfahrdrehmoment der Motoren verdrehen konnte. An den Motoren war diese Abflachung bereits vorhanden. Die Achskupplungen wurden auf die Schrauben gesteckt. Diese sollten dabei auf die Abflachungen Radschrauben geschraubt werden.
Montage
Begonnen wurde mit der Montage des Stiels, nach dem Vorbild der ersichtlichen Zeichnung. In diesem Schritt wurde gleich die Steuerbox befestigt. Dies wurde mit einer M5 Schraube in 3cm umgesetzt. Zusätzlich wurde die Verschraubung auf der Außenseite am Stiel mit einer Unterlegscheibe versehen. Daraufhin wurden zunächst die Motoren an der Etage 2 befestigt. Dabei war zu beachten, dass zunächst alle Schrauben in die zugehörigen Löcher gesteckt werden mussten, da die Halterung der Motoren die Löcher daraufhin bedeckte. Danach wurde die restliche Hardware mit den M3 Schrauben befestigt (Arduino UNO, Motor Shields). Auf diese wurde pro Schraube eine Gummi Abstandsscheibe gesteckt. Auf Etage drei wurde noch ein Gummi gespannt, dies sollte ein Verrutschen des Akkus verhindern. Dann wurden Etage zwei und Etage drei mit einem Abstand von 7cm mithilfe der M4 Gewindestangen verbunden. Die Etagen wurden dabei durch die M4 Muttern positioniert und von der Gegenseite mit einer weiteren M4 Mutter leicht festgeklemmt. Der bereits vormontierte Stiel mit der Steuerbox wurde mit einer 3cm M5 Schraube an Etage eins befestigt. Dabei wurden auf beiden Seiten Unterlegscheiben untergelegt, um die Belastung auf das Glas zu verteilen. Bevor Etage eins ebenfalls verschraubt wurde mussten noch die Kabel des Stiels auf dem Sensor Shield versteckt werden. Jetzt konnte auch Etage eins mit den restlichen Etagen über die Gewindestangen verschraubt werden. Auch hier mit einem Abstand von je 7cm. Als letzter Schritt mussten noch die Räder an den Motoren befestigt werden. Hierzu wurden die Achskupplungen auf die Motoren gesteckt und auch dort durch die Schrauben der Achskupplungen festgeschraubt.
Software des Arduino UNO
Die folgende Software wurde mit der Arduino IDE Entwicklungsumgebung entwickelt. Es wurden einige Bibliotheken eingebunden, die bei der Kommunikation mit dem Gyrosensor helfen sollten. Zunächst sollten die gegebenen Offsets für unseren Gyrosensor herausgefunden werden. Dazu wurde ein Beispielprogramm genutzt, welches die aktuellen Gyroskop-Werte ausgab. Der aktuelle Wert im gerade stehenden Zustand wurde als Referenzwert, in welchen sich das Segway zu begeben versuchen sollte, gewählt. Der Hauptteil des Programms maß ständig die Winkeländerung und ermittelte über die vergangene Zeit den aktuellen Winkel. Sobald dieser über 45 Grad groß wurde, wurde nichts weiter ausgeführt um so beim Umfallen des Segway die Motoren zu stoppen. Solange aber der Winkel unter 45 Grad groß war sollte das Segway sich wieder in eine gerade Position bringen. Dieses sollte durch ansteuern der Motoren passieren, welche durch die Fahrt in die Richtung in welche das Segway kippte, dieses wieder aufstellten. Die Kraft mit der die Motoren angesteuert werden sollten wurde mit einem PID Reglerberechnet. Dieser bekam als Eingangsgröße den aktuellen Abweichungswinkel und hatte die Kraft mit dem die Motoren angesteuert wurden als Ausgangsgröße. Die Werte mit denen der Regler laufen sollte wurden über feste Variablen definiert oder über die analogen Eingänge des Arduinos von den Potentiometern eingelesen.
Im Folgenden ist unser Programm angehängen. Die Bibliotheken können aus dem Internet oder dem Programmordner im zugehörigen SVN Verzeichnis bezogen werden.
Programmcode
#include "Wire.h"
#include "SPI.h"
#include "nRF24L01.h"
#include "I2Cdev.h"
#include "MPU6050.h"
// Variablen für das Accelometer und den Gyro
MPU6050 accelgyro;
int16_t ax, ay, az;
int16_t gx, gy, gz;
// Definitionen von Schlüsselwörtern
#define Gry_offset 300 // Offset des Gyro
#define Gyro_Verstaerkung 0.00763358 // Verstärkung des Gyro Analog Signals
#define Winkel_offset -22 // Offset des aktuellen Winkels
#define Motor_offset 0 // Motor Offset
#define pi 3.14159 // Definition von der Zahl Pi
// Variablen für den PID Regler
float kp, ki, kd;
float r_angle, f_angle, omega;
// Variablen für die Zeitberechnung
unsigned long preTime = 0;
float SampleTime = 0.08;
unsigned long lastTime;
float Output;
float errSum, dErr, error, lastErr;
int timeChange;
// Definition der Ports mit Variable für Pinmode
//Reifen rechts
int TN1=8;
int TN2=9;
int ENA=5;
//Reifen links
int TN3=11;
int TN4=10;
int ENB=6;
int sensorPin0 = A0; // Input Pin für das Potentiometer 0
int sensorPin1 = A1; // Input Pin für das Potentiometer 1
int sensorPin2 = A2; // Input Pin für das Potentiometer 2
int sensorValue1 = 0; // Variable um den Wert des Potentiometer 0 zu speichern
int sensorValue0 = 0; // Variable um den Wert des Potentiometer 1 zu speichern
int sensorValue2 = 0; // Variable um den Wert des Potentiometer 2 zu speichern
void setup() {
Wire.begin(); // Start serieller Kommunikation
accelgyro.initialize(); // Initalisieren des Gyro/Accelometer
pinMode(TN1,OUTPUT); // Ausgänge zuweisen
pinMode(TN2,OUTPUT);
pinMode(TN3,OUTPUT);
pinMode(TN4,OUTPUT);
pinMode(ENA,OUTPUT);
pinMode(ENB,OUTPUT);
Serial.begin(115200); // Serielle Bandrate
}
void loop()
{
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); // Aktueller Wert des Gyro/Accelometer laden
r_angle = (atan2(ay, az) * 180 / pi + Winkel_offset); // Aktueller Winkel (bei 0 Grad steht das Segway gerade)
omega = Gyro_Verstaerkung * (gx + Gry_offset); Serial.print(" omega="); Serial.println(omega);
if (abs(r_angle)<45){ // Winkel kleiner als 45 Grad
myPID(); // Berechnung der aktuellen PID Werte
PWMControl(); // Ansteuern der Motoren mit aktuellen Werten
}
else{ // Wenn der winkel größer als 45 Grad wird soll angenommen werden, dass das Segway umgefallen ist und keine Bewegung mehr ausgeführt werden
analogWrite(ENA, 0); // Motor A Bremsen
analogWrite(ENB, 0); // Motor B Bremsen
}
}
// PID Werte Berechnung
void myPID()
{
kp = analogRead(A0)*0.1; Serial.print("kp= ");Serial.print(kp); //Einlesen des kp Wertes über Potentiometer wählbar
ki = analogRead(A1)*0.001; Serial.print(" /// ki= ");Serial.print(ki); //Einlesen des ki Wertes über Potentiometer wählbar
kd = analogRead(A2)*1.5; Serial.print(" /// kd= ");Serial.println(kd); //Einlesen des kd Wertes über Potentiometer wählbar
// Wahlweise können auch feste Werte genutzt werden
//kp = 35; Serial.print(" kp=");Serial.print(kp);
//kd = 30; Serial.print(" kd=");Serial.print(kd);
//ki = 0; Serial.print(" ki=");Serial.println(ki);
unsigned long now = millis(); //aktuelle Zeit
float dt = (now - preTime) / 1000.0; //vergangene Zeit seit vor der letzten Berechnung
preTime = now; //Zeit zu Beginn
float K = 0.8;
float A = K / (K + dt);
f_angle = A * (f_angle + omega * dt) + (1 - A) * r_angle; Serial.print(" f_angle=");Serial.println(f_angle); //Winkel Berechnung
timeChange = (now - lastTime); //vergangene Zeit seit Beginn der letzten Berechnung
if(timeChange >= SampleTime){
error = f_angle; // Abweichung von 0 Grad
errSum += error * timeChange;
dErr = (error - lastErr) / timeChange;
Output = kp * error + ki * errSum + kd * dErr; Serial.print(" Output=");Serial.println(Output);
lastErr = error;
lastTime = now; //Zeitstempel nach Berechnung
}
}
void PWMControl(){
if(Output > 0){ //Vorwärts
digitalWrite(TN1, HIGH);
digitalWrite(TN2, LOW);
digitalWrite(TN3, HIGH);
digitalWrite(TN4, LOW);
}
else if(Output < 0){ //Rückwärts
digitalWrite(TN1, LOW);
digitalWrite(TN2, HIGH);
digitalWrite(TN3, LOW);
digitalWrite(TN4, HIGH);
}
else{ //Bremse
digitalWrite(TN1, HIGH);
digitalWrite(TN2, HIGH);
digitalWrite(TN3, HIGH);
digitalWrite(TN4, HIGH);
}
analogWrite(ENA, min(255, abs(Output) + Motor_offset)); //Geschwindigkeit rechts
analogWrite(ENB, min(255, abs(Output) + Motor_offset)); //Geschwindigkeit links
}
Regler Auslegung
Die Abstimmung des realisierten PID Reglers wurde, wie aus der Vorlesung der Reglungstechnik bekannt, mit der Schwingungsmethode vorgenommen. Vorgegangen wurde dabei nach den folgenden fünf Schritten.
PID Reglerauslegung mit Schwingungsmethode
Ziegler/Nichols
Vorgehen:
- Parametrierung des Systems als reiner P‐Regler. Dabei wurden die Anteile Ki und Kd auf null gesetzt
- Erhöhung der Regelverstärkung (Kp-Wert), bis Dauerschwingungen auftreten
- Bestimmen der Regelverstärkung Kp krit, und der Periodendauer T krit
- PID‐Reglerparameter aus der Tabelle des Einstellverfahrens ablesen. (siehe Tabelle)
- Test des eingestellten Reglers
Reglertypen | |||
---|---|---|---|
Kp | Ki | Kd | |
P | 0,5 Kp krit | - | - |
PI | 0,45 Kp krit | 0,85 T krit | - |
PID | 0,6 Kp krit | 0,5 T krit | 0,12 T krit |
Achtung: Es musste darauf geachtet werden, das das Segway beim Überschwingen nicht umfällt und beschädigt wird!
Fazit
Abschießend kann man sagen, dass das Projekt viel Zeit gekostet hat, dieses aber durch Spaß an der praktischen Arbeit und am fertigen, funktionstüchtigen Projekt gut gemacht wurde.
Probleme
Im Laufe des Projekts kam es immer wieder zu kleineren Problemen:
- Das erste Motorshield überhitzte uns einige Male bis zum Defekt, da die Anlaufströme der Motoren zu groß waren. Da beim Regeln immer wieder Angefahren wurde kam es häufig zu zu hohen Anlaufströmen. Dies wurde durch die Verwendung eines zweiten Motorshields gelöst. Die Hitze konnte so besser abgeführt werden, da die Leistung auf zwei Bausteine getrennt wurde.
- Sich lösende Schrauben an den Achsverbindern führten immer wieder dazu, dass das Segway die Kraft der Motoren nicht gleichmäßig auf den Untergrund übertragen konnte und so aus dem Gleichgewicht kam. Dieses Problem wurde bisher noch nicht gelöst.
- Da der aktuelle Akku-Ladestand nicht angezeigt wurde, war es nie klar wann der Akku bei der Ladung genau voll war um so einer Überladung vorzubeugen. Genauso war es nicht klar wann der Akku zu leer sein würde um das Segway zu betreiben oder sich beschädigen würde durch zu hohe Entladung.
Erreichte Ziele
Es wurden alle von uns gestellten Ziele erreicht. Die Hardware wurde von uns selbst entwickelt und ist voll funktionstüchtig. Außerdem konnte eine laufende Software geschrieben werden, die das Segway sich selbst balancieren ließ.
Fortführung
- Es besteht die Möglichkeit der Erweiterung durch eine Fernbedienung, zum Beispiel per Bluetooth oder WLAN, durch welche mit einem passenden Modul mit dem Arduino kommuniziert werden könnte
- Es könnte, da die Motoren getrennt von einander angesteuert werden können, eine Lenkbewegung programmiert werden, mit der sich das Segway fortbewegen und geteuert werden könnte
- Leider ist es noch nicht gelungen die idealen Werte für den PID Regler zu finden. Die Reglung könnte noch so weit optimiert werden, dass das Segway auch wenn es stärker angestoßen würde, sich wieder fangen könnte
Segway 2.0 mit FernDuino WiSe 2017
Wie aus dem Ausblick des Artikels zum Segways aus dem Wintersemester 2015 ersichtlich wird, sollte das Projekt zu einem späteren Zeitpunkt weitergeführt werden. Denn das Segway 1.0 bietet noch Spielraum für Verbesserungen die im Betrieb der Neukonstruktion ersichtlich wurden.
Folgende Punkte wurden bearbeitet:
- Neu Konstruktion eines Segways 2.0 unter Berücksichtigung der beim Segway 1.0 aufgetretenen Probleme.
- Überarbeitung der Motoraufhängung
- Überarbeitung der Radbefestigung
- Überarbeitung/ Tausch der Motortreiber
- Bessere Ausbalancierung bei gleichzeitig "Segway näherem Design"
- Mehr Laufzeit durch die Möglichkeit paralleler Akkus
- Überarbeitung der Software, denn das Segway 1.0 leidet noch an zahlreichen Software Problemen
- DCS System um Hindernisse zu erkennen und einen Zusammenstoß aktiv verhindern/abschwächen zu können
- Konstruktion einer Fernbedienung um das Segway fahren zu können (FernDuino)
- Entwicklung einer Benutzerfreundlichen Menüsteuerung für die Fernbedienung um auf viele Tasten verzichten zu können.
- Nutzung einer Wifi Verbindung und Programmieren eines Passenden Datenübertragungsprotokoll.
- Konstruktion einer Fernbedienung
Segway 2.0
Konstruktion
Wie bereits erwähnt handelt es sich bei Segway 2.0 um eine Neukonstruktion die auf der Konstruktion des Segway 1.0 Aufbaut. Hierbei stand es im Focus das Segway zuverlässiger zu gestalten und aus den aufgetretenen Fehler zu lernen. Die Komponenten die eine hohe Zuverlässigkeit im Fahrbetrieb boten sollen übernommen werden.
Hierbei handelt es sich um die Komponenten:
- Der verwendeten Getriebemotoren
- Das Chassis aus Gewindestangen und Plexiglas
- Die verwendeten RC Reifen
Bei der Konstruktion wurden auch die weiter verwendeten Bauteile in ihrer Positionierung und Integration optimiert.
Radaufhängung
Die Radaufhängung bot beim Segway 1.0 gleich zwei Problemstellen.
Einmal war dies bei der Adaption der Motorachse und der Radachse, diese Stelle die geklemmt ausgeführt ist löste sich gelegentlich an der Radachse. Dies konnte dadurch behoben werden das durch die Radachse hindurch eine Bohrung gemacht wurde. Gleichzeitig wurde die sehr kurze Schraube der Klemme durch eine längere ausgetauscht die jetzt durch die Radachse geschraubt wird, hierdurch ist ein fester sitz der Achse sichergestellt.
Neben der Achsen wurde auch die Befestigung der Motoren am Chassis verbessert. Im Fall des Segway 1.0 wurden die Motoren an eine der Plexiglas Etagen verschraubt, damit lastete das gesamte Gewicht des Segways an dieser Etage. Hierdurch haben sich im Segway 1.0 bereits Risse in dieser Etage gebildet. Beim Segway 2.0 wurde aus diesem Grund ein neues Konzept entwickelt, bei diesem sollte nicht mehr eine der Etagen die Last aufnehmen müssen. Das Tragende Element sind im Segway 2.0 sind die Gewindestangen, die alle Etagen miteinander verbinden. Sie können die nötige Stabilität für Motoren und der Etagen sicherstellen und wurden aus diesem Grund gleich achtfach verwendet. Verschraubt werden sie direkt mit der Aufhängung der Motoren und jeder Etage. So wird sichergestellt das sich die Belastungen auf alle Etagen gleichmäßig verteilen und so nicht zur Überlastung einer einzelnen Etage kommen kann.
Positionierung des MPU6050
Neben diesen Elementen wurde ebenfalls wieder des Gyroskop und Beschleunigungssensor MPU6050 eingesetzt. Es stellte sich bei Tests aber heraus das die Integration in die Box mit den Potentiometern nicht optimal gewählt war. Die Werte des Gyroskop werden am exaktesten wenn dieses direkt in die Drehachse des Segways verbaut werden. Die Werte weit oberhalb der Drehachse in der Steuerbox waren deshalb nicht aussagekräftig über das Verhalten in der Drehachse des Segways. Aus diesem Grund wurde der MPU6050 direkt in die Drehachse des Segway 2.0 verbaut, hierdurch konnten deutlich bessere Ergebnisse in der Regelung erzielt werden. Ebenfalls konnte die Filterung des Wertes minimiert werden, denn war der MPU6050 in der Box oberhalb des Stil einem ständigen schwanken ausgesetzt. Dieses führt zu Wertänderungen die in dieser Ausgeprägtheit nicht in der Drehachse des Segway vorlagen.
Positionierung der Akkus
Bei dem Segway 2.0 wurde auf identische Akkus wie im Fall des Segway 1.0 gesetzt, mit dem Unterschied, dass beim neuen Segway zwei Akkus parallel geschlossen werden können. Hier für wurde die Positionierung der Akkus verändert. Die Akkus befindet sich nicht mehr zwischen den Motoren, sondern sitzt oberhalb beider Motoren, auf diese weise bietet das Segway 2.0 Platz für bis zu zwei Akkus. Ziel hiervon war es die maximale Laufzeit des neuen Segways deutlich verlängern zu können, um so mit der Fernbedienung einen längeren Fahrspaß zu ermöglichen.
Steuerung des Segways
Wie bei der Konstruktion sollten auch bei den Steuerungs-Komponenten auf bewährte Bauteile zurückgegriffen werden. Dies umfasst:
- Das Gyroskop und Beschleunigungssensor MPU6050
- Die Steuerung über einen Arduino
Ergänzend wurden verbaut:
- Zwei SR04 Ultraschallsensoren verbaut
- Ein RF24 Wifi Modul
FernDuino
Der Name "FernDuino" ist ein Wortspiel und soll die beiden Hauptmerkmale "Fernbedienung" und "Arduino" des fertigen Produktes miteinander in Bezug bringen. Der FernDuino soll das bestehende Konzept des Segways aufgreifen und dieses um eine nützliche Komponente - der Fernsteuerung - erweitern.
Konzept und einzelne Module
Kosten,Bauform,Bibliothek,Funktionalitäten
Einplatinenrechner
Das Herzstück des FernDuinos basiert auf einem Arduino Nano. Dieser Arduino Nano besitzt nahezu dieselben Funktionalitäten und Leistungen wie der Arduino Uno und zeichnet sich zudem durch seine relativ kompakte Bauform aus. Um zusätzliche Module anschließen zu können stehen insgesamt 14 I/O Pins, wovon 8 analoge Eingänge sind, zur Verfügung. Der Einplatinenrechner verfügt zudem über einen 5V und 3.3V Spannungsausgang.
Technische Daten im Detail
- Mikrocontroller: ATmega328
- Flash-Speicher: 32KB
- SRAM: 2KB
- EEPROM: 1KB
- Taktrate: 16MHz
- I/O-Pins: 14, davon 6 PWM und 8 analoge Eingänge
- Anschluss: Mini-USB
- LEDs: RXD, TXD, Power, Pin 13
- Größe: ca. 1,85cm x 4,3cm
- Betriebsspannung: 5V
- Empfohlene Eingangsspannung: 7-12V
- Maximale Eingangsspannung: 20V
- Maximaler Strom pro I/O-Pin: 40mA
- Belastbarkeit des 3.3V Ausgangs: 50mA
Aufgrund dieser Eigenschaften und den Technischen Daten wurde der Arduino Nano für das Projekt gewählt.
Funkmodul
Als Funkmodul wurde ein nRF24L01+ single Chip Transceiver von Nordic Semiconductor gewählt, somit kann dieser Chip als Sender und Empfänger eingesetzt werden. Die Transceiver funken im 2.4GHz Netz und ermöglichen eine seperate Kanaleinstellung (bis zu 128 Kanäle) um mögliche Funkkollisionen mit anderen Netzwerken zu vermeiden. Die Kommunikation zu dem Arduino Nano geschieht über den SPI Bus. Erhältlich sind die Funkmodule in zwei verschiedenen Versionen: mit integrierter Antenne oder mit einem SMA Antennenanschluss. Bevor die einzelnen Module gekauft wurden, wurden einige Tests mit vorab bestellten Prototypen durchgeführt. Die Versionen mit integrierter Antenne haben untereinander nur eine sehr geringe Reichweite (unter 5 Meter) und waren somit für den Einsatz im Segway und des FernDuinos unzureichend. Eine Verbesserung der Reichweite zeigte sich indem ein Funkmodul mit SMA Antenne verwendet und ein Elko Kondensator zwischen 3.3V und GND auf dem Chip angebracht wurde. Durch diese Konstellation (Mastermodul mit SMA Antenne, Slavemodul mit integrierter Antenne und beide jeweils mit einem Kondensator) sind Reichweiten über 10 Meter möglich und ideal für die Segway Anwendung.
Steuerung
Für die Steuerung wurden insgesamt zwei analoge Joysticks verbaut. Diese benötigen jeweils eine Eingangsspannung von 5V, einen digitalen Pin für die Tastenfunktion und zwei analoge Eingänge am Arduino um die x- und y-Werte zu übertragen. Der linke Joystick ist für das Fahren und der rechte für die ein- und verstellbaren Reglerwerte des FernDuinos verantwortlich.
Als Besonderheit wurde zudem ein 3-Achsen-Lage- und Beschleunigungssensor, der MPU6050, für zusätzlichen Fahrspaß verbaut. Durch einen Tastendruck auf den linken Joystick wird der MPU6050 aktiviert und das Segway kann durch die Veränderung der Neigungswinkel des FernDuinos gesteuert werden. Der MPU6050 wird ebenfalls mit 5V versorgt und kommuniziert per I2C mit dem Arduino.
Display
Das FernDuino Menü wird über ein LCD Modul mit der Bezeichnung 2004 dargestellt. Es verfügt über insgesamt 4 Zeilen mit jeweils 20 Zeichen und kann per I2C angesprochen werden, somit werden nur 5V, GND und die beiden I2C Pins (SDA und SCL) benötigt. Die Schriftfarbe ist weiss auf einem blauen Hintergrund und per Jumper auf der Platinenrückseite kann die Hintergrundbeleuchtung an- und aus geschaltet werden.
Akku
In dem FernDuino wurde ein NiMH-Akku mit einer Nennspannung von 7.2V und einer Kapazität von 1100mAh fest verbaut. Der 2-polige Tamiyastecker wurde nach außen geführt, sodass eine Aufladung des Akkus per Ladegerät kein Problem darstellt.
Wichtig: Um mögliche Schäden des FernDuinos zu vermeiden, sollte der Akku nur im ausgeschalteten Zustand des FernDuinos aufgeladen werden!
Aufbau
Für den Aufbau des FernDuinos werden folgende Teile benötigt:
Teile-Liste
- 17x 10mm M2.5 Schrauben
- 21x M2.5 Unterlegscheiben
- 16x M2.5 Muttern
- 16x 16mm M2.5 Abstandsbolzen
- 6x 20mm M2.5 Abstandsbolzen
- 6mm, 9mm und 12mm Beschriftungsband
- 4x Kabelbinder
- Schrumpfschlauch
- 1,5mm rot und schwarze Leitungen
- 0,25mm Litze
- Lötzinn
- 2x analoge Joysticks
- 1x Schalter
- 1x nRF24L01+ Modul mit SMA Antenne
- 1x Arduino Nano
- 1x MPU6050
- 1x LCD 2004 I2C
- 1x 10uF 50V
- 1x NiMH Akku 7.2V, 1100mAh
- 1x Lochrasterplatine 50x70mm
- 1x Polystyrol 250x500mm und Stärke von 4mm
- 1x silberne Lackierfarbe
Etagen
Wie auch schon bei dem Segway wurde sich für ein Konzept mit mehreren Ebenen entschieden, sodass die Länge und Breite des FernDuinos relativ klein wurde und der Aufbau mehr in die Höhe ging.
Die erste Etage ist das Grundgerüst des FernDuinos. Hier werden die einzelnen Löcher für die Abstandsbolzen angefertigt.
Etage 1
- Polystyrol Grundfläche mit den gegebenen Maßen ausschneiden. Bei Bedarf lackieren.
- Ø2.7mm Bohrer für die Bohrlöcher
- 16mm Abstandsbolzen für die Joysticks und die Lochrasterplatine mit dem Arduino setzen
- 20mm Abstandsbolzen für das LCD und die Akkuhalterung platzieren
- Abstandsbolzen mit den M2.5 Schrauben und Unterlegscheiben verschrauben
- Akku waagerecht einsetzen und verkeilen
- Beschriftungen "Drive" und "Regler" mit einem 12mm Beschriftungsband anfertigen und platzieren
→ zurück zum Hauptartikel: Fachpraktikum Elektrotechnik (WS 15/16)