DIY Rasenmäher auf Raspberrypi Basis (Update 22.07.2020)

Willkommen auf meiner Webseite

DIY Rasenmäher auf Raspberrypi Basis (Update 22.07.2020)

Kurze Info: Da dieses Projekt von vielen verfolgt wird, habe ich einen Newsletter erstellt, der Euch bescheid geben wird, wenn es etwas neues zum Projekt gibt. Hier gehts zur Anmeldung

Wer kennt’s nicht: Rasenmähen im Sommer ist nervig und Zeitaufwendig. Alle 7 Tage mindestens 1x.. Je nach Belieben. Abhilfe schafft da ein Mähroboter aus dem Baumarkt für mehrere hundert Euro. Der Kostenaufwand, verbunden mit dem umständlichen Eingraben der umgrenzenden Leitung in den Rasen, haben mich immer davon abgehalten eine solche Gartenhilfe zu kaufen. Praktisch sind diese aber schon, daher kannst du hier verfolgen wie ich meinen eigenen DIY Lawnmower bauen werde.

Die Hardware

Die größte Hürde war es geeignete und vorallem kostengünstige Hardware zu besorgen. Auf der Liste standen:

  • Akkus
  • 2x Motor zur Fortbewegung
  • Freilenkendes Vorderrad
  • Relais
  • Steuereinheit (raspberry pi)

Nachdem ich diese Teile zusammen gesucht hatte (Amazon lässt grüßen), standen Kosten von insgesamt ca. 80€ an. Den größten Kostenanteil stellten hier die Akkus dar.

Als erster Prototyp musste dann eine sperrliche und nicht so schöne Holzkonstruktion herhalten. Die Lenkung wird durch ein freilenkendes Rad vorne realisiert, sodass die Steuerung der eines Panzers ähnelt.
Die erste Montage des Prototyps sieht dann wie folgt aus: (nicht schön, aber ist ja nur der erste Prototyp)

DIY Lawnmower - Prototype
Raspberrypi Zero mit Relais und 12 Volt DC Motoren. LED-Voltanzeige zur Kontrolle der Akkus.
DIY Lawnmower - Prototype
Gesamtaufnahme der sperrlichen Konstruktion des DIY Lawnmower

Die Software

Hier wollte ich zunächst die Steuerung übernehmen und den Roboter per Webscript steuern. Dazu habe ich eine html Seite mit Javascript erstellt und diese mit Hilfe der Python Bibliothek Flask mit dem Schalten der Relais verbunden.

DIY Lawnmower - Software
Insgesamt ein recht einfacher Softwareaufwand, wenn man bereits mit Javascript und Python vertraut ist.

Danach stand der ersten Probefahrt nichts im Wege:

https://www.youtube.com/watch?v=MtmOGobrPP4

Fazit des ersten Prototyps

Zu viel Gewicht und zu klobiges Design. Ansonsten funktionieren Steuerung und Antrieb ohne Ausfälle.
Zukünftig soll der Mäher also kompakter werden und Ziel des Projekts ist es, dass der Rasenmäher mit Hilfe von Näherungssensoren am Roboter und Lichtschranken um die Wiese herum selbst fahren und mähen soll. Eine genaue Zeichnung des nächsten Entwurfs habe ich bereits entwickelt, jedoch ist der 3D Druck sehr teuer. Daher werde ich versuchen das Modell mit Holz nachzubauen.

DIY Lawnmower - 3D Print
Von oben: zwei Mulden zur Platzierung der Akkus und der Steuerungseinheit. Mittig das Loch für einen Drehmotor (mind. 6000 U/Min) für Mähwerk. DIY Lawnmower
DIY Lawnmower - 3D
Unteransicht. Seitlich die Aufhängungen für die Motoren zu Fortbewegung. Vorne drei Aussparungen zur Montage der Näherungssensoren.

Update: Ich habe das 3D Modell in Auftrag gegeben. Der Holzbau fällt daher doch weg.

Update 22.08.2019 – DIY LAWNMOWER

