The whole family is together for lunch after a long time apart. A perfect time for a group polaroid to make the moment eternal. Who will sacrifice their spot in the picture and take the photo?
Well, the solution from Polaroid was to use the remote shutter cable. Basically just a long cable with a button on one end which serves as a shutter. The other end just plugs in the camera itself.
Sure, it looks cool, but I find it not too practical. You have to carry the cable around with you, which is annoying since you probably won’t use it every day. The cable is usually so short you are barely in the picture. And it is cumbersome enough to set up the camera to a spot where it can stand on its own, let alone worry about the cable knocking down the camera of its spot and if you will be in the range of the camera to use it.
Why not a wireless trigger?
Using a 41-year-old camera does not mean I am not allowed to use the convenience of wireless technology. A wireless trigger would be convenient because it fixes most of the problems I had with the cable shutter. Yea, you still have to carry around a receiver, but a small box attached to a camera is much more convenient than a huge cable.
How would it work?
If you check the side of your SX-70 camera, right next to the shutter button, you will see two small holes. Those holes are used for attaching the camera cable shutter. Its inner workings are pretty simple. You just need to close the circuit between the two pins and the camera will trigger the picture taking procedure. You can try it yourself by inserting the paperclip ends to each of the holes (make sure you have an empty cartridge inside so you don’t waste a shot).
The only thing I need to do is to close that circuit remotely. Simple, right?
I was thinking of using some kind of Arduino based board with an RF remote. My search attempts to find something like that that worked out of the box were futile, and I was too lazy to make that happen myself. However, in the process, I found that the Wemos D1 WiFi enabled board costs under 7 US dollars.
Perfect! That means I can use any WiFi enabled device to serve as the remote. One less thing to carry in my bag.
Now I need to find a way to control the shutter with the Wemos D1. Arduino boards allow you to use their GPIO pins to send electrical signals to other electric components. You just write some logic that when triggered makes the pin output 3.7V. This signal can then be used to make our SX-70 dance.
Now, all we have to do is to find a way to close the circuit between two pins. We need a switch that can be controlled via an electrical signal. That means we basically have a choice between a transistor and a relay. Since transistors actually require some knowledge and effort to be used, I opted for a lazy person solution – the relay. Relays are electromechanical components which usually just use a small electromagnet to open/close the circuit. You give it some juice, and send 0V to the control pin if you want the switch open (no electricity running trough), and 3.7V (in my case, other relays have different triggering voltages) to make the switch closed (electricity free to run trough). Being the terribly efficient (read: lazy) individual, I just bought the premade relay shield for the Wemos D1 chip which frees me of doing any calculations. The whole thing is fairly tiny which is exactly what I wanted to achieve in the first place. Best of all, I didn’t even have to produce much effort.
Now we have figured everything out hardware-wise. The board now has a way to make the camera shutter triggered. Now I just need to find a way to make the board trigger the shutter with some kind of a remote.
The Software
Wemos D1 is an Arduino compatible board which means that I can use their Arduino programming and flashing environment to build up my controlling software.
When building the controlling interface, the only thing I had in mind as a big NO-NO was having to use a proprietary app just to click the shutter button on my camera. It would be terribly inconvenient to have to first download the app, pair the device and the phone and only then being able to take the picture. If I had to waste 20 mins to set up the trigger just to take a single picture I would just say “Fuck it!”. That slow process would defeat the purpose of a portable camera.
But, I had an idea. Have you ever been to a cafe or an airport and when you joined their Wi-Fi network it first opened that portal that asks you to either just accept Terms and Conditions or maybe even like their FB page to use it? That is called a “captive portal” and on most phones, it shows up right when you join the Wi-Fi network.
Well, that is perfect. The UI for this should be pretty simple anyway, I just want to show a huge red button which triggers the shutter when pressed. And if I use the captive portal, I just connect to the Wi-Fi network the camera will publish and press the button on the page that shows up to trigger the shutter. This should take less time than I take to focus the camera. Perfect!
When I press the button I will just activate the D4 GPIO pin on the Wemos which controls the relay to close the circuit which will trigger the picture taking procedure. After a second, I deactivate the pin so my shutter wouldn’t accidentally have a burst mode implemented.
This is the code I use to make the aforementioned happen:
#include <ESP8266WiFi.h>
#include "./DNSServer.h" // Patched lib
#include <ESP8266WebServer.h>
const byte DNS_PORT = 53; // Capture DNS requests on port 53
IPAddress apIP(10, 10, 10, 1); // Private network for server
DNSServer dnsServer; // Create the DNS object
ESP8266WebServer webServer(80); // HTTP server
String responseHTML = "<!DOCTYPE html><html><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"></head><body style=\"background-color: #ecf0f1;margin: 0;\"><a href=\"/shoot\" style=\"background-color: #e74c3c; width: 90vw; height: 90vw; border-radius: 50%; margin: 20vh auto; display:block; \"></a></body></html>";
void setup() {
pinMode(4, OUTPUT);
pinMode(BUILTIN_LED, OUTPUT);
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
WiFi.softAP("SX-70 Shutter", "smile-shoot");
// if DNSServer is started with "*" for domain name, it will reply with
// provided IP to all DNS request
dnsServer.start(DNS_PORT, "*", apIP);
// replay to all requests with same HTML
webServer.on("/shoot", []() {
webServer.send(200, "text/html", responseHTML);
digitalWrite(BUILTIN_LED, HIGH);
digitalWrite(4, HIGH);
delay(1000);
digitalWrite(BUILTIN_LED, LOW);
digitalWrite(4, LOW);
});
webServer.onNotFound([]() {
webServer.send(200, "text/html", responseHTML);
});
webServer.begin();
}
void loop() {
dnsServer.processNextRequest();
webServer.handleClient();
}
The full source with the needed libs available here: SX-70-Remote-Shutter
The Result (proof of concept)
All I have to do is connect to the Wi-Fi network published by Wemos and press the button. I also password protected the Wi-Fi hotspot to keep my precious $2 shots protected from random people connecting to open Wi-Fi hotspots and pressing red buttons out of curiosity.
Enough talking dude, show us how the thing works!
Are you gonna carry all this shit on your table with you to take photos?
Nah, this was just an update on the proof of concept. I am still waiting on some components to arrive so I can package this in a convenient package. I am also in the process of designing the case I will 3D print which will house all the components you see laid down on the table.
Cool stuff, how can I build my own?
This post should give you enough info to build something like this from scratch if you have some coding and electrical engineering knowledge.
Get started then and let me know if you do anything different! (especially if you decide using transistors instead of relays to make this much smaller format)