Ardueos Kabel Timer

Ardueos Projekt 

Intervall Aufnahmen und Langzeitbelichtungen 

Für Zeitraffer oder Astronomische Aufnahmen von  weit entfernten DeepSky Objekten benötigt man einen Intervall Timer und eine Spiegelreflex Kamera.

Intervall Timer kann man für kleines Geld zu kaufen, aber für die Langzeit Fotografie von Deep Sky Objekten nicht gerade ideal. Tasten zu kein, Display bei Nacht schlecht zu lesen, Batterien die man nicht mal so zu Hause hat und meist zu kurze Kabel.

Also warum nicht einfach selber bauen,  dabei sind die Bauteile günstig zu bekommen.

Wir brauchen…

  • Arduino  Mikrocontroller
  • Display 16×2
  • Joystick
  • Lochrasterplatine, Kabel, Werkzeug
  • Optokoppler LTV 827
  • Widerstände 220 Ohm u. 10K Ohm
  • Potenziometer 10K Ohm
  • 2,5 mm Stereo Klinken Stecker
  • Schalter , 9Volt Batterie mit Stecker

Testaufbau auf dem Steckbrett

Der Joystick Knopf wird über einen 10K Ohm Pullup Widerstand angeschlossen, Display und der LTV827 benötigen jeweils einen 220 Ohm Vorwiderstand,  hier an Pin 1  des  Optokoppler angeschlossen.

Nachdem die Schaltung auf dem Steckbrett das macht was sie soll, geht’s auf die Lochrasterplatine. Die wurde größer gewählt als eigentlich benötigt, so können noch Erweiterungen dazukommen.

 

Für den Arduino Joystick  gibt es auf der 3D Plattform  thingiverse.com  einige coole Gehäuse zum ausdrucken, Dann noch ein Gehäuse für Platine und Batterie aus Aluminium.

Für die  Canon EOS Kamera benötigt man einen 2.5 mm Stereo – Klinkenstecker. Dabei wird Ring 1 und 3 mit dem Optokoppler  verbunden.

Anschluss EOS

Funktion.

Nach dem Einschalten gibt es 5 Menüs die über den Joystick angewählt werden können.

  1. Vorlaufzeit – Wird einmalig abgearbeitet und soll Schwingungen am Teleskop minimieren.
  2. Belichtungszeit –  Dauer der Belichtung ein. Kamera sollte im Modus „Manuell“ oder „Blub“ stehen.
  3. Pause – Zeit zwischen den einzelnen Aufnahmen
  4. Anzahl Bilder – Anzahl der Aufnahmen.
  5. Start – Durch drücken des Joysticks wird die Reihenaufnahme gestartet, durch wiederholtes drücken wird der Prozess abgebrochen.

Der Sketch

// ---- EOS TIMER ----
// ---- März 2018 ----
// -- Martin Sümnik --

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 7, 6, 5, 4, 3);
int ab = 0;
long b = 0;
long b1 = 0;
long b2 = 0;
long b3 = 0;
long b4 = 0;
long ii = 0;
long vor = 0;
long bel = 0;
long pau = 0;
byte ausloeser = 0;
int brk = 0;
int ergx = 0;
int ergy = 0;
long s1 = 0;
long s2 = 0;
long s = 0;
long min1 = 0;
long min2 = 0;
long mi = 0;
long sec1 = 0;
long sec2 = 0;
long sec = 0;

String leer = (" ");
String punkt = (":");
String zeit = ("Time ");
int anzahl = 0;
int anz_temp = 0;
int t = 0; // Taster Joystick
int pos = 13; // Position Blink curser
int joybut = 0;
int joypin = 2;
int on = 0;

int y = 0; // Analogeingang Y achse
int x = 1; // Analogeingang x achse

long bel_vor = 0; // Wert für aufnahme in sec
long bel_bel = 0; // Wert für aufnahme in sec
long bel_pau = 0; // Wert für aufnahme in sec


String Array[] = {"VORLAUFZEIT ", "BELICHTUNGSZEIT", "PAUSE ", "ANZAHL BILDER ", "Start Press Down "};
int i = 0; // Counter LCD Display 1te Zeile
String RUN = ("STOP Press Down ");
String Bilder = (" BILDER");
String von = (" von ");
void setup() {
 lcd.begin(16, 02);
 pinMode(3, OUTPUT); // Display
 pinMode(4, OUTPUT); // Display
 pinMode(5, OUTPUT); // Display
 pinMode(6, OUTPUT); // Display
 pinMode(7, OUTPUT); // Display
 pinMode(8, OUTPUT); // Display
 pinMode(9, INPUT); // Schalter Joystick
 pinMode(11, OUTPUT); // Pin 11 Kamera Out
 attachInterrupt(digitalPinToInterrupt(joypin), break_down, CHANGE); // Joybutten

lcd.setCursor(0, 0); lcd.print(" Ardueos V1.0 ");
 lcd.setCursor(0, 1); lcd.print(" Cabel Timer ");
 delay (3000);
}


