Fernauslöser für das Smartphone Teil 2

Über den Beitrag

Im letzten Beitrag hatte ich beschrieben, wie ihr einen Fernauslöser (Remote Shutter) für das Smartphone „hackt“, um ihn mit einem Microcontroller bzw. einem Arduino steuern zu können. Den gekauften Fernauslöser mit Bluetooth-Modulen zu simulieren war, wie ich beschrieben habe, aber nicht so ohne weiteres möglich.

In diesem Beitrag möchte ich nun zeigen, wie ihr Bluetooth Module (HC-05 oder HC-06) trotzdem als Fernauslöser nutzen könnt. Dazu zeige ich zwei Wege auf, die beide über MIT App Inventor führen.

HC-05 und HC-06 BT Module für den Fernauslöser
HC-05 und HC-06 BT Module

App Inventor

Als Schnittstelle zwischen den Bluetooth (BT) Modulen und eurem Smartphone eignet sich die Entwicklungsplattform MIT App Inventor (im weiteren Verlauf nur „App Inventor“ genannt), die ich schon mal in meinem Beitrag Arduino mit dem Smartphone steuern vorgestellt habe.  Mit dieser Plattform lassen sich Android Smartphone Apps grafisch aus Blöcken erstellen. Vielleicht kennt ihr Scratch? App Inventor funktioniert ähnlich. Eine Einführung in App Inventor würde einen eigenen Beitrag füllen. Aus eigener Erfahrung kann ich sagen, dass man nach ein, zwei Nachmittagen die Grundlagen kann.

Ich kann hier also nur knapp umreißen wie es funktioniert. Bei Interesse kann ich auch mal eine detaillierte Einführung als separaten Beitrag bringen.

Aber keine Sorge. Ihr müsst nicht unbedingt lernen, mit App Inventor umzugehen, um die Beispiele in diesem Beitrag auszuprobieren. Ich stelle auch die fertigen Apps zur Verfügung. Ihr könnt sie dann nur nicht anpassen.

Und gleich wieder eine Einschränkung

Mittels App Inventor könnt ihr das Smartphone zwar dazu bringen, die Smartphone Kamera zu starten, ihr müsst den Auslöser aber noch betätigen. Das sind natürlich keine guten Nachrichten für den Bau eines Fernauslösers.

Ich habe zwei Möglichkeiten gefunden, das Problem zu lösen. Zum einen gibt es glücklicherweise schlaue Leute, die sogenannte Extensions für App Inventor schreiben. Mit der Camera Extension von Pura Vida Apps funktioniert der direkte Zugriff auf den Auslöser. Die Extension kostet 12 US$ (Softwareentwickler müssen auch von etwas leben!). Ihr könnt aber die App, die ich damit gebastelt habe, kostenlos herunterladen (mit freundlicher Genehmigung von Pura Vida Apps).

Der zweite Weg führt über die App Tasker. Damit lässt sich in 5 Minuten eine App herstellen, die einfach nur ein Foto auslöst. Und diese App wiederum kann durch eine mit App Inventor erstellte App (ohne eine Extension) aufgerufen werden. Tasker kostet 3,59 € (Stand November 2020) – aber hey, das ist gerade mal ein Bier in der Kneipe. Die mit App Inventor geschriebene App kann ich zur Verfügung stellen (apk-Datei), die mit Tasker erstellte App aus technischen Gründen jedoch nicht (fehlender apk-Datei Export). Aber zumindest müsst ihr euch nicht in App Inventor einarbeiten, wenn ihr das nicht wollt.

Fernauslöser mit Camera Extension

Bau der App mit App Inventor

Mit der Camera Extension wird eine Beispiel-App namens Camera mitgeliefert. Dieser App habe ich eine Bluetoothschnittstelle spendiert, um Fotos fernauslösen zu können. Das Ergebnis habe ich „camera_remote“ genannt. Die Blöcke der gesamten App kann ich nicht veröffentlichen, aber hier mein hinzugefügter Teil, der euch auch einen Eindruck vermittelt, wie App Inventor funktioniert.

In der "Designer" Ansicht bekommt die Fernauslöser App ihre Komponenten wie Buttons oder Textfelder
In der „Designer“ Ansicht bekommt die App ihre Komponenten wie Buttons oder Textfelder
In der "Blocks" Ansicht bekommen die Komponenten der Fernauslöser App ihre eigentliche Funktion
In der „Blocks“ Ansicht bekommen die Komponenten ihre eigentliche Funktion

Installation der fertigen App

Während der Entwicklung mit App Inventor könnt ihr eure App auf dem Smartphone testen. Am Ende liefert App Inventor eine „.apk“ Datei, mit der ihr die App fest, sprich unabhängig von der Entwicklungsumgebung, installieren könnt.

