Sprachauswahl

Tipp: Benutze das WIKI für aktuelle Informationen!

arduinomega

Die Steuerung besteht aus einem fertig aufgebauten Mikrocontroller (Arduino Mega 2560 mit 54 I/O Pins).

Benötigte Teile

ardumower parts    ardumower overview

  • Hauptfunktionen
    • Arduino Kabel (female-female and male-female jumper cable)
    • 1 x Arduino Mega 2560
    • 1 x DC Step-Down-Wandler-Modul (LM2596)
    • 2 x L298N Motortreiber-Modul
    • 3 x Stromsensor-Modul ACS712-5
    • 1 x Stromsensor-Modul ACS712-30
    • 1 x Bluetooth-Modul (für Handy-Navigation)
    • Motortreiberschaltung für Mähmotor: MOSFET IRLIZ44N, Diode MBR1045, Schottky-Diode 10A, Widerstände (10K, 180 Ohm)
    • Widerstände (2 x 47K, 2 x 5K), Sicherung F20A250V
    • Piezo-Buzzer (0,1W - z.B. PAC-1205), Taster, Ein-/Aus-Schalter 10A
  • Schleifensender (optional)
    • 1 x Arduino Nano
    • 1 x DC Step-Down-Wandler-Modul (LM2596)
    • 1 x L298N Motortreiber-Modul
    • Spule 220µH, Elko 2,2µF/160V, Widerstände (1 Ohm, 1K, 4,7K), Diode 1N4448
  • Schleifenempfänger (optional)
    • 1 x Arduino Nano
    • 2 x Arduino Sound Sensor-Modul (mit LM386)
    • Kondensatoren (2 x 4,7nF, 2 x 100nF), Widerstände (2 x 200k), 2 x Empfängerspulen 85mH
  • Weitere Modul
    • 1 x HC-SR04 Ultraschallsensor-Modul (optional)
    • 1 x GY80-Modul (Gyro, Beschl., Kompaß) (optional)
    • 1 x DS1307 Echtzeituhr-Modul (optional)
    •  1x Bluetooth Modul

        shopping  Hier findet Ihr alle benötigten Teile für Euren Ardumower.  robot4

 

Schaltbild

ardumower schematics

Spannungsversorgung
Die 5V Spannungsversorgung sollte über einen Step-Down-Spannungsregler (z.B. Modul mit LM2596) erfolgen, welcher die stabilisierte 5V Spannung für den Arduino und die weiteren Module generiert. Dazu zuvor den Spannungsregler auf 5V einstellen. Achtung: auf keinen Fall mehr als 5V in den Arduino 5V-Pin schicken, dadurch würde der Arduino zerstört. Daher immer die Spannung der 5V-Spannungsversorgung messen bevor man diese an den Arduino 5V-Pin anschließt!
Alle in dem Schaltbild gezeigten Bauteile zusammen verbrauchen etwa 5W.

I2C-Bus / Fehler-Piepen
Über die Leitungen SDA/SCL kommunizieren die einzelnen Komponenten (Arduino Nano, RTC, IMU, etc.). Diese Leitungen sollten sehr kurz gehalten werden (ggf. verdrillen) und sich nicht in die Nähe von Spannungsregler oder Motortreiber befinden. Falls ein Kommunikationsfehler vorliegt, steigt der Fehlerzähler an welcher über pfodApp eingesehen werden kann. Zusätzlich fängt der Roboter beim Starten an zu piepen.

 

Erste Betriebnahme
Zunächst sollte überprüft werden, ob die Antriebsmotoren richtig angesteuert werden. Dazu den Roboter aufbocken, so dass sich Räder und Messer frei drehen können (ggf. Messer vorher demontieren).
warning Warnhinweis: Aus Sicherheitsgründen für's erste Testen Mähmotor immer ohne Messer betreiben!

