Ardumower häppchenweise?

nobby

New member
Sehr geehrtes Fachpublikum!

Die Super ArduMower Internetseite inspiriert mich für eigene Projekte, die jedoch weit unter dem Level Eures Rasen- Roboters liegen. Daraus ergeben sich trotzdem eine Menge Fragen.
Ich will schon seit längerer Zeit meinen selbst fahrenden 180ccm 12 PS Benzin-Wiesenmäher einfach (erstmal) nur fernsteuern, also links und rechts lenken. Eine Spectrum DX 8 habe ich schon für meinen Rabbit Quadro. Das Problem ist ein kräftiges Servo, welches eigentlich nur mit einem Scheibenwischermotor realisierbar ist. Also habe ich mir eine 240W H-Brücke gekauft, die manuell schon mit dem Motor reagiert. Jetzt bin ich auf Eure Internetseite gestoßen!
Ich habe mich noch nie mit dem Arduino befasst, meine letzten Programmierversuche fanden unter DOS 5.0 statt. Das ist lange her! Also habe ich mir den Arduino gekauft und mir Grundlagen auf You Tube reingezogen. Jetzt weiß ich zumindest, um was es geht.
Meine erste Frage ist, ob es möglich ist, nur die Komponenten, also erstmal die H-Brücke und den Fernsteuer RX, so anzuschließen wie Ihr das mit den Motor-Drivern und dem R/C Receiver gemacht habt (pinkompatibel) und dann in der ArduMower- Software einfach nur die Befehle zu verwenden, die dafür zuständig sind und den Rest wegzulassen. Das werde ich ohne Hilfe vermutlich nicht hinbekommen.
Für ein anderes Projekt möchte ich die H-Brücke mithilfe des Arduino nicht fernsteuern, sondern direkt mit einem Joystick für Links- Rechts steuern. Das wäre natürlich auch ohne den Arduino machbar, nur möchte ich GPS und Kompassanschluss des ArduMower übernehmen. Dafür bräuchte ich dann Hilfe für den Programmcode und die Pinbelegung.
Ist das irgendwie machbar? Ich möchte nicht unverschämt erscheinen, aber Euer Rasenmäher birgt m.E. Vorlagen für zahllose andere Anwendungen. Glückwunsch dafür, ein tolles Projekt mit viel Potential!
 
Hallo Norbert,

willkommen im Club ;-) - auch ich habe immer noch die Idee in der Schublade, meinen Benzinmäher zu "ardumowisieren". Bei mir sollen es aber es aber wohl 2 hintere Getriebemotoren werden und vorne zwei Rollen. Ich bin auch noch auf der Suche nach Motoren...

Den Ardumower-Code kann man dafür verwenden (und wir helfen dabei gern), aber warum so kompliziert? ;-)

Alles was man braucht ist eigentlich nur: Code, welcher die Fernsteuerung ausliest und Code welcher den Motortreiber ansteuert...

Etwa so (habe ich einfach mal aus dem Ardumower-Code kopiert):



Code:
// Arduino Mega Motortreiber ansteuern mit Funke


#define pinRemoteSteer 11          // remote control steering 
#define pinMotorDir 33 
#define pinMotorPWM 3

unsigned long remoteSteerLastTime = 0;
int remoteSteer = 0;  // range -100..100
boolean remoteSteerLastState = LOW;
unsigned long nextInfoTime = 0;

// L298N motor driver
// IN2/C(10)/PinPWM   IN1/D(12)/PinDir
// H                  L     Forward
// L                  H     Reverse    
void setL298N(int pinDir, int pinPWM, int speed){
  if (speed < 0){
    digitalWrite(pinDir, HIGH) ;  
    analogWrite(pinPWM, speed);
  } else {
    digitalWrite(pinDir, LOW) ;  
    analogWrite(pinPWM, speed);
  }
}

// L9958 motor driver
// PinPWM             PinDir
// H                  H     Forward
// H                  L     Reverse    
void setL9958(int pinDir, int pinPWM, int speed){
  if (speed > 0){
    digitalWrite(pinDir, HIGH) ;  
    analogWrite(pinPWM, abs(speed));
  } else {
    digitalWrite(pinDir, LOW) ;  
    analogWrite(pinPWM, abs(speed));
  }
}

int rcValue(int ppmTime){
  int value = (int) (((double)((ppmTime) - 1500)) / 3.4);
  if ((value < 5) && (value > -5)) value = 0;
  return value;
}

// RC remote control driver
void setRemotePPMState(unsigned long timeMicros, boolean remoteSteerState){
  if (remoteSteerState != remoteSteerLastState) {    
    remoteSteerLastState = remoteSteerState;
    if (remoteSteerState) remoteSteerLastTime = timeMicros; else remoteSteer = rcValue(timeMicros - remoteSteerLastTime);
  }
}