Während das 3D Modell gedruckt wurde habe ich mich bereits an die Software zum automatisierten Fahren gesetzt. Da das Ziel ein selbstfahrender Roboter ist, habe ich Näherungssensoren gekauft, mit denen der Mäher erkennen kann, wann sich ein Hindernis vor ihm befindet. Dazu werden diese Sensoren vorne in die dazu vorgefertigten Mulden (siehe Bild hier drüber, Unteransicht) geklebt, sodass sie den Abstand mittig nach vorne und jeweils etwas seitlich nach rechts und links messen.

Die erste Verkabelung sieht wie folgt aus:

Ultrasonic measurement
3x HCSR 04 Ultraschallsensor.

Softwareaufbau

Das gesamte Softwareprojekt besteht aus vier Klassen. Eine Steuerungsklasse und drei Hilfsklassen (damit die Main.py übersichtlicher bleibt und außerdem: OOP rules).
Helper.py – führt die Berechnungen zur Bestimmung der Drehrichtung aus und steuert meine Motoren.
Distance.py – misst mit den Näherungssensoren die Entfernung und führt einige Algorithmen zur Fehlerreduzierung aus.
Brain.py – meine Hauptklasse. Hier werden die Parameter (GPIO’s und Speed) festgelegt. Außerdem erfolgt hier der Zugriff auf die Unterklassen und die eigentliche Steuerung. Eine Auswertung der Sensordaten erfolgt in einem Diagramm.

Fehlerreduzierung bei Entfernungsmessung
Da es bei (vor allem hohen) Gras zu unterschiedlichen Messwerten kommen kann, habe ich eine Funktion geschrieben, die anhand der letzten Messungen und einem Fehlerschwellwert überprüft, ob die vom Sensor gemessene Distanz noch im Toleranzbereich liegt. Da allerdings auch große Sprünge in der Entfernungsmessung möglich sein können (z.B. wenn der Mäher an einem nahen Objekt vorbeigefahren ist und plötzlich der nächste Gegenstand mehrere Meter entfernt ist) habe ich noch einen Prüfmechanismus eingebaut, der nach n außerhalb liegenden Ergebnissen die alten Werte überschreibt. Damit werden die alten Richtwerte gelöscht und mit zwei „frischen“ Messergebnissen weitergerechnet.
Das soll ein wildes und unvorhersehbares Drehen des Roboters verhindern.
Anbei ein Ausschnitt des Codes in Python:

Python Snippet
Python Code Snippet der Funktion „validate Measurement“ der Klasse Distance.py

Die Liste „self.measurements“ speichert die letzten 5 Messungen. Der „elif“ Teil überprüft, ob die Messung noch im Toleranzbereich liegt. Liegt der Wert außerhalb, wird der Wert verworfen und erneut gemessen. Wird der Wert mehr als 3x verworfen, so wird die Liste geleert und mit den aktuellen Werten befüllt.
Zwischen den erneuten Messungen habe ich ein Delay eingebaut (time.sleep), weil es sonst zu fancy Messfehlern kommt (Kann aber auch daran liegen, dass der Schall noch immer in meinem Raum reflektiert wird und daher der GPIO auslöst).
Hinweis: ich werde den Raspberry Pi Zero gegen einen Raspberry Pi 3 tauschen, da dort die GPIO’s zuverlässiger funktionieren (meine Löt-Künste für die Pins beim zero sind nicht so on point)

Das Mähwerk

Als Mähwerk dient ein 12 Volt DC Motor mit 6000 U/min bei 12 Volt Anschlussspannung. Daran habe ich mit einer Kupplung zwei Cuttermesser-Klingen befestigt, die das Gras leicht schneiden können.
Hier die Konstruktion:

Cutter Messer an DC Motor
Hier der erste Test mit der Hälfte der später anliegenden Spannung

Update – 28.08.2019 – 3D Modell

Das 3D Modell ist bei mir angekommen und ich habe die Komponenten bereits montiert. Die Maße haben soweit gepasst, nur die Löcher musste ich noch vorsichtig etwas größer bohren. Hier ist der Aufbau:

Montage der Komponenten am 3D Modell

