RSS

Schlagwort-Archive: Command

Infrarot Fernauslöser für Canon DSLR selbstgebaut

Für eine bevorstehende Veranstaltung wollte ich eine „Fotobox / Fotobooth“ realisieren.
Dafür sollte die verwendete Spiegelreflexkamera (Canon EOS 300D – ok, schon etwas in die Tage gekommen, aber für den Zweck absolut ausreichend) mit einer Fernsteuerung ausgelöst werden.

Die Canon EOS-Modelle sind mit einem Infrarotempfänger ausgestattet, welche mit der passenden Fernbedienung ausgelöst werden können. Diese kann man im Zubehör als Original oder Billig-Nachbau erwerben.
Da ich keine dieser Fernbedienungen hatte, habe ich kurzerhand das Projekt von von Sebastian Setz http://sebastian.setz.name/arduino/my-libraries/multi-camera-ir-control/   mit einem Arduino Uno und ein paar Bauteilen auf einem Steckbrett umgesetzt.
Die Schaltung hat auch funktioniert, jedoch war ich von der Fernbedienbarkeit enttäuscht, da schon nach kurzer Entfernung die Auslösung nicht mehr zuverlässig funktionierte und der Winkel zwischen Fernbedienung und Empfänger im Griff des Bodys nur gering verändert werden durfte.  Auch die Erhöhung des Stroms durch die IR-Led brachte kaum bessere Werte. Es kann natürlich sein, dass das an der verwendeten IR-LED lag, aber ich hatte da doch noch eine andere Idee.

Die Kamera hat einen 2,5mm Klinkenstecker, an dem ein kabelgebundener Fernauslöser angeschlossen werden kann. Einen Kabel-Fernauslöser hab ich schon vor einiger Zeit aus einem alten Handy-Kopfhörer-/Freisprechkabel gebastelt.

EOS25

Steckerbelegung Canon EOS – Kameras

Warum nicht diesen Anschluss nutzen und dort eine externe Schalterbox dranstöpseln, der  mit einer alten TV-Fernbedienung ausgelöst wird?  Eine kleine griffige IR-Fernbedienung hatte ich noch und los ging es.

DSC_2051

Fertige DIY-Fernauslösung

Also zuerst einmal die benötigten Teile zusammengesucht. Diese waren im Einzelnen:

1 ausgediente Infrarot-Fernbedienung
1 Gehäuse
1 kleine Streifenrasterplatine
1 Klinkenstecker 2,5mm mit Kabel  (im Bild mein selbstgebauter Kabelfernauslöser)
1 Arduino Nano
1 Infrarot-Empfänger
1 Relaismodul mit 2 Relais (5 Volt)
9V Blockbatterie für die Stromversorgung
1 Batterieanschluss-Clip  9V
1 Einschaltknopf

DSC_2036

