Canon EOS Shutter-Emulation und Fernsteuerung
Erwin Lotter, 16.09.2024
Diese Seite beschreibt, wie man verschiedene Canon EOS Modelle ohne Shutter und/oder Spiegel betreiben kann. Zusätzlich (oder auch anstelle) der Emulation kann ein Intervall-Timer integriert werden, der via Bluetooth vom Smartphone aus gesteuert werden kann.

Aktuell werden emuliert: 
  • 6D, 6Dmk2, 50D, 60D, 70D, 80D (nur Shutter), 
  • 550D, 600D, 650D, 700D, 
  • 1100D, 1200D, 1300D, 2000D 
  • EOS M, M3, M50, M10, M100
Die Shutter-Emulation simuliert die von der Kamera erwarteten Signale mit einem Arduino, für dessen Programmierung ich die freie Arduino IDE verwende. 
Für die Fernsteuerung eines Intervall-Timers oder der PID-Regelung einer Sensor-Kühlung die sich zusätzlich  integrieren lässt, muss ein kleines HC-05 Modul an den Arduino angeschlossen werden.
Hardware

Zur einfachen Integration in die Kamera ist ein kleines Arduino-Board vorteilhaft, das mit 3.3V betrieben werden kann. Zum Testen und Programmieren ist ein Board mit integrierter USB-Schnittstelle günstig.
Aus dem erfreulich großen Angebot an preiswerten Arduino-Boards einschließlich der kompatiblen China-Nachbauten, die schon ab ca. 2 Euros zu bekommen sind, habe ich mir diese beiden Boards besorgt:
1.) Nano V3
     (Mini-USB,
      ATmega328P, 5V)     
 Das  HC-05 Bluetooth-Modul
 wird nur für die Bedienung
des Intervall-Timers benötigt

 



 2.) Pro Mini
      (ATmega328 3.3V 8MHz)

Verschaltung 
 
Bevor man damit beginnt, sollte man sich darüber klar sein, dass solch ein Eingriff zum Verlust jeglicher Garantie führt. Ohne ausreichende Elektronikkenntnisse ist die Gefahr groß, die Kamera irreparabel zu beschädigen! 
 
Alle Emulatoren verwenden die Haltemagnet-Signale, die sich gut an den Testpunkten des Shutterkabels abgreifen lassen, um danach Kontrollsignale für die Kamera zu erzeugen. Lediglich für die Spannungsversorgung mancher Modelle muss man noch direkt auf dem Mainboard der EOS löten, aber das geht recht einfach. (Leider lässt sich die Versorgung der 'coil' nur bei den EOS Mx Modellen zur Versorgung des Arduino verwenden, weil sie nicht permanent oder, wie bei der 700D, zu spät anliegt.) 
 
Die Arduino-Ausgänge sind durch Dioden von der Kameraelektronik getrennt, um zu verhindern, dass die Kameraelektronik beschädigt wird, wenn die Betriebsspannung des Arduino höher als 3.3V ist. So ist dann z.B. auch ein Testbetrieb mit einem 5V Arduino über USB, problemlos möglich. 
 
Die Verschaltung unterscheidet sich deutlich für die verschiedenen Kamera-Typen, deren Shutter teils nur einen Haltemagnet ('coil') besitzen (1100D, M, ...), während sonst zwei verbaut sind. Die ein- und zweistelligen Modelle (6D, 50D,..) haben zudem noch einen separaten Motor mit zusätzlichen Kontrollsignalen für den Spiegel.
Anschluss-Schema für die 550D und 600D, weitere Modelle siehe unten.
Die Beschreibung der Funktionen der einzelnen Signalleitungen ist im Steuerprogramm zu finden.
Der Widerstand 'Rs' ist optional und dient dazu, das Mainboard vor Kurzschlüssen zu schützen. Er darf nicht zu hoch gewählt werden, sonst hat der Arduino Startprobleme. Werte um 20 Ω sind gut geeignet. Wenn ein Bluetooth-Modul verwendet wird, sollte weggelassen werden.
Software 
 
Ein Arduino-Programm (auch Sketch genannt) wird i.A. per serielle (USB-) Schnittstelle an die Arduino Basissoftware, den Bootloader, übergeben, die es permanent speichert und nach einem Reset oder dem Einschalten des Arduino ausführt. Das dauert aber ca. eine Sekunde, und das ist zu lange für die Kamera, die offenbar gleich mal überprüft, ob mit dem Shutter alles in Ordnung ist. Für Testzwecke kann der Arduino natürlich mit einer externen Quelle (z.B. seinem USB Anschluss) versorgt werden, so dass die Versorgung schon anliegt, wenn die Kamera eingeschaltet wird – dann ist alles ok. 
 
Für den Echtbetrieb muss das passend konfigurierte Steuerprogramm (EOS-Shutter V4.0) für manche Modelle so in den Arduino übertragen werden, dass es den Bootloader überschreibt und beim Einschalten sofort startet. Das geht zum Beispiel mit einem zweiten Arduino-Board mit einer USB-Schnittstelle oder auch mit einem speziellen Programmer. Eine kleine Beschreibung dazu findet sich unten im Abschnitt „Arduino Boot-Programme laden“. 
 
