Eine Menge Motoren einzelnd ansteuern

Hey, ich habe folgendes Problem, ich will einen Roboter bauen, dafür brauche ich einige Motoren (die genaue Anzahl weiß ich noch nicht, ich schätze aber, es werden um die 20).

Ich habe mir schon Tutorials angesehen, aber die nutzen alle nur so um die 4 Motoren.

Kollegen die ein wenig mit Arduinos arbeiten sagten, ich könnte theoretisch unendlich viele Shields hintereinander schalten und pro Shield mehrere Motoren anschließen.

Dazu habe ich jedoch nichts im Internet gefunden, deshalb stellt sich mir die Frage, ob das wirklich möglich ist, da meine Kollegen soetwas noch nicht realisiert haben.

Ich studiere technische Informatik und habe davor als Klassenbester einen der schwersten Bildungsgänge in unserer Gegend abgeschlossen, durch die ich mich grundsätzlich mit Mikrocontrollern, Elektrotechnik und Programmieren (C/C++/Java) auskenne, sollte also zu schaffen sein, denn mir ist auch klar, dass es nicht von heute auf morgen funktionieren wird.

Also, funktioniert das mit den Shields oder ist das Quatsch und ich muss ganz anders an die Sache herangehen? :slight_smile:

Mit freundlichen Grüßen
Duco95

Ist ein einfaches Rechenexempel. Du benötigst voraussichtlich 2 Signale pro Motor: Richtung und Speed. Wenn die Portpins nicht reichen, benötigst du entweder den nächstgrößeren Kontroller oder Portexpander, um so extern mehr Leitungen zu schaffen, was natürlich die Programmierung verkompliziert und langsamer wird, da das Daten aufbereiten und rausschicken Prozessorzeit kostet. oder du benötigst Motortreiber mit einem Bussystem. Ob das nun CAN, I2C, SPI oder was auch immer ist. Dieses ist dann thoretisch nur durch die Anzahl der verfügbaren Adressen beschränkt.

Was genau wird das denn? Ein Roboter mit ca 20 Motoren? Was muss man sich darunter vorstellen?

Bei Roboter nimmt man oft Modellbauservo. Diese brauchen nur 1 Pin. Der Arduino uno mit der Servo.Bibliothek kann 12 davon ansteuern, der Mega 2560 48.
Grüße Uwe

Es soll ein Roboter wie bei Real Steel werden, also genau genommen 2, aber der 2. kommt logischerweise nachdem ich es geschafft habe den Roboter zu bauen.

Die Roboter sollen kämpfen, also brauche ich für jedes Gelenk was man im Körper hat, was dafür nötig ist, dass es etwas nach Mensch aussieht, einen Motor.

Was mich direkt zur nächsten Frage bringt, wenn ich zwei Motoren spiegelverkehrt aneinander bringe und diese dann beide nach vorne bewege (also eigentlich in zwei verschiedene Richtungen arbeiten lasse, da der zweite Motor ja andersherum angebracht ist), habe ich dann die doppelte Kraft, oder kann ich das nicht so einfach machen? Für den Anfang reicht mir die Bewegung, da muss erstmal nicht ordentlich Kraft hinter sein, aber wenn ich irgendwann zwei habe und die gegeneinander kämpfen lasse, sollte da Kraft im Spiel sein :slight_smile:

Mir ist auch klar, dass das Gleichgewicht ein Problem sein wird, aber falls ich es nicht hinbekomme mit dem Gleichgewicht, habe ich dafür auch schon eine "Not-Lösung"

Danke für die schnellen Antworten!

Mit freundlichen Grüßen
Duco95

Real Steel? Wenn du es schaffst den Roboter zum Gehen zu bewegen ohne umzufallen hast du schon großes vollbracht. Kämpfen??? Niemals :o

Shields haben häufig den Nachteil der geringen Flexibilität bei der Belegung der I/O-Pins. Das Adafruit Motor/Stepper/Servo Shield for Arduino v2 Kit - v2.3 ist da eine Ausnahme1), da es mittels I2C angesteuert wird:

"Completely stackable design: 5 address-select pins means up to 32 stackable shields: that's 64 steppers or 128 DC motors! What on earth could you do with that many steppers? I have no idea but if you come up with something send us a photo because that would be a pretty glorious project."

Nur auf die Schrittmotoren bezogen, benötigst Du also die 2 I/O-Pins vom I2C-Bus. Wenn Du dann noch einen Mega2560 verwendest, hast Du genügend Pins für Sensoren. Zweifel kommen mir allerdings, ob ein Mega2560 schnell genug in der Verarbeitung ist.

Ohne Shield würde ich DRV8825 verwenden, benötigt STEP und DIR zur Ansteuerung. Aber da könnte ein Mega wegen der Verarbeitungsgeschwindigkeit in die Knie gehen.

Praktisch kenne ich nur die 16 MHz Arduinos, ob beispielsweise ein Arduino Due für Dich geeigneter wäre, müssen andere sagen. Mein Ansatz wäre, beispielsweise mehrere Nanos mit einem Mega2560 werkeln zu lassen, die dann mittels I2C-Bus mitteinander kommunizieren. Also der Mega macht das Gehen mit Gleichgewicht, ein Nano die Hände, ein Nano Kopf und Kommunikation.

Üblich sind, wie Uwe schon schrieb, Servos, die ja auch Motoren mit Getriebe enthalten und bereits eine Lageüberwachung (des Servos, nicht des Roboters) enthalten. Schrittmotoren benötigen eine Positionserfassung, Servos haben sie mittels Poti eingebaut, dafür aber einen begrenzten Bewegungswinkel.

Ich würde mich freuen, irgendwann Deinen Robi in der Galerie der vollendeten Projekte bestaunen zu können, auch wenn er nur Beulen vom Umfallen haben sollte :slight_smile:


  1. Das liest sich wie Werbung, ist aber nur meine Meinung.

Danke an alle.

@Scherheinz
Wird das Problem das er seitlich umkippt oder vorwärts?

@agmue
Nein es liest sich nicht wie Werbung, und da ich von Arduinos und den Shields kaum Erfahrung habe, hilft mir alles weiter.

Duco95:
Was mich direkt zur nächsten Frage bringt, wenn ich zwei Motoren spiegelverkehrt aneinander bringe und diese dann beide nach vorne bewege (also eigentlich in zwei verschiedene Richtungen arbeiten lasse, da der zweite Motor ja andersherum angebracht ist), habe ich dann die doppelte Kraft, oder kann ich das nicht so einfach machen?

Hallo,

ja hast du. Ich stell mir das immer praktisch vor, gerade jetzt im Winter. Auto steckt fest. Einer versucht zu schieben. Geht nicht. Dann schieben zwei Leute, klappt. Also muß mehr Kraft vorhanden sein. :slight_smile:

Bei uns auf Arbeit arbeiten auch 2 Motoren zusammen auf einer Achse. Drehen beide in die gleiche Richtung, dreht er sich jeweils nach links oder rechts. Drehen die Motoren entgegengesetzt, fährt der Arm aus oder zurück. Man muß sich einen bewegten Froschschenkel vorstellen.

Da hier im Forum kaum jemand Erfahrung mit 20 Servos/Schrittmotoren haben dürfte, könnten Leistungstests sinnvoll sein. Servos/Schrittmotoren werden nur gesteuert, nicht geregelt, daher kannst Du einfach so tun, als wenn Du 20 Servos/Schrittmotoren angeschlossen hättest, auch wenn tatsächlich nur ein oder zwei Servos/Schrittmotoren vorhanden sind. Wenn die Servos/Schrittmotoren gut laufen, kannst Du weitermachen, wobei weitere Funktionalitäten den Arduino zusätzlich belasten werden. Mit dem Messen eines loop()-Durchgangs hast Du aber dann schon mal eine Hausnummer. Auf jeden Fall solltest Du Dein Projekt offen halten, um bei Rückschlägen flexibel reagieren zu können. Ich schreibe das, weil ich hier im Forum gelegentlich Gegenteiliges lese.

