DIY Mähroboter

Immer wieder sehe ich kleine, leise Helfer in den Gärten, die den Rasen pflegen.
Da kam dann der Gedanke, so einen Helfer nach meinen Wünschen ans Design selbst zu bauen.

Grundüberlegungen:

An allerhöchster Stelle steht die Sicherheit. Also muss eine Umgebungserkennung her und ein Mechanismus, der das Anheben des Mähroboters erkennt.

Die Umgebungserkennung dient auch zur Hinderniserkennung und entsprechender Umfahrungssteuerung.
Das Anheben werde ich mit Mikroschaltern an entsprechenden Stellen realisieren, sobald ich alle Maße für das Design zusammengestellt habe.
Getrennt habe ich die Module von der Steuerung, da ich durch den Durchlauf der Ultraschall-Abfrageroutine Aussetzer an meinem Antrieb hatte. Kann sein, dass es an der Verkabelung der Steckplatinen lag.
So funktioniert alles definitv reibungslos und das ist das Ziel!

Als Hauptsteuerung nutze ich einen Arduino Mega-Nachbau, weil ich nicht weiß, wo mich der Weg der Entwicklung am Ende hinführt. Ich denke da an ein Touch-Screen-Shield, welches einen Hauptteil der Ein-/Ausgänge blockiert.

Weitere Planung:

Weitere Module sind eine Farberkennung des Untergrunds, eine Handysteuerung und finaly ein GPS-Ortungssystem.
Allerdings werde ich diese erst in Angriff nehmen, sobald mein Mähroboter meinen Wünschen entsprechend funktioniert. Steckplätze bzw. Einbauplätze für die Module werde ich aber von Anfang an mit einplanen.

Die Umgebungserkennung:

Dafür verwende ich 3 Ultraschallsensoren (HC-SR04) und einen Arduino Nano-Nachbau.
Die LED zeigt mir an, ob ein Hindernis erkannt wurde. Sie wird am Ende nicht mit eingebaut.

/*********
  Michael Wiesner
  Complete project details at https://4bastler.de/diy-maehroboter/
  Maehroboter Ultraschall-Modul 
*********/

const int anzPin = 8;  //Anzeige ob Mindestabstand unterschritten

//HC-SR04 Links
int trigPinLinks = 2;
int echoPinLinks = 3;
long durationLinks;
int distanceLinks;
const int minDistLinks = 10; //Mindestabstand in cm
int hindernisLinks = 0;

//HC-SR04 Mitte
int trigPinMitte = 7;
int echoPinMitte = 6;
long durationMitte;
int distanceMitte = 0;
const int minDistMitte = 10; //Mindestabstand in cm
int hindernisMitte = 0;

//HC-SR04 rechts
int trigPinRechts = 4;
int echoPinRechts = 5;
long durationRechts;
int distanceRechts;
const int minDistRechts = 10; //Mindestabstand in cm
int hindernisRechts = 0;

//Variablen
//int count = 0;



int distance (int trigPin, int echoPin)
{
  long duration;
  int distanceout;

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distanceout = duration * 0.034 / 2;
  return distanceout;
  
}

void setup()
{
  //HC-SR04 setzen
  pinMode(trigPinLinks, OUTPUT);
  pinMode(echoPinLinks, INPUT);
  pinMode(trigPinMitte, OUTPUT);
  pinMode(echoPinMitte, INPUT);
  pinMode(trigPinRechts, OUTPUT);
  pinMode(echoPinRechts, INPUT);

  //LED-Anzeige
  pinMode(anzPin, OUTPUT);
  digitalWrite(anzPin, LOW);
  Serial.begin(115200);

}