Ihr könnt die Installationsdatei „camera_remote.apk“ von hier auf euer Smartphone herunterladen. Die Installation sollte selbsttätig beginnen. Wahrscheinlich gibt es jedoch eine Beschwerde, dass die Datei nicht von Google Play stammt. Wenn ihr mir vertraut 😉 , dann installiert ihr sie trotzdem. Beim ersten Öffnen müsst ihr der App noch Berechtigungen erteilen. Dann gibt es wahrscheinlich noch eine Fehlermeldung – startet die App einfach neu und dann funktioniert sie dauerhaft.

Ich habe die App erfolgreich auf meinem Samsung Galaxy Note 8 und auf dem Huawei nova (CAN_L11) meiner Frau getestet. Dass sie überall funktioniert, kann ich natürlich nicht garantieren.

Der Fernauslöser auf der Arduinoseite

Auf der Arduinoseite (oder welches Board oder Microcontroller ihr auch immer bevorzugt) nehmt ihr ein HC-05 oder HC-06 BT-Modul und ladet zum Testen den SoftwareSerial Sketch aus den Beispielen hoch. Ich habe die BT-Module und wie ihr sie einrichtet detailliert hier beschrieben.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10,11);

void setup() {
  Serial.begin(9600);
  Serial.println("Los geht's");
  mySerial.begin(9600);
}

void loop() { // run over and over
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
}

Den SoftwareSerial Sketch müsst ihr eventuell noch hinsichtlich der Baudrate anpassen. Das hängt davon ab, welche BT-Module ihr verwendet und wie ihr sie eingerichtet habt.

Fernauslöser mit der Camera Extention – das Ergebnis

Camera_Remote App (Fernauslöser)

Wenn ihr das Bluetooth Modul eurer Wahl mit dem Smartphone gekoppelt habt, könnt ihr es über die Camera Remote App verbinden, indem ihr auf „Connect BT Module“ tippt und das Modul auswählt. Dann sollte dort „BT Module Connected“ stehen und die Farbe von Rot auf Grün wechseln.

Wenn ihr auf „Show settings“ geht, dann könnt ihr einige Einstellungen vornehmen. Mit „Take Picture“ nehmt ihr ein Probefoto auf, dass als „dummy.jpg“ in eurem „camera/DCIM“ Ordner gespeichert wird. Es erscheint verkleinert auf dem Display.

Und jetzt kommt der eigentliche Clou: gebt am Computer im seriellen Monitor einen Bildnamen ein und sendet ihn. Das Smartphone nimmt jetzt ein Bild auf und speichert es unter diesem Namen. Ihr findet es im DCIM Verzeichnis (aber nicht unbedingt in der Galerie).

Und dann könnt ihr spielen. Legt einfach irgendeine Bedingung fest, bei der ein Foto geschossen wird. Installiert z.B. einen Bewegungssensor am Arduino und nehmt ein Foto auf, wenn er eine Bewegung detektiert. Ihr müsst dazu lediglich mySerial.print("irgendein Name"); aufrufen.

Der folgende Sketch bewirkt, dass alle 15 Minuten ein Foto geschossen wird. Der Dateiname für das Foto ist einfach die Systemzeit in Sekunden, sprich millis()/1000.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10,11);
unsigned long startingTime = 0;

void setup() {
  mySerial.begin(9600),
  startingTime = millis();
}

void loop() { // run over and over
  unsigned long secs;
  if((millis() - startingTime) > 900000){
    secs = millis();
    secs /= 1000;
    mySerial.print(secs);
    startingTime = millis();
  }
  else{
    delay(1000);
  }
}

 

Das Display anlassen

Ein Problem gibt es noch, nämlich wenn das Smartphone längere Zeit ohne Interaktion fotobereit bleiben soll. Irgendwann wird der Bildschirm dunkel und etwas später funktioniert auch die App nicht mehr. Hier zwei Lösungen:

  • Aktiviert die Entwickleroptionen in den Einstellungen. Dazu sucht nach „Buildnummer“ in den Einstellungen und tippt siebenmal darauf. Danach geht ihr in die Entwicklereinstellungen und aktiviert dort „Aktiv lassen“. Nachteil ist, dass das ganze nur am Ladekabel funktioniert. 
  • Besorgt euch eine App, die den Bildschirm anlässt, z.B. Keep Screen On. Die App ist kostenlos.

Fernauslöser mit der Tasker App

Bau der Tasker App

