Frage zu Projekt: selbstbalancierender Roboter (segway ähnlich)

Hallo,

ich bin zurzeit an einem neuen Projekt: selbstbalancierender Roboter. Ich wollte hier im Forum fragen ob jemand Erfahrung mit der Antriebstechnik eines solchen Projekts hat, da ich mich beim Auswählen der Motore ect. für den Antrieb recht schwer tue.

Der Roboter soll sich selber balancieren, das geschieht durch die Auswertung von Gyroskopsensoren deren Werte (Winkelwerte) für die Ansteuerung der Motore zuständig sind.

Aber wie kann ich nun einen Motor ansteuern, er muss sich ja auch in zwei Richtungen drehen. Gibt es da vielleicht schon fertige Platinen?

Vielen Dank für Infos,

Gruß Tobi

Es gibt einerseits Motorshields, auf denen H-Brücken verbaut sind. Mit diesen kann man den Motor sowohl vorwärts als auch rückwärts laufen lassen. Prinzipiell spricht auch wenig dagegen, selbst eine Schaltung dafür aufzubauen. Für kleinere Motoren reicht oftmals schon ein L293D, den man auf eine Lochrasterplatine setzt. Alternativ kann man auch zwei Servos auf Dauerlauf umbauen, dann entfallen die Elektronikbasteleien größtenteils.

Tobias93: Hallo,

ich bin zurzeit an einem neuen Projekt: selbstbalancierender Roboter. Ich wollte hier im Forum fragen ob jemand Erfahrung mit der Antriebstechnik eines solchen Projekts hat, da ich mich beim Auswählen der Motore ect. für den Antrieb recht schwer tue.

Der Roboter soll sich selber balancieren, das geschieht durch die Auswertung von Gyroskopsensoren deren Werte (Winkelwerte) für die Ansteuerung der Motore zuständig sind.

Aber wie kann ich nun einen Motor ansteuern, er muss sich ja auch in zwei Richtungen drehen. Gibt es da vielleicht schon fertige Platinen?

Vielen Dank für Infos,

Gruß Tobi

Die Auswahl der Motore richtet sich nach der Größe / Gewicht des Roboters.

Ich glaube nicht, daß da Gyroskpsensoren verwendet werden, da, wenn sich der Robot meßbar geneigt hat es eigentlich schon zu spät ist gegenzusteuern. Außerdem mißt ein gyroskop die Winkeländerung nicht den aktuellen Wert eines Bauteils gfegenüber de Senkrechten/waagerechten. Eine einfache Möglichkeit ist es 2 Abstandssensoren nach unten zu richten und so die Winkeländerung gegenüber der Waagerechten zu messen. Auch ein Beschleunigungsmesser scheint mit sinnvoller.

Grüße Uwe

Aber wie kann ich nun einen Motor ansteuern, er muss sich ja auch in zwei Richtungen drehen. Gibt es da vielleicht schon fertige Platinen?

Spontan denke ich da an Modellbau Servos, die via PWM gesteuert werden - mit diesen ICs kann man evtl. sowas bauen

Ein einfacher Motortreiber ist der L298, den es auch fertig verbaut als Modul gibt. Gib mal bei eBay L298 ein, da findest du jede Menge Anbieter. Mit einem Modul kannst du 2 Gleichspannungs Motoren vorwärts und rückwärts drehend betreiben

Ich wiederhole mich; Die Dimensionierung und Wahl der Motore und dementsprechend der Ansteuerung und Stromversorgung hängt von der Größe und Gewicht des Roboter ab. Grüße Uwe

Ich glaube nicht, daß da Gyroskpsensoren verwendet werden, da, wenn sich der Robot meßbar geneigt hat es eigentlich schon zu spät ist gegenzusteuern. Außerdem mißt ein gyroskop die Winkeländerung nicht den aktuellen Wert eines Bauteils gfegenüber de Senkrechten/waagerechten. Eine einfache Möglichkeit ist es 2 Abstandssensoren nach unten zu richten und so die Winkeländerung gegenüber der Waagerechten zu messen. Auch ein Beschleunigungsmesser scheint mit sinnvoller.

Leider ein bisschen falsch. Bei einem sebstbalancierenden Roboter nimmst du einen Gyro und Accelrometer(z.B. MPU6050) da du mit beiden Werten rechnest und das Dingen gibt die Position gegen über Erde schon an das rechnest du dann in einen Winkel um. Du mekst mit dem Gyro schon kleinste ändereungen(16Bit AAuflösung). Du mekst halt die Winkelveränderung und die Geschwindigkeit über der sich der Winkel ändert damit hast du schon mal Werte auf die du regelst dazu kommt noch ein PID-Regler der unterschiedlich aggressiv arbeitet abhänig vom Winkel und der Winkelgeschwindgkeit und "schon" hast du dein Ziel erreicht. (Hört sich leicht an ist aber schon recht aufwändig und für den Einstig ein sehr anspruchvolles Projekt).

Gruß Der Dani

Siehe hier http://madebyfrutos.wordpress.com/2013/05/02/vertibot/

Hier der komplette Arduino Code dazu https://github.com/astromaf/VertiBOT Hardware: MPU6050 http://www.ebay.de/itm/MPU-6050-3-Axis-Gyro-Gyroscope-Accelerometer-Sensor-Module-for-Arduino-/181018466904?pt=Bauteile&hash=item2a258a9a58 Und hier deine Motor geschichte http://www.instructables.com/id/Control-your-motors-with-L293D-and-Arduino/

