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.

13 Lauf der Dinge

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

}