Die Arbeiten am SR-F-500 IR haben schon vor ein paar Wochen begonnen. Die Arbeiten mußten aber wegen Lieferengpässe der benötigten Bauteile unterbrochen werden. Inzwischen konnte der erste Prototyp weitestgehend fertiggestellt werden. Es fehlen nur noch die für die Steuerung der Arme benötigten Kettenglieder.
Der SR-F-500 IR basiert auf dem Daniele Benedettellis JohnNXT. Jedoch wurde der Tonsensor durch einen IR-Empfänger ersetzt, wodurch eine Steuerung über eine normale Lego-Fernbedienung möglich wird. Auch habe ich die größeren Lego-Technic-Ketten verwendet, sowie einige Anpassungen am Laser vorgenommen.
Aktuell erfolgt die Steuerung des SR-F-500 ausschließlich über den Master-NXT-Baustein, an dem die beiden Motoren für die Fortbewegung, der Motor für den Torso, sowie der IR-Empfänger angeschlossen ist. Über den Kanal 1 kann der Roboter vorwärts und rückwärts fahren (roter Hebel), sowie sich nach links und rechts drehen (blauer Hebel). Kanal 2 steuert den Torso (roter Hebel).
Der Code für SR-F-500_IR.nxc
#define IR_RECEIVER IN_1
#define DRIVE_CHANNEL 0
#define TORSO_CHANNEL 1
#define RIGHT_MOTOR OUT_B
#define LEFT_MOTOR OUT_C
#define BOTH_MOTORS OUT_BC
#define TORSO_MOTOR OUT_A
void ReadIRReceiver(byte channel, int &Red, int &Blue)
{
int count;
byte inI2Ccmd[];
char outbuf[];
if (channel > 3)
{
return;
}
// set the buffer to hold 2 values (initially all are zero)
ArrayInit(inI2Ccmd, 0, 2);
inI2Ccmd[0] = 0x02;
inI2Ccmd[1] = 0x42+channel*2;
//read count set to 8 bytes
count = 2;
//read the acceleration sensor on port 1
I2CBytes(IR_RECEIVER, inI2Ccmd, count, outbuf);
Red = outbuf[0];
Blue = outbuf[1];
}
task main()
{
int drive, steering;
int torso, steering_torso_mode;
SetSensorLowspeed(IR_RECEIVER);
TextOut(0, LCD_LINE1, "Spitzohr Robotics");
TextOut(4*6, LCD_LINE2, "SR-F-500 IR");
while (true)
{
ReadIRReceiver(DRIVE_CHANNEL, drive, steering);
ReadIRReceiver(TORSO_CHANNEL, torso, steering_torso_mode);
if (steering == 0)
{
OnRev(BOTH_MOTORS, drive);
}
if (steering != 0)
{
OnRev(LEFT_MOTOR, steering);
OnFwd(RIGHT_MOTOR, steering);
}
else if (steering_torso_mode != 0)
{
OnRev(LEFT_MOTOR, steering_torso_mode);
OnFwd(RIGHT_MOTOR, steering_torso_mode);
}
OnRev(TORSO_MOTOR, torso);
}
}