Der SR-F-500 IR

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);
  }
}
Dieser Beitrag wurde unter Aktuelles, Roboterfahrzeuge (SR-F) abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.