Alternativ können Leitungen, die beim Einschalten Low-Pegel haben müssen, mit einem 2.2k Widerstand auf der Arduino-Seite mit Masse verbunden werden. Dann reicht es aus aus, den Emulator-Code als normalen Sketch zu laden. 
Eine weitere Lösung ist die Verwendung eines schnelleren Bootloaders, wie er z.B. mit dem MiniCore Paket installiert werden kann. 
 
Ablauf der Emulation 
 
Der Arduino wird durch ein Coil-Signal aktiviert und sendet der Kamera die Signale, die sie von den Lichtschranken und Rotationsencodern ihres Shutters erwartet. Das klappt meist für alle sinnvollen Betriebsarten einschließlich des Live-View. 
 
In den Zeiten zwischen den emulierten Shutter-Bewegungen geht der Arduino-Prozessor in den Ruhezustand und verbraucht dann nur noch wenige Mikroampere. Um das wirklich nutzen zu können, muss allerdings die Power-LED des Arduino ausgelötet oder –gebrochen werden, die ansonsten ca. 1 mA verbrät. 
 
Einbau des Emulators in die Kamera und Anwendung 
 
Nach dem Ausbau von Shutter und/oder Spiegel, für den die Kamera komplett zerlegt werden muss, bleibt ein Hohlraum, der das Arduino-Board leicht aufnehmen kann. Als Belohnung erhält man eine Kamera, die völlig geräuschlos arbeitet und keinem mechanischen Verschleiß mehr unterliegt. Ohne den Spiegel bekommt man deutlich weniger Abschattung bei F/5 oder noch lichtstärkeren Optiken. 
 
Ohne Shutter ist natürlich die minimale Belichtungszeit stark eingeschränkt: Aufnahmen bei Tageslicht oder auch vom Mond sind so nicht mehr möglich (außer im Video-Mode, der eh ohne Shutter arbeitet). Die Untergrenze wird durch die Dauer des Auslesevorgangs bestimmt, die knapp 1/10 Sekunde beträgt. Die minimale Belichtungszeit an der Oberkante des Bildes beträgt ca. 1/50 s und nimmt nach unten linear um 1/10 s zu – ein Verhalten, das übrigens auch mit Shutter die minimale Aufnahmedauer von Darks begrenzt. 
 
Das bedeutet, dass bei man 1 s Belichtung zwischen Ober- und Unterkante einen Unterschied von etwa 10% bekommt, bei 10 s noch etwa 1%. Im ersten Fall ist eine Korrektur durch gleichlang belichtete Flats auf jeden Fall angeraten, bei 1% (gleichmäßiger) Variation kann man darauf meist verzichten. Eine solche ebene Korrektur kann auch rein rechnerisch erfolgen. Wichtig ist auch, bei der Aufnahme von Flats zu beachten, dass deren Belichtungszeit nicht zu kurz, also nicht kleiner als z.B. 10 s, wird. 
 
Arduino Boot-Programme laden 
 
Ein Arduino-Sketch soll so geladen werden, dass er den Bootloader überschreibt und ohne dessen Hilfe ausgeführt wird. Dazu wird ein zweiter Arduino als ISP (In-System-Programmer) verwendet. Es sind 3 Schritte notwendig. 
 
1.) Einen Arduino zum ISP Programmer umfunktionieren 
 
Zuerst wird der Hilfs-Arduino mit USB – im Folgenden ISP genannt – an den PC angeschlossen und mit der ISP Software geladen. Hier darf das Ziel-Board noch nicht angeschlossen sein! 
 
In der Arduino IDE wird unter Tools > Board der Typ des ISP Arduino eingestellt (hier „Arduino Nano“) und die richtige COMx (z.B. COM6) Schnittstelle wird ausgewählt. 
Unter Datei > Beispiele > ArduinoISP wird das Programm ArduinoISP ausgewählt und dann als Sketch hochgeladen. 
 
Dann wird dieser Sketch in der IDE als Programmer gekennzeichnet mit 
Tools > Programmer > „Arduino as ISP“ (nicht ArduinoISP!). 
 
2.) Beschaltung 
 
Als nächstes wird der ISP abgehängt und der Ziel-Arduino an ihn angeschlossen: Gnd und Vcc werden verbunden, ebenso wie D11-D13 (MOSI, MISO und SCK). D10 des ISP geht an RST des Ziels. 
 
Dann den ISP wieder an den PC anschließen. 
 
3.) Programm als Boot-Code auf das Ziel laden 
 
Als Board muss jetzt das Ziel-Board angegeben werden – ggf. einschließlich des korrekten Prozessors und der richtigen Taktfrequenz (wird nicht automatisch erkannt). Hier wäre das: Board: „Arduino Pro or Pro Mini“, Processor: AT-mega328 (3.3V 8 MHz). 
Dann muss das gewünschte Programm ganz normal als Sketch geöffnet werden. (Achtung: Der Dateiname darf keine Sonderzeichen enthalten und muss in einem gleichnamigen Ordner liegen!) 
Das Hochladen erfolgt diesmal aber nicht mit der Hochladen Funktion, sondern mit Sketch > Upload mit Programmer (oder Shift-Hochladen Button). Damit lädt der ISP das Programm als Boot-Code in das Ziel. Bei trat mehrfach beim ersten Versuch ein Fehler auf, nach Wiederholen der Prozedur hat es dann aber geklappt. 
 
Der Original-Bootloader kann mit dem Befehl "Burn Bootloader" im Tools-Menü wieder geflasht werden (mit dem ISP).