Monday, January 20, 2014

Raspberry Pi is a sissy

Yesterday i was just done repairing my free fall experiment and moved the 3.5 inch TV screen to the inside. By that i learned that acrylic glas can melt by a jigsaw. So i took my Proxxon (aka dremel) and a KT70 xy-stage and found out a router can melt acrylic as well :-(. Solution was to take of 0.2 mm each cut that the acrylic can cool down after cutting. Sometime i will rebuilt this to a CNC-machine. This is how it looks:


I figured out another usecase for the Capische: Stop motion. Like in timelapse photography you can set up a predefined path the camera will work its way though but the cool thing is that you trigger the movement to the next frame and trigger the photo by hitting a defined key on the bluetooth keyboard.


Then i just wanted to test a new version of the slider-program when i fried my pi by just connecting the easydriver via a sub-d port you can see on the picture. Seems like the raspberry pi cannot handle voltage-peaks. Ends up with a raspberry that can be used as a heater. The only thing it does is that the CPU heats up. I now have 3 raspberries lying around here i cannot use. 2 of them are bricked and at one (Model A) the TV-Out doesnt work any more. So if you want a raspberry pi for deco-purposes, let me know. A new one is ordered and tomorrow i can test it.

Here is the script i wanted to test out (please excuse the bad python but i am just about to test if everything works). It is supposed to move make a panning move and a move on the slider in timelapse.

import RPi.GPIO as GPIO
import time
import ConfigParser

#get the electric configuration
config = ConfigParser.RawConfigParser()
config.read('/home/pi/capische.conf')
Electric={}
options=config.options('Electric')
for option in options:
  try:
    Electric[option]= config.getint('Electric',option)
  except:
    print "Error in configfile"
    quit()

moveaccel= config.getint('Dolly','moveaccel')
movesteps= config.getint('Dolly','movesteps')
movedecel= config.getint('Dolly','movedecel')

timetowait=config.getint('Camera','timetowait')
timetowaithdr=config.getint('Camera','timetowaithdr')

maxsteps=1000

#start by setting everything to 0

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
for i in Electric.values():
  GPIO.setup(i,GPIO.OUT)
  GPIO.output(i,False)

#Pano-Easydriver wake up
GPIO.output(Electric['movesleep'],True)
GPIO.output(Electric['pansleep'],True)
GPIO.output(Electric['trigger'],False)

#nach Rechts drehen
GPIO.output(Electric['pandir'],True)

#accelerate
for i in range (0,moveaccel,20):
   for j in range (i):
     GPIO.output(Electric['movestep'],True)
     time.sleep(0.001)
     GPIO.output(Electric['movestep'],False)
     time.sleep(0.001)
     if (j % 200 == 0):
       GPIO.output(Electric['panstep'],True)
       time.sleep(0.001)
       GPIO.output(Electric['panstep'],False)
       time.sleep(0.001)
   GPIO.output(Electric['trigger'],True)
   time.sleep(1)
   GPIO.output(Electric['trigger'],False)
   time.sleep(timetowait)

#konstant
for i in range (0,movesteps,595):
   for j in range(595):
     GPIO.output(Electric['movestep'],True)
     time.sleep(0.001)
     GPIO.output(Electric['movestep'],False)
     time.sleep(0.001)
   for k in range(3):
     GPIO.output(Electric['panstep'],True)
     time.sleep(0.001)
     GPIO.output(Electric['panstep'],False)
     time.sleep(0.001)

   GPIO.output(Electric['trigger'],True)
   time.sleep(1)
   GPIO.output(Electric['trigger'],False)
   time.sleep(timetowait)

#decelerate
for i in range (movedecel,0,-20):
   for j in range (i):
     GPIO.output(Electric['movestep'],True)
     time.sleep(0.001)
     GPIO.output(Electric['movestep'],False)
     time.sleep(0.001)
     if (j % 200 == 0):
       GPIO.output(Electric['panstep'],True)
       time.sleep(0.001)
       GPIO.output(Electric['panstep'],False)
       time.sleep(0.001)
   GPIO.output(Electric['trigger'],True)
   time.sleep(1)
   GPIO.output(Electric['trigger'],False)
   time.sleep(timetowait)

#send Dolly-Easydriver to sleep
GPIO.output(Electric['movesleep'],False)
#send Pano-Easydriver to sleep
GPIO.output(Electric['pansleep'],False)

The config-file looks like this:
[Electric]
pandir=4
panstep=3
pansleep=2
movestep=15
movesleep=18
movedir=14
tiltdir=27
tiltsleep=10
tiltstep=22
trigger=11

[Dolly]
moveaccel=500
movesteps=90000
movedecel=500

[Camera]
timetowait=20
timetowaithdr=12
pan.fullturn.steps=8000
tilt.fullup.steps=4000
#focal length of 28mm (equal)
pan.steps=900
tilt.steps=700
 
 
Raspberry Pi is a Trademark of Raspberry Pi Foundation

Monday, January 13, 2014

not quantity but ...

New Year, new post.

There are 2 reasons for this post:

1. i have made a timelapse again

2. i gave an interview to fotopodcast.de

But first things first: Yesterday (January 12th 2014) my wife called me that i should grab my camera and get out to take some photos because there was a beautiful fog in the river Neckar valley and our little town was above the fog. Unfortunately it took me to long to get home so the fog has risen and the visibility was very bad. So i went to another location that is higher and i positioned my Capische to make a panorama and a timelapse. The Panorama is nothing spectacular because i have forgotten to switch the resolution to 12 MPix and so i have made a panorama from many 1600x1200 pictures in HDR. Result was a crabby 9 MPix picture. As i was waiting for the Capische to finish its Timelapse i saw that the sundown was beautiful but not in that position i was standing right now. So i grabbed the 2 tripods i had with me (one for the Capische and one for a Rollei Bullet 3s HD for documenting) and went to the other spot. That spot was on a muddy hill and half way up i lost traction and my Capische hit the ground. That was the result:

The frontpanel broke off which was good because i the Monitor is fine that way. The whole thing still works and i just have to make a new frontpanel. What can we learn from that? Not quantity counts ( i had 5 cameras with me) but the preperation is essential. If i had stayed ther i would have been able to get a longer timelapse and my trousers would still be clean. Here is the Making of (with a timelapse of the wrong location)


and this is the timelapse:


O.K. and now for something completely different: end of December i gave an interview to Stefan Lietschke of fotopodcast.de. He got interrested in this blog (the German one) because i gave them a short feedback concerning flying cameras and gigapixel. The interview should be posted at the end of January. For all german speeking People: take a look at fotopodcast, they give good tips for hobbyists and pros alike. If you have any comments or questions about this blog feel free to contact me, i will answer all the questions if i can.

Thursday, November 7, 2013

56MPixel: Done - Next timelapse

This morning was again a really nice sunset. I had some issues with the fast moving clouds, but i managed to take a panorama consisting of 4 rows in 3 lines and each photo consisted of 3 bracketed photos with 3 Stops up and down. The HDRs took about 10 to 12 sec. each photo. On a DSLR that should be much faster.

I managed to set the camera to M-Mode and the focus to manual and told the CaPiSche to start the panorama. I ended up with this picture:


This pic has 8552x6672 pixel resolution and 16 bit colordepth. Not bad for a nearly broken Canon SX200. (I had a crash with the cam and my Quadrocopter. It did fall from around 3-4 meters to concrete. Now the SX200 has no lenshood  and i replaced it with some sugru).

The next thing will be timelapse. I already set up a python script to make a panning move in timelapse with ramping.

Saturday, October 26, 2013

First time in the field

and missed to set up the camera right.

Last Wednesday we had again a very nice sunset. The fog was hanging low in the valley of the Neckar and the Sun just began to rise when i set up my capische and started a Panorama.

The Panorama-Program was set up to capture around 180° horizontally and about 90° vertically. Problem was, that i set up the Canon SX200 with CHDK to take 3 pictures but i missed to set it up to M Mode. Result was that i ended up with many Pictures, each 1st one well exposed, each 2nd one underexposed and each 3rd one overexposed. Problem is that the pictures shot directly into the sun are way much less exposed in the 1st ones than the ones that are taken from the ground or from the sky.

Mental Note: Use M-Mode, take 5 pics and measure the right exposure to something middle light.

So i can show you the HDR tonemapped pano i put together of the horizontal pictures.



This one s then some 20 MPixel. If the Pics of the below and above the horizontal pictures i would have become a 56 Megapixel picture out of a 12.1 MPixel Canon SX 200.

Tuesday, October 15, 2013

First Post

Starting my first english blog for the capische robot i designed and built.

CaPiSche stands for Camera Pi Scheduler.



It is not only a scheduler. It can move, turn and tilt the camera while recording or between 2 pictures. The CaPiSche once started as a ArduinoPhotoBot (german) in April 2011. The first goal was to create spheric panoramas in HDR. Later i realized that i also can use it for gigapixel panoramas and for timelapse-photography.

After reaching (mostly my) limits in programming a decent graphical menu to the arduino to select the different modes it can be used i switched to a Raspberry Pi as heart of the whole project. The trick is that i then can use simple file handling, write in python, use a standard lighttp-Webserver as userinterface and i can use basic PC hardware as interface. But the most usefull benefit of hardware-switch is that i can edit the program interactive on screen or by ssh-client.