Raspberry Pi Roboter Bausatz – Zusammenbau (Teil 1)

8. Dezember 2016
57 Comments

Neben vielen interessanten Projekten mit dem Pi ist ein selbstgebauter Roboter ein kleines Highlight, da er viele Komponenten zusammenführt. In den folgenden Teilen werden wir Schritt für Schritt einen Roboter mit vielen (selbständigen) Funktionen erstellen.

Im ersten Teil der Raspberry Pi Roboter Tutorials bauen wir den Bausatz zusammen und legen Funktionen zum Steuern der Motoren an, womit der Roboter bereits in alle Richtungen fahren kann. Diese werden in den folgenden Teilen benötigt, wenn wir unseren Roboter z.B. fernsteuern oder einer Linie folgen lassen wollen.

 

Bausatz und Zubehör

Es empfiehlt sich einen Bausatz zu nehmen, welcher bereits das nötigste beinhaltet. Ich habe dazu einen Bausatz mit zwei steuerbaren Rädern genommen, allerdings gibt es auch welche mit 4 Rädern. Anfängern würde ich empfehlen, sofern man dem Tutorial exakt folgen will, den selben Bausatz zu verwenden – es sollte aber nicht all zu viel Aufwand sein, den Code für vierrädrige Karosserien anzupassen.

In diesem Tutorial habe ich folgendes verwendet, da neben dem Bausatz an sich auch noch u.a. ein Motoren Driver IC benötigt wird:

Welches Raspberry Pi Modell verwendet wird, spielt keine Rolle. Ein Raspberry Pi Zero ist praktisch, da es leicht ist und wenig Platz benötigt, allerdings können später nur schwer Erweiterungen (wie z.B. USB Kameras) angebracht werden.

 

Raspberry Pi Roboter Bausatz aufbauen

Neben den Rädern und Motoren kommt der Bausatz mit einigen Schrauben und Platten, welche wir zusammenbauen werden. Die enthaltenen Teile des zweirädrigen Bausatzes sind folgende:

Raspberry Pi Roboter Bausatz Übersicht

Raspberry Pi Roboter Bausatz Übersicht

Als erstes werden wir die Motoren fest schrauben. Dazu nehmen wir erst einmal die beiden Motoren und befestigen die Rädchen daran:

Raspberry Pi Roboter Bausatz Motoren

Mit Hilfe der 4 langen Schrauben sowie wie den 4 kleineren Platten werden die Motoren an der großen Platte befestigt. Dazu wird auf mittig beiden Seiten eine Platte durch das passende Loch geschoben. Der Motor wird daneben platziert. Es muss darauf geachtet werden, dass die Verbindungen beider Motoren jeweils nach innen zeigen.

Raspberry Pi Roboter Bausatz Motor Achse

Auf den äußeren Seiten werden die verbliebenen zwei Platten platziert und die langen Schrauben (von außen) durchgeführt. Innen werden die kleinen Muttern angebracht und damit die Motoren befestigt.

Raspberry Pi Roboter Bausatz Motoren befestigt

Falls du die Batterien anstelle einer Powerbank verwenden willst, kannst du den Schalter noch in das mittige Loch stecken.

Als nächstes wird das Vorderrad befestigt. Wir nehmen uns dazu das drehende Rad, die 4 Abstandshalter sowie 8 Schrauben. Ich empfehle das Rad etwas zu ölen, bevor es befestigt wird, da es sich manchmal nur schwer bewegen lässt.

Raspberry Pi Roboter Bausatz Vorderrad

Die vier Abstandshalter werden zuerst an das Rad geschraubt. Anschließend werden sie mit den restlichen Schrauben vorne an der Platte befestigt. Außerdem kannst du die Hinterräder an en Motoren befestigen.

Nun müssen nur noch jeweils zwei Kabel an die „Laschen“ (siehe 2. Bild sowie 3. Bild, linke Seite) des Motors gelötet werden, was ein wenig Feingefühl benötigt. Wenn die die Motoren testen möchtest kannst du anschließend je ein Kabel an 3.3V (Pin 1) vom Raspberry Pi heften und eines an GND (Pin 6). Der Motor sollte sich nun bewegen (ob vorwärts oder rückwärts spielt erst einmal keine Rolle).

 

Der letzte Schritt ist nicht nur für jene, die Batterien verwenden wollen, da die Motoren einen höheren Strom brauchen, als der Raspberry Pi zur Verfügung stellen kann. Dazu muss der Batteriehalter mit den verbleibenden zwei Schrauben und Muttern auf der vorderen Oberseite der Platte befestigt werden. Die Kabel können durch das kleine runde Loch in der Mitte nach unten verlegt werden:

Um die Batterien als Spannungsquelle für den Pi nutzen zu können, brauchst du den Spannungswandler LM2596. Damit wird die Spannung auf 5V angepasst (zum Tutorial). Zwischen USB Anschluss und Spannungswandler kannst du den Schalter verbinden, um so die Stromversorgung ggf. unterbrechen zu können. Der Einfachheit halber nutze ich allerdings eine Powerbank für die Stromversogung des Pi. Im schematischen Aufbau ist der Spannungswandler der Vollständigkeit halber dennoch vorhanden. Die Spannung für die Motoren kommt von den Batterien.

 

 

Anschluss der Motoren

Um die beiden DC Motoren vorwärts und rückwärts laufen lassen zu können, benötigen wir den Motor Treiber IC (L293D). Dieser kann 4 Channel steuern, reicht also perfekt für unsere zwei DC Motoren. Im folgenden schematischen Aufbau kannst du die Verbindungen sehen:

Raspberry Pi Roboter Bausatz DC Motoren L293D+LM2596

Die genaue Funktionsweise und Verkabelung ist auch u.a. in diesem Tutorial beschrieben, daher gehe ich hier nicht genauer darauf ein. Als GPIO Pins für den linken Motor nehme ich 17 und 27 sowie 23 und 24 für den rechten Motor. Achte darauf, dass eine externe Stromversorgung (Batterien) benutzt wird, da der 5V Pin des Pi’s nicht ausreicht (Motoren klappern dann nur).

 

 

Code zum Bewegen des Roboters

Als letztes, bevor der Roboter seine ersten Schritte fährt, fehlt noch der entsprechende Code. Dafür habe ich eine Klasse geschrieben, welche auch in den folgenden Teilen verwendet wird.

Wir erstellen einen Ordner, in welchen alle Dateien des Roboters hinein kommen und erstellen die Datei, in welche der Code für den Motor kommt:

sudo mkdir RaspberryPi-Robot
cd RaspberryPi-Robot
sudo nano l293d.py

Die Datei bekommt folgenden Inhalt:

Mit STRG+O, STRG+X speichern und schließen wir den Editor. Wir starten einen ersten Test, in dem der Roboter ein paar Zentimeter fährt und sich einmal im Kreis dreht:

sudo python

Falls die Funktionen nicht funktionieren, wie sie sollten (fährt rückwärts statt vorwärts, etc.) einfach mal die beiden Kabel eines Motors tauschen und erneut testen. Die GPIO Belegung muss natürlich angepasst werden, sofern sie von der hier verwendeten Belegung abweicht.

 

Anpassen der Motoren-Parameter

Für die weiteren Teile ist es wichtig, dass die beiden Parameter DIST_PER_SEC und SEC_PER_TURN richtig angegeben werden. Diese sind allerdings vom Untergrund abhängig (Teppichboden, Parkett, Fließen, etc.) und müssen daher individuell gemessen werden.  Um DIST_PER_SEC zu messen, reicht es folgenden Befehl auszuführen:

l.forward();time.sleep(1.0);l.stop()

Anschließend kannst du einfach den zurückgelegten Abstand messen und den Wert (in Zentimeter) eintragen.

Um SEC_PER_TURN zu messen, ist ein wenig Geschick nötig. Und zwar starten wir dafür einen der Motoren und stoppen, sobald eine 360° Umdrehung fertig ist. Hier musst du etwas mit der Wartezeit spielen, bis du einen guten Wert gefunden hast:

wartezeit = 2.08
l.forwardLeft();time.sleep(wartezeit);l.stop()

Danach müssen beide Werte noch in der Datei angepasst werden.

 

Im nächsten Teil werden wir den Roboter einer Linie folgen lassen.

