Beim routinemäßigen Lesen von Foto-News und -Blogs aus aller Welt bin ich immer wieder auf selbst gebaute Foto-Automaten gestoßen und habe mir das als Projekt "für irgendwann" abgespeichert. Irgendwann sollte eigentlich 2012 sein, als ich nach Hamburg gezogen bin und eine Einweihungsfeier an stand. Leider hat das mit dem Zeitplan nicht ganz geklappt, das Projekt ist etwas in Vergessenheit geraten und lag somit eine Weile halbfertig im Keller. 2015 hat ein Kollege seinen Geburtstag in größerem Rahmen gefeiert und dabei eine Selfie-Knipse aufgestellt. Das Ergebnis war großartig und hat mich an die Photo Booth im Keller erinnert, die nun endlich fertiggestellt wurde.
Wie immer habe ich mir die für mich besten Ideen aus anderen Projekten, die ich in der Zwischenzeit im Netz gefunden hatte, zusammengesucht. Hierzu gehören:
- eingebaute DSLR
- LED-Beleuchtung oder Blitz
- Countdown-Timer
- WLAN zur Live-Anzeige der Bilder auf Bildschirmen oder Projektoren
- Web-Slideshow, damit nur ein Browser auf Client-Seite benötigt wird. Ken Burns Effekt FTW!
- schnelles Bauen von Themes für die Slideshow
- klassischer Look, der vom Geburtstag bis zur Hochzeit eingesetzt werden kann
- eingebaute Foto-Filter für verschiedene Anlässe
- Open Source Software als Grundlage
Herausgekommen ist die Photo Booth WiFi mit eingebautem Arduino zur Ansteuerung von Beleuchtung, Countdown und Kamera und zusätzlichem Raspberry Pi, auf dem die Filter angewendet werden und von dem die Slideshow abgerufen werden kann.
Hardware
Als Gehäuse dient eine selbst gebaute Holzkiste aus 10mm Sperrholz mit den Abmessungen 40cm x 60cm x 36cm mit einem Zwischenboden, in den ein 35mm Boxenflansch zur Stativbefestigung eingebaut ist. Außerdem sind hier Arduino, Raspberry Pi und die Steuerplatinen untergebracht. Alle Gehäuseteile sind verleimt, nur die Frontplatte ist zusätzlich verschraubt. Die Rückwand wird auf Stockschrauben gesteckt und mit vier Flügelmuttern befestigt. Das Gehäuse wurde von außen mit schwarzer Abtönfarbe lackiert.
Die Frontplatte enthält vier Ausschnitte (55mm) für die vier LED-Leuchten (12V, 4W), einen Ausschnitt (70mm) für das Objektiv der Kamera sowie Löcher für die Befestigung und Kabeldurchführung für die 7-Segment-Anzeige und das "Bedienfeld" mit dem Start-Knopf. Als "Rahmen" dient eine Zierleiste aus Holz, die mit goldener Farbe lackiert wurde. Innen an der Frontplatte sind Montage-Leisten für die LED-Beleuchtung befestigt.
Die Kamera-Befestigung ist zur Zeit noch provisorisch mit einem billigen, modifizierten Stativ realisiert. Das Stativ soll durch einen Manfrotto Magic Arm und eine Super Clamp ersetzt werden.
Design und Weathering
Der ganze Aufbau ist äußerlich im Stil einer alten Kamera gehalten und macht auf "vintage". Das Design der Frontplatte ist aus einer Mischung an fertigen und selbst erstellten Elementen entstanden. Großen Einfluss hatten diverse Photo Booth Projekte, die ich über die Jahre gesehen habe. Am Ende wurde das Design als Vektorgrafik in Inkscape erstellt, auf dickes Papier gedruckt und zurechtgeschnitten. Um den alten, vergilbten Eindruck zu erhalten, wurden die Ausdrucke über mehrere Stunden in Tee (Assam!) eingelegt und anschließend über mehrere Tage langsam getrocknet. Das gleiche Verfahren wurde für die beiden Aufstellschilder angewendet.
Elektronik
Die Elektronik der Photo Booth WiFi besteht hauptsächlich aus zwei Komponenten: einem Arduino zum Auslesen des Tasters und zur Ansteuerung der Beleuchtung, 7-Segment-Anzeige sowie Kamera und einem Raspberry Pi, auf dem die Bilder verarbeitet (skaliert und mit Filter-Effekt versehen) werden und von dem die Slideshow über ein eigenes WLAN abrufbar ist.
Kamera-Ansteuerung I: Zunächst war eine Ansteuerung der Kamera per USB-Anschluss mit gphoto2 vom Raspberry Pi geplant. Dies funktionierte grundsätzlich, allerdings unterstützt die eingesetzte Kamera, eine Canon EOS 1000D, die getrennte Ansteuerung der Fokus- und Auslöse-Funktion per Software nicht. Somit war es nicht möglich, die Kamera bei geringer Beleuchtung zu fokussieren, um anschließend bei einem kurzen Aufblitzen der LED-Leuchten das Bild aufzunehmen. Der gesamte Vorgang - Fokussieren, Bildaufnahme, Herunterladen der Bilder (--capture-image-and-download bei gphoto2) - dauert circa 6,9 Sekunden. Während dieser Zeit war nicht festzustellen, wie weit die Kamera war, so dass die Beleuchtung die ganze Zeit auf maximaler Helligkeit eingeschaltet sein musste. Dies ist für mich nicht akzeptabel gewesen, weil es für den Anwender wenig intuitiv ist (auf einer Party getestet). Eine andere Lösung wurde gefunden, in dem mehr Hardware verbaut wurde! (Anmerkung: neuere Canon Kameras unterstützen die getrennte Ansteuerung der Fokus-Funktion per gphoto2, somit kann die Erweiterung der Hardware ggf. entfallen.)
Kamera-Ansteuerung II: Über den Arduino werden Fokus- und Auslöser getrennt voneinander bedient. Dies geschieht über den normalem Fernbedienungs-Anschluss der Kamera mit 2,5mm Klinkenstecker. Zur (Kamera-) Sicherheit sind Arduino und Kamera über zwei Optokoppler (4N35) voneinander getrennt. Dies hat zum (ungeplanten) Vorteil geführt, dass schnellere Bildfolgen möglich sind, während der Raspberry Pi mit der Bildverarbeitung beschäftigt ist.
Die Ansteuerung der restlichen Komponenten ist im Grunde recht einfach: der Taster ist mit einem Pull-Up-Widerstand versehen und direkt mit dem Arduino verbunden. Die 12V LED-Lampen werden über ein Darlington-Array (ULN2003A) vom Arduino angesteuert. Die 7-Segment-Anzeige hat leider eine gemeinsame Kathode (daher wahrscheinlich der günstige Preis...), was eine Ansteuerung mit einem zunächst fälschlicherweise verbauten ULN2803A nicht möglich gemacht hat. Zum Glück war ein "pingleiches" UDN2981A griffbereit. Da alle Anschlüsse über Stiftleisten und Dupont-Stecker realisiert sind, war die neue Verschaltung ein Kinderspiel.
Alle Bauelemente sind auf einer Acryl-Platte montiert, die mit vier Schrauben im Gehäuse befestigt werden kann. Somit ist ein Schnellzugriff oder ein Austausch der Komponenten recht einfach. Die Kabel, die in den unteren Teil der Kiste führen (LED-Beleuchtung, 7-Segment-Anzeige, Taster), werden zur Ordnung durch Kabel-Gewebeschläuche geführt.
Programmierung
Ursprünglich war geplant, dass die Ansteuerung aller Komponenten durch den Raspberry Pi erfolgt. Da dieser während der Bildbearbeitung jedoch ziemlich ausgelastet ist (das Skalieren und das Anwenden eines Filters kann bis zu 20 Sekunden pro Bild dauern) und auch beim Abruf der Bilder durch die Clients im WLAN nicht besonders zügig reagiert und da zuletzt auch noch die Ansteuerung der EOS 1000D nicht wie geplant funktionierte, wurde die komplette Ansteuerung der Kamera und der Beleuchtung dem Arduino überlassen.
Der Programmablauf auf dem Arduino ist recht einfach: nach dem Betätigen des Tasters werden die vier LED-Leuchten auf geringer Leuchtstärke eingeschaltet (SoftPWM Library), die Fokus-Funktion der Kamera wird ausgelöst und der Countdown startet auf der 7-Segment-Anzeige. Nach 3 Sekunden erreicht der Countdown Null und die Leuchten werden für eine halbe Sekunde auf eine höhere Leuchtstärke geschaltet. Gleichzeitig wird der Auslöser der Kamera vom Arduino bedient. Danach werden alle Leuchten ausgeschaltet und der Arduino teilt über die serielle Schnittstelle dem Raspberry Pi mit, dass ein neues Foto auf der Kamera wartet.
Anmerkung zur Kameraeinstellung: Der Fokus ist auf AI Servo gestellt, so dass die Kamera auch bei Bewegungen neu fokussiert. Die Belichtungskorrektur wird auf -1 bis -1,5 Stops gestellt, um die helleren LEDs während der Aufnahme auszugleichen.
Auf dem Raspberry Pi kommt ein wilder Mix aus python-, bash- und php-Skripten zum Einsatz, um auf neue Bilder zu reagieren, die Bearbeitung anzustoßen und die bearbeiteten Bilder an alle Clients auszuliefern. Der Reihe nach: ein python-Skript kommuniziert mit dem Arduino und empfängt die Mitteilung über neue Bilder auf der Kamera. Mit gphoto2 werden die Bilder von der Kamera heruntergeladen und anschließend auf einem Speicherstick gespeichert (schnellere Entnahme, Trennung vom System). Ein php-Skript sorgt für den Abgleich der eingegangenen Bilder und der bereits verarbeiteten Bilder (skaliert, mit Effekt-Filter versehen) und bearbeitet alle neuen Bilder. Die eigentliche Bildbearbeitung erfolgt durch imagemagick (convert).
Der Raspberry Pi betreibt ein WLAN im Accesspoint-Modus (hostapd), so dass man WLAN-fähige Endgeräte mit der Photo Booth verbinden kann. Alle Anfragen des Browsers werden auf die Slideshow-Seite des Raspberrys weitergeleitet (dnsmasq + Apache Rewrite). Die Slideshow besteht hauptsächlich aus javascript zur Abfrage neuer Bilder und ein paar CSS3-Effekten für den typischen Ken-Burns-Effekt (Bewegung und leichter Zoom). Befinden sich neue Bilder auf dem Raspberry, werden diese als nächstes in der Slideshow eingereiht. Sind keine neuen Bilder vorhanden, werden die bisherigen Bilder in zufälliger Reihenfolge angezeigt. Das Design der Slideshow kann ebenfalls auf dem USB-Speicherstick hinterlegt werden, so dass es einfach angepasst und ausgetauscht werden kann.
Für maximale Kompatibilität besteht allerdings weiterhin die Möglichkeit, die einzelnen Funktionen des Arduinos über den USB-Anschluss anzusteuern. So könnte eine andere Kamera wie ursprünglich geplant über den Raspberry Pi angesteuert werden. Der Arduino dient dann nur zur Ansteuerung der LED-Beleuchtung und der 7-Segment-Anzeige sowie zum Auslesen des Tasters. Ebenso kann komplett auf den Raspberry Pi verzichtet werden, wenn es nicht gewünscht ist, dass die Bilder direkt als Slideshow angezeigt werden und stattdessen auf der Kamera verbleiben sollen.
TL;DR
Raspberry Pi + Arduino in einer Holzkiste zur Ansteuerung einer Kamera und LED-Beleuchtung. Inkl. WLAN und Anzeige der Bilder im Browser der Clients.
Links