Introduction: Multi-Functional DSLR Remote Control

Many DSLR cameras can be controlled remotely using an IR transmitter.

Generally these are about the size of a keychain, cost between US$ 8 (for a cheap Chinese copy) to US$ 25 (original), and allow for a single button press that remotely activates the camera's shutter.

I wanted a lot more from my Nikon DSLR ML-L3 IR remote, so I decided to build a multi-functional IR remote control. These are the features I have developed :-

a) Intervalometer. To be able to automatically take multiple exposures with a predetermined time interval between each shot. For example, to capture a sequence of moonrise pictures, you might want to automatically take 20 shots with a gap of 5 minutes between each shot.

b) Light Detection. To be able to get those great shots of lightning arcing across the sky, it needs to be able to automatically trip the camera shutter whenever there is a burst of lightning. I would like to set a threshold level as well, this would allow me to decide the exact intensity of lightning that would be strong enough to activate the shutter.

c) Motion Sensing. Be able to function like a 'camera trap'. The remote would sit quietly in the jungle and trip the camera shutter if it sensed an animal walking past the camera.

d) Manual Control. Last of all, a manual mode. This would trip the camera shutter on the push of a button just like the commercially available remotes can do.

To save power, some cameras switch off automatically if their shutters have not been tripped for a certain period of time. My Nikon D40 shuts off after 15 minutes of no activity. To get around this, my remote control sends a pulse to trip the camera at least every 14 minutes (even if the criteria for sending a legitimate trigger pulse have not been met).

Step 1: Step 1 - How It Works

This multi-functional remote works by replicating the IR Command Pulse that Nikon DSLRs respond to. My post on how to replicate this signal can be found here. Once we have the signal, we can replicate it by programming a micro-controller to pulse an IR LED in exactly the same manner.

Other features are implemented by the following methods (See Breadboard/ PCB Picture):-

a) Mode Selection. The circuit uses a voltage divider with four "lower" arms (R3 to R6) each having a different resistance. By switching between each of these, and reading the output voltage (Arduino Analog Pin A3), the device switches between the four modes of operation.

a) Intervalometer. We use one potentiometer (R7) to set the interval between pulses and use a second potentiometer (R8) to decide how many pulses in total need to be transmitted.

b) Light Detection. One potentiometer (R7) is used to set a threshold level. If the intensity of light from a flash of lightning exceeds this threshold, a pulse is transmitted that activates the camera shutter release. Light intensity is measured (by Arduino Analog Pin A2) using a Light Dependent Resistor (R10) and a 4.7 K Ohm resistor (R9) that are positioned in the form of a voltage divider. The details on how this voltage divider works can be read here.

c) Motion Sensing. Motion sensing is achieved using a PIR (Passive Infra Red) sensor. These are inexpensive sensors that measure ambient heat levels and send out a HIGH signal on their output line if there is a variation in the ambient environmental temperature level. So when a animal (or any other warm body) walks past the camera trap, the PIR senses this movement and generates a HIGH on its output line. The micro-controller (Arduino Digital Pin D11) reads this HIGH signal and triggers a pulse. Power to the PIR is provided through Arduino Digital Pin D13.

d) Test Mode: The device can operate in "Test" or in "Pulse" regimes (Through switch connected to headers J25, J26, J27). While in "Test" regime, the micro-controller does not pulse the IR LED (that activates the camera) but instead it blinks a normal red LED. So by putting the remote to "Test" regime, you can make all the settings you need, and confirm by watching the red "Test" LED that the trigger will operate at the right moment. Now you can put the device back to "Pulse" regime and it will now send pulses through the IR LED that operates the camera.

e) Status LCD. As you adjust the settings on the various switches and potentiometers, an LCD display shows the following information...

a) Which mode is the device in - Intervalometer/ Light Detection/ Motion Detection/ Manual.

b) In Intervalometer Mode - (i) Delay between shots (ii) No of exposures

c) Light Detection Mode - (i) Threshold setting (ii) Current Light Reading

d) Passive Infra-Red Mode - The LCD shows an indication if any motion is detected by displaying "Motion DETECT!!"

Step 2: Components Needed