Die Software bietet einen Diagnose-Modus, womit die korrekte Drehrichtung der Motoren getestet werden kann. Hierfür Die serielle Konsole in der Arduino-IDE aufrufen (CTRL+SHIFT+M) und die Baudrate auf 19200 stellen. Dann sollten fortlaufend die aktuellen Motor-bzw. Sensorwerte erscheinen:

    20 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...
    21 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...
    22 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...
    23 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...
    24 OFF  spd    0    0    0 sen    0    0    0 bum    0    0 son...
    ...

Nun die Taste ‘t’ drücken, und mit ENTER bestätigen. Es erscheint der Diagnosemodus, in dem die Laufrichtung der Antriebsmotoren getestet werden kann.


Diagnose

Jedesmal wenn ein Sensor auslöst (triggert), wird dessen Trigger-Zähler um eins hochgezählt. In der seriellen Konsole kann zwischen Trigger-Zähler und aktuellen Sensor-Werten umgeschaltet werden (Taste 'v') - Als Trigger-Zähler werden angezeigt:

1) Zeit des aktuellen Automat-Zustands (ms)
2) loop()-Durchgänge pro Sekunde
3) gewählter Sensor-Verbose-Modus (0=Zählerstände/1=Sensorwerte/2=Sensorwerte)
4) aktuelle Automat-Status (FORW, REV, ROLL etc.)
5) nach-Hause-fahren? (1/0)
6) "spd" - Ansteuerung/Geschwindigkeit Motor: links (PWM), rechts (PWM), Mähwerk (Drehzahl)
7) "sen" - Stromüberschreitungszähler Motor: links, rechts, Mähwerk
8) "bum" - Bumperzähler: links, rechts 9) "son" - Ultraschall-Abstand-unterschritten: Zähler 10) "pit/roll" - Neigung (errechnet mit Beschl.-Sensor) 11) "com" - Kompaß-Kurs 12) "per" - Induktionsschleifendetektor: Zähler 13) "bat" - Batterie-Spannung 14) "chg" - Ladestrom


Zusätzlich kann man sich das Auslösen der Sensoren (Trigger-Zähler und aktuelle Werte) via pfodApp (Android) über die Zeit plotten lassen:

ardumower sensor counter plotting    ardumower plot sensors

Die Trigger-Empfindlichkeit jedes Sensors kann geändert werden (s.u.)

Starten des Mähroboters

Zum Starten benötigt man einen Taster und den Piezo-Buzzer:

pinButton —o Button o— GND (Taster für ON/OFF)

pinBuzzer —o Buzzer o— GND (Piezo-Buzzer)

Dann den Taster so lange drücken, bis die entsprechende Beep-Folge ertönt.

Betriebsmodi (Button für x Beeps drücken):
1 Beeps : Normal Mähen (mit Messermodulation falls vorhanden)
2 Beeps : Normal Mähen (ohne Messermodulation)
3 Beeps : Fahren via Fernbedienung (RC)
4 Beeps : Fahren ohne Mähmotor
5 Beeps : In Schleife hineinfahren und diese abfahren

Fehlerspeicher / Fehler-Piepen
Falls ein Kommunikationsfehler vorliegt (siehe Abschnitt I2C oben), steigt der Fehlerzähler an welcher über pfodApp eingesehen werden kann. Zusätzlich fängt der Roboter beim Starten an zu piepen.

Demo-Videos
video  Ambrogio-Ardumower: Erster Einsatz (Highlights)

video  Rotenbach-Ardumower: Erster Einsatz

 

Arduino-Code

siehe Rubrik Downloads
WICHTIG!  Es muss Arduino IDE v1.5.6 oder höher verwendet werden!


Noch keine Erfahrung mit Arduino?
Auf folgenden (externen) Seiten findest Du eine Einführung für den "Arduino"
1. http://popovic.info/html/arduino/arduinoUno_1.html
2. http://www.youtube.com/channel/UCZiVMEY5a82Ov2Tq5TvLOhA
3. http://robocupjuniorunibremen.files.wordpress.com/2011/05/arduino_programmierhandbuch.pdf
4. http://www.freeduino.de/books/arduino-programmier-handbuch
5. http://www.freeduino.de/books/arduino-tutorial-lady-ada
6. https://docs.google.com/file/d/0Bw_ruMOtRDDgNXI3OTFGZXhIZ2c/edit?usp=sharing
7.
8.


