Raspberry Pi Roboter per Infrarot Fernbedienung steuern (Teil 3)

15. Dezember 2016
21 Comments

Nachdem unser Roboter bereits Fahren und einer Linie zu folgen gelernt hat, wollen wir ihn nun auch noch fernsteuern lassen. Dafür werden wir zunächst eine Infrarot Fernbedienung nutzen und später evtl. noch zusätzlich einen Xbox 360 Controller. Neben dem Steuern der Fahrfähigkeit sollen sich auch die Modi (Linie folgen, Autopilot, etc.) einstellen lassen.

In diesem Teil der Raspberry Pi Roboter Tutorials programmieren wir den IR Empfänger und legen die Befehle zum Fernsteuern an. Im Video dazu ist die Fernsteuerung zusätzlich gezeigt.

 

 

Zubehör

Neben den vorherigen Bauteilen brauchen wir für dieses Tutorial noch einen IR Fernbedienung und Infrarot Diode (hier als Kit verfügbar). Meist sind die Jumper Kabel schon dabei und die Diode kann direkt angeschlossen werden. Solltest du die Dioden einzeln kaufen (oder noch verfügbar haben), wirf bitte einen Blick ins Datenblatt, um bei der nachfolgenden Verkabelung auf Nummer sicher zu gehen.

Die IR Diode mit Fernbedienung kannst du im übrigen auch zur generellen Fernsteuerung deines Raspberry Pi’s verwenden, sei es in einem Multimediasystem wie KODI oder einfach nur um Skripte zu starten.

 

 

Anschluss des IR Empfängers

Der Anschluss des Infrarot Empfängers am Raspberry Pi ist sehr einfach, da das Modul lediglich drei Pins hat. Solltest du einen Empfänger inkl. PCB verwenden (siehe oben), so werden die Anschlüsse benannt sein. Ansonsten müsstest du im Datenblatt nach der richtigen Belegung schauen, da diese ggf. abweichen kann.

Im Prinzip wird der VCC Pin an einen freien 5V Pin des Raspberry Pi’s angeschlossen, der GND Pin an Masse / GND vom Pi und der mit IN / DATA beschriftete Pin kommt an GPIO 26.

Raspberry Pi Roboter Infrarot IR Steuerung

Bisherige Schaltung des Raspberry Pi Roboters (inkl. IR Empfänger)

 

Vorbereitung

Für die Nutzung des Infrarot Empfängers brauchen wir das Programm Lirc. Die Installation und Einstellung von Lirc habe ich bereits in einem vorherigen Tutorial gezeigt. Ich gehe davon aus, dass dieses umgesetzt wurde, da wir im folgenden ein eingerichtetes Lirc brauchen. Im unteren Abschnitt (Infrarot Raspberry Pi Universalfernbedienung – Programme starten) geht es um das Erstellen der lircrc Datei. Um den Roboter zu steuern und die Befehle später in unserem Skript zu erkennen, müssen wir eine solche Datei erstellen.

Sobald du also Lirc installiert und getestet hast, erstellen wir im Ordner, worin sich die restlichen Roboter Skripte befindet, diese Datei:

cd robot/
sudo nano lircrc

Folgender Inhalt wird in die Datei geschrieben. Du kannst natürlich auch eine andere Belegung wählen, diese habe ich genommen:

Gleich werden wir auf die Codes der Fernbedienung warten. Dazu wird die Zeichenkette unter „config“ dem Programm übergeben. Du kannst hier später auch noch weitere Tasten belegen, um bspw. später noch andere Aktionen aufrufbar zu machen. In meinem Fall wird mit der Play/Pause Taste der Modus zum Folgen einer Linie gestartet.

Um Lirc gleich auch per Python nutzen zu können, installieren wir anschließend noch eine entsprechende Bibliothek:

sudo apt-get install python-lirc

Solltest du Python 3 nutzen, so lautet das Paket python3-lirc.

 

 

Code zum Infrarot Signale empfangen

Wir erweitern unsere zuvor erstellte Roboter Klasse. Dazu erstellen wir die Funktion IRControl() nach Ende der Funktion lineFollowModeOn(self).

 

Den kompletten (bisherigen) Code kannst du außerdem hier ansehen. Gespeichert wird im Nano Editor wie immer mit STRG+O und geschlossen mit STRG+X.

 

Hintergrundprozess zum Steuern des Roboters