void loop() {

joybut = digitalRead(joypin); // Taster Joystick
 if (joybut < 1) {
 (t = 1); // Taster gedrückt
 }
 if (joybut > 0) {
 (t = 2);
 }


 ergx = analogRead(x); // Hoch _ Runter
 ergx = map(ergx, 0, 1022, 1, 8);
 ergy = analogRead(y); // Rechts _ links
 ergy = map(ergy, 0, 1022, 1, 8);


 if (ergx == 8) {
 (i --);
 } if (i < 0) {
 (i = 0);
 }
 if (ergx == 1) {
 (i ++);
 } if (i > 4) {
 (i = 4);
 }
 delay (185);


 // VORLAUFZEIT

load_display() ; anzahl = anz_temp;
 if (i < 3 & t == 1) {
 pos = pos + 3;
 if (pos > 13) {
 pos = 7;
 } lcd.setCursor(pos, 1);
 lcd.blink();
 delay(800);
 lcd.noBlink();
 timer(s1, s2, min1, min2, sec1, sec2);
 }
 if (i < 3 & ergy == 8 & pos == 13) {
 sec ++;
 } if (sec > 59) {
 sec = 0;
 }
 if (i < 3 & ergy == 1 & pos == 13) {
 sec --;
 } if (sec < 0) {
 sec = 59;
 }

if (i < 3 & ergy == 8 & pos == 10) {
 mi ++;
 } if (mi > 59) {
 mi = 0;
 }
 if (i < 3 & ergy == 1 & pos == 10) {
 mi --;
 } if (mi < 0) {
 mi = 59;
 }

if (i < 3 & ergy == 8 & pos == 7) {
 s ++;
 } if (s > 59) {
 s = 0;
 }
 if (i < 3 & ergy == 1 & pos == 7) {
 s --;
 } if (s < 0) {
 s = 59;
 }


 if (i == 3) {
 on = 1;
 }
 if (i == 3 && ergy == 4) {
 lcd.setCursor(0, 0);
 lcd.print(Array[i]);
 lcd.setCursor(0, 1) ;
 lcd.print(anz_temp + leer);
 }
 if (i == 3 && ergy == 8) {
 anz_temp ++ ;
 lcd.setCursor(0, 1) ;
 lcd.print(anz_temp + leer);
 anzahl = anz_temp;
 }; if (anz_temp < 2) {
 anz_temp = 1;
 }
 if (i == 3 && ergy == 1) {
 anz_temp -- ;
 lcd.setCursor(0, 1) ;
 lcd.print(anz_temp + leer);
 anzahl = anz_temp;
 } if (anz_temp > 99) {
 anz_temp = 99;
 }

if (i == 4 & t == 1) {
 timer_start();
 }


 // Werte Speichern

sec1 = sec / 10;
 sec2 = sec - (sec1 * 10);

min1 = mi / 10;
 min2 = mi - (min1 * 10);

s1 = s / 10;
 s2 = s - (s1 * 10);

if (i == 0) {
 bel_vor = ((s * 3600) + (mi * 60) + sec);
 }
 if (i == 1) {
 bel_bel = ((s * 3600) + (mi * 60) + sec);
 }
 if (i == 2) {
 bel_pau = ((s * 3600) + (mi * 60) + sec);
 }

if (on == 0) {
 timer(s1, s2, min1, min2, sec1, sec2);
 }


 lcd.setCursor(0, 0);
 lcd.print(Array[i]);


}
// Ausgabe
void timer(long s1, long s2, long min1, long min2, long sec1, long sec2) {
 lcd.setCursor(0, 1); lcd.print(zeit + s1 + s2 + punkt + min1 + min2 + punkt + sec1 + sec2 );

}

// Ausgabe laden

void load_display() {

if (i == 0) {
 b = bel_vor;
 on = 0;
 }
 if (i == 1) {
 b = bel_bel;
 on = 0;
 }
 if (i == 2) {
 b = bel_pau;
 on = 0;
 }

b2 = b / 3600; // b2 = Std.
 b3 = b - (b2 * 3600); // b3 = min
 b4 = b3;
 b3 = b3 / 60;
 b4 = b4 - (b3 * 60); // b4 Sec

sec = b4;
 sec1 = b4 / 10;
 sec2 = b4 - (sec1 * 10);

mi = b3;
 min1 = b3 / 10;
 min2 = b3 - (min1 * 10);

s = b2;
 s1 = b2 / 10;
 s2 = s - (s1 * 10);

}

// Aufnahme Starten // Anzeige Ändern / Kamera Conecton

void timer_start() {


 vor = (bel_vor * 1000);
 bel = (bel_bel);
 pau = (bel_pau);
 // ii = 0;
 lcd.setCursor(0, 0); lcd.print(RUN);
 lcd.setCursor(0, 1); lcd.print(" Running Prog. ");

brk = 1;
 //for (long ii=0; ii < vor; ii++){delay(1000);}

delay (vor); // Warte Vorlauf

for (int ab = 1; ab <= anzahl; ab++) {
 if (ausloeser == 0) {
 digitalWrite(11, HIGH); // Pin 11 High
 }

for (long ii = 0; ii < bel; ii++) {
 delay(1000); // Warte Beleichtung
 }

if (ausloeser == 0) {
 digitalWrite(11, LOW); // Pin 11 Low
 }

lcd.setCursor(0, 1);
 lcd.print(ab + Bilder + von + anzahl);

for (long ii = 0; ii < pau; ii++) {
 delay(1000);
 }

ii = 0;

}
 brk = 0;
 ausloeser = 0;
 lcd.setCursor(0, 1);
 lcd.print("FERTIG ");
}

void break_down () {
 if (brk == 1) {
 bel = 0;
 pau = 0;
 vor = 0;
 ausloeser = 1;
 anzahl = 0;
 digitalWrite(11, LOW); // Kamera aus
 lcd.setCursor(0, 1);
 lcd.print("Aufnahme Stop ");
 }

}

 

Viel Spaß beim Nachbau.

Für Schäden wird keine Haftung übernommen.


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.