🏠 FabLab Startseite | Nutzungsbedingungen | Impressum | Wiki

DIY Theo Jansen Machine


#1

Moin zusammen,
@Bjarne und ich haben uns entschieden mal ein Strandbiest in Angriff zu nehmen.
Das wichtigste zuerst. Wir haben genug Teile, um 3 von den Tierchen zu bauen. Mit einigen Muttern und Schrauben aus dem Baumarkt sind sogar 4-5 drin.
Momentan belaufen sich die Kosten eines Walkers bei etwa 20€. Daher hier die Frage: Wer hat Lust mit uns die Strandbiester zum Leben zu erwecken? Gefragt ist VIEEEL Geduld, da in einem Teil 120 Schrauben befestigt werden müssen.

Hängen geblieben sind wir bei der Bauanleitung des Make Magazins der Ausgabe 1/2016 von Joachim Haas
Den fertigen Roboter seht ihr in diesem Video

Wir möchten uns in der ersten Iteration an einer autonomen Version versuchen. Geplant sind später Infrarotsensoren zur Kollisionserkennung bzw. ersteinmal Taster mit Kabelbindern, da wir diese noch vorrätig haben.
Ein Anleitungsvideo gibt es hier: (die Bauanleitung befindet sich außerdem im oben genannten Make Magazin)


Über die Kategorie Strandbeest Maximus
#2

:heart_eyes:Cool!:star_struck:

Ich wäre dabei. Sven bestimmt auch.:+1::grinning:


#3

Und los gehts. Der Lasercutter wurde heute bereits zum Qualmen gebracht. Jetzt heißt es Warten auf die Bestellung :tired_face:


#4

Hallo Natascha,

seid Ihr noch beim Zusammenbau? Wenn ja, besteht noch die Möglichkeit mitzumachen?

Viele Grüße

Ingo


#5

Moin Ingo,

Natascha und ich haben unsere beiden Beester schon fertiggestellt und sind im FabLab ausgestellt. Wir stehen natürlich bereit um Tipps zu geben, falls du sie nachbauen möchtest. Die Ausgabe der Make mit der Anleitung liegt bei uns im Lab.

Die beiden Roboter sind auch für unsere Sumobot Competition am 20.01. Vielleicht hast du ja noch Lust ein Team zu bilden :wink:

Gruß Bjarne


#6

Hallo Bjarne,

hätte schon Lust mit dabei zu sein. Gibt es weitere Interessenten, mit denen ein weiteres Team starten könnte?

Viele Grüße

Ingo


#7

Moin Ingo,

natürlich gibt es die.:nerd_face::+1:
Ich möchte auch ein Strandbeest bauen (mindestens :wink:), @Philip_K auch, @Sven ggf. auch noch.

Gruß
Martin


#8

Hallo Martin,

super, wann wollen wir uns mal treffen, um die weitere Planung zu besprechen?
Auch zwischen Weihnachten und Sylvester wäre es von mir aus möglich.
Viele Grüße und frohe Weihnachten!

Ingo:christmas_tree:


#9

Hi, gibt es einen Links zu der Elektronikhardware und der dazugehörigen Software, die Ihr benutzt habt?
LG Claus


#10

Moin Claus,

Für die Elektronik haben wir zwei Modellbauservos verwendet (Link).
Außerdem noch einen Ultraschall Sensor HC-SR04

Software dann mit Arduino Nano:

 #include <Servo.h> //Die Servobibliothek wird aufgerufen. Sie wird benötigt, damit die Ansteuerung des 
Servos vereinfacht wird.
 #include "QuickStats.h"

 //Sonic Echo:    PIN 6
 //Sonic Trigger: PIN 7
 //Servo Right:   PIN 10
 //Servo Left:    PIN 9


Servo servoRight; //Erstellt für das Programm ein Servo mit dem Namen „servoblau“
Servo servoLeft; //Erstellt für das Programm ein Servo mit dem Namen „servoblau“

int triggerSonic1=7; //Trigger-Pin des Ultraschallsensors an Pin7 des Arduino-Boards 
int echoSonic1=6; // Echo-Pim des Ultraschallsensors an Pin6 des Arduino-Boards 

