Roboterarm 2.0

Weiter geht es mit den Arbeiten am Roboterarm. Zwischenzeitlich sind die beiden Potis abgeklemmt und der Abstandssensor ist am Arm angebracht und in Betrieb. Idee dahinter ist, dass der Roboterarm aus einer Ausgangslage den Rückzug antritt, sobald man dem Abstandssensor näher als 10cm kommt. So sieht das aus:

 

Da die errechneten Bewegungen das System leicht in Schwingungen versetzen, habe ich ein paar Haushaltsgummis als Dämpfer hinzugefügt. Das geht bis zu einem gewissen Punkt ganz gut. Allerdings ist, wenn der Arm nach vorne ausgestreckt ist, der Hebel so lang, dass der Arm ein wenig nachfedert. Diese Bewegung gibt er an das untere Servo weiter, das darauf hin beschließt, dass es sich nicht mehr in der richtigen Lage befindet. Dann stellt es mit einem kleinen Ruck nach und der Arm schwingt wieder. Und verstellt das Servo. Das dann nachstellt. Und den Arm schwingen lässt. Das sieht man am Ende des Videos ganz gut.

Außerdem speziell bei diesem Aufbau: Aufgrund der ungelösten Schnittstellenprobleme kommt ein Arduino Nano Clone als „Sensor Koprozesseor“ zum Einsatz. Er kümmert sich um den DYP-ME007TX Abstandssensor und gibt ein „unmissverständliches“ HIGH/LOW Signal über einen Digital-Pin an den Arduino Uno weiter.

#include <SoftwareSerial.h>

SoftwareSerial mySerial(5, 3); // RX, TX

byte myByte=0;
int  myBaud=9600;
int  LowByte=0;
int  HighByte=0;
long millimeter=0;

//Signalisierung auf Pin 4
int lowDistance=4;

void setup()
{
  mySerial.begin(myBaud);
  pinMode(lowDistance, OUTPUT);
}

void loop()
{
  if (mySerial.available()>3)
  {
    myByte=mySerial.read();
    if (myByte==0xFF) //Start-Byte erkennen
    {
      HighByte= mySerial.read();
      LowByte = mySerial.read();
      mySerial.flush();
    }
  }

  millimeter = HighByte<<8 | LowByte;

  if (millimeter<100)
  {
    digitalWrite(lowDistance, HIGH);
  }
  else
  {
    digitalWrite(lowDistance, LOW);
  }
}

Schreibe einen Kommentar

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