AlphaBot: Linienverfolger kalibrieren: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
|||
| Zeile 19: | Zeile 19: | ||
/* Die Sensoren 1..5 sind an die analogen Eingänge 0..4 angeschlosse */ | /* Die Sensoren 1..5 sind an die analogen Eingänge 0..4 angeschlosse */ | ||
TRSensors trs = TRSensors(); // Handle zum Sensor | TRSensors trs = TRSensors(); // Handle zum Sensor | ||
/* Einmalige Systeminitialisierung */ | |||
void setup() { | void setup() { | ||
Serial.begin(9600); // Init für serielle Ausgabe mit 9600 Baud | |||
Serial.begin( | |||
Serial.println("Kalibrierung startet für 10s..."); | Serial.println("Kalibrierung startet für 10s..."); | ||
for (int i = 0; i < 400; i++) // | for (int i = 0; i < 400; i++) // make the calibration take about 10 seconds | ||
{ | { | ||
trs.calibrate(); // | trs.calibrate(); // reads all sensors 10 times | ||
} | } | ||
Serial.println("Kalibrierung beendet"); | Serial.println("Kalibrierung beendet"); | ||
| Zeile 63: | Zeile 46: | ||
} | } | ||
Serial.println(); | Serial.println(); | ||
delay(1000); | delay(1000); | ||
Serial.println("SETUP beendet"); | Serial.println("SETUP beendet"); | ||
} | } | ||
/* Main Schleife */ | |||
void loop() { | void loop() { | ||
unsigned int Messwerte[NUM_SENSORS]; // Meswert Array | |||
unsigned int position = trs.readLine(Messwerte); | unsigned int position = trs.readLine(Messwerte); | ||
for (unsigned char i = 0; i < NUM_SENSORS; i++) | for (unsigned char i = 0; i < NUM_SENSORS; i++) | ||
| Zeile 78: | Zeile 59: | ||
Serial.print('\t'); | Serial.print('\t'); | ||
} | } | ||
Serial.println(position); | |||
} | } | ||
</pre> | </pre> | ||
| Zeile 86: | Zeile 67: | ||
<div style="width:1200px; height:300px; overflow:auto; border: 2px solid #088"> | <div style="width:1200px; height:300px; overflow:auto; border: 2px solid #088"> | ||
<pre> | <pre> | ||
/* | /* Bibliotheken hinzufügen */ | ||
#include "TRSensors.h" | #include "AlphaBot.h" // Arduino Bibliothek für die Motoren einbinden | ||
#include "TRSensors.h" // Tracker Sensor Bibliothek | |||
/ | AlphaBot Alf = AlphaBot(); // Instanz des AlphaBot wird erzeugt | ||
TRSensors trs = | TRSensors trs = TRSensors(); // Instanz des Sensors wird erzeugt | ||
/ | #define NUM_SENSORS 5 // 5 Tracker Sensoren, Daten via I2C | ||
int | unsigned int Messwerte[NUM_SENSORS]; // Meswert Array wird angelegt | ||
void setup() { | void setup() { | ||
// put your setup code here, to run once: | // put your setup code here, to run once: | ||
Serial.begin( | Serial.begin(9600); // Achtung hohe Geschwindigkeit für den seriellen Monitor | ||
KalibriereLinienVerfolger(); // kalibrierung des Linienverfolgers | |||
Serial.println("SETUP beendet"); | |||
} | |||
void loop() { | |||
unsigned int position = trs.readLine(Messwerte); | |||
Serial.println(position); // Istwert ausgeben | |||
/* 2-Punkt-Regler */ | |||
if (position > 2000) { | |||
Alf.MotorRun(0, -80); // VZW um vorwärts zu fahren | |||
} | |||
else { | |||
Alf.MotorRun(-80, 0); | |||
} | |||
} | |||
void KalibriereLinienVerfolger() { | |||
Serial.println("Kalibrierung startet für 10s..."); | Serial.println("Kalibrierung startet für 10s..."); | ||
for (int i = 0; i < 400; i++) // make the calibration take about 10 seconds | for (int i = 0; i < 400; i++) // make the calibration take about 10 seconds | ||
| Zeile 125: | Zeile 108: | ||
} | } | ||
Serial.println("Kalibrierung beendet"); | Serial.println("Kalibrierung beendet"); | ||
// Ausgabe der Minimalwerte während der Kalibrierung | // Ausgabe der Minimalwerte während der Kalibrierung | ||
for (int i = 0; i < NUM_SENSORS; i++) | for (int i = 0; i < NUM_SENSORS; i++) | ||
| Zeile 132: | Zeile 115: | ||
Serial.print(' '); | Serial.print(' '); | ||
} | } | ||
Serial.println(); | Serial.println(); | ||
// Ausgabe der Maximalwerte während der Kalibrierung | |||
for (int i = 0; i < NUM_SENSORS; i++) | for (int i = 0; i < NUM_SENSORS; i++) | ||
{ | { | ||
| Zeile 141: | Zeile 124: | ||
} | } | ||
Serial.println(); | Serial.println(); | ||
delay(1000); | delay(1000); | ||
} | } | ||
</pre> | </pre> | ||
</div> | </div> | ||
[[Datei:Linienverfolger.jpg|thumb|right|550px|Abb. 1: Motorenbezeichnung in Fahrtrichtung]] | [[Datei:Linienverfolger.jpg|thumb|right|550px|Abb. 1: Motorenbezeichnung in Fahrtrichtung]] | ||
== Hausaufgaben bis zum 10. Termin == | == Hausaufgaben bis zum 10. Termin == | ||
Version vom 12. Mai 2022, 17:32 Uhr
Autor: Prof. Dr.-Ing. Schneider

