DIY Nikon DSLR IR Remote with MSP430

Three years back in time, I bought Nikon D3000 DSLR. I started shooting, but the moment I needed remote, came one day (more over night), during on night photography session. I checked all local suppliers, but the prices were high. I ordered one from China. The problem with orders from China is that they take time. I started waiting and one day I made my IR remote, using the MSP430.

This is a youtube video showing the remote in action:

It doesn’t use the Launchpad hardware, I use it only for programming the MSP430G2231. This is the schematic of the remote:

Nikon Remote Schematic

This is a photo of the prototype

Nikon Remote

One tip use good quality buttons, I had to debug this low cost button for more than 1/2 hour. The battery I used is 3V, not 4.5 V, like in the schematic. You can remove the RESET button, I placed it for other purposes.

Now the code:

//; 2000 us 	ON
//; 27830 us 	OFF
//; 390 us 	ON
//; 1580 us	OFF
//; 410 us	ON
//; 3580 us 	OFF
//; 400 us 	ON
//; repeat after 63200 us (OFF)

#include 

void main(void)
{
	WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
	BCSCTL1 = CALBC1_1MHZ; // Set range
	DCOCTL = CALDCO_1MHZ;
	P1DIR = 0x41; // P1.0 and P1.6 output (red and green LEDs)
	_delay_cycles(100000);
		P1OUT = 0x41;
	_delay_cycles(2000);
	P1OUT = 0x00;
	_delay_cycles(27830);
	P1OUT = 0x41;
	_delay_cycles(390);
	P1OUT = 0x00;
	_delay_cycles(1580);
	P1OUT = 0x41;
	_delay_cycles(410);
	P1OUT = 0x00;
	_delay_cycles(3580);
	P1OUT = 0x41;
	_delay_cycles(400);
	P1OUT = 0x00;

	_delay_cycles(63000);
		P1OUT = 0x41;
	_delay_cycles(2000);
	P1OUT = 0x00;
	_delay_cycles(27830);
	P1OUT = 0x41;
	_delay_cycles(390);
	P1OUT = 0x00;
	_delay_cycles(1580);
	P1OUT = 0x41;
	_delay_cycles(410);
	P1OUT = 0x00;
	_delay_cycles(3580);
	P1OUT = 0x41;
	_delay_cycles(400);
	P1OUT = 0x00;

	_delay_cycles(3000000);
	for (;;)
	{
	P1OUT = 0x41; // P1.6 on (red LED)
	_delay_cycles(1000000);
	P1OUT = 0x00;
	_delay_cycles(1000000);
	}
}

Happy shooting!

Leave a Reply

Your email address will not be published. Required fields are marked *

*