Funktionsweise der Software
Im folgenden werden einige Grundlagen der Software beschrieben:

Config-Files
Config-Files setzen die Befehle des Hauptprogramms in die entsprechende Hardware (d.h. Aktorik und Sensorik) um - so kann das Hauptprogramm an verschiedene Rasenmähroboter angepaßt werden:

ardumower config files

Beispiel:

Das Hauptprogramm möchte den linken Antriebsmotor mit dem Wert 100 ansteuern. Die aktuell gewählte Roboter-Config Datei wird dazu vom Hauptprogramm mit dem Befehl aufgerufen: 
setActuator(ACT_MOTOR_LEFT, 100)

Die gewählte Config-Datei setzt dann diesen Befehl um, indem diese den passenden Motortreiber anspricht:
setL298N(pinMotorLeft, pinMotorLeftPWM, 100)

Anpassen der Konfiguration für den Roboter
Die Konfiguration des Roboters wird in der Konfigurations-Datei (für Ardumower Chassis "config.h") vorgenommen welche in der Ardumower-Hauptdatei (ardumower.ino) aktiviert wird. Soll ein Sensor aktiviert werden, so muss die entsprechende Zeile aktiviert werden, d.h. der Kommentar (//) entfernt werden. Ist der Sensor hingegen nicht vorhanden, so sollte entsprechende Zeile kommentiert werden (//), da ansonsten Zufallswerte für diesen Sensor ermittelt werden!
Hier ein Beispiel wie der Stromsensor des rechten Getriebemotors auskommentiert wird (mit dem Kommentarzeichen "//" am Anfang der Zeile):

// case SEN_MOTOR_RIGHT: return( (int)(((double)analogRead(pinMotorRightSense)-motorSenseRightZero) * motorSenseRightScale) ); break;


Im Folgenden wird auf einzelne Aspekte der Anpassung eingegangen:

Getriebemotor tauschen (linken und rechten Motor tauschen):

case ACT_MOTOR_RIGHT: setL298N(pinMotorLeftDir, pinMotorLeftPWM, value); break;
case ACT_MOTOR_LEFT: setL298N(pinMotorRightDir, pinMotorRightPWM, value); break;  


Getriebemotor Richtungsswechsel (vor und zurück tauschen):

case ACT_MOTOR_LEFT: setL298N(pinMotorLeftDir,  pinMotorLeftPWM, -value); break;
case ACT_MOTOR_RIGHT: setL298N(pinMotorRightDir,  pinMotorRightPWM, -value); break; 

Die Kalibrierung des Stromsensors für die Getriebmotoren kann über Konfigurationsparameter vorgenommen werden (s.u.).

Mähmotor
Die Kalibrierung des Stromsensors für den Mähmotor kann über Konfigurationsparameter vorgenommen werden (s.u.).

Bumper
Sollen Bumper verwendet werden, muss entsprechende Option aktiviert (1) werden, andernfalls sollte diese deaktiviert (0) werden:
char bumperUse         = 1;      // has bumpers?

Ultraschallsensor
Sollen Ultraschall-Sensoren verwendet werden, muss entsprechende Option aktiviert (1) werden, andernfalls sollte diese deaktiviert (0) werden:
char sonarUse          = 1;      // use ultra sonic sensor?

Sollen mehr als der mittlere Ultraschall-Sensor verwendet werden, müssen die entsprechenden Zeilen aktiviert werden, andernfalls bitte entsprechende Zeilen kommentieren (folgendes Beispiel deaktiviert linken und rechten Ultraschall-Sensor):
   case SEN_SONAR_CENTER: return(readHCSR04(pinSonarCenterTrigger, pinSonarCenterEcho)); break; 
//   case SEN_SONAR_LEFT: return(readHCSR04(pinSonarLeftTrigger, pinSonarLeftEcho)); break;
//   case SEN_SONAR_RIGHT: return(readHCSR04(pinSonarRightTrigger, pinSonarRightEcho)); break;  

Induktionsschleife
Soll eine Induktionsschleife verwendet werden, muss entsprechende Option aktiviert (1) werden, andernfalls sollte diese deaktiviert (0) werden:
char perimeterUse       = 1;      // use perimeter?

Rasensensor
Sollen Rasensensoren verwendet werden, muss entsprechende Option aktiviert (1) werden, andernfalls sollte diese deaktiviert (0) werden:
char lawnSensorUse     = 1;       // use capacitive Sensor


Batteriespannung/Ladespannung etc.
Die Kalibrierung für die Batteriespannung, Ladespannung etc. kann über entsprechende Konfigurationsparameter vorgenommen werden (s.u.).

Timer
  Der Timer sollte deaktiviert werden (char timerUse = 0), da dieser noch im Beta-Test ist.

Odometrie
  Odometrie sollte deaktiviert werden (char odometryUse = 0), da diese noch in Entwicklung ist.

IMU / Komaß
  IMU / Kompaß sollte deaktiviert werden (char imuUse = 0), da diese noch im Beta-Test ist.

GPS
   GPS ist noch Entwicklung.



Konfigurationsparameter / Menüstruktur (pfodApp)

Wichtig: Falls ein Software-Update aufgespielt wird, direkt nach dem Update via pfodApp einmalig alle alten Einstellungen löschen (Settings->Factory reset). Dadurch werden ggf. vorhandene Einstellungen gelöscht. Alte Einstellungen können zu Fehlverhalten führen wenn sich das interne Konfigurations-Format geändert hat.

Hauptmenü Untermenü1 Untermenü2 Beschreibung  
Commands     Roboter fernsteuern (Start/Stop etc.)  
Settings     Einstellungen  
  Motor   Antriebsmotor  
    Overcurrent Counter l, r Zähler zählt bei "Motorstrom zu hoch" um eins hoch (linker, rechter Motor)  
    Current l, r Aktueller Strom linker, rechter Motor  
    Current max Max. erlaubter Strom  
    Sense zero l Nullpunkt-Kalibrierung Stromsensor links  
    Sense zero r Nullpunkt-Kalibrierung Stromsensor rechts  
    Speed l, r Aktuelle Spannung (PWM) linker, rechter Motor  
    Speed max Max. erlaubte Spannung (PWM)
 
    Roll time max Max. erlaubte Zeit zum Drehen des Roboters (ms)  
    Reverse time Zeit zum rückwärts fahren (ms)  
    Forw time max Max. erlaubte Zeit zum vorwärts fahren (ms-Timeout)  
    Testing is OFF Hiermit kann Motor links/rechts/aus getestet werden  
  Mow   Mähmotor  
    Overcurrent Counter Zähler zählt bei "Motorstrom zu hoch" um eins hoch  
    Current Aktueller Strom  
    Current max Max. erlaubter Strom  
    Sense zero Nullpunkt-Kalibrierung Stromsensor
 
    Speed Aktuelle Spannung (PWM)
 
    Speed max Max. erlaubte Spannung (PWM)
 
    Modulate Messermodulation EIN/AUS  
    RPM Aktuelle Drehzahl  
    RPM set Soll-Drehzahl  
    RPM_P PID-Regler Drehzahl (Verstärkung)  
    RPM_I PID-Regler Drehzahl (Restfehler)  
    RPM_D PID-Regler Drehzahl (Dämpfung)  
    Testing is OFF Hiermit kann Motor ein/aus getestet werden  
   Bumper   Taster für Hindernis  
    Use YES/NO Bumper verwenden (ja/nein)  
    Counter l, r Zähler zählt bei gedrücktem Bumper um eins hoch (links, rechts)  
    Value l, r Aktueller Zustand des Bumpers (links, rechts)  
  Sonar   Ultraschallsensor  
    Use YES/NO Sensor verwenden (ja/nein)  
    Counter Zähler zählt bei Hindernis um eins hoch  
    Value l, c, r Aktueller Abstand zum Hindernis (Sensor links, mitte, rechts)  
    Trigger below ... Hindernis erkennen bei Abstand unter ...  
  Perimeter   Induktionsschleife  
    Use YES/NO Schleife verwenden (ja/nein)  
    Counter Zähler zählt über Sschleife um eins hoch  
    Value l, r Aktueller Sensorwert links, rechts  
    Trigger above ... Schleife erkennen bei Sensorwert über ...  
    Triggger timeout Schleife überfahren für Zeit ... (ms)  
    Track roll time Beim Schleife Abfahren (Hindernis) drehen für Zeit ... (ms)  
    Track rev time Beim Schleife Abfahren (Hindernis) rückwärtsfahren für Zeit ... (ms)  
    Track_P PID-Regler Schleife Abfahren (Verstärkung)  
    Track_I PID-Regler Schleife Abfahren (Restfehler)  
    Track_D PID-Regler Schleife Abfahren (Dämpfung)  
  Lawn sensor   Rasensensor (Kapazitiv)  
    Use YES/NO Sensor verwenden (ja/nein)  
    Counter Zähler zählt bei Erkennung "Kein Rasen" um eins hoch  
    Value f, b Aktueller Sensorwert (vorne, hinten)  
   IMU   Lagesensor (Kompaß, Gyro, Beschl.)  
    Use YES/NO Sensor verwenden (ja/nein)  
    Yaw Aktueller Kurs (Grad)  
    Pitch Drehung des Roboters um Querachse (Grad)  
    Roll Drehung des Roboters um Längsachse (Grad)  
    Correct dir YES/NO Kurskorrektur bei Vorwärts fahren (ja/nein)  
    Dir_P PID-Regler Kurskorrektur (Verstärkung)  
    Dir_I PID-Regler Kurskorrektur (Restfehler)  
    Dir_D PID-Regler Kurskorrektur (Dämpfung)  
    Roll_P PID-Regler Kurs-Drehung (Verstärkung)  
    Roll_I PID-Regler Kurs-Drehung (Restfehler)  
    Roll_D PID-Regler Kurs-Drehung (Dämpfung)  
   Battery   Batterie- u. Lade-Sensor  
    Battery Batteriespannung (Volt)
 
    Monitor YES/NO Batterie- u. Lade-Sensor überwachen (ja/nein)  
    Go home if below... Nach-Hause-Fahren einleiten bei Spannung unter...  
    Switch off if below... Ausschalten bei Spannung unter...  
    Charge Ladespannung (Volt), Ladestrom (Ampere)
 
    Charge sense zero Nullpunkt Kalibrierung Ladestrom  
    Battery factor Multiplikator Batteriespannung (Umrechnung zu Volt)
 
    Charge factor Multiplikator Ladespannung (Umrechnung zu Volt)
 
   Station   Ladestation  
    Reverse time Zeit rückwärts fahren (ms)  
    Roll time Zeit drehen nach rückwärts fahren (ms)  
    Forw time Zeit vorwärtsfahren nach drehen (ms)  
         
         
         
         
         
         
         


Erweiterungen:

  • Umstellung von I auf P, da I ja mit sinkender Spannung unter gleicher Last immer größer wird.

 

Zustandsautomat
Hauptbestandteil der Software ist ein sog. "Zustandsautomat", d.h. es gibt eine Menge von Zuständen ("OFF", "FORWARD", "ROLL", usw.) in denen sich der Roboter gerade befindet. Je nachdem was für ein Ereignis stattfindet (Sensor spricht an usw.) geht der Roboter in einen neuen Zustand.

Zustandsdiagramm

ardumower statemachine

Erweiterungen:

  • wenn Hinderniß während Reverse => Roll
  • wenn Hinderniß während Roll => Forward

 

UP
Template by JoomlaShine