Die ersten Fahrversuche klappen relativ bescheiden. Die Näherungssensoren erkennen manche Objekte nicht (eventuell muss ich den mittleren Sensor auf einen rotierenden Motor montieren, sodass eine 180 Grad Ansicht entsteht).
Die andere Möglichkeit wäre mit Hilfe von OpenCV (KI Bilderkennung von Google) Objekte und Hindernisse zu erkennen. Das scheint die interessantere und herausfordernste Variante zu sein.
Aber vorerst werde ich das jetzige Projekt testen und die ersten Mähversuche starten.

Der erste Mähversuch klappte ganz okay. Die Sensoren weichen größeren Hindernissen aus und das Cuttermesser erfüllt seinen Job. Lediglich die Batterie ist viel zu schwer und verlagert so den Schwerpunkt zu weit nach hinten.

Projektausblick:
Über den Winter muss ich also einer automatischen Erkennung von Gras arbeiten, damit der Mäher die Grünfläche nicht verlässt. (Open AI mit Webcam) Außerdem muss eine neue Batterie her (Modellflug o.ä.)

Update 24.03.2020

Nach langer Winterpause habe ich den Rasenmäher wieder aus dem Schrank geholt und die Software und den gesamten Aufbau überarbeitet. Die Software, die ich letzes Jahr geschrieben habe hat ab und zu Fehler geworfen, da durch das Multithreading zwar schnell alle Befehle und Fehlerkorrekturen berechnet wurden, aber häufig auch die Sensoren zu schnell hintereinander gemessen haben. Dadruch hat z.B. der linke Sensor die Ultraschallwellen des mittleren Sensors erfasst, wodurch es zu falschen Messergebnissen kam.

Den aktuellen Stand der vereinfachten Software kannst du hier finden: https://github.com/fvoss796/mower

Anstatt der Relais zum Ansteuern der Gleichstrommotoren, habe ich eine Platine eingebaut, die sowohl Drehrichtung als auch Geschwindkeit der Motoren steuern kann. Damit können normale Kurven gefahren werden. Detailliertere Infos folgen dazu.

Außerdem waren die Auflageflächen der Reifen ein großes Problem, da hier einfach die Runde Oberfläche als Profil diente. Mit dem 3D Drucker habe ich mir ein aufsteckbares Profil gedruckt:

3D Druck Profil für Reifen

Außerdem habe ich eine 2S Lipo Batterie aus dem Modellbau bestellt, um ordentlich Gewicht zu sparen. Sobald diese eingetroffen ist, folgt die erste Testfahrt auf freiem Gelände!

Update 22.04.2020

Aufgrund der Corona Krise dauern die Lieferungen für meine Bauteile etwas länger. Mir fehlt nur noch das Ladegerät für den Akku. In der Zwischenzeit habe ich bereits das Chassis gedruckt und zusammengebaut:

Update 24.04.2020

Endlich ist es soweit!!! Ich habe alles zusammengebaut und die Batterie voll geladen. Die erste richtige Testfahrt kann los gehen. Ich habe ein Video zusammengeschnitten, um eine grobe Vorstellung davon zu vermitteln, wie die Fahrt lief und wie der Mäher im Allgemeinen funktioniert.

Das Logging während der Fahrt klappt einwandfrei. Anfangs habe ich den Mindestabstand und die Empfindlichkeit bei Hindernissen noch justieren müssen. Weitere Tests werden zeigen, wie sich der Mäher im Alltag schlägt.

Im Video habe ich auch das Logging eingeblendet. Dies ist wie folgt aufgebaut:


[Abstand links, Abstand mitte, Abstand rechts]
————————————————————-KleinsterAbstandDavon

Sollte der kleinste Abstand unter 20cm fallen, wird gedreht. Nach 15 Messungen wird eine leichte Drehung ausgeführt, welche zufällig nach rechts oder links erfolgt. Damit soll ein Zufallsprinzip nachgeahmt werden. Jetzt aber viel Spaß beim Video:

Demonstrationsvideo des Mähers

