Inbetriebnahme des Experimentalfahrzeugs,
Starten und Pausieren des Programms
Inbetriebnahme
• Batterie Anschließen:
Rot
→ + Grün → -
• Stift in Stifthalter legen, es muss darauf geachtet werden,
dass der Stift die Zeichenfläche berührt
Starten des Programms
• Starten des Programms wenn establishContactButton() einprogrammiert ist (Standard):
2x Drücken des Tasters für min. 0,5sek.
• Starten des Programms wenn establishContactSerial() einprogrammiert ist:
Im "Serial-Monitor" beliebiges Zeichen eingeben und absenden.
Pausieren des laufenden Programms
• 1x Drücken des Tasters pausiert das Programm (Motoren stoppen)
• 1x
weiteres Drücken des Tasters lässt das Programm wieder fortsetzen
|
![Experimentalfahrzeug Übersicht](images/0410%20Experimentalfahrzeug-Übersicht.png)
Übersicht über Experimentalfahrzeug |
Ändern des Programms
Dieser Punkt möchte erklären, wie einfach eingene Fahrwege mit der
gegebenen Hardware und Software einprogrammiert werden können.
Benutzt wird dabei das Beispielprogramm
Das Haus vom Nikolaus
(siehe auch Kapitel Quellcode).
Eigene Fahranweisungen kann man in der
ESP32-MouseVehicle4-House.ino in der
loop()-Funktion nach
der Zeile Serial.println("Start
program"); einfügen. Sollten hier
bereits Anweisungen stehen (wie im Beispielprogramm), können
diese auskommentiert werden. |
![](images/0410%20einfache_Programmierung_1.PNG) |
Mit dem Befehl driveDist() fährt
das Fahrzeug eine angegebene Strecke geradeaus. Dabei
wird die zu fahrende Strecke in [mm] angegeben und die
gewünschte Geschwindigkeit in [mm/s]. Soll das Fahrzeug
rückwärts fahren, kann die Strecke negativ angegeben werden,
die Geschwindigkeit muss positiv sein. |
Vorwärts für 200mm mit 60mm/s:
![](images/0410%20einfache_Programmierung_driveDist.PNG)
Rückwärts für 200mm mit 60mm/s:
![](images/0410%20einfache_Programmierung_driveDist_neg.PNG) |
Mit dem Befehl
rotateAngle() dreht sich das Fahrzeug um
einen angegebenen Winkel. Dabei wird der zu fahrende
Winkel in [rad] angegeben und die gewünschte Geschwindigkeit
in [rad/s] (1rad/s entspricht beim Experimentalfahrzeug etwa
100mm/s). |
Linksdrehung für π/2 = 90° mit 0,6rad/s
![](images/0410%20einfache_Programmierung_rotAngle.PNG)
Rechtsdrehung für π/2 = -90° mit 0,6rad/s
![](images/0410%20einfache_Programmierung_rotAngle_neg.PNG) |
Verschachtelt und mit den üblichen
Kontrollstrukturen versehen lassen sich so beliebige
Fahrabläufe kombinieren. Hier das Beispiel für das Haus vom
Nikolaus. |
![](images/0410%20einfache_Programmierung_2.PNG) |
Kalibrieren des Sensors
Die Umrechnung der Rohwerte des Sensors schließt die feinkalibrierung des Sensors mit ein.
Korrigiert muss zum einen die eingestellte Auflösung des Sensors,
sowie weitere Einflüsse, wie Einbaufehler, Unterschiede aufgrund des
Untergrunds, etc.
DPI-Korrektur
Der Maussensor PAW3204DB-TJ3R bietet Auflösungen an von 400 DPI
(dots per inch, auch cpi = counts per inch) bis 1600 DPI. Abhängig
von der Auflösung müssen die vom Sensor gemessenen Rohwerte mit
verschiedenen Faktoren in [mm] umgerechnet werden. Die
Korrekturformel in readMouseSensor()
ist so aufgebaut, dass für den Korrekturfaktor
dpiCalib 1/1000
des DPI-Werts eingegeben werden kann (z.B. für 400 DPI:
dpiCalib = 0.4; und für 1600 DPI:
dpiCalib = 1.6;). In der Regel müssen nach einem
Wechsel der Auflösung noch weitere Fehlerkorrekturen vorgenommen
werden (s.u.).
Fehlerkorrektur
Zur Kalibrierung der X-Achse des Sensors (in Fahrtrichtung des
Fahrzeug) lässt man das Experimentalfahrzeug eine definierte Strecke
geradeaus fahren und misst die tatsächlich gefahrene Strecke. Mit
diesen Werten wird der Kalibrierwert in der Funktion
readMouseSensor() korrigiert/verändert:
calibValX(neu) = calibValX(alt) · (tatsächliche Strecke)/(definierte
Strecke).
Vergleichbar verfährt man mit der Y-Achse: man lässt hierfür das
Experimentalfahrzeug einen definierten Winkel drehen und misst den
tatsächlich zurückgelegten Winkel. Ebenso wird mit diesen Werten der
Kalibrierwert in der Funktion readMouseSensor()
korrigiert/verändert:
calibValY(neu) = calibVal(alt) · (tatsächlicher Winkel)/(definierter
Winkel).
Modifizieren der Sensoreinstellungen
Möchte man weitere Einstellungen am Sensor vornehmen, z.B. die
Auflösung oder den Sleep-modus ändern, kann man dies in der
Sensorfunktion readMouseSensor()
vornehmen. Unter dem Kommentar
"//configure sensor here" sind bereits einige Einstellungen,
welche auch geändert werden können (auf eigene Gefahr), siehe
Abbildung unten.
![](images/0410%20Configuration_Sensor.PNG)
Sensorkonfigurationsbereich in readMouseSensor()
Dabei müssen die Werte (wahlweise in Hex-Darstellung oder
Binärdarstellung) entsprechend des PAW3204DB-Datenblatts geschrieben
werden, eine falsche Beschreibung kann den Sensor unter Umständen
zerstören.
Interessante Einstellungen können in den
verschiedenen Registern sein:
• Operation_Mode (0x05): LED-Shutter
ein und ausschalten, Sleep-Modes ein und ausschalten
• Configuration (0x06): Reset des Sensors, Auflösung (CPI) einstellen
Für die Folgenden Register muss in Write_Protect (0x09) erst das
Schreiben zugelassen werden (0x5A schreiben):
• Image_Threshold
(0x0D): Grenzwert der Bildqualität festlegen (Jedes vom Sensor
aufgenommene Bild hat auch einen Qualitätsindex. Ist ein Bild
schlechter als ein Grenzwert, wird keine Bewegungsinformation daraus
gelesen. Dieser kann mit diesem Register geändert werden.)
• Image_Recognition (0x0E): Anpassen der Bildqualität (muss noch
weiter untersucht werden.)
|