Der I2C-Bus ist auch nur endlich schnell, weshalb mir für dein Projekt eine Ansteuerung per SPI besser gefallen würde. Ein entsprechendes Shield ist mir aber nicht bekannt, was ja aber nichts heißen muß.

Unter "RepRap" gibt es Boards/Shields zur Ansteuerung von Schrittmotoren. Da habe ich aber selbst noch nicht so viel geschaut.

Ich glaube bei Deinen mangelnden Mechanikkentnissen ist Dein Projekt zum Scheitern verurtelt.

Du willst einen Roboter bauen der ca 180 groß ist und sicher 200 kg schwer? Den willst Du dann mit 20W Motoren antreiben?

Grüße Uwe

Nein, natürlich nicht, es soll erst ein kleiner werden, wenn das alles einwandfrei funktioniert und ich irgendwann genug Geld habe soll es ein 2 Meter großer Roboter werden, aber darum geht es momentan nicht :slight_smile:

Hallo,

ein Weg wäre mit Spielzeugrobotern anzufangen und eine eigene Steuerung zu entwicklen, bzw. die Roboter zu pimpen. Damit könnte man z.B. starten: ROBOSAPIEN vs PLANET FIGHTER - YouTube

erstmal musst Du festlegen, welche Arten von Motoren Du verbauen willst. Wie Du aus den bisherigen Posts schon siehst, macht es einen Unterschied, ob es ein Modelbau-Servo, ein Schrittmotor oder ein "herkömmlicher" DC-Motor ist. Dann musst Du Dir Gedanken darüber machen, was der max. Strom ist, den diese Motoren aufnehmen können (Stichwort Halte- und Kurzschluss-Strom). Dann ist es noch wichtig, ob die Motoren immer nur in eine Richtung drehen müssen oder ob die Drehrichtung auch umgekehr werden soll (ersteres einfach, zweiteres aufwändiger) bzw. ob Ein/Aus reicht oder ob die Geschwindigkeit auch geregelt werden soll.

Wenn Du diese ganzen Parameter hast, können wir Dir auch verraten, wie Du die Motoren ansteuern kannst. Alles andere ist pures Gerate.

PS: alternativ wäre insbesondere für die Hardware-Fragen ggf. auch www.roboternetz.de für Dich interessant.

mgcss:
Dann ist es noch wichtig, ob die Motoren immer nur in eine Richtung drehen müssen oder ob die Drehrichtung auch umgekehr werden soll (ersteres einfach, zweiteres aufwändiger) bzw. ob Ein/Aus reicht oder ob die Geschwindigkeit auch geregelt werden soll.

Ich verstehe nicht wie bei einem Roboter mit Armen und Beinen ein Motor nur in eine RIchtung drehen kann.
Grüße Uwe

uwefed:
Ich verstehe nicht wie bei einem Roboter mit Armen und Beinen ein Motor nur in eine RIchtung drehen kann.
Grüße Uwe

mittels Exzenter ... duck und weg :slight_smile:

mittels Exzenter ... duck und weg :slight_smile:

Meine Scheibenwischer-Roboter vorne und hinten im Auto können das auch.
Der vordere hat sogar zwei Arme und insgesamt nur einen DC-Motor (ohne H-Brücke) 8)

Die bewegen sich aber einen festbestimmten Winkel hin und zurück. Bei einem Roboter sollte aber die Bewegung ( Winkel, Länge) frei wählbar sein.
Grüße Uwe

Duco95:
Was mich direkt zur nächsten Frage bringt, wenn ich zwei Motoren spiegelverkehrt aneinander bringe und diese dann beide nach vorne bewege (also eigentlich in zwei verschiedene Richtungen arbeiten lasse, da der zweite Motor ja andersherum angebracht ist),

So geht das auch. Beide Motoren können sogar im selben Drehsinn drehen...

@mgcss
Sie müssen in beide Richtungen drehen können, mit unterschiedlicher Geschwindigkeit.

welche Motoren ist mir vom Prinzip her egal, da ich ihn erst aufbauen will, und wenn er dann funktioniert will ich ihn weiter ausbauen (ggfs. einen neuen)

Welche Möglichkeit wäre denn die kostengünstigste?