-
So großartigen sinn macht es nicht, das stimmt... evtl könnte man es mit einer zeitverzögerung begründen.
eine "kalibrierung" der sensoren dürfte nciht wirklich realisierbar sein, allerdings kann man den offset durchaus messen und (z.B. über 100 messungen) durch mittelwertbildung recht genau bestimmen.
wenn man diesen dann immer wieder von den messergebnissen abzeiht, dann ist das mehr oder weniger genauso wie eine kalibrierung, der messfehler wird halt mit einbezogen. und genau das geschieht im code oben.
-
Eine Mittelwertbildung kann ich im Code aber nicht entdecken...
Es macht auch keinen Sinn, x mal den Offset zu bilden, dieser hängt nämlich vom Untergrund ab und der ist auch nicht 100% homogen..
Also 255 mal eine Funktion aufzurufen, deren Rückgabewert nicht verwendet wird kann man sich schenken...
-
das ist wahr. die 100malige abfrage ist hier reht sinnlos.
allerdings wird der offset (wenigstens) 1x bestimmt, dadurch ist das programm schonmal deutlich genauer als wenn man von gleich "guten" werten des sensoren ausgeht.
-
Hallo Dalmator,
es gibt keine "guten" Sensorwerte. Der aktuelle Wert hängt vom Untergrund ab, der idealer weise der sein sollte außerhalb der Linie, der der Asuro folgen soll.
Gruß
-
das weiss ich auch... ich meinte mit guten werten dass die werte bei gleichem untergrund auch gleich sind, dass die sensoren sozusagen keinen offset haben.
dementsprechend ist das programm genauer als wenn man gar keinen offset mit einbeziehen würde und nur davon ausgehen würde, dass beide sensoren bei gleichem untergrund gleiche werte bzw spannungen zurückgeben.
-
hi EDH,
habe probeweise den code compiliert, die asuro.c war mit dabei, in unkenntnis dessen was da sonst im AVR studio alles an files mit eingebunden werden muss (könnte vielleicht für leute die lernen wollen angegeben sein? bite - danke) hab nur viele, viele fehlermeldungen bekommen :-(
z.b.
../edh_linie.c:30: error: syntax error before ';' token
wie kann ich es ändern???
gruß inka
-
hallo inka,
hast du den code sicher und genau so übernommen?
die fehlermeldung: irgend wo VOR dem ; in zeile 30 ist ein fehler - dazu müsste man den code sehen. wenn ich den code ober kopiliere bekomme ich diesen fehler nicht.
zu avrStudio:
https://www.roboternetz.de/phpBB2/ze...ght=avr+studio
gruß
downad
-
ja, danke Downad,
den link kenne ich, hier der code, den ich kompiliert habe:
Code:
#include "asuro.h"
#define SPEED 0x8F
int speedLeft,speedRight;
unsigned int lineData[2];
int ADOffset;
void LineLeft (void)
{
speedLeft += 1;
if (speedLeft > 0xFE) speedLeft = 0xFF;
}
void LineRight (void)
{
speedRight += 1;
if (speedRight > 0xFE) speedRight = 0xFF;
}
int main(void)
{
int i;
unsigned char j;
Init();
FrontLED(ON);
while(1) (j = 0; j < 0xFF; j++) {
LineData(lineData);}
LineData(lineData);
ADOffset = lineData[0] - lineData[1];
speedLeft = speedRight = SPEED;
(;;while(1) {
LineData(lineData);
i = (lineData[0] - lineData[1]) - ADOffset;
if ( i > 4) {
StatusLED(GREEN);
LineLeft();
}
else if ( i < -4) {
StatusLED(RED);
LineRight();
}
else {
StatusLED(OFF);
speedLeft = speedRight = SPEED;
}
MotorSpeed(speedLeft,speedRight);
}
return 0;
}
gruß inka
-
hallo inka,
ich kann den code gerade nicht test (kein compiler hier)
aber...
bei dir ist die while (1) gefolgt von einem elemte der For-Schleife,
da schein etwas zu fehlen.
ich denke es müsste da erst eine for und dann die while kommen.
nimm mal den code oben con EDH und vergleich deinen mit dem
gruß
downad
-
warum schreibst du die werte in hex-zahlen? mach dir doch das leben nich unnötig schwer... =)