Inhalt des 9. Termins
- Ich stelle Euch den Sensor "Linienverfolger" vor.
- Wir kalibrieren den Sensor.
- Wir lesen die Messwerte ein.
- Wir programmieren einen 2-Punkt-Regler, um einer Linie zu folgen.
Quelltext
Kalibrierung
/* Sensorbibliothek hinzufügen */
#include "TRSensors.h"
#define NUM_SENSORS 5
/* Die Sensoren 1..5 sind an die analogen Eingänge 0..4 angeschlosse */
TRSensors trs = TRSensors(); // Handle zum Sensor
/* Einmalige Systeminitialisierung */
void setup() {
Serial.begin(9600); // Init für serielle Ausgabe mit 9600 Baud
Serial.println("Kalibrierung startet für 10s...");
for (int i = 0; i < 400; i++) // make the calibration take about 10 seconds
{
trs.calibrate(); // reads all sensors 10 times
}
Serial.println("Kalibrierung beendet");
// Ausgabe der Minimalwerte während der Kalibrierung
for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(trs.calibratedMin[i]);
Serial.print(' ');
}
Serial.println();
// Ausgabe der Maximalwerte während der Kalibrierung
for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(trs.calibratedMax[i]);
Serial.print(' ');
}
Serial.println();
delay(1000);
Serial.println("SETUP beendet");
}
/* Main Schleife */
void loop() {
unsigned int Messwerte[NUM_SENSORS]; // Meswert Array
unsigned int position = trs.readLine(Messwerte);
for (unsigned char i = 0; i < NUM_SENSORS; i++)
{
Serial.print(Messwerte[i]);
Serial.print('\t');
}
Serial.println(position);
}
Linienverfolger
/* Bibliotheken hinzufügen */
#include "AlphaBot.h" // Arduino Bibliothek für die Motoren einbinden
#include "TRSensors.h" // Tracker Sensor Bibliothek
AlphaBot Alf = AlphaBot(); // Instanz des AlphaBot wird erzeugt
TRSensors trs = TRSensors(); // Instanz des Sensors wird erzeugt
#define NUM_SENSORS 5 // 5 Tracker Sensoren, Daten via I2C
unsigned int Messwerte[NUM_SENSORS]; // Meswert Array wird angelegt
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); // Achtung hohe Geschwindigkeit für den seriellen Monitor
KalibriereLinienVerfolger(); // kalibrierung des Linienverfolgers
Serial.println("SETUP beendet");
}
void loop() {
unsigned int position = trs.readLine(Messwerte);
Serial.println(position); // Istwert ausgeben
/* 2-Punkt-Regler */
if (position > 2000) {
Alf.MotorRun(0, -80); // VZW um vorwärts zu fahren
}
else {
Alf.MotorRun(-80, 0);
}
}
void KalibriereLinienVerfolger() {
Serial.println("Kalibrierung startet für 10s...");
for (int i = 0; i < 400; i++) // make the calibration take about 10 seconds
{
trs.calibrate(); // reads all sensors 10 times
}
Serial.println("Kalibrierung beendet");
// Ausgabe der Minimalwerte während der Kalibrierung
for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(trs.calibratedMin[i]);
Serial.print(' ');
}
Serial.println();
// Ausgabe der Maximalwerte während der Kalibrierung
for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(trs.calibratedMax[i]);
Serial.print(' ');
}
Serial.println();
delay(1000);
}

Hausaufgaben bis zum 10. Termin
- Bastelt Euch einen Rundkurs.
- Folgt der Linie auf dem Rundkurs.
- Ist eine Fahrt in beide Richtungen möglich?
Hinweise:
- Einen Artikel zum Linienverfolger findet Ihr hier.
- Die Jumper von Block F müssen alle links gesetzt sein.
Musterlösung
→ zurück zum Hauptartikel: Projekt Alf