Ein Großteil der benötigten Teile

 

  1. Schritt:
    Streifenrasterplatine ins Gehäuse eingepasst und zum Fixieren mit Bohrlöchern versehen
    DSC_2037
  2. Schritt:
    Arduino Nano und IR-Empfänger so eingepasst und eingelötet, dass diese Bündig zum Gehäuse ausgerichtet sind. Der IR-Empfänger wurde hier komplett auf Digitale I/O Pins aufgeschaltet, um zusätzliche +5V und GND nicht verdrahten zu müssen. Dazu wurden die entsprechenden Pins 8 und 9 auf High- (+5V) bzw. Low- (GND) Potential gezogen. Pin 7 empfängt die Signale.
    DSC_2041
  3. Lötstreifenraster so auftrennen, dass die Anschlusspins des Prozessors nicht kurzgeschlossen sind
    DSC_2040
  4. Jetzt die Verbindung mit dem Relaismodul herstellen. Hier müssen die Spannungsversorgung (+5V und GND) sowie die beiden Steuerleitungen für die Relaisangeschlossen werden.
    DSC_2046

    Ein altes Audiokabel von einem Computer-CD-Laufwerk dient als auftrennbare Brücke zum Relaismodul

    DSC_2047

    Steuerleitungen an den Pins D3 und D4

    DSC_2048

    Den Steg hab ich entfernt, um den Stecker tiefer einstecken zu können und das Gehäuse besser zu geht.

     

  5. Jetzt die Schaltkontakte COM1 und COM2 an den beiden Relais mit dem GND-Pin des Steckers verbinden. An NO1 und NO2 kommen die beiden Steckerkontakte „Focus“ und „Auslöser“.
    DSC_2049

    Kontakte NO1 und NO2 mit Focus und Auslöser sowie COM1 und COM2 mit GND verbinden (auf dem Bild leider nicht richtig;-))

     

  6. Batterieclip über den Schalter an Platine verlöten. 9V-Blockbatterie anschließen. Platine mit dem Gehäuse verschrauben.
    ir-receiver

    Die komplette Schaltung . Die Pins am Microcontroller entsprechen den DigitalPins.

     

  7. Gehäuseteile so bearbeiten und Aussparungen herstellen, dass es sich mit den eingebauten Bauteilen und dem Kabel schließen lässt.
  8. Nun geht es an die Programmierung.
    Da ich ja eine vorhandene IR-Fernbedienung benutzen möchte, brauch ich natürlich erst einmal die Daten, die die Fernbedienung aussendet. Dazu hab ich zuerst mal den Sketch IR-Dump aus den Beispielen der IR-Remote-Library von Ken Shirriff ausgeführt. Darin den IR-Signalpin des IR-Empfängers an meinen Aufbau angepasst (nicht vergessen die Stromversorgung des IR-Empfängers wie im Abschnitt 2 beschrieben zu aktivieren).   Den so modifizierten Sketch auf den Arduino aufspielen und aus dem seriellen Monitor  die HEX-Werte der Fernbedienungsknöpfe notieren.
  9. Jetzt müssen die Werte noch verarbeitet werden.
    Ich brauche nur 2 Knöpfe, somit auch nur 2 Werte. Wert 1 steuert den Focus für 1700ms an und löst dann aus.  Wert 2 löst sofort aus.
    Die Auslösung funktioniert nur, wenn Focus und Auslöser gleichzeitig auf Masse (GND) gezogen werden. Dies sollte im folgenden Sketch ersichtlich sein:

    /*
    * External Canon EOS-IR-RemoteControl
    * Based on the IRremote-Library from Ken Shirriff
    */
    #include <IRremote.h>
    int RECV_PIN = 7;               //Pin festlegen, an dem die IR-Signale ankommen
    IRrecv irrecv(RECV_PIN);      //Objekt IRrecv wird erstellt
    decode_results results;         //
    void setup() {
    pinMode(9, OUTPUT);
    digitalWrite(9, HIGH);      //hier hängt der +5V Anschluss vom IR-Empfänger, deshalb auf HIGH geschaltet
    pinMode(8, OUTPUT);
    digitalWrite(8, LOW);      //und hier GND vom IR-Empfänger, deshalb auf GND geschaltet
    pinMode(3,OUTPUT);      //Pin Auslösefunktion 1 an Relais 1
    pinMode(4,OUTPUT);      //Pin Auslösefunktion 2 an Relais 2
    digitalWrite(3, HIGH);      //Relais 1 Pin High geschaltet, da Relais bei Low-Pegel anzieht
    digitalWrite(4, HIGH);      //Relais 2 Pin High geschaltet, da Relais bei Low-Pegel anzieht
    Serial.begin(9600);
    irrecv.enableIRIn();          // Start the receiver
    }
    void loop() {
    if (irrecv.decode(&results)) {                      //wenn ein IR-Signal empfangen wird…
    Serial.println(results.value, HEX);            //empfangenes Signal als HEX-Wert im Serial-Monitor ausgeben
    long a=results.value;                              //Wert in Variable a schreiben

    if (a==(-2122235713)){                                //wenn der Wert dem Signal für das Auslösen mit
    digitalWrite(3,LOW);                                //vorheriger Fokussierung entspricht… erst Pin 3 (Focus) LOW schalten
    delay(1600);                                            //und nach 1600ms
    digitalWrite(4,LOW);                                //Pin 3 (Auslösen) LOW schalten
    delay(800);                                              //Auslöser für 800ms „drücken“
    digitalWrite(3,HIGH);
    digitalWrite(4,HIGH);                                //beide Relais mit HIGH Signal wieder abfallen lassen.
    }

    if (a==(-2122229593)){
    digitalWrite(4,LOW);
    digitalWrite(3,LOW);
    delay(800);
    digitalWrite(4,HIGH);
    digitalWrite(3,HIGH);
    }

    irrecv.resume();           // Receive the next value
    }
    }

  10. Wenn der Sketch aufgespielt wurde, die Schaltung mit der Spannungsquelle (9V Block) und mit dem Klinkeneingang der Canon EOS verbinden. Nach dem Einschalten ist kann das Fernauslösen beginnen.
    Viel Spaß!
 
 

Schlagwörter: , , , , , , , , , , , , , ,