// remote control (RC) ppm signal change interrupt
ISR(PCINT0_vect)
{   
  unsigned long timeMicros = micros();
  boolean remoteSteerState = digitalRead(pinRemoteSteer);
  setRemotePPMState(timeMicros, remoteSteerState);    
}

void setup(){
  // enable signal change interrupt on pin11 (PCINT5)
  // Diese Zeilen sind fuer Arduino Mega - fuere andere Arduinos anpassen (Handbuch)
  PCICR |= (1<<PCIE0);
  PCMSK0 |= (1<<PCINT5);
  pinMode(pinMotorPWM, OUTPUT);
  pinMode(pinMotorDir, OUTPUT);   
  Serial.begin(19200);
}

void loop(){
  // Motortreiber ansteuern mit aktueller Stellung der Funke
  int speed = ((double)remoteSteer) * 2.5f;

  // for L9958 motor driver
  //setL9958(pinMotorDir, pinMotorPWM, speed );
  
  // for L298N motor driver
  setL298N(pinMotorDir, pinMotorPWM, speed);
  
  delay(15);
  if (millis() >= nextInfoTime){
    nextInfoTime = millis() + 500;
    Serial.print("remoteSteer=");
    Serial.print(remoteSteer);
    Serial.print("  speed=");
    Serial.println(speed);
  }
}




Gruss,
Alexander
 
@Norbert: Du schreibst unser Projekt könnte universell ausgebaut werden - an welche weiteren Anwendungsmöglichkeiten dachtest Du denn noch außer Rasenmähen?

:)
 
Auf Anhieb fällt mir Staubsaugen ein und eine Bemerkung meiner Frau, dass wenn ich die Wiese per Fernsteuerung oder vollautomatisch mähen würde, ich auch automatisch die 2 Zentner Gras einsammeln lassen könnte...
Also sind wir beim nächsten Thema! Das mit dem Grasaufnehmen mache ich z.Zt. mit einem Kleintraktor und nachgezogenem Rasenkehrer oder Laubaufnehmer. Das ist m.E. nicht automatisierbar, wg. der unterschiedlichen Geländeverhältnisse.
Als ich das Blockschaltbild des Ardumower sah, dachte ich sofort an eine selbstermittelnde Alarmanlage und an meine selbstgebaute Stahlsegelyacht. Dafür habe ich im letzten Jahr einen Autopiloten gekauft, der mit Sicherheit nicht mehr Technik beeinhaltet als Euer Rasenmäher. Sicherlich sind meine angeschlossenen Geber besser, wg. der Krängungsunempfindlichkeit. Letztendlich kochen alle nur mit Wasser. Beim Autopiloten gibt man eine Richtung vor und die H-Brücke steuert den Hydraulikmotor der den Zylinder für das Ruder betätigt. Kompasssensor und GPS kontrollieren Richtung/Position und der Beschleunigungssensor mittschiffs sorgt bei Lage oder schlecht getrimmter Segel für zusätzliche Kurskorrektur. Geradeausfahren könnte Euer Ardumower bei entsprechender Programmierung auch!
Mein Problem ist, das ich zwar fast alles bauen kann, mir jedoch die Programmierkenntnisse fehlen. Ich kann mir natürlich die Grundlagen für den Arduino reinziehen und dann einen automatischen Morsecodegeber programmieren. Nur ist das viel zu Simpel für komplexe Ablaufsteuerungen wie Euer Mäher. Da müssen junge Leute ran, die das vielleicht sogar studiert haben. Danke für Euer Interesse!
 
Alexander, ich bin Dir sehr dankbar! Ich werde in der nächsten Woche mal den Arduino verkabeln und Deine Programmierung eingeben und sehen, was passiert. Das ist genau so, wie ich es mir vorgestellt habe. Jetzt kann ich die Befehle mit den Erklärungen im Arduino- Programmierhandbuch vergleichen und sehen, warum es so ist. Auf die Art und Weise bekomme ich einen Einblick in die Grundzüge der Programmierung, ohne das ich sie selbst erdenken muss, eventuell kann ich dann auch etwas editieren. Für die Erstellung eines solchen Codes bin ich einfach zu alt!
 
Hallo Norbert,

ich habe den Code oben nochmal korrigiert (man kann nun wahlweise den "kleinen" oder den "großen" Motortreiber verwenden). Auch habe ich alles gerade mit einem Arduino Mega getestet - es funktioniert!


Zum Saugroboter: Rainer hat so etwas gebaut und hier veröffentlicht: http://www.ardumower.de/index.php/d...-saug-und-wisch-roboter-mit-arduino-steuerung