Arduino Pro Mini - one (I used a Pro Mini, but any Arduino compatible board will work fine with the necessary changes to the pin designated as the "RESET" pin. It needs to be an interrupt capable pin. No changes are needed if you use an Arduino UNO.


R2 to R6 - Mode selection voltage divider R9 - "Upper" arm of light detection voltage divider

R10 - LDR for "Lower" arm of light detection voltage divider

R15, R16, R 17 - "Test"/ "Transmit" regime selection voltage divider

R11 - pull down resistor for RESET button (This is not needed in this version)

R12 - pull down resistor for CONFIRM button

R13,R14 - Current limiting resistors in series with output LEDs.

See the notes on the PCB picture for the exact value of resistors needed.


R1 - LCD Brightness potentiometer 0 - 10K

R7 - Delay/ Threshold setting potentiometer 0 - 10K

R8 - Repetitions setting potentiometer 0 - 10K


Main Power supply DC 9V - on/off type switch

Mode selection switch - 4 position rotary selector switch

"Test/Pulse" Regime selection switch - 2 position selector switch

LCD backlight switch - push button

CONFIRM button switch - push button

Other Components

Passive Infra Red (PIR) Sensor - one

IR LED - one Red LED - one

16x02 backlit LCD display - one

Step 3: Assembly

Download the circuit diagram (ML_L3_Remote_With_PCB.pdf) and prepare the PCB, and solder all the components in place. If you don't know how to etch a PCB, there are plenty of instructables that will tell you how. Otherwise, you can read my method here.

You can also download the Fritzing sketches I used to make this circuit. I have uploaded two versions:-

(a) Breadboard.fzz (shows all the components on the breadboard)

(b) PCB.fzz (shows the final PCB that needs to be etched, but without any of the "external" components, just their header pins)

The PCB is etched only on one side. I have tried to minimise the number of jumper wires that are needed to make all the connections on the PCB and have used 1/2/3 pin female headers wherever a jumper wire needs to be soldered in place. You can see descriptions of the headers on the PCB picture I have uploaded. These are listed below...

J5, J6 - for four way rotary switch (mode selection)

J25,J26,J27 - for two way selection switch (regime selection)

J9,J10 - for RESET push button(not needed in this version)

J7,J8 - for CONFIRM push button

J32 - for PIR pins

J13, J24 - for Test LED pins

J14, J23 - for IR LED pins

J3 - for LCD backlight push button

J11 - for potentiometer 1

J31 - for potentiometer 2

J4, J22 - for LCD contrast potentiometer

J2, J21, J30 - for LCD connections

J15 - for Main DC 9V power switch

J16 - for battery terminals

J18 - for Arduino I/O pins

J17 - Arduino Pro Mini Interface to PC

J19 - Arduino output to LEDs

J 29 - Arduino out pin to RS pin on LCD

J 28 - RESET push button input to Arduino Interrupt pin D2 (not needed in this version)

Finally, the Arduino source code is also uploaded (Nikon_IR_Multi_Functional_Remote.ino).

Step 4: Boxing It Up

Once the circuit is ready and everything works correctly, you can use any sort of box to place the components. I used a plastic box with a hinged lid. It is a little big in size, but it holds all the components without too much strain on the wires.

Cut out holes into the which all the buttons, switches and LCD can fit. Secure everything in place.

The LDR is fixed on one side of the box. The other side of the box holds the PIR and the IR LED that sends the trasnmission (See images).

Step 5: Operation

1. Switch on the device

2. Select the mode of operation you desire. The LCD will show the mode of choice (Intervalometer/ Light Detection/ Motion Detection/ Manual) and the parameters for that mode......

a) In Intervalometer Mode - (i) Delay between shots (ii) No of exposures

b) In Light Detection Mode - (i) Threshold setting (ii) Current Light Reading

c) Passive Infra-Red Mode - The LCD shows an indication if any motion is detected by displaying "Motion DETECT!!"

3. Use the potentiometers R7 and R8 to change the settings if needed

4. Put the Regime selector switch to "TEST"

5. Press the START/Confirm button. If the TEST LED flashes are per your requirement, then you can flip the regime selector to "PULSE" position, switch off and turn on the device again, and then press START again to begin sending pulses the the camera.

In manual mode, each push of the START/Confirm button sends one pulse

6. To change the Mode at any time, rotate the Mode selection switch to the desired position. Turn the Remote off and on again to enter the new mode of operation.

See the embedded video for a demonstration.

Remote Control Contest

Participated in the
Remote Control Contest