Datorstyrt linjarbord

Datorstyrt linjärbord för fokusstackning

2015-09-04

Bakgrund

I början, när jag lärde mig arbeta med fokusstackning, provade jag mig fram med olika typer av manuella riggar. Den allra första byggdes när jag gick en fotokurs och behövde något snabbt. Det blev ett LEGO-bygge enligt principen ”man tager vad man haver”. Just då fungerade den utmärkt för mina behov.


Begränsningarna var dock uppenbara och precisionen sådär. Därför fortsatte jag utveckla mitt gängstångskoncept. En ny komponent, i stället för LEGO-hjulen, blev expansionsbeslag som man har i mindre byrålådor etc. Gängstängerna fick skruva sig igenom tjocka plastbitar (skärbräda). Så småningom byttes plasten, som slets ut fort, ut mot aluminium. Släden fick även ett snabbfäste för kameran.


Kom dock fram till att konstruktionen var lite klumpig. När jag då hittade ett par ännu mindre beslag på Bauhaus byggde jag ännu ett linjärbord. Detta fungerar utmärkt, och med ett materialpris under hundralappen så känns det väldigt prisvärt.


Jag använder en gängstång på antingen 5 eller 6 mm. 5 mm har en gängstigning på 0,8 mm/varv och 6 mm har 1,0 mm/varv, så att flytta t ex 0,1 mm är inga större problem. Precisionen är väl inte som i en mikrometerskruv med trapetsgänga, men så länge belastning på gängorna är riktad åt samma håll blir det inget glapp.

Efter att ha testat lite olika varianter av manuella riggar för fokusstackning börjar man undra om inte tryck, vrid, vänta ut vibrationer, tryck, vrid, vänta, tryck, vrid, … kan automatiseras. Speciellt eftersom vridvinkeln är väldigt godtycklig. Lite sökningar på nätet visade att det är klart att man kan, speciellt om man har en massa pengar att göra av med. Eftersom jag själv inte ville spendera alltför mycket och dessutom var inne i en period av teknisk nyfikenhet tänkte jag att man skulle kunna försöka själv.

Stegmotor

Ok, vad behöver man? En motor såklart, en stegmotor borde vara grejen. Var hittar man en sådan? Hur styr man en sådan? Hur styr man kameran? Så småningom hittade jag vad jag letade efter; en stegmotor med styrelektronik och drivrutiner för att styra från PC via USB. Pefekt! Motorn har en upplösning på 1,8° eller 200 steg/varv. Detta kombinerat med en 5 mm gängstång med en stigning på 0,8 mm/varv ger 0,8/200 = 0,004 mm/steg (i teorin), vilket borde räcka ett tag. I praktiken är precisionen i gängstången något sämre. Motor, elektronik och dator kopplades ihop och testades med ett medföljande testprogram. En sak som var bra med styrelektroniken var att det även fanns möjlighet att styra några andra switchar vilket borde kunna fungera till kamerans fjärrutlösning (som bygger på enkel kortslutning). Ett litet relä löste det.



Programmering

Ett litet problem var att medföljande mjukvara inte passade mina ändamål. Alltså blev jag tvungen att skriva ett eget program (i Visual Basic) för att motornelektroniken skulle göra saker på rätt sätt. Huvudfunktionen i programmet var att aktivera avtryckaren och sedan vrida på motorn lagom mycket, alltså tryck, vrid, tryck, vrid, tryck, vrid, … (precis som tidigare). Eftersom datorn är så mycket snabbare än kamerans exponering behövdes det paus för att exponera färdigt. Dessutom kan säkert den mekaniska flyttningen generera skakningsoskärpa. Alltså paus även efter vridningen. Pausernas längd ställs in i programmets andra flik. Nu blev sekvensen tryck, paus, vrid, paus, tryck, paus, vrid, paus, tryck, ….


Firmware till kameran

Om man ska fotografera med precision på nära håll så kan uppfällningen av spegeln i en spegelreflexkamera vara ett problem eftersom det är en snabb mekanisk rörelse som skakar om. På mer avancerade modeller av kameror kan man ofta välja separat spegeluppfällning så att själva exponeringen går lugnare, men inte på min Canon 400D. En återvändsgränd? Efter ännu mer sökande på nätet visade det sig att det kanske fanns en lösning trots allt. Det går att installera ny firmware i kameran. Det kändes i och för sig lite läskigt eftersom den nya mjukvaran byggde på open source och inte var sanktionerad av Canon. Jag testade dock och det fungerade. Det tar visserligen någon sekund extra att starta kameran, men nu har jag en massa extra funktioner, bl a just separat spegeluppfällning.


Med detta löst lade jag in det och lite annat i programmet också. Så nu blev sekvensen: tryck (spegel upp), paus, tryck (exponera), paus, vrid, tryck (spegel upp), paus, tryck (exponera), paus, … .

Så här ser mitt styrprogram ut när man kör:


Lite optik och matematik