QuickStats stats;
long randNumber;

void setup()

{
  Serial.begin (9600); //DEBUG
  
  servoRight.attach(10); 
  servoLeft.attach(9); 

  pinMode(triggerSonic1, OUTPUT); // Trigger-Pin ist ein Ausgang
  pinMode(echoSonic1, INPUT); // Echo-Pin ist ein Eingang

   randomSeed(analogRead(0));
}

 

void loop()

{ 
  //goForward(3000);
  //stopWalking(3000);
  //goBackwards(3000);
  //turnRight(3000);
  
  
  randNumber = random(10);
  long distanceSonic1 = getDistanceSonic1(); //get distance in cm
  if ((distanceSonic1 <= 50) && (distanceSonic1 >= 30)) {
    if (randNumber <= 5) {
      turnRight(3000);
    } else {
      turnLeft(3000);
    }
  } else if (distanceSonic1 < 30) {
    goBackwards(3000);
  } else {
    goForward(100);
  }
}

void turnRight(int duration) {
  servoRight.write(0); //Position 1 ansteuern mit dem Winkel 0°
  servoLeft.write(0); //Position 3 ansteuern mit dem Winkel 180°
  delay(duration);
}

void turnLeft(int duration) {
  servoRight.write(180); //Position 1 ansteuern mit dem Winkel 0°
  servoLeft.write(180); //Position 3 ansteuern mit dem Winkel 180°
  delay(duration);
}

void goForward(int duration){
  servoRight.write(0); //Position 1 ansteuern mit dem Winkel 0°
  servoLeft.write(180); //Position 3 ansteuern mit dem Winkel 180°
  delay(duration);
}

void goBackwards(int duration) {
  servoRight.write(180); //Position 1 ansteuern mit dem Winkel 0°
  servoLeft.write(0); //Position 3 ansteuern mit dem Winkel 180°
  delay(duration);
}

void stopWalking(int duration) {
  servoRight.write(90); //Position 1 ansteuern mit dem Winkel 0°
  servoLeft.write(90); //Position 3 ansteuern mit dem Winkel 180°
  delay(duration);
}


long getDistanceSonic1() {
  float distanceMean[10];
  for (int i=0; i <= 9; i++)
  {
    digitalWrite(triggerSonic1, LOW); //Hier nimmt man die Spannung für kurze Zeit vom Trigger-Pin, damit man später beim senden des Trigger-Signals ein rauschfreies Signal hat.
    delay(5); //Dauer: 5 Millisekunden
    digitalWrite(triggerSonic1, HIGH); //Jetzt sendet man eine Ultraschallwelle los.
    delay(10); //Dieser „Ton“ erklingt für 10 Millisekunden.
    digitalWrite(triggerSonic1, LOW);//Dann wird der „Ton“ abgeschaltet.
    long duration = pulseIn(echoSonic1, HIGH); //Mit dem Befehl „pulseIn“ zählt der Mikrokontroller die Zeit in Mikrosekunden, bis der Schall zum Ultraschallsensor zurückkehrt.
    long distance = (duration/2) * 0.03432; //Nun berechnet man die Entfernung in Zentimetern. Man teilt zunächst die Zeit durch zwei (Weil man ja nur eine Strecke berechnen möchte und nicht die Strecke hin- und zurück). Den Wert multipliziert man mit der Schallgeschwindigkeit in der Einheit Zentimeter/Mikrosekunde und erhält dann den Wert in Zentimetern.
    distanceMean[i] = distance;
  }
  for (int i=0; i <= 9; i++)
  {
     //Serial.print(distanceMean[i]); //DEBUG
    // Serial.print(","); //DEBUG
  }
  Serial.println(stats.median(distanceMean,10)); //DEBUG
  return stats.median(distanceMean,10);
}

Vielleicht ist für euch noch folgender geogebra link interessant: https://www.geogebra.org/m/xdnnbGZG


#11

danke für die schnelle Hilfe


#12

Hi Bjarne, hast Du noch einen Schaltplan (Arduino - US-Sensor und Motoren) ?
LG Claus


#13

Hey Claus,

schau mal oben im code, da steht die pinbelegung direkt am anfang :wink:

Gruß Bjarne