Mein Ziel ist es mit den Liniensensoren einen besstimmten Streckenverlauf mit den Linien- und Odometriesensoren abzufahren und die daten an einen PC zu senden der die Strecke aufzeichnet, auswertet und Asuro sagt wie er weiterfahren soll.
Dazu habe ich Asuro über I2C und einem PDF8591 4 Liniensensoren angebaut. Der Aufbau sieht folgendermaßen aus:
http://www.bilder-hochladen.net/files/h9k2-3-jpg.html
Bild hier
http://www.bilder-hochladen.net/files/h9k2-2-jpg.html
Bild hier
Ich hab mir bis jetzt noch nicht die Mühe gemacht mir ein Schaltplanzeichenprogramm zu besorgen, darum hab ich ein Zeichnprogramm bemüht.
http://www.bilder-hochladen.net/files/h9k2-1-jpg.html
Bild hier
Das ist der Code der die Lichtwerte beim Asuro ausliest. Ich verwende die Asuro lib 2.8
Code:
#include "asuro.h"
#include "i2c.h"
#define pcf8591_address 0x90
int main(void)
{
unsigned char ret[6];
int i;
Init();
EncoderInit();
InitI2C();
StartI2C(pcf8591_address + WRITE);
WriteI2C(0x4);
StopI2C();
Sleep(40);
StartI2C(pcf8591_address + READ);
ret[0] = ReadI2C(ACK);
while(1)
{
ret[0] = ReadI2C(ACK);
ret[1] = ReadI2C(ACK);
ret[2] = ReadI2C(ACK);
ret[3] = ReadI2C(ACK);
i = 0;
SerWrite(ret, 4);
SerRead(ret, 1, 0);
switch(ret[0])
{
case '1': GoTurn( 50, 0, 100);
GoTurn( 0, 80, 100);
break;
case '3': GoTurn( 50, 0, 100);
GoTurn(0, 240, 100);
break;
}
MotorDir(FWD, FWD);
EncoderSet(0, 0);
while(i == 0)
{
ret[0] = ReadI2C(ACK);
ret[1] = ReadI2C(ACK);
ret[2] = ReadI2C(ACK);
ret[3] = ReadI2C(ACK);
if(ret[0] > ret[1]) {
MotorSpeed(100, 140);
}
else if(ret[0] < ret[1]) {
MotorSpeed(140, 100);
}
else
MotorSpeed(100, 100);
if(encoder[0] > 900 || (ret[0] > 190 && ret[1] > 190))
{
MotorSpeed( 0, 0);
PrintInt((int)encoder[0]);
SerWrite(" ", 1);
i = 1;
}
}
}
StopI2C();
}
Und meine Teststrecke:
http://www.bilder-hochladen.net/files/h9k2-4-jpg.html
Bild hier
Das Programm für den PC (in C mit WinAPI) das ich geschrieben habe ist wohl zulang da mir angezeigt wird, nicht mehr als 20000 zu verwenden. Auf Anfrage kann ich es gern mailen etc.
Die Teststrecke läuft nicht ganz durch, sondern wird durch die "weißen Bereiche"(siehe Bild) unterbrochen. Das ist nötig damit asuro so gut wie möglich in der Spur bleibt und beim Drehen richtig auf die seitenlinie kommt.
Das ganze läugt eigentlich "relativ" gut. Je nachdem wie mein Asuro lust hat.(Magie
)
So gibt er zum Beispiel odometrie daten zurück wenn er sich nach goturn gedreht hat, obwohl er dort überhaupt keine Daten senden dürfte. Wenn ich die Lichtwerte beim ersten mal Abfrage stimmt alles, aber danach liefert mir der Asuro meistens nur noch "dummes Zeug". Allerdings bekomme ich troztdem die richtigen Daten, wenn ich nur die lichtwerte auslese und nicht fahre. Wäre echt net wenn sich mal jemand meinen Code/Schaltplan ansehen könnte.
Könnte es auch sein das ich die Batterie zu arg beanspruche und dann falsch gemessen wird?
Lesezeichen