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. Die Druck- und Zug-Federn wurden durch stärkere Federn ersetzt. Den Trichter für den Ball formten wir aus einer Petflasche und montierten ihn auf den Auswurfhebel. Im unten aufgeführten Schaltplan werden zwei wichtige Elemente aufgezeigt. Zum ersten den 'Balldetektor', diesen realiesierten wir mit einem Photowiederstand der auf Helligkeitsänderungen reagiert. Das Arduinoboard lieferte nur 5V, mit den gepimpten Federn musste die Spannung auf 9V angehoben werden, so dass das Elektromagnet die grössere Federspannung halten konnte (zweiter Schaltplan). Auf dem Steckboard wurde die Schaltung zuerst ausgetestet... ...danach auf einen Print gelötet und eingebaut. Das fertige Katapult: Arduino#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); } }