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