Nun wollen wir das ganze auf Funktionalität testen. Dazu haben wir zwei Möglichkeiten. Die einfachere ist, dass wir lediglich den folgenden Python Code in der Konsole eingeben (nach sudo python). Die andere Variante ist ein Skript mit dem entsprechenden Code zu erstellen und dieses nach dem Booten im Hintergrund zu starten. Das ist z.B. vor allem auf  Raspberry Pi Zero wichtig, falls man keinen WLAN Adapter angeschlossen hat. Tipp: Sofern du auch ein „großes“ Raspberry Pi 3/2B hast, kannst du den Code erst über SSH oder FTP auf den Pi spielen und anschließend nur noch die Micro SD Karte in den Zero stecken.

Der Code für die Test-Datei ist recht simpel (sudo nano test.py):

Entweder starten wir die Datei nun einfach (sudo python test.py) oder wir lassen sie bei einem Neustart automatisch öffnen.

Dazu nutzen wir am einfachsten crontab:

crontab -e

Ans Ende schrieben wir nun folgende Zeile:

@reboot ~/robot/test.py

Die Datei wird ab jetzt beim Neustart aufgerufen und du kannst den Raspberry Pi Roboter per Infrarot Fernbedienung fernsteuern.

Im nächsten Tutorial werden wir dem Roboter einen „Autopiloten“ verpassen, sodass dieser sich automatisch dorthin bewegt, wo kein Gegenstand im Weg ist. In Teil 6 der Reihe ist außerdem noch eine Steuerung per Xbox 360 Controller gezeigt.

