This is an IR remote control for Nikon cameras. It is compatible with the Nikon ML-L3 remote control. Supported cameras include: D40, D40X, D50, D60, D70, D70s, D80, Coolpix 8400 8800. This design is based on an idea from http://www.bigmike.it/ircontrol/.
The circuit is extremely simple: an ATtiny13V, button, transistor, resistor, IR diode and 3V battery. You could even omit the transistor and resistor, and connect the IR diode directly to the ATtiny13V, but that will limit the LED current and therefor the range.
I chose to power the circuit permanently, and connect the button to an input, instead of controlling the power with the button. This ensures that the IR sequence is always completely sent, even when you release the button too early, and that contact bounce may be filtered. The standby power consumption is so low, about the same as the self-discharge rate of the lithium battery, that this does not really affect the battery life.
The internal oscillator of the ATtiny13V is used as a clock source, which seems to be sufficiently accurate. To get optimal results, you may want to calibrate the internal oscillator. See main.c for details.
I used an old dispenser for coffee sweeteners as a housing for the circuit. The button is pressed when you squeeze the side of the dispenser. Click on a picture for a larger view:
The software is relatively straightforward. On power-up, the device is initialized, and the program waits until the button is released. To save power, the device is put to sleep with the internal pull-up resistor disabled for most of the time. The pull-up is enabled and the input is checked only every 32 msec.
When the button is released, the program waits for a button press, while filtering contact bounce. When the button is pressed, the IR sequence is sent. Finally, the watchdog timer is used to force a reset, restarting the whole procedure.
This software is licensed under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the license, or (at your option) any later version.