Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

Lauf der Dinge – Vibrobots

1. Dezember 2011

Ein Rennbahn mit verschiedenen "Vibrobots" (auch Bristlebots genannt) sollen eine Rennstrecke durchlaufen und dabei am Ziel das nächste Modul auslösen. Die Technologie wurde mit einfachen Mitteln getestet.  Erste Prototypen wurden mit Ping-Pong Bällen und anderen Materialien realisiert: Die Kandidaten:

Slow-Mow

Der Reedschalter ist ein Schalter, der sich öffnet/schliesst, wenn in unmittelbarer Nähe sich ein Magnet befindet. Da wir nur Öffner fanden, mussten wir bei jedem "Bot"  eine Transistorschaltung einbauen, damit der Reed-Schalter zu einem Schliesser wird. D.h, an der Startrampe wurden Magnete unterhalb der Roboter montiert. In diesem Zustand waren sie inaktiv. Sobald die Magnete entfernt werden(gesteuert durch ein Servo-Motor), aktivieren sich die Roboter und vibrieren den leicht schrägen Hang Richtung Ziel hinunter. Einige Impressionen:
Siehe auch Rafaels video:  Hier ist der code:
#include <Servo.h>

Servo myservo;  // create servo object to control a servo

unsigned long timeStamp = 0;
const unsigned long startDelay = 3000;

boolean onOff = false;

boolean startServo = false;

void setup() {
  Serial.begin(9600);
  myservo.write(0);
  //LED
  pinMode(2, OUTPUT);  //green1
  pinMode(3, OUTPUT);  //red1
  pinMode(4, OUTPUT);  //green2
  pinMode(5, OUTPUT);  //red2

    pinMode(13, OUTPUT);  //debug LED

  pinMode(10, INPUT);  //input von Joel & Eva
  digitalWrite(10, LOW);  //initializing
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  digitalWrite(2, LOW);  //starts with green1
  digitalWrite(4, LOW);  //starts with red2
  digitalWrite(3, HIGH);  //starts with red1
  digitalWrite(5, HIGH);  //starts with red2

  myservo.write(0);  //initialize servo position
}

void loop() {
  if(digitalRead(10) == HIGH){  //get start signal from Joel & Eva
    timeStamp = millis();  //save time
    onOff = true;  //loop only once
    digitalWrite(3, HIGH);  //turn green1 on
    digitalWrite(5, HIGH);  //turn green2 on
  }

  if(millis() - timeStamp > startDelay  && onOff){
    digitalWrite(13, HIGH);
    onOff = false; //loop only once
    ledSequence();  //start LED sequence
    timeStamp = millis();  //set new timestamp
  }
}

//LED start sequence
void ledSequence(){

  digitalWrite(3, LOW);
  digitalWrite(5, LOW);
  delay(200);

  digitalWrite(5, HIGH);
  digitalWrite(3, HIGH);
  delay(500);

  digitalWrite(3, LOW);
  digitalWrite(5, LOW);
  delay(200);

  digitalWrite(5, HIGH);
  digitalWrite(3, HIGH);
  delay(500);

  digitalWrite(3, LOW);
  digitalWrite(5, LOW);
  delay(200);

  digitalWrite(5, HIGH);
  digitalWrite(3, HIGH);
  delay(500);

  digitalWrite(2, HIGH);  //turn green1 off
  digitalWrite(4, HIGH);  //turn green2 off
  digitalWrite(3, LOW);  //turn red1 off
  digitalWrite(5, LOW);  //turn red2 off

  myservo.write(90); //activate servo (turn 90 degrees)
}