SDE WS25: messeMittellinie.ino: Unterschied zwischen den Versionen
| Zeile 6: | Zeile 6: | ||
</gallery> | </gallery> | ||
Im Modul messeMittellinie.ino werden im Setup zunächst die Tracking-Sensoren des Alphabot kalibriert. Im loop werden aus dem Messwertarray der Sensoren ein Wert von 0-4000 ausgegeben. Die Funktion map() wandelt die den Werten dann eine Distanz zu. So kann die Entfernung der Mitte der Mittellinie zum zentralen Sensor ermittelt werden. | Im Modul messeMittellinie.ino werden im Setup zunächst die Tracking-Sensoren des Alphabot kalibriert. Im loop werden aus dem Messwertarray der Sensoren ein Wert von 0-4000 ausgegeben. Die Funktion map() wandelt die den Werten dann eine Distanz zu. So kann die Entfernung der Mitte der Mittellinie zum zentralen Sensor ermittelt werden. | ||
<gallery widths="350px" heights="350px"> | |||
Datei: messeMittellinieINOTest1.png | Abb. 1: Skizze der Mittellinienerfassung | |||
</gallery> | |||
= Anforderungen = | = Anforderungen = | ||
Version vom 23. Oktober 2025, 15:48 Uhr
Autor: Benutzer: Lukas Berkemeier
Einleitung/Funktion
-
Abb. 1: Skizze der Mittellinienerfassung
Im Modul messeMittellinie.ino werden im Setup zunächst die Tracking-Sensoren des Alphabot kalibriert. Im loop werden aus dem Messwertarray der Sensoren ein Wert von 0-4000 ausgegeben. Die Funktion map() wandelt die den Werten dann eine Distanz zu. So kann die Entfernung der Mitte der Mittellinie zum zentralen Sensor ermittelt werden.
-
Abb. 1: Skizze der Mittellinienerfassung
Anforderungen
Die Anforderungen werden aus SDE WS25: AP 1.6 Messung der Mittellinie entnommen.
Softwareentwurf
Der Systementwurf entspricht dem Modulentwurf aus Abbildung 2.
-
Abb. 2: messeMittellinie.ino
Umsetzung
messeMittellinie.ino
|
int messeMittellinie(unsigned int MesswertArray[])
{
int distanz;
/* Position der Linie lesen. Das Array für die Messwerte MesswertArray muss als Argument übergeben werden.
Rückgabewert position in [0..4000]. 2000 Zeigt die Mitte an. */
int Positionswert = trs.readLine(MesswertArray, true); //zweite Variable: white_line, standardmäßig false, false = schwarze linie, true = weiße linie
if(Positionswert <800 || Positionswert >3200)
{
return 50;
}
else
{
distanz = map(Positionswert, 800, 3200,24,-24);
}
Serial.print(Positionswert);
Serial.print(";");
return distanz;
}
|
Modultest
Da es sich bei dieser Entwicklung um die eines einzelnen Moduls handelt, schließt der Modultest mit dem Testbericht die Entwicklung ab (vgl. Tabelle 2). Zum Testen des Moduls wird das Modul aus der Umsetzung genutzt, indem sich die Werte zur Messung der Mittellinie im seriellen Monitor ausgegeben werden.
Fehlerbehebung
Nach der ersten Modulplanung sollte die Spannweite wie in Abbildung 5 von beiden äußeren Sensoren zentral über der Mitte der Mittellinie, mit 65 mm Spannweite genutzt werden. Mit der Funktion map() wurden den Werten 350-3650 die Entfernungen 33 bis -33 mm zugewiesen. Bei dieser Spannweite kam es im Bereich der äußeren Sensoren immer zu Messungenauigkeiten. Zur Fehlerbehebung wurde die Spannweiter auf 48 mm (+-24 mm) verringert und den Werten 800-3200 die Entfernungen 24 bis -24 mm zugewiesen. Im Modultest wurden die Änderungen als passend bewiesen.

Eine weitere Fehlerursache ist die Kalibrierung bzw. die Beleuchtung der Sensoren. Je nach Beleuchtung können verschiedene Werte gemessen werden. Ein möglicher Schritt zur Fehlerbehebung wäre das Anbringen einer Beleuchtung für die Sensoren um die Beleuchtung möglichst konstant zu halten.
→ zurück zum Hauptartikel: SDE WS25: AP 1.6 Messung der Mittellinie