Mit Tasker erstellt ihr zunächst eine App, die nichts anderes macht, als lediglich ein Foto aufzunehmen, wenn ihr sie startet. Sie ist also nur ein Hilfsmittel. Im Anhang findet ihr eine detaillierte Schritt-für-Schritt Anleitung für die Erstellung der Tasker App. Hier der Weg in groben Zügen:

  • Ihr erstellt mit Tasker zunächst einen neuen Task „Take_photo“.
  • Stellt dabei ein, wie das Foto geschossen werden soll, d.h. vordere oder hintere Kamera, welche Auflösung, mit Blitz / ohne Blitz, etc.
  • Der Dateiname für das Foto wird in der Tasker App vergeben. Er besteht bei mir aus „CR_“ (für Camera Remote) und der UNIX Zeit (das ist die Zeit seit dem 1.1.1970 in Sekunden). In Tasker ist die UNIX – Zeit als Variable „%TIMES“ zugänglich.
  • Wenn ihr wollt, könnt ihr dem Task und damit der App noch ein Icon spendieren.
  • Dann exportiert ihr den Task als App. Diese heißt dann wie der Task „Take_photo“.

Wenn ihr keine Lust habt, euch mit App Inventor zu beschäftigen und deshalb meine vorgefertigte, mit App Inventor erstellte apk-Datei (zu der wir gleich kommen) verwendet, müsst ihr beim Export der mit Tasker erstellten App exakt den vorgegebenen Namen für das Package verwenden („com.wolles.take_photo“). In der detaillierten Anleitung wird das klarer.

Bau der App mit App Inventor

Jetzt kommen wir zum Bau der Haupt-App, die „auf Zuruf“ per Bluetooth die Take_photo App aufruft. Ich habe sie – wenig kreativ – camera_remote_2 getauft. Die App ist vollständig auf meinem Mist gewachsen. Deshalb kann ich euch die „.aia“ Datei zum Download hier anbieten. Wählt diese Option, wenn ihr euch ein wenig mit App Inventor beschäftigen wollt, z.B. um die App anzupassen. Ihr könnt die „.aia“ Datei in App Inventor importieren und habt dann Zugriff auf die Designelemente und Blöcke.

Wenn ihr einfach nur das Ergebnis als installationsfertige „.apk“ Datei herunterladen wollt, dann könnt ihr das hier tun.

Die Erstellung der App im Detail zu erklären, würde den Rahmen sprengen. Hier aber zumindest ein Screenshot vom Designer- und Blocks-Bildschirm in App Inventor:

Designer Ansicht der camera_remote_2 (Fernauslöser) App
Designer Ansicht der camera_remote_2 App
Blocks Ansicht der camera_remote_2 (Fernauslöser) App
Blocks Ansicht der camera_remote_2 App

Ein entscheidender Unterschied zum ersten Weg über die Camera Extension ist, dass der Arduino keinen Dateinamen übergibt. Das übernimmt die Tasker App. Jede Übermittlung irgendeines Strings führt zum Auslösen des Fotos.

Der Fernauslöser auf der Arduinoseite

Auf der Arduinoseite müsst ihr wieder nur ein HC-05 oder HC-06 BT Modul anschließen und über SoftwareSerial ansprechen.

Der folgende Sketch löst alle 15 Minuten ein Foto aus.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10,11);
unsigned long startingTime = 0;

void setup() {
  mySerial.begin(9600),
  startingTime = millis();
}

void loop() { // run over and over
  if((millis() - startingTime) > 900000){
    mySerial.print("anything");
    startingTime = millis();
  }
  else{
    delay(1000);
  }
}

 

Fernauslöser mit Tasker – das Ergebnis

Ihr habt die Arduino Seite vorbereitet und auf dem Smartphone die Apps Take_photo und die camera_remote_2 installiert. Aktiviert Bluetooth im Smartphone, koppelt (paired) das BT-Modul und startet camera_remote_2. Tippt auf  „Connect BT module“ und wählt das BT Modul aus der Liste aus. Das sollte so aussehen:

Fernausöser App (camera_remote_2) vor dem Verbinden
Vor dem Verbinden
Fernausöser App (camera_remote_2) nach dem Verbinden
Erfolgreich verbunden

Nun könnt ihr vom Arduino aus Fotos fernauslösen. Die Fotos findet ihr in einem eigenen Ordner. Sie sollten aber auch in der Galerie angezeigt werden, wenn ihr an der entsprechenden Stelle bei der Erstellung der Tasker App einen Haken gesetzt habt (siehe Schritt-für-Schritt Anleitung).

Die mit camera_remote_2 gemachten Bilder
Die mit camera_remote_2 gemachten Bilder

Anhang – Detaillierte Anleitung für die Tasker App

Hier nun die detaillierte Anleitung zur Erstellung der Take_photo App. Tasker mag zu Beginn ein wenig gewöhnungsbedürftig sein, aber mit dieser Fotostrecke solltet ihr das innerhalb weniger Minuten hinbekommen.

Danksagung

Ich danke Pura Vida Apps für die Genehmigung, die auf der Camera Extension basierende apk Datei zugänglich machen zu können.

Schreibe einen Kommentar

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