Zum Autopiloten für Segelschiffe: Hannes hat so etwas gebaut und hier veröffentlicht: http://sailyabyum.blogspot.de/p/pilotino.html Ihm hat das Ardumower-Projekt sehr geholfen, diesen zu bauen und er hat schon 400 sm von Tonga nach Fiji damit geschafft: http://www.ardumower.de/index.php/d...urs-neigung-softwareentwicklung?start=80#1697

Mein Problem ist genau umgekehrt, ich kann zwar entwickeln, habe habe wenig Ahnung was wirklich gebraucht wird. Wenn Du genau spezifizieren könntest, wie die einzelnen Module/Systeme arbeiten sollen (was soll wie gelöst werden), könnten wir hier bestimmt weitere Projekte umsetzen. Natürlich reicht es dafür nicht, nur mal gerade vorbeizuschauen (wie einige das wohl machen wenn sie "nur" nachbauen wollen) - die Entwicklungen müssen dann auch nachgebaut und getestet werden. Dafür spielt das Alter meines Erachtens keine Rolle ;) Ich könnte mir gut vorstellen, dass wir hier das ein- oder andere weitere Projekt umsetzen können. Also: wir suchen immer noch (kleinere) konkrete Projektideen, welche am Besten mit den vorhandenen Komponenten umgesetzt werden können.

Gruss,
Alexander
 
Hallo Alexander,
habe mich seit gestern mal wieder mit dem Arduino befasst, seit dem ich in der letzten Woche wg. schönen Wetters mit Pflügen beschäftigt war.
Erstmal wurden alle Anfängerfehler gemacht die möglich waren. Bei der Programmierung wurde der falsche Programmer gewählt, so das ich das vorherige Demo-Programm nicht loswurde… Der H-Brücke fehlte Plus auf Enable und mit der 8 Kanal Spektrum Fernsteuerung hatte ich mich auch schon länger nicht mehr befasst.
Aber jetzt der Hammer: Es funktioniert tatsächlich! Fast wie gewünscht. Ich denke, ich werde schon mal einen billigen 12 Volt Akku für den zu modifizierenden Benzinmäher kaufen.
Die Steuerung hat nur eine Eigenart: Links und rechts finden verschiedene Steuerungsausschlagsgeschwindigkeiten statt. Ich glaube, diesen Begriff gibt es gar nicht. Also nach links fängt der Ausschlag vorsichtig langsam statt und wird mit weiterem Ruderausschlag am Sender schneller und weiter? Rechts fast genau umgekehrt, also am Anfang ein großer, schneller Ausschlag und danach in kleinen Schritten. Irgendwie umgekehrt logarithmisch? Alles kleine Probleme, die bei Red Bull haben in der F1 z. Zt. größere. Da das jetzt schon so gut funktioniert, werde ich mir schon mal ein eine 2. H-Brücke für den Gashebel bestellen. Außerdem noch einen 2. Arduino. Den bestehenden Aufbau möchte ich für „Neuentwicklungen“ als Testboard nutzen. Noch mal, einen großen Dank!
Alexander, ich habe neue Fragen, die hänge ich einfach an.
Wäre es nicht sinnvoller, wg. der Steuergenauigkeit, den Scheibenwischermotor mit einem 360 Grad Poti auf der Achse auszustatten und ein Servo daraus zu machen? Im Internet ist zu lesen, das die meisten User den L9958 Motor Driver nicht verwenden, wg. diesen auch bei mir aufgetretenen Probleme. Favorit scheint der L298N zu sein, für meine Anwendungen zu wenig Leistung.Vielleicht funktioniert der L9958 als Servo besser?
 
Hallo Norbert,

Markus hat den L9958 im Shop - wenn Du dort kaufst, unterstützt Du dieses Projekt :) https://www.marotronics.de/index.ph...r-controller-spi-for-arduino-smart-car-detail
Aber ein ordentlicher Motortreiber allein reicht nicht, es muss auch Leistung erzeugt werden, sprich z.B. der Akku muss den nötigen (hohen) Strom auch liefern könnnen. Evtl. zwei Akkus parallel schalten? Wenn der Motortreiber dabei dann (kurzfristig und auch über einen längeren Zeitraum) nicht extrem heiß wird, sollte der L298N reichen.

Das mit dem Poti ist auch keine schlechte Idee kann man in dem Code oben noch einbauen, d.h. über "analogRead()" liest Du das Poti (d.h. Poti Mittelabriff an Arduino A1, Poti außen jeweils GND und +5V) ein und änderst dann den Code so dass der Motor so lange in die entsprechende Richtung angesteuert wird bis der von der Fernbedienung vorgegebene Poti-Wert erreicht ist - wenn Du es nicht selber hinbekommst, kann ich gerne helfen.

Gruss,
Alexander
 
Oben