Mini Ardumower für den Winter

[video width=425 height=344 type=youtube]zjHvKAYzzoU[/video]
Läuft ganz gut und ist für den Winter eine Ideale Testplattform.
Ganz zufällig auch im Ardumower Shop erhältlich. ;)
Morgen gibt es noch ein paar Bilder und in nächster Zeit ein paar Videos. B)
 
ich finds beeidruckend !

ein paar fragen hätte ich :

1) bei der rückfahrt zum handy macht das ding ne weite kurve. zufall, oder regelt der wirklich den bogenradius, um genau beim handy rauszukommen ?

2) welche sensorik zeigt ihm den rand vom "rasen" ? es wirkt als würde er schon vorher langsamer werden.

3) ich habe probleme mit dem drehrad hinten, es stört den regler extrem. bei dir kein problem ?
 
ich habe große probleme, das ding geardeaus fahren zu lassen.
ein pid und auch eine kaskade mit p innen und pd außen haben probleme. es hängt an dem nicht reproduzierbaren verhalten des hinterrads auf verschiedenen untergründen. hat jemand was ähnliches festgestellt und vielleicht gelöst ?
 
Hier fährt er auf Parkett. Arbeitet dein Regler mit der Wegstrecke oder mit der Geschwindigkeit? Die Geschwindigkeit kann man z.B. über die Zeit von Encoder-Puls zu Encoder-Puls ermitteln. Die Wegstrecke über Zählen der Pulse. Eine schnelle Regelung kann man bei den wenigen Pulsen nur über die Geschwindigkeit erreichen. Bei Schlupf wird es nur richtig präzise wenn man den Gyro zur Regelung hinzunimmt. Das waren meine Erfahrungen :)

Noch eine Idee: er schlupft? dann evtl. deutlich langsamer fahren lassen
 
die noch besten ergebnisse krige ich, wenn ich innen einen p-regler mit dem gyro als aufnehmer verwende. damit kann ich dann auch mir kontrollierter winkelgeschwindigkeit drehen. außen ein p oder pd - regler mit dem kompass als geber.

weg über die anzahl der inkrement-ticks und radgeschwindigkeit über tickdauer (interruptroutinen) hab ich auch drin, wobei mir der innerer regler mit raddrehzahl überhaupt keine vorteile brachte.

auf einem bodenbelag optimiert geht das meist so einigermaßen, manchmal blockiert aber das hinterrrad, dann gibts fehler.

eine genauigkeit von besser 1° ist aber nicht in sicht. bräuchte ich aber, wenn ich nach plan mähen möchte.
 
Der kleine ist wirklich nicht einfach. Schau mal ob Deine Sensoren 100% zuverlässig funktionieren. Hier war z.B. ein Rad-Encoder sporadisch defekt (alle 200ms kurzer Ausfall), da waren dann immer Ausreißer in der Geschwindigkeit. Jetzt ist die Geschwindigkeit eine gerade Kurve. Dann mit ganz niederiger Drehzahl fahren lassen. Vielleicht noch eine Kurve zur Linearisierung von "PWM->Geschwindigkeit" einbauen (damit man das Haltemoment der Motoren besser in den Griff bekommt).
Generell kann man die Ergebnisse von dem "Kleinen" wirklich nicht auf den "Großen" übertragen. Der große ist viel träger und man kann den viel besser steuern.
 
Hallo Alexander,

wie kann ich die BT Ports für das Sensorshield V2.0 umkonfigurieren.

// IMU (compass/gyro/accel): I2C (SCL, SDA)
// Bluetooth: Serial2 (TX2, RX2)
// GPS: Serial3 (TX3, RX3)

Laut Doku liegt die auf TX2, RX2

Am Shield wäre TX0 und RX0 Port direkt ausgeführt.

vielen herzlichen Dank

Karl-Heinz
 
Hallo,

ich klinke mich mal ein, die Frage hat mich auch mal beschäftigt. Bei dem Shield ist es so, dass TX2 und TX2 über die digitalen Pins (müsste 16 und 17 sein, bitte nochmal prüfen) erreichbar sind. Siehe dieses Bild
https://arduino-info.wikispaces.com...3403718/800x465/MEGA-SensorShieldV20-1024.jpg
Ich habe mit einem Multimeter einfach die im Bild grün eingerahmten Pins zu TX2 durchgemessen und entsprechend angeschlossen. Die Stiftleiste des Shields mit der Bezeichnung "Bluetooth" kann man nur nutzen, wenn man den Code anpasst. Mir war es zu aufwändig, deshalb habe ich einfach wie oben Beschrieben die Pins rausgesucht.

Vielleicht hilt das weiter.
 
Hallo Patrick,

vielen herzlichen Dank für die Info, das dachte ich mir natürlich als Alternative auch, nur hat mich interessiert, wo denn diese TX2 und RX2 definiert werden im Softwarecode.

Ich habe alle Texte danach untersucht, bin leider nicht fündig geworden.

Liebe Grüße Karl-Heinz
 
