A small shutter controller for Canon EOS Cameras
To make the experience fit your profile, pick a username and tell us what interests you.
We found and based on your interests.
Congratulations on the purc.. err construction of the SHTTTRRR, the first intervalometer with no vowels in its name. It's use is simple, with single button interface.
Usage
1- Place camera on tripod or loosely piled rocks.
2- Connect camera to SHTTTRRR with cable (not provided)
3- Place on-off switch to the on position.
4- Power camera on.
5- Press momentary switch to signal start of interval
6- Wait for as long as you want
7- Press momentary switch again to signal the end of the interval
8- Let it work. LED will flash after each take.
Maintenance
Keep away from rain.
Clean with a not too damp cloth.
Limitations
No femptosecond mode.
Use of patience to set interval.
Warranty
No warranty is hereby granted. User is encouraged to modify product as it suites.
Keep our planet clean. Do not buy, build!
It was the time to test with the camera. I connected the camera to the SHTTTRRR, programmed it and waited.... and the LED flashed but the camera didn't shot. I tried to make adjusts to the code, but the camera continued in silence. Time to look to the board. I noticed that the camera stayed with the screen dark, like it was taking a photo. This made me think if the transistor was well wired. I checked and all was OK. Then I thought, that maybe I had an undefined state on the transistor pin. To debug I soldered a 1K resistor between the base of the transistor and the ground. Back to test and.... still nothing. I desoldered it, and whit the help of a multimeter measured the voltage on the output pin of the MC to to transistor, and I read a value between 0 and 120 mV. This made me suspect of the resistor between the transistor and the MC. I removed it and... presto! It works.
This is the video with the demo:
As stated before, i didn't want to use long delays to separate between photos. What I wanted was for the MC to wake up, check if it timed out and if so take a pic. To do so I altered the ISR code relative to the watchdog timer, to this:
ISR(WDT_vect) { seconds++; if (state==RUN) { timeout--; if(timeout==0) { shoot(); variable_blink(50,10,1); timeout=duration; } } }
I also made some changes to the ISR function with the Interrupt vector to this:
ISR(PCINT0_vect) { unset_interrupt();// halts interrups to avoid interference _delay_ms(250); //helps to debouce switch(state) { case START_P: start_second = get_seconds(); // gets initial second blink(1); state=STOP_P; break; case STOP_P: stop_second = get_seconds();// gets final second duration = stop_second - start_second;// calculates duration in seconds stored_duration = duration; // stores the base duration timeout=duration; blink(1); state=RUN; break; default: break; } set_interrupt();
With these changes and using the led to debug everything looked OK. But as we all will see it was still too soon to celebrate...
As a first approach i wanted to find out how to count the time between two button presses. Based on this project I would use a one second watchdog timer in interrupt mode to increment a counter:
ISR(WDT_vect) { seconds++; }
Instead of the buttons being pooled, I also implemented a hardware pin interrupt. When the interrupt occours, the ISR function is called with the PCINT0 vector, as this:
ISR(PCINT0_vect) { unset_interrupt(); switch(button_press) { case START_P: start_second = get_seconds(); blink(3); break; case STOP_P: stop_second = get_seconds(); blink(2); break; default: break; } button_press++; duration = stop_second - start_second; if(button_press>=3){ for (i=0; i <duration; i++) { blink(1); } button_press = START_P; } set_interrupt(); }The unset_interrupt() function stops the hardware interrupt, eliminating interference, and after running the code, we use set_interrupt() to re-enable the hardware interrupt.
The function get_second() gets the current second, using atomic operation, from the seconds variable.
int get_seconds() { int current_second; ATOMIC_BLOCK(ATOMIC_FORCEON){ current_second = seconds; } return current_second; }
The next step I want to take is to eliminate the _delay_ms() functions of my code, do a little clean up and advance with the shutter part.
I love photography! In particular I love the way photography enables one to play with time, space and light. One of the things I love in photography is time lapse photo. I have a capable reflex machine (Canon 1000D) but it lacks time lapse capability. Fortunately it has an external trigger port (1,6 mm stereo jack also called LANC) for use with an electric shutter trigger. This port is very simple, as you can see the pinout here. I macgyvered a simple shutter with an Arduino Mega. a resistor and a transistor. You can see that early attempt here.
Obviously this was overkill. What I needed was a small box with a simple control for variable shutter times.
And so SHTTTRRR as an idea was born.
Create an account to leave a comment. Already have an account? Log In.
Nice hack though. Just what belongs here on Hackaday. A KISS solution to a problem.
Does Canon have a new camera line or is EON a typo for EOS?
Just a typo, thanks for the correction. But if canon ever launches a EON line I hereby reclaim this trademark.
Become a member to follow this project and never miss any updates
Hi and well done !
It does the job and that's the best kind of project. You may be intersted in a very similar (not mine) and taken further project :
http://cms.diodenring.de/electronic/microcontroller/82-intervalltimerv2