Über den Beitrag
In diesem Beitrag möchte ich mich dem Thema Fernauslöser (engl.: Remote Shutter), widmen. Es fing ganz harmlos mit der Frage eines Lesers an, ob man denn mit einem Bluetooth Modul wie dem HC-05 oder HC-06 kommerziell erhältliche Fernauslöser für Smartphone-Kameras simulieren könne. Damit ließe sich z.B. eine Kamerafalle bauen. Ich dachte, das sei ganz einfach. Im Nachhinein ein gutes Beispiel dafür, wie man von einer Fragestellung in die nächste, dann in die Übernächste, eine weitere usw. geraten kann.
Das Ganze ist dann so groß geworden, dass ich den Beitrag schließlich zweigeteilt habe. In diesem Teil geht es um die Themen
- Fernauslöser – fertige Lösungen
- Fernauslöser hacken und mit dem Arduino schalten
- Probleme im Langzeitbetrieb lösen
- Schaltung ohne Arduino, z.B. nur mit Bewegungssensor
Im nächsten Beitrag zeige ich dann, wie ihr Bluetooth Module wie den HC-05 oder HC-06 als Fernauslöser verwenden könnt und auf die Art viel flexibler seid.
Fernauslöser – fertige Lösungen
Bluetooth Fernauslöser für Smartphones sind für wenige Euro z.B. bei Amazon erhältlich. Ich habe mir das rechts abgebildete Modell zugelegt. Die Funktion ist denkbar einfach. Ihr müsst den Fernauslöser einschalten und mit dem Smartphone koppeln. Bluetooth haben die meisten von euch in diesen Coronazeiten wahrscheinlich sowieso aktiviert. Dann geht ihr in eure Smartphone-Kamera App. Der Fernauslöser hat zwei Tasten. Zwar steht auf der einen iOS und auf der anderen Android, sie funktionieren aber beide an meinem Android Smartphone:
- große Taste:
- kurzes Drücken: es wird ein Foto geschossen
- kleine Taste:
- kurzes Drücken: es erscheint ein blauer Rand um den Auslöser, jedes weitere Drücken löst ein Foto aus
- für beide Tasten gilt:
- langes Drücken: löst nach ca. 1 Sekunde Drücken ein Serienbild aus (lässt sich in den Smartphone-Einstellungen ändern)
Bluetooth Protokolle und Profile
Wie ich selbst auch erst einmal lernen musste, gibt es verschiedene Bluetooth Profile, die auf der allgemeinen Bluetooth-Spezifikation oder weiteren Protokollen aufbauen. Ich will das nicht weiter vertiefen. Relevant ist, dass nicht jedes Bluetooth Gerät oder Modul mit jedem anderen kommunizieren kann. Der Fernauslöser kommuniziert gemäß dem HID (Human Interface Device) Profil. Und das lässt sich nicht mithilfe der auf den Bluetooth Modulen vorhandenen Firmware darstellen. Ihr könnt zwar die Firmware austauschen (Anleitung hier), aber dann müsstet ihr euch immer noch in das HID Profil einarbeiten. Ich bin selbst noch auf der Suche nach einem verständlichen Einstieg in das Thema.
Fazit: Eine (einfache) Emulation des Fernauslösers durch ein Bluetooth Modul ist nicht möglich.
Fernauslöser „hacken“ und von außen schalten
Die nächste Idee war, den Taster des Fernauslösers in geeigneter Weise zu überbrücken, um ihn so von außen schalten zu können. Ich bin nicht der Erste, der auf diesen Gedanken gekommen ist. Die Methode wurde schon einmal hier beschrieben, allerdings geht es noch ein kleines bisschen einfacher, mit einer Lötverbindung weniger und ohne Transistor. Letzteres hat aber auch einen Nachteil, auf den ich noch komme. Ich zeige deswegen beide Wege. Die Vorbereitung des Handsenders ist für beide Wege gleich.
Vorbereitung des Fernauslösers
Zunächst öffnet ihr vorsichtig (!) das Gehäuse. Dazu eignet sich ein scharfes Messer mit stabiler Klinge. Überlegt euch, welchen Taster ihr nutzen wollt. Mit einem Draht oder Ähnlichem könnt ihr prüfen, welches die relevanten Kontakte sind. Überbrückt sie probeweise und schaut, wann die LED leuchtet. Dann lötet ihr eure Zugangskabel an. Ich habe dafür Steckbrückenkabel genommen, die ich an einer Seite abgeschnitten habe. Der Kontakt, an dem das blaue Kabel angelötet ist, ist zugleich GND des Fernauslösers. Beachtet, dass die Position von GND an dem Taster unter der großen Taste (Bild rechts) gegenüber dem Taster unter der kleinen Taste (Bild unten) vertauscht ist. Ein weiterer GND Anschluss ist im rechten Bild rot umrandet. Wenn ihr euch nicht sicher seid, dann messt den Widerstand zwischen den Kontakten und diesem GND Kontakt.
Ihr könnt die „nackte“ Platine verwenden, müsst dann aber dafür sorgen, dass die Batterie festen Kontakt hat, oder ihr verwendet eine externe Spannungsversorgung (3.7 Volt). Alternativ macht ihr es so wie ich und verwendet das Gehäuse weiter. Feilt oder „dremelt“ eine Aussparung in die obere Abdeckung. Ich habe das, wie oben abgebildet, an den rot umrandeten Stellen gemacht. Als Zugentlastung habe ich die Kabel an der unteren Abdeckung mit etwas Sekundenkleber befestigt.
Option 1: ohne Transistor
Schaltung
Verbindet das (bei mir blaue) GND Kabel mit GND des Arduino. Das andere (violette) Kabel kommt an einen I/O Pin. Dann braucht ihr noch ein Ereignis, das den Auslöser aktivieren soll. Ich habe einen Taster gewählt, was an sich natürlich denkbar sinnlos ist. Ihr könnt euch ja was Schickes ausdenken. Wie wäre es mit einem Bewegungs-, Abstands-, Vibrations- oder Gestensensor?
Sketch
Ihr steuert den Auslöser, indem ihr den I/O Pin, an dem das violette Kabel hängt, von kurz vom INPUT Modus in den OUTPUT Modus bringt und wieder zurück. Im INPUT Modus ist der Pull-down Widerstand des I/O Pins aktiv. Im OUTPUT Modus ist der I/O Pin offen und der Strom kann ungehindert einfließen. Damit habt ihr den Tasterdruck simuliert.
const int tasterPin=7; const int shutterPin=8; void setup() { pinMode(tasterPin, INPUT); pinMode(shutterPin, INPUT); digitalWrite(tasterPin,LOW); digitalWrite(shutterPin,LOW); } void loop() { if(digitalRead(tasterPin)){ pinMode(shutterPin, OUTPUT); delay(20); pinMode(shutterPin, INPUT); } }
Wie lang das delay sein muss, solltet ihr mal testen. Ich habe da nicht lange herumprobiert. Der Auslöser löst aus, wenn der Taster des Auslösers losgelassen wird. Wenn ihr das delay also zu lang macht, wird das Foto entsprechend spät geschossen. Oder ihr löst ggf. ein Serienbild aus.
Nachteil dieser Methode: Wenn ihr den Arduino vom Strom trennt, dann ist das so, als ob der Fernauslöser permanent gedrückt ist. Ihr müsst den Fernauslöser also vorher ausschalten.
Option 2: mit Transistor
Bei dieser Version verbindet ihr die ausgeführten Drähte mit dem Emitter beziehungsweise dem Kollektor eines NPN Transistors, z.B. einem BC547. Dann könnt ihr den Fernauslöser mit einem HIGH Signal am Basispin des Transistors schalten. Dabei ist wichtig, dass ihr richtig herum verdrahtet und für eine gemeinsame Masse sorgt.
Zur Anschauung kommt auch hier wieder der Taster als Ereignisgeber zum Einsatz. Und so sieht der Sketch dazu aus:
const int tasterPin=8; const int shutterPin=12; void setup() { pinMode(tasterPin, INPUT); pinMode(shutterPin, OUTPUT); } void loop() { if(digitalRead(tasterPin)){ digitalWrite(shutterPin, HIGH); delay(10); digitalWrite(shutterPin, LOW); } }
Probleme im Langzeitbetrieb und ihre Lösung
Problem 1: Das Display schaltet sich aus und die Kamera App stoppt
Die Kamera des Smartphones geht irgendwann von alleine aus und das Display wird dunkel. Das ist normalerweise ja auch sinnvoll. Leider funktioniert der Fernauslöser aber nur mit aktivierter Kamera. Für eine Langzeitanwendung ist das schlecht.
Mit der App Tasker könnt ihr die Kamera und das Display angeschaltet lassen. Diese App kostet 3,59 €, aber ich finde sie ziemlich genial und verwende sie auch für viele andere Zwecke. Im nächsten Beitrag werde ich auch wieder auf Tasker zurückkommen.
Die Kurzanleitung lautet: Erstellt einen neuen Task, der einfach nur die Kamera alle 30 Sekunden einschaltet. Abhängig von euren Einstellungen im Smartphone könnt ihr das noch verlängern. Rechts seht ihr einen Screenshot. Im Anhang erkläre ich im Detail, wie ihr diesen Task erstellt.
Der Akkuverbrauch ist bei permanent angeschaltetem Display natürlich immens. Für Anwendungen, die mehrere Stunden dauern, muss das Smartphone ans Ladegerät.
Problem 2: die Bluetooth-Verbindung wird unterbrochen
Nach einigen Minuten wird die Bluetooth-Verbindung unterbrochen. Ihr könnt das in den Bluetooth Einstellungen im Smartphone verfolgen. Ich vermute, dass der Fernauslöser „schlafen geht“. Wenn ihr den Fernauslöser aber einmal drückt bzw. über den Arduino auslöst, wird die Verbindung wieder aufgebaut. Das dauert ein paar Sekunden. Wenn ihr dann ein weiteres Mal drückt, wird wie gewohnt ein Foto ausgelöst.
Der nächste Sketch (Transistorvariante) löst alle 15 Minuten ein Foto aus. Ihr könnt das Prinzip auf die Variante ohne Transistor übertragen.
const int shutterPin=12; unsigned long startingTime = 0; void setup() { pinMode(shutterPin, OUTPUT); triggerShutter(); startingTime = millis(); } void loop() { if((millis() - startingTime) > 900000){ triggerShutter(); delay(5000); triggerShutter(); startingTime = millis(); } else{ delay(1000); } } void triggerShutter(){ digitalWrite(shutterPin, HIGH); delay(20); digitalWrite(shutterPin, LOW); }
Durch das delay(5000);
ist die ganze Sache leider träge. Eine Kamerafalle zu bauen ist deshalb auch nur eingeschränkt möglich.
Option 3: Sensor mit Digitalausgang
Ihr könnt den Transistor auch direkt mit einem Sensor schalten, sofern dieser einen Digitalausgang hat. Als Beispiel nehme ich hier den Bewegungssensor HC-SR501.
Der Nachteil ist allerdings, dass der Auslöser erst mit der fallenden Flanke des HC-SR501 Signals auslöst, d.h. im günstigsten Fall circa 2 Sekunden nach Bewegungsdetektion. Abhilfe kommt aber bald!
Wenn ihr einen Sensor mit LOW-aktivem Signal habt, könnt ihr das Signal ganz einfach mit einem weiteren Transistor invertieren.
Option 3A: das Sensorsignal verkürzen
Wie lässt sich ein Signal verkürzen? Die Antwort lautet: mit einem Hochpass (CR-Glied, RC-Glied, Differenzierglied). Das besteht im Prinzip nur aus einem Kondensator und einem Widerstand. Eine Eingangsspannung UE lädt den Kondensator. Der Strom fließt nur, bis der Kondensator geladen ist. Am Ausgang gibt es entsprechend einen kurzen Spannungspeak UA.
Die Breite des Signals am Ausgang hängt von der Größe des Kondensators und des Widerstandes ab. Mit 10 µF und 100 kOhm wurde das Signal auf Sekundenbruchteile verkürzt. Das Smartphone reagiert jetzt sehr schnell auf die detektierte Bewegung.
Bleibt der Nachteil, dass auch hier nach einigen Minuten die Bluetooth-Verbindung unterbrochen wird. Um Fotos zu schießen, muss also mindestens zweimal ausgelöst werden. Mit einem NE555 könnte man da sicherlich eine Lösung basteln, die ein Doppelsignal liefert. Aber das würde hier doch zu weit führen.
Anhang: den „Kamera-immer-an-Task“ erstellen
Zum Schluss noch eine Schritt-für-Schritt Anleitung, wie ihr den „Kamera-immer-an-Task“ mit der App Tasker erstellt. Ein Task ist im Grunde nur eine Abfolge von Anweisungen, die innerhalb der Tasker Umgebung ausgeführt werden. Im Prinzip wie eine Batch Datei.
Danksagung
Die Grundlage des Beitragsbildes habe ich Pete Linforth auf Pixabay zu verdanken.
Hallo,
sehr informativer Beitrag, vielen Dank dafür!
Ich brauchte für einen DIY 3D Scanner einen Fotoauslöser fürs Smartphone, der sich automatisch betreiben lässt. Bin dabei aber einen völlig anderen Weg gegangen:
Ich nutze nicht Bluetooth sondern ein 4-poliges Klinkenkabel für die Kopfhörerbuchse. Der Arduino muss dann zum Auslösen ein 220 Ohm Signal zwischen GND und Aux-Signal des Klinkenanschlusses schalten, das selbe Prinzip wie bei Selfie-Sticks.
Ein bisschen analoger aber funktioniert auch Super, vorausgesetzt, das Klinkenkabel stört nicht.
Viele Grüße, Johannes
Coole Lösung! Vielen Dank!
Interessant, dieses Arduino-Projekt. Aber geht das nicht auch etwas direkter? E gibt jede Menge Bluetoth-Interfaces für Arduino. Da muß nur der Arduino den Steuercode zum Triggern des Smartphone generieren..
Wenn es so einfach geht, wie du schreibst, dann mach es so! Ich bin nicht firm genug in der Programmierung von BLE, um das zu realisieren.
Ja, das habe ich jetzt beim lesen auch so empfunden. Ein Thema, das schier , zu mindest für Laien wie mich sehr komplex ist. Ich werde mir dann wohl besser einen fertigen Selbstauslöser für mein Smartphone zu legen.
Liebe Grüße
Steve