Tipp: Benutze das WIKI für aktuelle Informationen!
Die Steuerung besteht aus einem fertig aufgebauten Mikrocontroller (Arduino Mega 2560 mit 54 I/O Pins).
- 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
Hier findet Ihr alle benötigten Teile für Euren Ardumower.
Schaltbild
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).
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:
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
Ambrogio-Ardumower: Erster Einsatz (Highlights)
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:
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
- wenn Hinderniß während Reverse => Roll
- wenn Hinderniß während Roll => Forward