Projekte

Raspberry Pi Roboter Bausatz – Zusammenbau (Teil 1)

Gallery

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.

, , , , , , , , ,


22 Kommentare

  1. Tony Goodhew sagt:

    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

    • Felix sagt:

      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 🙂

  2. Tony Goodhew sagt:

    Should lines 72 and 76 both be backward()?

  3. Stefan Mühlbauer sagt:

    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

    • Felix sagt:

      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

  4. Stefan Mühlbauer sagt:

    Hallo Felix
    würde nicht schaden wenn Du die bisherige Liste posten würdest.

    LG
    Stefan

  5. Christoph sagt:

    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

    • Klaus sagt:

      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.

  6. Rolf sagt:

    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

    • Felix sagt:

      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

  7. Rolf sagt:

    Vielen Dank Felix für die prompte Antwort,
    mit 2 Ohm ist das Problem gelöst.
    LG Rolf

  8. Bastian sagt:

    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

  9. Bastlian sagt:

    hi, könnte mich kurz jemand aufklären welche aufgabe genau das driver board übernimmt? 🙂

    • Felix sagt:

      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

  10. Felix sagt:

    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?

    • Felix sagt:

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

  11. Klaus sagt:

    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.) ?

    • Felix sagt:

      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.

  12. Raspifrosch sagt:

    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.

    • Felix sagt:

      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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blog abonnieren

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