Einstellbarer Zeitauslöser für Spiegelreflexkamera. Wie ralisieren?

Hallo zusammen.

Da ich mir nun erfolgreich einen IR Trigger für meine Kamera gebaut habe http://hardpan.com/diy-pentax-ir-lightning-trigger/ , habe ich nun eine Idee.

Ich würde mir gerne selber eine Fernbedienung bauen aber auf Kabelbasis, den die Kamera hat eine 2,5mm Klinkenbuchse. Die Belegung ist folgendermaßen:

  || Shutter
 |  | Focus
|    | GND

Das ganze lässt sich bequem per Optokopler (6N139) schalten, habe ich bereits getestet.

Der Schwerrpunkt an dem Projekt ist das ich ein LCD 20x2 (HD44780) einsetzen will mit zwei Buttons. Ziel soll es sein das ich mit den beiden Buttons + und - Sekunden einstellen kann und so lange soll der Shutter Pin mit dem GND durchgehend gebrückt sein. Wofür ? Für Langzeitbelichtung. Den an der Kamera selbst lassen sich blos 30 Sekunden als maximum einstellen, per Kabelfernbedienung jedoch kann man so lange Ausgelösen wie man drückt.

Nun meine eigentliche Frage: Wie bekomme ich das hin, das wenn ich den Button für + "DP3" drücke auf dem LCD jeweils die Zahl um 1 ansteigt und bei Button - "DP4" wieder um 1 abfällt und wenn das eingestellt ist und man einen dritten Taster "DP5" drückt genau so lange dann auf einem Pin zb."DP6" (geht später zum Optokopler) Strom anliegt wie auf dem Display eingestellt wurde?!

Danke für alle Codevorschläge. Würde das gerne erst einmal mit einer LED testen.

Greeez Oli

Die Funktionalität ist ja nicht wirklich schwierig zu realisieren. Einzig das Kontaktprellen könnte Ärger bereiten und sollte durch die Bounce Library unterdrückt werden. An sonsten halt mit angenehmen delay (ca 0,5 sek) in der Loop die Pins abfragen und dann entweder einen Zähler hoch/runter zählen oder den Zählerwert als Ausgangswert für ein delay nehmen (verm. *1000) und dann digitalWrite(Shutter,HIGH), delay(Zähler*1000), digitalWrite(Shutter,LOW). In der Setup natürlich die entsprechenden Pins definieren - übertragbare Beispiele findest Du in den Exsamples der Arduino IDE. Eigendlich kaum mehr als eine Fingerübung und ein ganzes Arduino Board wäre dafür schon fast zu schade.

LG Lena

Da die Belichtungszeit nicht in Sekundenschritten gehen muß, sondern in halben bzw drittel Blenden rate ich Dir eine Array mit den Zeitwerten und Du inkrementierst/dekrementierst nur den Index. Grüße Uwe

Lena: und ein ganzes Arduino Board wäre dafür schon fast zu schade.

Ich löte Grundsätzlich meine eigene Grundbasis aus atmega,16mhz quartz,LM7805,Kondensatoren und Widerständen. So komme ich für das Grundgerüst gerade mal auf 5€ Kosten.

Greeez Oli

Damit ist die Sache doch perfekt. Schöner Einwand/Vorschlag von Uwe und das für schmales Geld - so soll's doch sein :)

LG Lena

P.S.: Man könnte auch eine weitere Taste so wie eine Shifttaste hinzufügen und so zwischen Blendenstufen und Sekundenvorwahl wechseln

Wie ist das jetzt mit den Blendenstufen gemeint? So richtig steige ich da noch nicht durch.

Greeez Oli

Korrigiert mich, falls ich falsch liege: Die durch das Objektiv fallende Lichtmenge halbiert beim Wechsel von einer Blendenstufe zur nächst geringeren Blendenstufe. Da der Sprung von Blende 11 auf Blende 16 sehr groß ist, gibt es je nach Kamerahersteller halbe und Drittelstufen. Jetzt wäre es ein Anreiz, die Belichtungszeit entsprechend ändern zu können: Blende eine Drittelstufe runter z.B. von 11 auf 10 (siehe wikipedia: Blendenreihe) und mit einem Tastendruck die Belichtungszeit so verkürzen, dass die Bilder weder über- noch unterbelichtet sind.

Die Blende stelle ich beim Langzeitbelichtungsvorgang (Stellung B) an der Kamera manuell ein genauso wie ich die ISO Automatik in Stellung (B) auf manuell gesetzt habe! Von daher geht es nur darum das ich über die Fernbedienung die ich hier bauen will die Belichtungszeit manuell in Sekunden von 1-xxxx einstellen kann.

Greeez Oli

