Bulbverzögerung


Aussenansicht Innenansicht

Seit Februar 2020 habe ich mich sehr viel mit Lightpainting beschäftigt. Je nachdem, was man darstellen möchte, benötigt man eine gewisse Vorlaufzeit, weil man z.B. noch eine Wunderkerze anzünden muss. Man kann sie ja nicht einfach ein- oder ausschalten. Diesen Vorgang will man nicht im Bild haben. Da ich meist allein unterwegs bin, habe ich mir um die Kamera verzögert zu starten, eine Bulbverzögerung gebastelt. An diese wird die Funkfernbedienung und die Kamera angeschlossen, also zwischen geschaltet.

Herzstück ist ein Arduino Nano. Löse ich mit der Funkfernbedienung die Schaltung aus, startet ein Programm im Innern. Das Programm gibt Töne und LED-Signale von sich, die mir die Zeit signalisieren. Die Töne sind, erst 5, in der Tonhöhe ansteigende Pieptöne, dann ein Countdown wie ein Zeitzeichen im Radio, also mit langgezogenem letzten Ton. Hört sich so an:

Diese Verzögerung ist etwa 15 Sekunden lang. Ich habe also 15 Sekunden Zeit an den Ort der Darstellung zu gehen, die Wunderkerze oder Stahlwolle zu entzünden und/oder mit meiner Drehbewegung zu beginnen. Dann wird die Kamera automatisch gestartet (Bulb), eine orange LED signalisiert mir das offen sein des Verschlusses. Mit der Fernbedienung kann ich den Bulbvorgang wieder stoppen, orange LED erlischt.

Ich habe auch eine Ausschaltverzögerung vorgesehen. Kann ja sein ich vollführe Rotationen, die ich nicht einfach abbrechen kann, weil sie im Bild unschön zu sehen wären. Kenne ich in etwa die Dauer, kann ich eine Ausschaltverzögerung festlegen. Dazu befinden sich (links im Bild) eine Reihe von kleinen Schaltern, 5 sind nutzbar. Beschriftet sind sie mit 1-5. 1 bedeutet 10s, 2 bedeutet 20s, 3 bedeutet 30s, 4 bedeutet 40s. Die 5 sind ausnahmsweise 5s. Alle Zeiten addieren sich. So sind Ausschaltverzögerungen zwischen 5 und 105 Sekunden einstellbar. Nutzt man das, braucht man sich um das Schließen des Verschlusses nicht zu sorgen. Ist die Zeit abgelaufen, erlischt die orange LED, Bulb ist zu Ende. Natürlich kann man die Zeiten im Sketch anpassen.

Stromlaufplan Bulbverzögerung Für Interessierte habe ich hier den recht simplen Stromlaufplan und den Sketch. Wer Fragen dazu hat einfach eine Mail an gebby@web.de

int led = 2;    // rote LED
int kfocus = 3; // Focuseingang von Empfänger
int kfoto = 4;  // Auslöseeingang von Empfänger
int focus = 5;  // Focusausgang zur Kamera
int foto = 6;   // Auslöseausgang zur Kamera
int piezo = 7;  // Piezomembran für Töne
int d8 = 8;     // Pin 8   d8 bis d12 sind
int d9 = 9;     // Pin 9   für Zeiteinstellungen
int d10 = 10;   // Pin 10  von 5 bis 105 Sekunden
int d11 = 11;   // Pin 11  per DIP-Schalter
int d12 = 12;   // Pin 12

int endehalt = 0;   // Stop durch Focustaste
int eins = 0;   // Zustände der
int zwei = 0;   // DIP-Schalter
int drei = 0;
int vier = 0;
int fuenf = 0;
unsigned long gesamtzeit = 15000;   // Auslösezeit
unsigned long vorherigeMillis = 0;

void setup()
{
  Serial.begin (9600);

  digitalWrite(focus, HIGH); // Ausgänge auf Aus vor-
  digitalWrite(foto, HIGH);  // festlegen
  pinMode(led, OUTPUT);      // rote Signal-LED
  pinMode(kfocus, INPUT);    // von Fernbedienungsempfänger
  pinMode(kfoto, INPUT);     // von Fernbedienungsempfänger
  pinMode(focus, OUTPUT);    // Focusausgang zur Kamera
  pinMode(foto, OUTPUT);     // Auslöseausgang zur Kamera
  pinMode(piezo, OUTPUT);    // Tonausgang

  pinMode(d8, INPUT_PULLUP); // setze Pin 8 bis 12 als Eingänge
  pinMode(d9, INPUT_PULLUP); // und die Pullup-Widerstände ein
  pinMode(d10, INPUT_PULLUP);
  pinMode(d11, INPUT_PULLUP);
  pinMode(d12, INPUT_PULLUP);
  
  // 5x Piepton ausgeben
  // jeder Piepton ist 100Hz höher durch i += 100
  for (int i=200; i <= 600; i += 100){  
    piep(i);          
  }
  
  // 4x Countdownton ausgeben
  for (int i= 1; i<= 4; i++) {
    countdown();
  }
  
  // einen 5. längeren Countdownton ausgeben
  tone(7, 1000);
  digitalWrite(led, LOW);    // LED an
  delay(1500);               // Tondauer 1,5s
  noTone(7);                 // Ton aus
  digitalWrite(led, HIGH);   // rote LED aus
  digitalWrite(focus, LOW);  // Focus und orange LED an
  digitalWrite(foto, LOW);   // auslösen
}

void loop()
{
  unsigned long aktuelleMillis = millis();
  gesamtzeit = 15000;               // 15s braucht die Setup-Routine

  endehalt = digitalRead(kfocus);   // hier wird der Pin3 ausgelesen auf Stop?

  eins = digitalRead(d8);
  zwei = digitalRead(d9);
  drei = digitalRead(d10);
  vier = digitalRead(d11);
  fuenf = digitalRead(d12);

  if (eins == HIGH) {
    gesamtzeit += 10000;  // + 10s
  }
  if (zwei == HIGH) {
    gesamtzeit += 20000;  // + 20s
  }
  if (drei == HIGH) {
    gesamtzeit += 30000;  // + 30s
  }
  if (vier == HIGH) {
    gesamtzeit += 40000;  // + 40s
  }
  if (fuenf == HIGH) {
    gesamtzeit += 5000;  // + 5s
  }

  Serial.print(aktuelleMillis / 1000 -15); // 15 Sekunden läuft das Setup
  Serial.print("  Zeit ");
  Serial.println(gesamtzeit / 1000 -15);

  // bei Handstop immer beenden
  if (endehalt == LOW) { stop(); }

  // wenn die eingestellte Zeit vorbei ist
  if (gesamtzeit > 15000) {                 // wenn eine Zeit gesetzt wurde
    if (aktuelleMillis - vorherigeMillis >= gesamtzeit) {
    vorherigeMillis = aktuelleMillis;
    stop();
  }
 }
}

void piep(int hoehe) {
  tone(7, hoehe);            // Ton mit Tonhoehe an
  digitalWrite(led, LOW);    // LED an
  delay(1000);
  noTone(7);                 // Ton aus
  digitalWrite(led, HIGH);   // LED aus
  delay(1000);
}

void countdown() {
  tone(7, 1000);
  digitalWrite(led, LOW);    // LED an
  delay(100);
  noTone(7);
  digitalWrite(led, HIGH);   // LED aus
  delay(900);
}

void stop() {
    digitalWrite(focus, HIGH);     // Focus aus
    digitalWrite(foto, HIGH);      // auslösen stop
    digitalWrite(led, HIGH);       // LED aus
}