• Simple user manual

    Glitchmaker01/15/2015 at 20:58 0 comments

    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!

  • Something wrong...

    Glitchmaker01/13/2015 at 21:09 0 comments

    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:

  • Bumping my head until it works.

    Glitchmaker01/13/2015 at 20:50 0 comments

    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...

  • First code

    Glitchmaker01/11/2015 at 20:17 0 comments

    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.

  • The Idea

    Glitchmaker01/10/2015 at 21:07 0 comments

    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.