Warten auf die Postbotin

Der Elektronikversand aus China boomt. Es gibt fast alles, was man sich vorstellen kann und das zu Preisen, die teils kaum nachvollziehbar (niedrig!) sind. Kleines Platinchen, bestückt, gestestet, Anschlussleitung dazu, alles zusammen in einem Umschlag, adressiert und verschickt für einen Euro fünfzig.

imageEinen spontanen Bedarf an Teilen darf man allerdings nicht haben – vier Wochen Wartezeit für die Strecke Lieferant-Versandweg-Zoll-DeutschePost-Kunde sind bei meinen Bestellungen keine Seltenheit. Bisher ist alles (irgendwann) angekommen. Pro-Tipp: eBay Einkäufe kurz vor der Urlaubsreise machen und dann (mindestens) 14 Tage wegfahren. Da kommt einem die Wartezeit nur noch halb so lang vor und vielleicht wartet ja bei der Heimkehr schon die eine oder andere Überraschung zu Hause im Briefkasten.

 

Auf dem Postweg sind derzeit auch ein paar kräftigere Servos. Bevor es beim Roboterarm weitergeht und der Arm seine Hand bekommen kann, muss die ganze Konstruktion etwas stabiler werden und die Schwingungsneigung muss weg ;-)

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);
  }
}

Einmal Lego für vierfünfzig bitte

Nach den ersten Experimenten mit LEGO technic stellte sich schnell heraus, das man nur sehr schwer auf den Punkt genau einkaufen kann. Vieles muss erst anprobiert werden, passt dann nur so mittel und wird schließlich völlig anders konstruiert, als ursprünglich geplant. Also war ich heute noch einmal beim LEGO Dealer meines Vertrauens und habe fast eine halbe Stunde in der Technic-Kiste gewühlt. Primäres Ziel waren Zahnräder und Achsen. Ein Paar „Liftarme“, Achsen und andere Kleinteile gabe es auch noch dazu. Alles in allem 4,50 EUR.

Gebrauchte LEGO Technic TeileDem aufmerksamen Betrachter fällt das Servokabel auf, das sich oben rechts durchs Bild schlängelt. Das hängt an einer „Hand“, die ich bereits aus ebenfalls in den 4,50 enthaltenen Teilen zusammengesteckt habe :)

Mein erster Roboterarm

Mit den auf LEGO Technic Verbinder umgebauten Servos und dem Arduino Uno kann es nun losgehen mit der Bastelei. Zwischenzeitlich habe ich meinem Sohn seine LEGO Bauteile zurückgegeben und mir eine erste Auswahl gebrauchter Steine, Arme und Verbinder aus der Grabbelkiste gekauft. Für EUR 1,10. Da kann kein Aluprofil und auch kein 3D Drucker mithalten.

 

Mit den Servos und den Steinen habe ich einen Arm mit zwei Gelenken zusammen gesteckt. Die Servos laufen jeweils von 0° bis 180° und werden im ersten Schritt über zwei Potis angesteuert. Beide Potis zwischen 5V und Masse, Schleifer auf Analog0 bzw. 1. Die eingelesenen Werte von 0…1023 werden ganz simpel auf den Drehwinkel 0…180° umgerechnet und dann direkt auf die Servos geschrieben. Fertig :) Ach so: Das LCD von neulich ist zur Anzeige der Servo-Winkel auch wieder an Bord.

Foto

#include <LiquidCrystal.h>
#include <Servo.h>

Servo servo0;
Servo servo1;             

int analogPin0 = 0;
int analogPin1 = 1;

float val0 = 0;
float val1 = 0;
int val0i = 0;
int val1i = 0;

LiquidCrystal lcd(12, 13, 8, 7, 4, 2);

void setup() {
  //LCD einrichten
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Pin0");
  lcd.setCursor(0, 1);
  lcd.print("Pin1");
  //Servos initialisieren
  servo0.attach(9);
  servo1.attach(10);
}

void loop() {
  lcd.setCursor(5, 0);
  val0 = analogRead(analogPin0);
  //könnte man auch mit map() machen
  val0i = int((val0/1023)*180);
  lcd.print(val0i);
  lcd.print("   ");
  servo0.write(val0i);

  lcd.setCursor(5, 1);
  val1 = analogRead(analogPin1);
  //könnte man auch mit map() machen
  val1i = int((val1/1023)*180);
  lcd.print(val1i);
  lcd.print("   ");
  servo1.write(val1i);
}

Version 1.1 kommt dann mit nur noch einem Poti aus, der obere Arm wird in Abhängigkeit des unteren Arms so verstellt, dass er immer etwa waagerecht ist.