30. November 2011
Katapult
Gruppenarbeit: Samuel Stoeklin, Patrick Pandolfo Als Abschlussarbeit konnten wir unser neue erlernten Fähigkeiten, in einer elektronischen Version von Fischli und Weiss 'Lauf der Dinge' unter Beweis stellen. Wir gingen mit einem Katapult an den Start. Vom Vorgänger erhalten wir als Input einen Ping Pong Ball und katapultieren diesen als Output zum nächsten Modul. Dazu brauchten wir eine Abschussmechanik mit einem Elektromagnet und Spannfeder, einen Balldetektor, ein Servomotor der die Abschussrampe in die richtige Stellung bringt und Warnlampen. Als erstes bauten wir au einem alten Toaster die Auswurfmechanik aus und modifizieren diese.![](../../../../files/2011/11/katapult_setting.jpg)
![](../../../../files/2011/11/katapult_setting2.jpg)
![](../../../../files/2011/11/katapult_schaltkreise.jpg)
![](../../../../files/2011/11/katapult_arduino.jpg)
![](../../../../files/2011/11/katapult_printdetail.jpg)
![](../../../../files/2011/11/katapult_finish.jpg)
#include // const const int analogIn = 0; // photowiderstand const int digitalOut1 = 8; // el.magnet const int digitalOut2 = 9; // servo const int ledPin1 = 13; // LED const int ledPin2 = 12; // LED const int posStart = 20; const int posEnd = 170; const int maxCount = 12; //var Servo myservo; boolean launch = false; int countdown = maxCount; void setup() { Serial.begin(9600); myservo.attach(digitalOut2); myservo.write(posStart); pinMode(digitalOut1, OUTPUT); pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); digitalWrite(digitalOut1,HIGH); // loading delay(500); digitalWrite(ledPin1, HIGH); delay(5000); digitalWrite(ledPin1, LOW); delay(500); } void loop() { Serial.print("ledwert: "); Serial.println(analogRead(analogIn)); if(launch) { if(countdown == maxCount) { delay(1000); myservo.write(posEnd); delay(100); } countdown--; digitalWrite(ledPin1, HIGH); digitalWrite(ledPin2, HIGH); delay(100*countdown); digitalWrite(ledPin1, LOW); digitalWrite(ledPin2, LOW); delay(100*countdown); Serial.print("countdown: "); Serial.println(countdown); if(countdown == 0) { digitalWrite(digitalOut1,LOW); launch = false; delay(1000); myservo.write(posStart); delay(100); } } else { if(analogRead(analogIn) >= 500) { launch = true; countdown = maxCount; } digitalWrite(digitalOut1,HIGH); } }