Hallo,

So wie ich es sehe, ist es in der drivers.h definiert (#define Bluetooth Serial2).


Code:
#include <Arduino.h>
#ifdef __AVR__
  // Arduino Mega
  #include <EEPROM.h>  
  #define Console Serial
  #define ESP8266port Serial1
  #define Bluetooth Serial2
#else 
  // Arduino Due
  #include "due.h"
   // Due has two serial ports: Native (SerialUSB) and Programming (Serial) - we want to use 'SerialUSB' for 'Console'
  #define Console SerialUSB
  #define ESP8266port Serial1
  #define Bluetooth Serial2
#endif


Serial2 ist ein Schlüsselwort und definiert die Pins 16 und 17 für TX2 und RX2 als seriellen Port 2. Beim initialisieren der RemoteControl Klasse (pfod.cpp) wird der Port 2 mitgegeben (mower.cpp, ab Zeile 440). rc.initSerial(&Bluetooth)


Code:
Robot::setup();  

  if (esp8266Use) {
    Console.println(F("Sending ESP8266 Config"));
    ESP8266port.begin(ESP8266_BAUDRATE);
    ESP8266port.println(esp8266ConfigString);
    ESP8266port.flush();
    ESP8266port.end();
    rc.initSerial(&Serial1, ESP8266_BAUDRATE);
  } else if (bluetoothUse) {
    rc.initSerial(&Bluetooth, BLUETOOTH_BAUDRATE);
  }
 
Hallo Patrick,

habe jetzt die azurit 1.05 in Verwendung, die läuft mit dem Mower per PFOD App super mit dem Mower, speziell das Drehen ist jetzt ganz super!

Beim Versuch die Config auf "mini" umzustellen kommt folgender Fehler:

sketchmini.cpp: In member function 'virtual void Mini::setup()':

mini.cpp:258: error: no matching function for call to 'RemoteControl::initSerial(int)'

rc.initSerial(PFOD_BAUDRATE);

Kannst du oder jemand aus dem Team weiterhelfen, kann den Fehler nicht entdecken?

Ich habe nur das Schlüsselwort in der Config von "Use_Mower" auf "Use_Mini" verändert.

// ------ choose ONLY ONE robot configuration ---------------------------------------------
// #define USE_MOWER
#define USE_MINI


vielen herzlichen Dank
Karl-Heinz
 
Hallo,

das Problem hatte ich auch (nutze die Mini.cpp für meinen Staubsauger). In der Version 1.0a5 wurden nur Anpassungen an der Mower.cpp gemacht. Die Mini.cpp wurde ledier völlig ignoriert (vermutlich nutzen zu wenige diese). Ich habe einfach die notwendigen Codezeilen aus der mower.cpp in die mini.cpp übernommen. Müsste im wesentlichen dies hier sein (entsprechend in der mini.cpp ersetzen/ergänzen):


Code:
// ------- baudrates---------------------------------
#define CONSOLE_BAUDRATE    19200       // baudrate used for console
#define BLUETOOTH_BAUDRATE  19200       // baudrate used for communication with Bluetooth module
#define ESP8266_BAUDRATE    115200      // baudrate used for communication with esp8266 Wifi module
#define BLUETOOTH_PIN       1234


Dann noch im Konstruktor am Ende die erforderlichen Zeilen zum Bluetooth eintragen (bluetoothUse, esp8266Use usw.

Code:
// ----- timer -----------------------------------------
  timerUse          = 0;       // use RTC and timer?
  // ----- bluetooth -------------------------------------
  bluetoothUse      = 1;       // use Bluetooth module?
  // ----- esp8266 ---------------------------------------
  esp8266Use        = 0;       // use ESP8266 Wifi module?
  esp8266ConfigString = "";
  // ------ mower stats-------------------------------------------  
  statsOverride = false; // if set to true mower stats are overwritten - be careful
  statsMowTimeMinutesTotal = 300;
  statsBatteryChargingCounterTotal = 11;
  statsBatteryChargingCapacityTotal = 30000;
  // -----------configuration end-------------------------------------


und schließlich noch die Setup Methode anpassen (wieder der Teil mit esp8266Use..)

Code:
gps.init();

  Robot::setup();  

  if (esp8266Use) {
    Console.println(F("Sending ESP8266 Config"));
    ESP8266port.begin(ESP8266_BAUDRATE);
    ESP8266port.println(esp8266ConfigString);
    ESP8266port.flush();
    ESP8266port.end();
    rc.initSerial(&Serial1, ESP8266_BAUDRATE);
  } else if (bluetoothUse) {
    rc.initSerial(&Bluetooth, BLUETOOTH_BAUDRATE);
  }


Abschließend noch die Methode configureBluetooth ersetzen

Code:
void Mower::configureBluetooth(boolean quick){
  BluetoothConfig bt;
  bt.setParams(name, BLUETOOTH_PIN, BLUETOOTH_BAUDRATE, quick);
}


Das sollte alles sein.
 
Oben