Fernauslöser für das Smartphone

Ü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

Handelsüblicher Fernauslöser

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

Geöffneter Fernauslöser mit Kabeln am großen Taster

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.

Geöffneter Fernauslöser mit Kabeln am kleinen Taster
Geöffneter Fernauslöser mit Kabeln am kleinen Taster
Fernauslöser  Kabelausführung durch das Gehäuse
Kabelausführung durch das Gehäuse

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?

Nutzung "gehackter" Fernauslöser (Variante ohne Transistor)
Nutzung des „gehackten“ Fernauslösers (Variante ohne Transistor)

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.

Nutzung gehackter Fernauslöser (Variante mit Transistor)
Nutzung des gehackten Fernauslösers (Variante mit Transistor)

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

Tasker Screenshot

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

Direkter Fernauslöser Betrieb mit HC-SR501 ohne Arduino
Direkter Betrieb mit HC-SR501 ohne Arduino

Wenn ihr einen Sensor mit LOW-aktivem Signal habt, könnt ihr das Signal ganz einfach mit einem weiteren Transistor invertieren.

Signalinvertierung
Signalinvertierung

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.

Ein Hochpass (CR-Glied, Differenzierglied)
Ein Hochpass (CR-Glied, Differenzierglied)

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.

Bewegungsmelder-Fernauslöser-Schaltung mit Hochpass
Bewegungsmelder-Fernauslöser-Schaltung mit Hochpass

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.

One thought on “Fernauslöser für das Smartphone

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

Schreibe einen Kommentar

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