Die nächste Testfahrt wird länger verlaufen und ich werde eine On-Board Kamera montieren, damit man die Fahrt aus der Perspektive des Mähers sieht. Nach der ca. 30 minütigen Testfahrt gestern war der Akku noch auf 12,5 Volt. Die LiPo Batterie darf maximal bis auf 3 Volt pro Zelle entladen werden. Bei meinem Akku ist also bei spätestens 9 Volt Schluss. Dadurch bin ich zuversichtlich, dass der Akku mehrere Stunden am Stück halten wird. Näheres dazu im nächsten Beitrag

Bauteile

Hier folgt die von vielen angefragte Liste der Bauteile, die ich verwendet habe:

  • Raspberry Pi (Welche Version ist egal)
  • Powerbank mit Solarladefunktion
  • 3x Näherungssensoren (SR-HC04)
  • 5 Volt Relais (Dazu gibt’s auch ’ne Menge an Videos zu im Netz – einfach „Raspberry Pi Relais steuern“ eingeben)
  • Motortreiber (STL298N)
  • zwei Getriebemotoren aus dem Modellbau
  • und natürlich diverse Jumper Kabel und Klemmen

In Zukunft folgen:

  • Gyroskopo zur Lagemessung (MPU 6050)
  • Farbsensor zur Erkennung von Randmarkierungen (TCS3200)
  • Weißes Kreidespray wie es im Fußball verwendet wird

Mit dem Gyroskopo möchte ich sicherstellen, dass der Mäher bei gewissen Kanten nicht kippt. Mit der Rasenfarbe werde ich wie beim Fußball den Rand der Wiese kennzeichnen und mit dem Farbsensor diese Farbe dann hoffentlich erkennen. Diese Methode ersetzt dann die bei handelsüblichen notwendigen Induktionsleitungen in der Wiese.

Planung der Version 2 des DIY Lawnmowers

Durch die vielen verschiedenen Vorschläge durch Euch in den Kommentaren bin ich zum Entschluss gekommen, diesen Rasenmäher so zu lassen und nicht weiter zu entwickeln. Er wird diesen Sommer weiter so im Einsatz bleiben und jeden zweiten Tag für 4 Stunden den Rasen mähen.

