Hans Z
30.12.2006, 19:38
Hallo miteinander,
ich habe jetzt auch meinen "Assi" zum Laufen gebtacht und den ersten Test mit einem primitiven Linienprogramm gemacht.
Sehr wichtig erscheint mir der Abgleich der Phototransitoren an der Unterseite des Asuro. Wenn die bei einer z.B. weißen Fläche unterschiedliche Werte erzeugen, dann gibt es auch Probleme mit der Linienverfolgung...
Das folgende kleine Programm dient zum Abgleich der beiden Phototransitoren und macht nichts anderes als die Helligkeitswerte der beiden Transistoren im Terminalprogramm auszugeben.
Ich habe nur die rote LED in der Mitte ausrichten müssen und schon habe ich einigermaßen gleiche Heligkeitswerte erhalten.
Grüße, Hans.
Hier der Quelltext für den Phototransitoren-Abgleich:
#include "asuro.h" // Prüfung der Phototransitoren
/* ------------ Line Sensor Test ---------------- */
/* Left Sensor -> Left Break LED ON when Light on
Left Phototransistor bright enough */
/* Right Sensor -> Right Break LED ON when Light on
Right Phototransistor bright enough */
int main(void)
{
unsigned char tmp[2] = {OFF,OFF};
unsigned int data[2];
unsigned int z;
Init();
SerWrite("\n\r --- Line Sensor Test ---",28);
StatusLED(OFF);
FrontLED(ON);
do
{
/* for(z = 1; z < 100; z++); EDIT 1: unnützer Code
{
}
*/
LineData(data);
if (data[0] > 400)
tmp[0] = ON;
else
tmp[0] = OFF;
if (data[1] > 400)
tmp[1] = ON;
else
tmp[1] = OFF;
BackLED(tmp[0],tmp[1]);
SerWrite("\n\r Phototransistorwerte links/rechts: ",39);
PrintInt(data[0]);
SerWrite("/ ",2);
PrintInt(data[1]);
// SerWrite("\f",1); //Seitenvorschub EDIT 2: bringt Fehler bei der Ausgabe
}
while(1);
return 0;
}
/* END Line Sensor Test ------------------------- */
Hier der Quelltext für die Linienverfolgung:
#include "asuro.h" // Linienverfolgung auf die einfachste Art
int main(void)
{
unsigned int data[2]; //Speicher bereitstellen
Init();
FrontLED(ON); // Linienbeleuchtung einschalten
//MotorDir(RWD,RWD); // Beide Motoren auf rückwärts!!!!
MotorDir(FWD,FWD); // Beide Motoren auf vorwärts
while(1)
{ // Endlosschleife, ASURO soll beliebig lang einer Linie nachfahren
LineData(data); // aktuelle Helligkeitswerte der Fototransistoren einlesen
if (data [0] > data [1] ) // links heller als rechts...
{MotorSpeed(150,100);} // ... dann links mehr Gas geben...
else
{MotorSpeed(100,150);} // ... sonst rechts mehr Gas geben!
}
return 0;
}
ich habe jetzt auch meinen "Assi" zum Laufen gebtacht und den ersten Test mit einem primitiven Linienprogramm gemacht.
Sehr wichtig erscheint mir der Abgleich der Phototransitoren an der Unterseite des Asuro. Wenn die bei einer z.B. weißen Fläche unterschiedliche Werte erzeugen, dann gibt es auch Probleme mit der Linienverfolgung...
Das folgende kleine Programm dient zum Abgleich der beiden Phototransitoren und macht nichts anderes als die Helligkeitswerte der beiden Transistoren im Terminalprogramm auszugeben.
Ich habe nur die rote LED in der Mitte ausrichten müssen und schon habe ich einigermaßen gleiche Heligkeitswerte erhalten.
Grüße, Hans.
Hier der Quelltext für den Phototransitoren-Abgleich:
#include "asuro.h" // Prüfung der Phototransitoren
/* ------------ Line Sensor Test ---------------- */
/* Left Sensor -> Left Break LED ON when Light on
Left Phototransistor bright enough */
/* Right Sensor -> Right Break LED ON when Light on
Right Phototransistor bright enough */
int main(void)
{
unsigned char tmp[2] = {OFF,OFF};
unsigned int data[2];
unsigned int z;
Init();
SerWrite("\n\r --- Line Sensor Test ---",28);
StatusLED(OFF);
FrontLED(ON);
do
{
/* for(z = 1; z < 100; z++); EDIT 1: unnützer Code
{
}
*/
LineData(data);
if (data[0] > 400)
tmp[0] = ON;
else
tmp[0] = OFF;
if (data[1] > 400)
tmp[1] = ON;
else
tmp[1] = OFF;
BackLED(tmp[0],tmp[1]);
SerWrite("\n\r Phototransistorwerte links/rechts: ",39);
PrintInt(data[0]);
SerWrite("/ ",2);
PrintInt(data[1]);
// SerWrite("\f",1); //Seitenvorschub EDIT 2: bringt Fehler bei der Ausgabe
}
while(1);
return 0;
}
/* END Line Sensor Test ------------------------- */
Hier der Quelltext für die Linienverfolgung:
#include "asuro.h" // Linienverfolgung auf die einfachste Art
int main(void)
{
unsigned int data[2]; //Speicher bereitstellen
Init();
FrontLED(ON); // Linienbeleuchtung einschalten
//MotorDir(RWD,RWD); // Beide Motoren auf rückwärts!!!!
MotorDir(FWD,FWD); // Beide Motoren auf vorwärts
while(1)
{ // Endlosschleife, ASURO soll beliebig lang einer Linie nachfahren
LineData(data); // aktuelle Helligkeitswerte der Fototransistoren einlesen
if (data [0] > data [1] ) // links heller als rechts...
{MotorSpeed(150,100);} // ... dann links mehr Gas geben...
else
{MotorSpeed(100,150);} // ... sonst rechts mehr Gas geben!
}
return 0;
}