21 Kommentare

  1. Hallo,

    wenn ich mir z.B.
    „Icstation HX1838 IR Infrared Receiver Remote Control Kit for Arduino Raspberry Pi“ bestellen will, kriege ich immer die Anzeige:
    This item does not ship to Garding, Germany.

    Wo bestellt Ihr denn das ganze Zubehör? Das Problem hatte ich schon drei mal.
    Für einen Tip… Danke.

    Beste Grüße
    Hans

    Antworten
  2. Danke Felix,

    die habe ich wieder nicht gefunden, merke ich mir aber jetzt.
    So langsam trudeln alle Zubehörteile ein.

    Antworten
  3. Hallo,

    bei ersten Test’s ist er mir fast vom Tisch gefallen, auf dem Fussboden lief er gut bis er sich in den Kabeln verheddert hat, es sind noch Bildschirm, Maus, Hdmi und Strom angeschlossen).
    Jetzt bin ich bis „Teil 3, per Infrarot Fernbedienung steuern“ gekommen,
    mir ist nicht klar was ich wie anschliessen soll, den Receiving Head (das kleine Ding mit drei Beinen) oder das Remote Modul (das ist doch PCB?), oder Beides?
    Diese Teile sind inzwischen angekommen:

    IR Remote Control(not contain battery).
    HX1838 remote module.
    1838 Universal Receiving Head.
    3Pin 20cm Dupont cable.

    Danke für Hilfe.
    Gruß
    Hans

    Antworten
  4. Hallo Felix,
    Bin jetzt bei Teil 3.
    Wenn ich „pi@pibernd:~/robot $ sudo python test.py“ starte und z.B. Taste „Vorwaerts“ druecke, faehrt er ein Stueck zeigt im Terminal „FORWARD“ an und springt gleich wieder zurueck zu „pi@pibernd:~/robot $ “
    Haste du eine Idee?

    Gruss Bernd

    Antworten
    • Hallo Bernd,
      klingt als ob die Funktion irgendwo beendet wird. Kannst du mal nach jedem 2. oder 3. Befehl eine print setzen, um zu schauen, was das letzte ist, was ausgeführt wird?

      Antworten
  5. Sorry, aber da musst du mir sagen in welcher Datei ich dass machen soll.
    Bin noch am lernen. Im terminal sieht es so aus.
    pi@pibernd:~/robot $ sudo python test.py
    BACKWARD
    pi@pibernd:~/robot $ sudo python test.py
    FORWARD
    pi@pibernd:~/robot $ sudo python test.py
    RIGHT
    pi@pibernd:~/robot $

    Antworten
  6. Hallo Felix,
    meine crontab macht noch nicht was sie soll, wie in Raspberry Pi Robot IR Control (Teil 3) beschrieben.
    Führe ich die Datei test.py direkt aus, läuft der Kleine schon einigermaßen, ist aber durch die angeschlossenen Kabel noch eingeschrenkt.

    Nach einem Neustart werden die Tastenbewegungen der Fernbedienung lediglich im Terminal angezeigt (siehe unten).

    Wo kann ich den Fehler suchen?
    Danke für Hilfe!

    pi@raspberrypi:~ $ crontab -l
    # For example, you can run a backup of all your user accounts
    # at 5 a.m every week with:
    # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
    #
    # For more information see the manual pages of crontab(5) and cron(8)
    #
    # m h dom mon dow command
    @reboot ~/RaspberryPi-Robot/test.py
    pi@raspberrypi:~ $

    grep cron /var/log/syslog

    Jan 21 18:00:44 raspberrypi cron[419]: (CRON) INFO (pidfile fd = 3)
    Jan 21 18:00:44 raspberrypi cron[419]: (CRON) INFO (Running @reboot jobs)
    pi@raspberrypi:~ $ 000111222333

    Antworten
    • Hat dein Skript entsprechende Rechte? Hast du Header definiert? Außerdem solltest du den Pfad absolut angeben:

      @reboot sudo python /home/pi/RaspberryPi-Robot/test.py
      Antworten
  7. Hallo Felix,
    Erstmal ein sehr großes Kompliment für diese Seite. Mit gefällt sie sehr gut vor allem weil auf Deutsch. Alle Themen sehr gut beschrieben und mann versteht alle Tutorials sehr gut.

    Ich würde gerne einen Roboter bauen zum Rasen mähen, das Problem ist die Begrenzung der Mähfläche . Ich finde keine Info was das für ein Draht sein muss, welches Signal da drauf muss und wie der Roboter das Signal empfängt. Für Paar Tipps oder Anregungen wäre ich sehr dankbar.
    Ein Tutorial wäre der Hammer.

    Antworten
    • Hi Wladi,
      was meinst du mit Draht und Signal? Ein User hat mir neulich geschrieben, dass er ein solches Projekt vorhat und es gerne hier teilen will. Ich weiß aber nicht, wann dies der Fall ist.
      LG, Felix

      Antworten
    • Danke für die schnelle Antwort. Schau mal bitte hier
      rasenmaeher-im-test.de/rasenroboter-im-test/

      Auch für Mähroboter mit modernen Sensor- und Navigationssystemen gilt nach wie vor: Ohne Begrenzungsdraht läuft nichts. Den Draht, dessen Enden entweder an die Ladestation oder an eine weitere Stromquelle angeschlossen werden, verlegt man entlang der Rasenkante. Wer möchte, kann diesen auch in die Erde eingraben, am besten bis zu zwanzig Zentimeter tief. Der Begrenzungsdraht erzeugt ein elektrisches Feld, das den Arbeitsbereich des Roboters festlegt.
      Gruß Wladi

      Antworten
      • Ich muss gestehen, darüber habe ich mir noch keine Gedanken gemacht. Ich denke, da wird ein Spannungsgedektor verbaut sein. Im Selbstbau könnte im freien aber auch GPS eine Alternative sein. Hilft dir dieser Beitrag weiter?

  8. Hallo
    Bei mir schliesst sich die Datei sofort wieder, sobald ich sie ausfuehre.
    Was koennte da das Problem sein.
    Vielen Dank schon im Voraus.

    Antworten
  9. Hallo,

    tolle Seite und tolles Roboterprojekt. Ich habe nur eine Frage: Ich nutze ein L298N Mikrokontroller und keine Line Follow Module, der übrige Aufbau ist der selbe wie im Tutorial. Es funktionieren auch alle Komponenten ABER der Roboter führt über die Fernbedienungseingabe nur den einen (gerade gedrückten) Befehl aus. Eine weitere Eingabe auf der Fernbedienung ist nur nach erneutem starten des Pythonskriptes möglich. Gibt es dafür eine Erklärung (Bin ein totaler Anfänger!!!!)

    Antworten
  10. Hallo,

    ich hänge nun seit Stunden an dem selben Problem und komme einfach nicht weiter.

    Ich habe meine Fernbedienung (selbe wie im Beispiel) in lirc eingerichtet und die Tasten eingelernt. So weit ist die Funktion nun auch gegeben. Danach habe ich den Code wie beschrieben erweitert und die lircrc Datei in Python im entsprechenden Ordner erstellt. Die Bibliothek für Python 3 habe ich auch installiert. Wenn ich nun aber den Test Code starte und Tasten auf der Fernbedienung drücke, erscheinen nur die Zahlen in der gestartetet Datei. Zum Beispiel Nr. 1 bei Taste 1, Nr. 2 bei Nummer 2 etc. Der Roboter bewegt sich kein Stück. Ich habe alles wie im Beispiel gemacht nur das ich bei der IR Diode nicht diese kleine Platine habe, welche ja wahrscheinlich nur zum senden ist und ich habe bei irexec nichts eingegeben, aber hierfür ist doch der Python Lircrc Code wenn ich das richtig verstehe.

    Ich hoffe du kannst mir bei meinem Problem weiter helfen.

    Gruß Paul

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

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