void loop()
{
  
  //HC-SR04 Links
  distanceLinks = distance (trigPinLinks, echoPinLinks);
  if(distanceLinks < minDistLinks)
  {
    hindernisLinks = 1;
    digitalWrite(anzPin, HIGH);
  }
  else
  {
    hindernisLinks = 0;
   
  }
    
  //Ende HC-SR04 Links
  //HC-SR04 Mitte
  distanceMitte = distance (trigPinMitte, echoPinMitte);
  if(distanceMitte < minDistMitte)
  {
    hindernisMitte = 2;
   
  }
  else
  {
    hindernisMitte = 0;
    
  }
  
  //Ende HC-SR04 Mitte
  //HC-SR04 Rechts
  distanceRechts = distance (trigPinRechts, echoPinRechts);
  if(distanceRechts < minDistRechts)
  {
    hindernisRechts = 3;
    digitalWrite(anzPin, HIGH);
  }
  else
  {
    hindernisRechts = 0;
    
  }
  if(hindernisLinks == 0 && hindernisMitte == 0 && hindernisRechts == 0)
  {
    digitalWrite(anzPin, LOW);
  }
  //Ende HC-SR04 Rechts
  Serial.println(hindernisLinks);
  Serial.println(hindernisMitte);
  Serial.println(hindernisRechts);
}

Im Moment wird nur ein Hindernis erkannt, allerdings wird nicht weitergegeben, wo es ist.
Die Steuerung gibt nun an, dass der Mähroboter eine 3/4-Drehung nach links macht und dann seine Arbeit wieder aufnimmt. Hier werde ich in der weiteren Entwicklung eine zufällige Richtungsänderung einbauen.

Die Frontrolle

Die Frontrolle besteht aus 3 selbst kontruierten Einzelteilen, einem Kugellager, 2 Unterlegscheiben und einer Schraube mit selbstsichernder Mutter.

Der Antrieb:

Für den Antrieb habe ich 2 Steppermotoren vom Typ 28BYJ-48 5VDC gewählt, da ich sie in meinem Fundus hatte.
Gesteuert werden sie über die entsprechenden Treiberplatinen mit ULN2003 und werden direkt am Mega-Nachbau angeschlossen.

Das Mähwerk:

Das Mähwerk besteht aus 2 Cuttermesser-Klingen, einem 12-V-Motor und einem konstruierten Bauteil aus meinem 3D-Drucker.
Angeschlossen und gesteuert wird es über den Mega-Nachbau.
Geplant ist eine Stromversorgung mit 9V. Eine ausreichende Umdrehungzahl sollte für meine Zwecke noch vorhanden sein.

Die Stromversorgung

Für die Stromversorgung habe ich für den Start 4 9V-Blocks mit je 1300 mAh, also 5200 mAh, geplant, die parallel geschaltet werden.
Ich habe nur eine kleine Rasenfläche und hoffe, dass in 3,5 bis 4 Stunden alles gemäht ist.
Laufen soll der Mähroboter bei Bedarf, allerdings nur, wenn meine Kinder nicht im Garten sind.
Die Ladung erfolgt am Anfang extern über ein Ladegerät.

Das Gehäuse

Konstruiert habe ich das Gehäuse in folgenden Schritten:

  1. Front konstruieren
  2. Frontrolle und Halterung konstruieren um die Bodenhöhe zu ermitteln.
  3. Mähwerk erstellen um die erforderliche Breite meines Mittelteils des Roboters zu ermitteln.
  4. Heck konstruieren.

Die Front

In der Front liegt die Hindernisserkennung inklusive Nano-Nachbau und Farberkennungs-Sensor.
Das Frontrad ist durch eine kleine eingepresste Hülse mit der Bodenplatte verbunden.

Ich möchte nachbauen

Die kompletten Dateien für den 3D-Druck, die Programmierung, eine Materialliste und eine komplette Kostenaufstellung für die von mir zu dem Zeitpunkt verwendeten Komponenten werde ich am Ende der Entwicklung einstellen.

Bisherige Stückliste

  • 1 x Arduino Mega-Nachbau
  • 1 x Arduino Nano-Nachbau
  • 3 x Ultraschall-Sensor-Modul HC-SR04
  • 1 x Farberkennungs-Sensor TCS3200

2 Kommentare

    1. Hallo Bruno,

      ich habe die Grundstruktur des Mähroboters zusammen gebaut.
      Beim Testlauf stellte ich fest, dass die gewählten Motoren leider zu schwach waren.
      Diese werde ich tauschen und das Ergebnis hier veröffentlichen.

      MfG,

      Michael

Kommentar hinterlassen

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