We used an Arduino UNO for this project with a DFRobot LCD Keypad shield on top. It has the advantage of 6 pre-installed and wired buttons, which are connected over several distinct resistors to an analog input pin of the arduino. A 3-wire-cable acts as interface to the camera (scavenged from an old cd-drive). One wire is GND, and the other two are autofocus and trigger. By connecting the GND line to one of the other wires the camera autofocuses or triggers.
What we want to do is wire GND(cam) to GND(arduino), and connect autofocus(cam) or trigger(cam) to pins that we simply have to set to low (pull them to common GND) to focus or trigger the camera.
We did not use the Arduino programming environment, but we used a “standard” lcd library (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung) and plain C-Code with avrdude for flashing. A mainloop listens to the buttons and lets you choose which program to use and set parameters to each program, and enters the subprograms on a button press.
We used a housing that had the right measurements for the arduino plus some extra room for sensors and a battery pack at Conrad. Then we put some matching screws in the housing to reach the buttons of the underlying LCD-board and made room for the LCD.
For the little extra-circuits for the sensors (amplifier for microfone and voltage divider for the light-sensitive diode) we used perfboard and cut it to match the housings width so they would fit nicely in the slots of the housing. Additionaly we put a switch between the battery pack and the arduino.
An intervallometer takes pics in specific timespans. You can control the timespan (in seconds) with the buttons.
The light sensitive diode measures the strength of the light reaching the diode. This way one can trigger a shot when the lightlevel drops below a threshold. To avoid false triggers we measure the light intensity at the time of choosing the program and use this value as reference. The sensors are connected to the adc input pins which converts voltage levels to digital values that can be used by the program.
It is possible to measure sounds with an electret-microphone. Here, too, we use the value at the time of the program-start as reference, so you can trigger at places with higher ambient noise, too, you just have to be louder On the right you can see the schematic we used to amplify the signal from the microphone. It may not be the best circuit or have good noise characteristics, but it only needs one transistor and some resistors. and it works!