Ich würde gar keinen Arduino für sowas nehmen sondern gleich das hier: http://www.doc-diy.net/photo/hdr-jack2/ oder das hier: http://www.doc-diy.net/photo/hdr-jack/ nachbauen.

Das erhöhen der Blende um einen Blendenwert enspricht der Halbierung der Belichtungszeit. Der Lichtwert (EV) bleibt gleich.

Da es keinen Unterschied macht ob die Belichtung 30, 31 oder 32 Sekunden ist, ist es sinnvoller in ganzen, halben oder drittel Blendenstufen die Zeit zu erhöhen und gegebenenfalls eine Korrektur durch Bearbeien der Rohdaten (RAW) vornehmen.

ganze Stufen: 1; 2; 4; 8; 15; 30; 60; 120; 240 ecc oder 1s; 2s; 4s; 8s; 15s; 1m; 2m; 4m; 8m; 15m Gerundete Werte; der Nächste Wert ist immer das doppelte des voherigen.

halbe Stufen: 1; 1,4; 2; 2,8; 4; 5,6; 8; 11; 15; 22; 30; 44; 60 ecc Das sind gerundete Werte; genaugesagt den nächsten Wert errechnest Du durch multiplikation von der 2.Wurzel von 2: (1,41421356) Jeder zweite Wert ist das doppelte des vorhergehenden.

Drittelstufen: 1; 1,3; 1,6; 2; 2,5; 3,2; 4; 5; 6; 8; 10; 13; 15; 20; 25; 30; Das sind gerundete Werte; genaugesagt den nächsten Wert errechnest Du durch multiplikation von der 3.Wurzel von 2: (1,25992076) Jeder dritte Wert ist das doppelte des vorhergehenden.

Zu bedenken ist auch, daß gewisse Kameras nach einer Langzeitbelichtung ein Schwarzbild aufnehmen um das Belichtete Bild mit den Bildrauschen des Sensors zu korrigieren. Bei einer Bulb-Belichtung geschiet das nicht. Darum kann ein 15s Bild besser sein als ein 15s Bild mit Fernauslöser.

Ich muß Udo recht geben; wenn ich schon eine Zeitsteuerung baue, dann würde ich auch Belichtungsreihen bzw Belichtungsreihen für HDR vorsehen.

Grüße Uwe

Ja gut, vom Prinzip her feine Sache, jedoch weiss ich gar nicht wie ich anfangen soll!?

So ich habe jetzt mal den Anfang gemacht und das funktioniert auch genau so wie ich das wollte.

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 9, 3, 2);

const int  buttonPin = 5;  // + Button  
const int  buttonPin2 = 6; // - Button
const int  buttonPin3 = 4; // Shot Button

int buttonPushCounter = 0;   
int buttonState = 0;         
int buttonState2 = 0;
int buttonState3 = 0;
int lastButtonState = 0;     
int lastButtonState2 = 0;

