Go Down

Topic: Einstellbarer Zeitauslöser für Spiegelreflexkamera. Wie ralisieren? (Read 5133 times) previous topic - next topic

Zyrusthc

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:
Code: [Select]

 || 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

Lena

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
„Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."

Albert Einstein

uwefed

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

Zyrusthc


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

Lena

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
„Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."

Albert Einstein

Zyrusthc

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

Greeez Oli

sth77

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.
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Zyrusthc

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

Udo Klein

Check out my experiments http://blog.blinkenlight.net

uwefed

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




Zyrusthc

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

Zyrusthc

#11
Apr 24, 2012, 03:27 am Last Edit: Apr 24, 2012, 03:29 am by Zyrusthc Reason: 1
So ich habe jetzt mal den Anfang gemacht und das funktioniert auch genau so wie ich das wollte.
Code: [Select]
#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

Zyrusthc

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.

uwefed


Zyrusthc

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

Greeez Oli

Go Up