57 Kommentare

  1. I do not like these caster wheels. If you try to go forward, stop and then backward the wheel turn about its pivot point and changes the orientation of the robot. You should be able to go backward and forward repeatedly along the same line.
    I think these are better:
    https://www.amazon.co.uk/Ball-Caster-Metal-3-8/dp/B0054JDI0G
    but you may need more spacers.
    Sorry, I do not speak German but I can follow the code, diagrams and pictures.
    Great site, Thanks

    Antworten
    • You’re right, I had this problem, too. It should be no problem to use another wheel but using the same code. I’m glad you liked it 🙂

      Antworten
  2. Hi
    könntest Du evtl. eine Liste aller Bauteile die im Workshop verwendet werde veröffentlichen dann könnte man alle Bauteile auf einmal bestellen.

    LG
    Stefan

    Antworten
    • Hi Stefan,
      das hatte ich vor zu tun, sobald alle Tutorials fertig sind. Es soll nämlich möglich sein auch bestimmte Teile zu überspringen.
      Falls gewünscht kann ich aber meine bisherige Einkaufsliste hier schon mal posten.
      LG, Felix

      Antworten
  3. Hallo Felix,

    kannst Du Deinen Code eventuell um die Funktion PWM für die Geschwindigkeit ergänzen?

    Habe für den L298 eingesetzt, dort kann ich über ENA & ENB über PWM die Geschwindigkeit steuern.
    Bei meinem 4WD läßt sich dann hoffentlich der Kurvenradius verbessern, z.Bsp.
    In1= links-vor, In2= links-zurück, In3=rechts-vor, In4=rechts-zurück, ENA = links, ENB = rechts

    Linke Kurve: ENA = 30, ENB = 100, In1=high, in2=low, in3=high ,in4=low
    Rechte Kurve: ENA = 100, ENB = 30, In1=high, in2=low, in3=high ,in4=low

    und rückwärts:
    Linke Kurve: ENA = 30, ENB = 100, In1=low, in2=high , in3=low, in4=high
    Rechte Kurve: ENA = 100, ENB = 30, In1=low, in2=high , in3=low, in4=high

    Außerdem halte ich es für sinnvoll die Eingänge dauerhaft bereits in der Class „L293/8D“ einzugeben

    ENA = 17
    IN1 = 27
    IN2 = 22
    IN3 = 24
    IN4 = 23
    ENB = 18

    Und ggf. eine PWRmax für PWM vorzugeben: PWM_MAX = 100

    Leider scheiter ich gerade an genau der Geschwindigkeitsregulierung.

    Danke & Gruß
    Christoph

    Antworten
    • Hallo Christoph,

      Ich will den Roboter ebenfalls bauen und würde auch gerne ein Modell mit 4 Rädern umsetzen. Hat es bei dir mittlerweile funktioniert? Falls ja, funktioniert das verfolgen der Linie und das auswichen von Hindernissen bei dir auch?
      Über eine Antwort würde ich mich freuen.

      Antworten
  4. Hallo Felix,
    ich habe viel Spaß mit dem Roboter und Deine Tutorial funktionieren sehr gut.
    Für den Spannungsregler war wohl die Eingangsspannung vom Batterieblock zu gering. Ich habe ebenfalls wie Du ein Powerpack benutzt und damit klappt es wie es soll.
    Ein Problem habe ich noch: Ein Motor läuft langsamer als der andere und somit kann ich keine Geradeausfahrt erreichen. Wie kann ich dieses Problem lösen?

    Für eine Antwort vielen Dank und Gruß
    Rolf

    Antworten
    • Hi Rolf,
      freut mich, dass die Tutorials dir gefallen.
      Versuch doch mal verschieden große Widerstände zwischen die Stromversorgung des schnelleren Motors zu schalten.
      LG, Felix

      Antworten
  5. Hallo Felix,

    ich habe das Problemm, dass ich wenn ich den beispielcode ausführe, sich nur ein motor entsprechend verhält und der andere dauerhaft dreht??
    Vllt kennt ja jemand das Problem und weiß hilfe 🙂

    Gruß

    Basti

    Antworten
    • Zum einen wird die höhere Spannung abgegeben (Pi kann nur 3.3V schalten, Motor will mehr) und außerdem muss beim rückwärtsfahren anders gepolt werden, was der Driver Board auch übernimmt.
      LG, Felix

      Antworten
  6. Hallo, Ich würde das gerne nachbauen, nun meine Frage:
    Ich würde die Grundplatte gerne aus Aluminium machen und noch ein Gehäuse aus Alu oder Holz bauen, aber sind die Motoren des Sets dann noch stark genug? Und wenn nein, wo bekomme ich stärkere Motoren die auch 90 Grad gedreht sind?

    Antworten
    • Wie schwer wird die Konstruktion denn? Du kannst auch andere DC Motoren nutzen, die stärker sind (und man ein Rad daran anbringen kann).

      Antworten
  7. Hallo,

    ich habe gesehen, dass es auch solche Motor Shields gibt (https://www.amazon.de/Adafruit-Schrittmotor-HAT-für-Raspberry/dp/B00WU4QA30/ref=sr_1_8?s=ce-de&ie=UTF8&qid=1487533545&sr=1-8&keywords=raspberry+pi+motor) oder (https://www.amazon.de/dp/B01MRKBO8L/ref=sr_1_7?s=ce-de&ie=UTF8&qid=1487533545&sr=1-7&keywords=raspberry+pi+motor)

    Könnte man auch ein solches Motor Shield verwenden und dafür auf den L293D IC und den und das Breadboard irgendwie verzichten? Bzw. würden die weiteren Teile des Projekts dann auch noch funktionieren (Ultra-Schall etc.) ?

    Antworten
    • In der Beschreibung des ersten Links steht, dass man auch DC Motoren damit betreiben kann, also würde ich zu ja tendieren. Ob du damit aber z.B. auch rückwärts fahren kannst, kann ich nicht sagen.

      Antworten
  8. Hallo, ich bin raspifrosch und habe jetzt alle Teile für den Roboter. Nach Plan habe ich den ersten Schritt getan, aber die Motoren zucken nicht. Ich habe den Raspberry3 über das Spannungsreglerteil angeschlossen. Ist in der Zeichnung nicht in und out vertauscht?
    Auch ohne dieses Teil passiert mit Batterien nichts. Muss ich denn den Raspy auch über microusb mit Spannung versorgen? Nur über die Batterien arbeitet er nicht.

    Antworten
    • Nein, wieso sollte es vertauscht sein? Falls keine Powerbank vorhanden ist, kommt der Strom eben aus den Batterien. Ich empfehle allerdings die Powerbank Variante. Der Pi braucht natürlich Spannung über den MicroUSB Port.

      Antworten
  9. Hallo,
    ich möchte für das Projekt gerne einen größeren Aufbau verwenden.
    Kannst du mir sagen, wie die hier verwendeten Motoren heißen (Bauteilbezeichnung oder Kennung – ähnlich L293D etc.)?
    Und kannst du geeignete Motoren empfehlen, die etwas mehr Leistung bieten?

    Vielen Dank

    Antworten
  10. Hallo Felix,
    tolles Projekt hast Du da! Ich würde das gerne nachbauen, bin aber ganz am Anfang (mein erstes Projekt überhaupt). Ich habe mich für die Powerbank-Variante entschieden -> damit entfallen Batterien, Spannungswandler und ich habe nur eine 5V Verbindung zu GPIO 1 bei Pi, richtig? Ich habe auch wie Du geschrieben hast, ein Mini Breadboard benutzt. Damit habe ich aber keine 2 Außenreihen wie beim Standard Breadboard in Deiner Zeichnung. Bin mir nicht sicher, ob ich das Stecken richtig adaptiert habe. Wäre es möglich, dass Du kurz die Verkabelung mit Powerbank und MiniBreadboard für einen Noob wie mich zeigst?

    Antworten
  11. Hallo,
    Ich hätte mal bezüglich der Jumper Kabel eine Frage.
    Es gibt ja male-female & female-female welche davon sollte ich nutzen für dieses Projekt? 🙂

    Antworten
    • Für alles, was direkt auf den Pi kommt: Eine Seite Female
      Für alles, was in ein Breadboard kommt: Eine Seite Male:
      Für die meisten Sensoren (aber nicht alle): Eine Seite Female

      Antworten
  12. Hallo Felix,
    Kann man also in der Schaltskizze einfach statt den Batterien eine Powerbank nehmen?
    Bzw. sind die vier Batterien genug Leistung um auch länger zu halten?

    Antworten
  13. Hallo,

    wird die Code Erweiterung in dem oberen geschriebenen Code angepasst, oder schreibt man dafür eine weitere Datei mit den paar Zeilen.

    Da ich mir die Python Kenntnisse erst hiermit aneignen möchte, ist mir dies leider nicht ganz klar.

    Jedenfalls ein sehr interessantes Projekt, welches du hier präsentierst.

    Gruß Paul

    Antworten
    • Die paar Zeilen kommen in eine separate Datei oder werden einfach in der Python Konsole ausgeführt (Indiz für eine neue Datei ist meist das import an erster Stelle).

      Antworten
  14. Hallo Felix,
    1) Soll sudo mkdir RaspberryPi-Robot
    cd… in den Terminal geschrieben werden und der code dann in die geöffnete Datei?
    2)Nach sudo python soll da noch der dateiname oder so? Weil ohne kommt bei mir eine Art Fehlermeldung.
    3) Um am Schluss die beiden Parameter messen, muss eine neu datei geöffnet werden? Und was muss außer den drei Befehlen rein?
    (Bin neu deshalb die ganzen Fragen)

    Antworten
    • 1) Ja, ins Terminal (sudo ist generell ein Hinweis, dass es im Terminal ausgeführt wird [mit Rootrechten])
      2) Ohne Dateiname (nur sudo python) öffnest du die Python Konsole. Mit exit() kannst du diese beenden.
      3) Du kannst es entweder in eine Datei speichern und dann ausführen oder sequentiell in der Reihenfolge in die Python Konsole eingeben.

      Antworten
  15. Hallo Felix,
    ich habe jetzt (glaube ich zumindest) den Großteil verstanden bis auf den letzten Teil, wo man die Werte misst, was muss man genau alles schreiben bis auf die drei befehle (ich dachte noch import, bzw. auch ‚l‘ festlegen)???
    Danke im Voraus

    Antworten
    • Ich bin davon ausgegangen, dass man die Python Konsole bereits geöffnet und die vorherigen Befehle eingegeben hat (wie oben beschrieben). Da ist ja bereits import usw. enthalten, daher können diese Befehle einfach hintereinander eingegben werden.

      Antworten
  16. Hallo Felix,
    Bis vor ein bis zwei Wochen ging noch alles, nur wollte ich jetzt nochmal die Werte DIST_PER_SEC und DIST_PER_SEC nochmal genau messen. Mein Problem ist jetzt, dass sich nichts mehr tut auch wenn ich nochmal den ersten test (mit dem drehen und gerade aus fahren) ausführe. Wenn ich die Motoren direkt an die Batterie anschließe bewegen sie sich, wobei die Spannung nur bei ca. 3V liegt…
    Ist die Spannung zu niedrig um das Programm durchzuführen (habe den Raspberry gerade am Netzteil aber normalerweise käme er auch noch an die aa Batterien)?
    Ps: Du machst richtig gute Projekte und auch gut erklärte!

    Antworten
    • Hi Marvin,
      kann es sein, dass sich ein Kabel oder so gelöst hat? Wenn sich nichts (am Code) verändert hat und etwas auf einmal nicht mehr funktioniert, klingt das üblicherweise nach einem Wackelkontakt o.ä.

      Antworten
      • ich habe jetzt nochmal alle kabel rein- und rausgsteckt , aber es ist immer noch alles gleich. ist denn die Spannung von den Batterien von ca. 3vVüberhaupt ausreichend, an dem Modul direkt kommt auch nur so 2.4V raus für den Motor. Eigentlich müsste die Spannung von den Batterien doch eher so im Bereich 5-6V liegen, oder?

  17. Nachdem ich die Datei neu geschrieben und gespeichert habe kommt bei mir bei dem Test immer eine Fehlermeldung wenn ich die 3. Zeile eingebe: cannot Import name L293D

    Antworten
  18. Wenn ich bei dem Test eingebe: l=L293D(17,27,23,24)
    Kommt immer wieder der Fehler: this constructor Takes No arguments

    Antworten
  19. Ich hätte mal noch eine Frage, wenn ich den Test im Terminal eingebe passiert nichts. An den Batterien liegt es nicht 🤔

    Antworten
  20. Hey,
    ich habe den Bausatz bestellt. Bei mir waren diese kleinen runden Plättchen, die an den Motor gesteckt werden gegenüber der Räder nicht dabei.
    Brauche ich die Plättchen (Rädchen) zwangsweise? Für was genau sind die denn da?

    Antworten
    • Nur als Schalter?
      Beim 10k Widerstand ist nur wichtig, dass bei fließender Spannung, nur ein minimaler Teil zu GND fließt (hier ginge auch 4.7k oder mehr). Bei 3.3V kann der kleine Widerstand auch weggelassen werden. Ich habe diesen rein, um zu zeigen, dass nur ein kleiner Strom nötig ist, um den Transistor zu schalten.

      Antworten
  21. Hallo Felix,
    Hilfe!!! Mein Roboter ist unfassbar schnell. Weißt du wie ich den kleinen langsamer fahren lassen kann?
    Hier steht was von pwm.
    Kannst du evtl. kurz beschreiben wie das geht?

    Antworten
    • Durch PWM kannst du den Motoren weniger Strom zukommen lassen, wodurch sie langsamer werden. Darauf bin ich in dieser Tutorial Reihe nicht eingegangen. Eventuell kommt dazu in der Zukunft etwas.

      Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!