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