void setup() {
  lcd.begin(16, 2);
  lcd.print("Starting...");
  delay(1000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Bereit...");
  lcd.setCursor(0, 1);  
  lcd.print("Druecke + oder -");
  
  pinMode(buttonPin, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buttonPin3, INPUT);
  pinMode(13, OUTPUT);  // Shutter zu Optokopler , oder TestLED
}


void loop() {
  buttonState = digitalRead(buttonPin);
  buttonState2 = digitalRead(buttonPin2);
  buttonState3 = digitalRead(buttonPin3);

  if (buttonState != lastButtonState) {
    if (buttonState == HIGH) {
      buttonPushCounter++;
      lcd.setCursor(0, 0);
      lcd.clear();
      lcd.print(buttonPushCounter);
      lcd.print(" Sekunden");
      lcd.setCursor(0, 1);
 lcd.print("Einstellung + -");
     }
  }

 if (buttonState2 != lastButtonState2) {
if (buttonState2 == HIGH) {
  if (buttonPushCounter < 1) {
  buttonPushCounter = 1;
  }
  lcd.clear();
  buttonPushCounter--;
  lcd.setCursor(0, 0);
  lcd.print(buttonPushCounter);
  lcd.print(" Sekunden");
  lcd.setCursor(0, 1);
  lcd.print("Einstellung + -");
}
 }

if (buttonState3 == HIGH) {
  lcd.setCursor(0, 1);
  lcd.print("Belichtung aktiv!");
  
  digitalWrite(13, HIGH);   
for (int i=buttonPushCounter; i>0; i--) { 
  lcd.setCursor(0, 0);
  lcd.print("noch: ");
  lcd.print(i);
  lcd.print(" Sec.");
  delay(1000);
}
  digitalWrite(13, LOW);
  lcd.clear();
  buttonPushCounter = 0;
  lcd.setCursor(0, 0);
  lcd.print("Fertig!");
  delay(1000);
  lcd.clear();
  lcd.print("Bereit...");
  lcd.setCursor(0, 1);  
  lcd.print("Druecke + oder -");
}

lastButtonState = buttonState;
lastButtonState2 = buttonState2;
 
}

Das ganze war ja Ursprünglich nur für die Langzeitbelichtung gedacht. Aber das mit den Belichtungsreihen hat mich schon neugierig gemacht, und ich würde das gerne noch mit einbauen, zumindest das ich zwei drei Profile auswählen kann wo dann zb. eins hintereinander 1, 2, 4, 8, 15, 30, 60, 120 und 240 Sekunden belichtet. Blos wie baue ich weitere Auswahlmöglichkeiten ein, stehe grade auf dem Schlauch. Ein weiterer Button ist kein Problem.

Greeez Oli

So ich bin fertig mit meinen Sketch:
Habe jetzt noch weitere 3 Buttons mit den ich jeweils ein fertiges Programm abarbeiten kann. Ich musste jeweils noch die Berechnungszeit der Kamera berücksichtigen:
Funktion: Frei wählbare Sekunden mit + und -, so wie 3 Programme:
A1: 10,15,20,30,45,60 Sekunden macht 6 Bilder
A2: 1,2,4,8,16 Sekunden macht 5 Bilder
A3: 60,90,120,240 Sekunden macht 4 Bilder.

Pentax_Langzeitbelichtung_LCD_ino.ino (14.5 KB)

Die Reihe A3 verstehe ich nicht 60,90,120,240

Grüße Uwe

Wegen der 90? Ist halt weil ich gerne diese Belichtungszeit mit drinnen haben möchte in diesem Ablauf.

Greeez Oli

Dann müßtest Du 180 auch reingeben. Grüße Uwe

Ja könnte man machen. Fals jemand das ganze nachbauen will hier die Schaltpläne.

Greeez Oli

Beim Schaltplan habe ich einige Fragen: * Wieso schaltest Du eine Diode zwischen Minuspol der Batterie und Masse des Spannunsstabilisator? Wenn Du den Spannungsstabilisator schützen willst, dann kommt die Diode zwischen Vin und Vout des Spannungstabilisators. * Wieso schaltest Du die Hintergrundbeleuchtung fix an; als größter Verbraucher leert sie die Batterie schnell (je nach Display unter 1 Stunde) Wenn Due ien Hintergrundbeleuchtung Brauchst dann Steuere sie über einen Transistor. Nicht alle Displays haben einenVorwiderstand für die Hintergrundbeleuchtung eingebaut. Bei vielen braucht es einen externen Vorwiderstand. * Am Kontrastregler-Widerstand des Displays fehlt der Anschluß der 5V. Bei einigen Displays funktionert es auch ohne aber nicht bei allen. Also Masse und 5V an den Poti, Schleifer auf Vo des Displays. * Die Ansteuerung der Kamera müßte auch funktionieren wenn Du den Auslöseknopf drückst bevor der Scharfstellknopf gedrückt wird. Zur Sicherheit sollte ein 2. Optokoppler dies machen. * Der Quarz sollte so nah wie möglich am ATmega sitzen. * Am Optokoppler muß die Basis frei bleiben; so wie Du das gezeichnet hast schaltet der Optokoppler permanet durch. * Am ATmega fehlen der 0,1µF Kondensator nahe der Versorgungspannung (Masse und 5V). * Vref (Pin 21) darf nicht an 5V angeschlossen werden ohne daß die Referenzspannung auf extern programmiert wurde. Dahin kommt ein 0,1µF Kondensator nach Massse. * Die beiden Massen (Pin 8 und Pin 22) dürfen nicht als Masseverbindung zwischen den verschiedene Schaltungsteilen verwendet werden. Sie müssen durch eine Leiterbahn verbunden sein.

Grüße Uwe

  • Wieso schaltest Du eine Diode zwischen Minuspol der Batterie und Masse des Spannunsstabilisator? Wenn Du den Spannungsstabilisator schützen willst, dann kommt die Diode zwischen Vin und Vout des Spannungstabilisators.

Ich möchte damit damit die gesamte Schaltung gegen Verpolung schützen. Habe es vom “Make your Own Arduino on Breadborad” Howto.

  • Wieso schaltest Du die Hintergrundbeleuchtung fix an; als größter Verbraucher leert sie die Batterie schnell (je nach Display unter 1 Stunde) Wenn Due ien Hintergrundbeleuchtung Brauchst dann Steuere sie über einen Transistor. Nicht alle Displays haben einenVorwiderstand für die Hintergrundbeleuchtung eingebaut. Bei vielen braucht es einen externen Vorwiderstand.

Sorry das ist eine Sache die ich vergessen hatte. Auf meinen Versuchsaufbau habe ich einen 460Ohm Widerstand genutzt um die LED Beleuchtung zu schützen.

  • Am Kontrastregler-Widerstand des Displays fehlt der Anschluß der 5V. Bei einigen Displays funktionert es auch ohne aber nicht bei allen. Also Masse und 5V an den Poti, Schleifer auf Vo des Displays.

Ok, Danke für den Hinweis, bei meinen Drehpoti ging es ohne VCC

  • Die Ansteuerung der Kamera müßte auch funktionieren wenn Du den Auslöseknopf drückst bevor der Scharfstellknopf gedrückt wird. Zur Sicherheit sollte ein 2. Optokoppler dies machen.

Ja dies hatte ich erst in Betracht gezogen, aber da ich bei Langzeitbelichtungen so gut wie immer mit MF arbeite, habe ich mir den zweiten Optokoppler gespart. Werde stattdessen einen Taster direkt verbauen der an der Klinke den AF brücken kann sofern er gebraucht wird.

*Der Quarz sollte so nah wie möglich am ATmega sitzen.

Ist mir bereits aus einigen Howtos bewusst.

  • Am Optokoppler muß die Basis frei bleiben; so wie Du das gezeichnet hast schaltet der Optokoppler permanet durch.

Habe hier mit 6N139 gearbeitet und diesen gab es leider nicht bei Fritzing. Dort musst ich von VCC an V0 brücken , hab es mit VB verwechselt.

  • Am ATmega fehlen der 0,1µF Kondensator nahe der Versorgungspannung (Masse und 5V).

Davon steht nichts im Breadboard Tutorial! Siehe Anhang Bild daraus.

  • Vref (Pin 21) darf nicht an 5V angeschlossen werden ohne daß die Referenzspannung auf extern programmiert wurde. Dahin kommt ein 0,1µF Kondensator nach Massse.

Also AREF ist auch im Tutorial mit an VCC angeschlossen wurden, zudem habe ich es schon mehrfach in YoutubeVideos gesehen.
Aber gut zu wissen. Was kann den passieren so wie es jetzt ist? Es funktioniert ja alles.

  • Die beiden Massen (Pin 8 und Pin 22) dürfen nicht als Masseverbindung zwischen den verschiedene Schaltungsteilen verwendet werden. Sie müssen durch eine Leiterbahn verbunden sein.

Ok ja, das kam jetzt durch das Autorouting von Fritzing. Beim löten habe ich das noch nie gemacht, da hat der Controller immer seine eigenen Leiterbahnen gehabt.

Greeez Oli

bbArduino05.jpg

  • Die Diode für den Verpolungschutz gibst Du besser auf den positiven Pol.
  • Ob man beim Auslösen der Kamera zuerst scharfstellen und dann auslösen braucht oder auslösen genügt hängt vom Kameramodell ab. Kann hier nichts bestimmtes sagen; wenns mit 1 Kontakt funktioniert dann ist es kein problem so zu lassen. Meine Einwände sind auch für Nachbauer gedacht.
  • Optokoppler und Masse ATmega : ich sehe nur das Schaltbild nicht Deinen Schaltungsaufbau und kann so nur Dinge im Schaltplan bemerken. Wie gesagt Du könntest die Schaltung richtig aufgebaut haben aber Fehler im Schaltplan gemacht haben. Wenn Jemand die Schaltung nachbaut, hält er sich an den Schaltplan. *Aref: Wenn Du interne Referenz 1,1V einstellst hast Du einen Kurzschluß zu 5V. Du kannst die Schaltung der Referenz kaputmachen. Sicher mißt Du falsch, da Du anstatt 1,1V Referenz 5V von außen hast. Nicht alle veröffentlichen Schaltungen, Beispiele und Videos sind Fehlerfrei. Viele werden von Anfängern mit beschrenkten Elektronikkentnissen gemacht und dann sind Fehler drin. Auch Profis unterlaufen Fehler die dan aber unbewußt da sind weil sie eigentlich wissen wie's richtig gemacht werden muß. ZB wie in viele Tutorials und Büchern als Beispiel steht eine LED ohne Vorwiderstand zwischen pin 13 und Masse zu stecken ist ein Fehler der sicht herübergerettet hat. In alten Versionen des Arduino (solche ohne USB) gabs einen Widerstand auf pin 13 und da konnte man das machen. Heute fließen bei einer roten LED ohne Vorwiderstand um die 80mA durch die LED. Das bekommt auf längere Zeit gesehen weder den ATmega noch der LED.
  • Ein 0,1µF Kondensator gehört neben jedes IC um Stromspitzen während der Schaltvorgänge im inneren des ICs zu entstören. Grüße Uwe