"There are several kinds of love. One is a selfish, mean, grasping, egotistical thing which uses love for self-importance. This is the ugly and crippling kind. The other is an outpouring of everything good in you—of kindness and consideration and respect—not only the social respect of manners but the greater respect which is recognition of another person as unique and valuable. The first kind can make you sick and small and weak but the second can release in you strength, and courage and goodness and even wisdom you didn’t know you had." John Steinbeck is wise, and a good father.
Network connected thermal printer. Bookmarked for future reference.
"Encoder counts pulses from quadrature encoded signals, which are commonly available from rotary knobs, motor or shaft sensors and other position sensors." Ooh, new rotary encoder library. Will use that.
Deadly Serious Games: fictional games and what they tell us | Hide&Seek – Inventing new kinds of playLovely, laugh-out loud post from Holly on games in fiction. Lots of graphs, some of which are funny.
"rePatcher is an Arduino shield that allows you to “repatch” your Max/MSP or Pure Data patches with a 6 x 6 patchbay matrix. It also has 6 general purpose control knobs for modifying parameters in your patch. Since it does all of this over USB, it can be hacked to work with any other program that can accept a serial stream." Oh, very nice.
17 May 2011
So, here’s a thing I’m making.
My Nikon D90 can be triggered by the cheap ML-L3 IR remote. It costs about £15. You point it at the camera, push the button, and it takes a picture.
This remote works with everything from the D90 down (so, towards the D3100/D40 end of the line).
What these cameras don’t have built in, however, is an intervalometer: a timer that will make the camera take a picture every n seconds or minutes. (The D300 and up (and, I believe, the new D7000) have a built-in intervalometer.)
I thought it might be interesting to build one. The project had a few criteria:
- It couldn’t be hard-wired to a computer. It had to be a stand-alone, battery-powered device
- It had to have a half-decent way of controlling it; ideally, not just stabbing at buttons.
- I wanted it to have a 16×2 LCD screen, mainly because I wanted to both design for that constraint, and work out how to control said screen
- Ideally, it wouldn’t require taking apart an ML-L3 remote to build.
Here’s where we are:
End-to-end: it works. Note that I said “making” earlier, though: it’s still not finished, because it’s not packaged. And whilst packaging is difficult, I think that’s what’ll make it feel finished for me: a black box I can easily take into the field.
You turn it on, rotate an encoder to set a time, and click the encoder in to arm it. Hold the encoder to disarm. The time varies from 1 second to 15 minutes – after 90 seconds, it increases in minute chunks. (15 minutes is the maximum time the D90 will stay on before powering down).
Most people ask me why it says “SAFE” and “ARM”. Well, it sounds a bit threatening, but I genuinely believed that OFF and ON were inaccurate, in that the device is “on” if the screen’s on. So I was just referring to the state of the timer. And something that fitted into four characters would work well with the layout of the screen I’d chosen.
How it works
There’s very little componentry here, but each section of the Intervalometer was a neat little thing to learn on its own.
First, the IR trigger itself. Nikon’s IR remote is relatively simple: a button, some circuitry, and an IR LED. Pushing the button doesn’t just light up the IR LED; it fires a very short “coded” burst of light, so that the only thing it’ll trigger will be a Nikon camera.
Fortunately for our needs, there’s an Arduino library called NikonIRControl, which emulates that coded burst in software – so a single command will send the appropriate burst to a digital output pin. That’s our IR trigger sorted, and all we’ve had to buy is an IR led. Which feels better – and cheaper – than just soldering two wires to a Nikon remote.
The screen is a 16×2 LCD, with a serial “backpack” pre-attached. That means I can just send serial data to it over a single wire, which again, keeps the number of wires from the Arduino down. I’m using the NewSoftSerial library to talk to it, which makes life easy.
The main controller is a quadrature rotary encoder with a push-switch in it. The switch is easily read, like any momentary push-switch on an Arduino. The encoder is a little trickier, because it’s encoded. In the end, I read it off an interrupt, using code from this page – and then smoothed it out a bit by making it only read every other click.
Finally, there’s just the case of the timer. Timers are a bit more fiddly than I’d have liked. You can’t just use
delay, because that delays all code on the chip. I tried doing various things including counting milliseconds, but in the end, relied on the TimedAction library, which works well enough, and does a similar thing without my broken code.
Once each piece was in place and working, it was just a case of pulling it all together. The code – which is available on Github – is broken down into a series of files, pretty much one for each section of the project. I found this much easier to manage than the tyranny of One Big File.
For piecing the hardware together, I built a simple “shield” out of a piece of Veroboard. I got a lot of laughs when I said I was using veroboard, but it worked very well for me. With some headers soldered in, it was quite easy to line it up with the Arduino – making it easily changed, but also swappable. The usual electronics-debugging issues aside, this went fairly smoothly, and it only took a battery pack to give me a portable – if fragile – working intervalometer.
What’s next? Obviously, packaging it up – something sturdy and black, with an obvious power switch and that big knob. I was considering moving it to an Arduino Mini, for size reasons, but am not sure I can face more electronics debugging. Similarly, I’m not sure I’ll build a dedicated PCB or anything like that, yet.
But: if I can get this lot into a box, that’ll be good. Also: I should take some timelapses with it.
So whilst it’s not what I would call “finished”, it is an end-to-end demo – and that feels like good enough to share with the world.
(And, of course: if you’d like to use – or build on – my code, you’re more than welcome to.)
Matt Brown and Mark Slater, writing about music and things. Looks set to be like a cracking little blog.
Reviews of Phill Niblock's "Touch Three": drones created by stripping out attack/release/breath sounds from acoustic performers, and then gluing them together. What we're listening to right now, too. (It is better than that description makes it sound).
This is, in fact, the most successful rotary encoder code I've found to date.
Excellent summary of what happened on the Yaroze – and a quest to track down all the released Yaroze titles.
Jason Rohrer's recursive shooter, which I must pick up at some point.
Library to send appropriate pulses to an IR LED to trigger Nikon cameras
"TimedAction is a library for the Arduino. It is created to help hide the mechanics of how to implement Protothreading and general millis() timing. It is sutied for those actions that needs to happen approximately every x milliseconds." Aha.
"This library is a collection of routines for configuring the 16 bit hardware timer called Timer1 on the ATmega168/328." (Timers look hard).
"NewSoftSerial is the latest of three Arduino libraries providing “soft” serial port support. It’s the direct descendant of ladyada’s AFSoftSerial, which introduced interrupt-driven receives – a dramatic improvement over the polling required by the native SoftwareSerial."
Microcontrolled Lego printer, running off some kind of postscript driver, I guess. Properly awesome – and, of course, the most important thing is all the little chaps that keep it working.
Nikon IR intervalometer, hooked up to an Arduino, without even needing another remote. Definitely interested in building one of these.
'"We have a real culture of thrift," [Kotick] said. "The goal that I had in bringing a lot of the packaged goods folks into Activision about 10 years ago was to take all the fun out of making video games." And then, to ensure there was no confusion in his message, he added that he has tried to instill "skepticism, pessimism, and fear" of the economic downturn into the corporate culture at Activision. "We are very good at keeping people focused on the deep depression," he said.' Bobby Kotick. What a guy. What a CEO. What a leader.
"Designed by Oliver Rokison a teacher at St Paul's School. This project connects to the Tower Bridge twitter account and mimics the movements of the real tower bridge." Fun.
"Larva Labs proposes an intelligent home screen that creates a meaningful hierarchy out of a user’s information. Designed for an Android-based handset, our home screen is intended to appeal to Blackberry owners and people struggling with information overload." An interesting experiment; I like being able to vary the level of personalisation on the fly, but am not sure the screen is nearly dense enough for people with "information overload" – it only handles a couple of items in each category without drilling down. The Blackberry's appeal in part is due to its hyper-dense list of information.
"Fast-forward ten years, and I'm now using all those accessibility features on a daily basis. At some point during the dot-com bust it turned out that the written word was the payload, and regular people started using alternative (browsing) devices to access text from the web. Arguments about device-independent, semantic markup and graceful degradation suddenly have an additional halo of legitimacy because they affect everyone."
"LEDs pulse back and forth in the mantle to indicate roughly how many friends are on Xbox Live. It goes into red alert if anyone's playing Left 4 Dead." Nicely done; might poke something similar into life for myself, just for kicks.
Tim O'Reilly on what he learned from studying the classics at University. Simply because of competence at the languages, I know more of the Romans than the Greeks, but this is thoughtful stuff. I was often asked at school by peers why I'd study something of "no practical value"; O'Reilly has some smart answers.
"I think that there are really obvious reasons this isn't currently happening. Tech-oriented, web-trained, fast-paced, hard-nosed Silicon Valley culture is not really that similar to game developer culture. Outside of GDC Austin… I haven't seen a lot of opportunities for the two industries to mix. Most crucially, everybody's too damn busy trying to get their jobs done to really spend a lot of time or thought on the issue." That gap in culture is something that still fascinates me.