volvodani Ok ich laß mich bekehren. ;) Also braucht es umbedingt beide, Gyro und Beschleunigungssensor?

Grüße Uwe

hey,

vielen Dank für die Infos. Werde mich euren Vorschlägen annehmen und mich durch die Links arbeiten.

Mit den Motoren ist das so eine sache... ich weiß nicht wie schwer der robi sein wird aber er soll nicht groß und demensprechend auch leicht sein. Das "Gehäuse" habe ich vor mit Fischertechnik zu bauen. Als Motore wollte ich eigentlich 2 Fischertechnik Encoder Motore nehmen und diese über das IC 293D ansteuern mit einem PWM Signal aus dem Arduino. Das sind die Motore:

http://www.knobloch-gmbh.de/wbc.php?pid=2966&tpl=pr1510detail.html

Denkt ihr es ist "OK" mit Fischertechnik zu Arbeiten, bzw. glaubt ihr das die Motore den Ansprüchen gerecht werden?

Vielen Dank und Gruß,

Tobi


@ Uwe: Ich hatte zu beginn des Projekts eigentlich die selbe Vorstellung wie du. Einfach zwei Abstandsmesser neben jedes Rad und dann deren Werte ausgewertet und dementsprechend die Motore angesteuert. Aber im Laufe der Informationssammlung hab ich immer mehr Projekte gefunden die Gyroskopsensoren einsetzen und da ich noch nie was von denen gehört hatte hab ich sie erstmal bestellt :)

440 U/min Leerlauf finde ich zu schnell. Außerdem finde ich keine Angaben bezüglich Nominalstrom. Ich weiß darum nicht, ob Du mit einem L293D ( 600mA) auskommst oder einen L298 und 8 Dioden brauchst.

Hast Du den Motor schon oder mußt Du ihn erst kaufen? Es gibt billigere Motoren. Schau mal bei Pollin.de

Ich habe nach dem Gewicht / Größe gefragt um eine Ahnung zu haben, wie groß das werden soll. Es ist ja alles von 10 cm Modell bis zum personentragenden Sagway möglich.

grüße Uwe

Hallo Uwe,

die Motore habe ich daheim deswegen wollte ich sie nehmen. Bei maximaler Drehzahl fließen ca. 550mA. Das Gehäuse wollte ich mit Fischertechnik bauen.

Aber lassen wir das Gehäuse und die Motoren ersteinmal in den Hintergrund rücken.

Ich bin zurzeit an dem Auslesen der Winkelwerte des Gyroskopsensors mit dem Arduino. Doch dabei gibt es viele Probleme. Die Werte die ich über den Serial Monitor angezeigt bekomme schwanken auch bei ruhig liegendem Sensor enorm ( über 20Grad). Meine Frage ist ob mir hier jemand helfen kann, bzw. ob jemand schonmal mit genau dem selben Board gearbeitet hat. Das ist das Gyroskopsensor Board:

http://1.bp.blogspot.com/-7wbF7MetGxs/T_meUU0x8XI/AAAAAAAAAXM/v2HeJHo8U9k/s1600/6050.JPG

Als Library nutze ich die:

I2Cdev.h

und diese

MPU6050.h

Das ist mein Code den ich nutze:

// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation // is used in I2Cdev.h

include "Wire.h"

// I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files // for both classes must be in the include path of your project

include "I2Cdev.h"

include "MPU6050.h"

// class default I2C address is 0x68 // specific I2C addresses may be passed as a parameter here // AD0 low = 0x68 (default for InvenSense evaluation board) // AD0 high = 0x69 MPU6050 accelgyro;

int16_t ax, ay, az; int16_t gx, gy, gz;

define LED_PIN 13

bool blinkState = false;

void setup() { // join I2C bus (I2Cdev library doesn't do this automatically) Wire.begin(0x68);

// initialize serial communication // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but // it's really up to you depending on your project) Serial.begin(38400);

// initialize device Serial.println("Initializing I2C devices..."); accelgyro.initialize();

// verify connection Serial.println("Testing device connections..."); Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");

// configure Arduino LED for pinMode(LED_PIN, OUTPUT); }

void loop() { // read raw accel/gyro measurements from device //accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

// these methods (and a few others) are also available //accelgyro.getAcceleration(&ax, &ay, &az); accelgyro.getRotation(&gx, &gy, &gz);

// display tab-separated accel/gyro x/y/z values Serial.print("a/g:\t"); // Serial.print(ax); Serial.print("\t"); // Serial.print(ay); Serial.print("\t"); //Serial.print(az); Serial.print("\t"); Serial.print(gx); Serial.print("\t"); Serial.print(gy); Serial.print("\t"); Serial.println(gz); delay(100); // blink LED to indicate activity blinkState = !blinkState; digitalWrite(LED_PIN, blinkState); }

Kann mir hierbei jemand hefen, bitte?

Gruß, Tobi

Hi,

hast du die Beispielsketche ausprobiert bzw. die aktuellste Version der Lib benutzt? Playground

The raw values raises questions in the forums, since the raw values might seem unstable. Below are the raw values of the sensor that I measured, so you can compare them with your own raw values. ...

hey,

danke für die Rückmeldung.

Meinst du die Beispielsketche der library MPU6050 oder welche aus der Arduino IDE Direkt? Die Beispiele der Library habe ich probiert.

Gruß, Tobi