Hur mycket ska man vrida då? Det beror på. Det som påverkar hur mycket man ska förskjuta fokus mellan varje exponering är ju skärpedjupet. Men vad är egentligen skärpedjup? Egentligen har vi bara skärpa i ett (tunt) plan. Det som gör att vi ändå kan prata om skärpedjup är att både människor och kamerasensorer har en gräns för hur små saker de kan se. Detta kallas för oskärpecirkeln. Människor med normalsyn kan se prickar som är ca 0,2 mm på 25 cm avstånd vilket motsvarar 0,004 mm på näthinnan, medan min kameras näthinna (sensorn) har en upplösning på 0,019 mm. Det finns en formel för skärpedjupet (för makro), som jag inte tänker härleda (http://en.wikipedia.org/wiki/Depth_of_field#Close-up):

DOF ny formel

där:

DOF = Skärpedjupet (depth of field)
N = bländartalet (f/N)
c = oskärpecirkeln (0,019 mm) (circle of confusion)
m = avbildningsskalan på sensorn

Avbildningsskalan räknas ut till exempel genom att fotografera en linjal när allt är riggat. Sensorns bredd går att ta redan på. I mitt fall en APS-C som är 22,2 mm. Om man kan räkna till t ex fem millimeter på linjalen blir då avbildningsskalan (förstoringsgraden) m = 22,2 / 5 = 4,44.

Vidare kan vi välja t ex bländare f/5,6. Med detta känt kan vi räkna ut skärpedjupet:

DOF ny exempel

Fast enklast är väl att låta datorn räkna ut skärpedjupet per bild nu när vi har formeln. Därför blev det även en flik för detta i programmet. Nu kan vi alltså tala om hur mycket motorn ska vrida mellan varje exponering. Till detta lägger vi ett visst överlapp för att kompensera för eventuellt glapp, säg 20% (vilket innebär att vi tar bort 20% från skärpedjupet). Exempel:

vridning = DOF * 80% / linjär_flytt_per_steg =
= 0,059 mm * 0,8 / 0,004 mm/steg ≈
≈ 15 steg (≈27°)

Sen måste vi även ange hur stort totalt skärpedjup vi vill ha, säg 3 mm. Utgående från detta kan vi sen räkna ut hur många vridningar och exponeringar som måste göras. Exempel:

antal bilder = motivdjup / (DOF * 80%) =
= 3 mm / (0,059 mm/steg * 0,8) ≈
≈ 64 exponeringar

Detta räknas ut i programmets tredje flik.

Sätt ihop allt

Med teorin klar var det dags att bygga in motor och elektronik i en lämplig låda. Motoraxeln skulle sedan kopplas ihop med gängstången och trots att jag valt samma dimension på gängstången som på motorn blev det ändå problem. Till slut fick jag i alla fall tag på en dyr koppling från USA som fungerade tillfredsställande.


Nu var det bara att sätta ihop alla delarna, hitta ett lämpligt motiv, rigga belysning, sikta in motivet och sen trycka på ”kör” på datorn. Bilderna trillande en efter en in på kamerans minneskort. Sen vidtog överföring till datorn och stackning i Zerene Stacker. (En direkt överföring till datorn hade varit önskvärd, men det får bli nästa version.)


Slutsatser

Tekniken i mitt bygge fungerar!

Utifrån text och bilder har en del förbättringar gjorts. Plastbitarna som gängstången gick genom har bytts ut mot mer hållbar aluminium. I de allra flesta fall använder jag numera makroobjektiv med eller utan försättslinser. Visst finns det ännu bättre grejer men det duger så länge. När det gäller belysning har jag gått över till en TTL-blixt med diffusorer och reflektorer. Det fungerar bra, men ibland skulle det vara kul med fler blixtar.

En nackdel med drivrutinerna för stegmotorn är att de bara verkar fungera på en 32-bitars dator, vilket gör att jag tyvärr inte kan använda min senaste dator till detta.


Länkar

Fakta och inspiration

Makrofokus
http://makrofokus.se/

Hur små saker kan ögat se?
http://faktabanken.nu/ogatsupplosning.htm

Wikipedia: Depth of field
http://en.wikipedia.org/wiki/Depth_of_field#Close-up

Produktsidor

Mina Canon-kameror
EOS 400D: http://www.canon.se/For_Home/Product_Finder/Cameras/Digital_SLR/EOS_400D/
EOS 70D: http://www.canon.se/For_Home/Product_Finder/Cameras/Digital_SLR/EOS_70D/

Expansionsbeslag
http://www.clasohlson.com/se/Expansionsbeslag/31-1747

Stegmotor med styrelektronik
http://www.pc-control.co.uk/stepper_pack.htm

Relä för fjärrutlösning
http://www.velleman.eu/products/view/?id=17756

400plus – A firmware hack for the Canon 400D / XTi digital camera
https://github.com/400plus

Lampor
http://www.ikea.com/se/sv/catalog/categories/series/18294/

Tillbaka till bloggens startsida

Dela på Facebook