Ich plane eine Version 2 mit einem 360 Grad Lidar Sensor (wie auch in den Staubsauger Robotern https://amzn.to/3jmmZ6e ), GPS und besserem Antrieb.

Ich werde also die nächste Zeit noch ein wenig sparen und dann nach und nach hier auf der Internetseite die Pläne für das neue Gehäuse, den neuen Aufbau und die Software hochladen. (Alles natürlich leider erst nach der Klausurenphase und in den Semesterferien).

Ziel des Projektes ist, dass es klarer strukturiert und einfach nachzubauen ist.

Vielen Dank für die tollen Kommentare und das Feedback zu diesem Projekt!

In der Zwischenzeit gibt’s hier noch einige SmartHome Projekte: https://favoss.de/category/smarthome/

Tags: , , , , , , , , , , , , , ,

34 Antworten

  1. Burkhard Schnelle sagt:

    Sehr schönes Projekt. Ich will mir auch einen Lawn Mover auf Basis eines RPI’s bauen und habe so mit viel Interesse Ihr Projekt gelesen. Freue mich auf weitere Berichte über den Rasen Roboter
    Beste Grüße
    Burkhard Schnelle

  2. Franklyn Briyeston sagt:

    Hallo Fabian, auch von mir „Kompliment“. Mit der Beschreibung kann ich als blutiger Anfänger den Mäher nachbauen. Danke dafür. Interessant wird es, wenn der Test mit 2S Lipo Batterie durchgeführt wurde. Hier interessiert mich die Betriebsdauer. Viel Erfolg weiterhin. Toller Beitrag für das Internet.

    • Fabian Voß sagt:

      Hallo Franklyn, danke für Deinen Kommentar! Sobald ich das neu gedruckte Gehäuse verklebt habe werde ich die erste Testfahrt durchführen. Vorraussichtlich in den nächsten 3-4 Tagen.

      Beste Grüße
      Fabian

      • Franklyn Briyeston sagt:

        Habe das Test-Video gesehen. Es läuft! Bin mal auf das Langzeitergebnis gespant. Viel Erfolg weiterhin.
        VG

  3. Franklyn Briyeston sagt:

    Projekt gestartet. Für das Chassis habe ich mir einen alten Wassertaxi (Wassertank von einem Wohnmobil) organisiert.

  4. Luca sagt:

    Kann ich deine Programmierung und den aufbau 1zu1 auf die rusberry pi4 aufspielen?

  5. Brötl sagt:

    Hi Fabian wie heißt die Platine die vorwärts ruckwärts und die geschwindigkeit reduzieren kann hast du die selber gebaut wenn ja (wie?) und wenn es die Fertig gibt denn würde ich gerne den Namen wissen danke im Vorraus

    • Fabian Voß sagt:

      Hallo Brötl, die Platine heißt L293 und gibt’s so fertig bei diversen Elektronik Portalen zu kaufen. Lieben Gruß

  6. Nicolas sagt:

    Hallo
    Was ist das andere für eine Platte mit den Blauen Kästchen? Kann man diese so kaufen?

    Mit freundlichen Grüßen
    Nico Siegert

    • Fabian Voß sagt:

      Hi Nico,
      Ich glaube du meinst das Relais? Das kann man kaufen, einfach nach 5 Volt Relais suchen.
      Viele Grüße

      • Nicolas sagt:

        Ah vielen Dank. Sie haben weiter oben geschrieben, dass Sie das Relais durch eine L293 Platte gewechselt haben oder?

        Entschuldigen Sie ich bin sehr von dem Projekt angetan jedoch kenne ich mich mit Platinen nicht wirklich aus. Kann nur Programmieren :/

        • Fabian Voß sagt:

          Genau, die Motoren werden jetzt über die L293 Platine gesteuert. Ein Relais habe ich noch verbaut, um den Motor für das „Mähwerk“ ein und aus schalten zu können. Vielleicht sollte ich mal einen Schaltplan erstellen und ergänzen..

  7. Peter sagt:

    Hallo,
    ich würde gerne den Robi nachbauen. Nur weiß ich leider nicht genau was ich alles zur Steuerung brauche (Platinen..).
    Werden Sie auch noch eine Schleifen Erkennung bauen, damit der Robi nicht das Grundstück verlässt?

    Gruß
    Peter

    • Fabian Voß sagt:

      Hallo Peter, ich werde die Tage mal eine Übersicht erstellen mit Bauteilen und Schaltplan.

      Ich überlege, ein RGB Fernmodul zu kaufen, welches dann das Grün vom Rasen erkennt.
      Viele Grüße

  8. Thorsten sagt:

    Super Blog, ich bin richtig Fan.

    Wann kommt das nächste Update? ☺️

    Viele liebe Grüße!

  9. Rene sagt:

    Hallo Fabian..
    Eine Prima Sache ist das. Ich hoffe es wird auch noch Updates in diesem Sommer geben. Kannst du etwas näheres zu den Antriebsmotoren sagen? Ich bin mir da unsicher welche ich zum Nachbau nehmen sollte.. RPM? Haben die Halsensoren?

    Danke

    • Fabian Voß sagt:

      Hallo Rene!
      Die Antriebsmotoren sind einfache Getriebemotoren mit 20 U/min. Ich Halsensoren sind keine verbaut.
      Ich würde diese allerdings auch nicht noch einmal verbauen, da sie qualitativ nicht gut sind (aber dafür seeeehr günstig waren).
      Ich würde wieder welche mit 20 RPM nehmen, diesmal aber doch ein wenig mehr investieren.
      Halsensoren finde ich nicht zwingend notwendig..
      Viel Spaß bei deinem Bau!

  10. Sascha sagt:

    Moin,
    ich hätte noch ein paar Verbesserungsvorschläge:
    wie wäre es den noch mit einem GPS Modul?
    Mit einem VL53L0X Time-of-Flight Sensor wäre sicherlich auch noch einiges möglich.
    Findet der Mäher selbständig eine Ladestation?

    Gruß Sascha

    • Fabian Voß sagt:

      Hi, gute Idee.. an GPS hatte ich auch schon gedacht, aber ich habe keinerlei Erfahrung damit und ich weiß nicht wie genau es funktioniert.
      Sobald ich den Farbsensor eingebaut habe, möchte ich mit Fußball Kreide Farbe eine Linie zeichnen, die zur Station führen.
      Hast du Erfahrungen mit der Genauigkeit des Moduls?
      Danke für dein Feedback und viele Grüße

      • Sascha sagt:

        Moin,
        nein ich habe keine Erfahrungen mit dem GPS Modul. Die Genauigkeit soll aber nicht reichen für den Mäher, da die Differenz zu sehr schwankt. Bei bis zu 6m Ungenauigkeit würde sich der Mäher nicht mehr in meinem Garten befinden 🙂
        Es müßte irgendwas mit triangulation gemacht werden, was aber nicht wirklich billig ist.
        Vielleicht habe ich nach unserem Urlaub mal Zeit einen Prototypen zu bauen und deinen Code mal zu testen, allerdings habe ich da noch ein paar Fragen zu.
        Der Code auf Github sollte auf den Raspi geladen werden, wie wird das Programm dann gestartet?
        Gibt es eventuell eine Weboberfläche wo man festlegt, wann der Mäher mähen soll?

  11. Mark sagt:

    Super Idee. Wie wäre es denn, per manueller Bedienung den rasenbereich einfach abzufahren und das intern zu speichern? Ladestation als Nullpunkt.
    Dann braucht man weder Draht noch Kreidespray. Als Schrittweite bzw Einheit könnte man ja eine Viertelradumdrehung nehmen.
    So könnte man als weiteres Feature Wege und Querunken markieren, wo dann der Messer Motor stoppt, wenn der Mäher drüber fährt.

    • Fabian Voß sagt:

      Hatte ich auch drüber nachgedacht, allerdings ist die Navigation auf Gras zu ungenau, da die Räder teilweise durchdrehen und so die Navigation sehr ungenau werden kann über Zeit…

  12. Sascha sagt:

    Hat vielleicht noch jemand eine Idee zur Akku Überwachung und ein Zeitprogramm, so das man einstellen kann wann gemäht werden soll, bis die minimal Akkuleistung erreicht ist? Bin leider Anfänger und konnte im Internet dazu nichts finden.

    • Fabian Voß sagt:

      Es gibt Sensoren, die die Volt ausgeben können. Den Namen weiß ich grade nicht genau. Zeitprogramm würde ich über einen mqtt Server laufen lassen. Über so einen kann auch ein Dashboard für den Zustand des Rasenmähers erstellt werden. So plane ich zumindest die Umsetzung von Version 2 des Mähers.

  13. Hallo ich muss sagen das ist schon lange ein Projekt das ich umsetzen will. Toll wäre es auch wenn man die stl. Dateien zum nachdrucken bekommen könnte. Was kostet der ganze Robo bis jetzt? Ich freue mich auf deine Antwort.

    • Fabian Voß sagt:

      Hallo Marco! Kosten lagen bis jetzt bei ca 120€. Stl Dateien kann ich natürlich hochladen, ich arbeite aber schon an einer Version 2, die bald kommen wird!

      • Perfekt lieber Fabian, da brauche n ich dann noch mehr gespannt. Eine Teileliste mit dem derzeitigen Stand wäre für mich trotzdem sehr hilfreich. damit ich mir die Teil schon mal zusammen suchen kann und die derzeitige Version an den start bringen kann. Family labert mich schon voll. LG

        • Fabian Voß sagt:

          Hört sich gut an! Eine Teile-Liste findest du schon auf der Seite. Ist im Grunde nicht viel. Die stl kann ich auch noch hochladen. Folgt später 👍

      • Prime sagt:

        Hallo gibt’s schon Neuigkeiten an der STL Dateien Front? Würde jetzt im Herbst gerne den Urlaub nutzen und zumindest mal die Plattform drucken. Und die Basis bauen. Und die Grundkonfiguration herstellen. Da gibt’s mit meinem Laien wissen genügend Fehler auszumerzen.🤦😂

  14. Tomy sagt:

    Hallo Fabian
    Super Projekt, das ist genau etwas für den Winter.
    Wie schon angesprochen, kannst du mal einen Schaltplan ins Netz stellen.
    Muss auch nicht schön aussehen.
    Danke

Schreibe einen Kommentar

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