First light of new setup from Ukraine

A forum to ask questions, post setups, and generally discuss anything having to do with photomacrography and photomicroscopy.

Moderators: rjlittlefield, ChrisR, Chris S., Pau

paganel
Posts: 20
Joined: Sun Mar 06, 2011 12:26 pm
Location: Ukraine, Kiev

First light of new setup from Ukraine

Post by paganel »

My "child" of 2 month work and ebay searching :)
Nikon Labophot 2 microscope stand + Zeiss microscope stand + Proxxon KT70 table + Pentax bellows + 2xSB-R200 flashes + ring led light.

Rainy weather don’t allow to find any dry insect, but wet lichen is a good subject for testing too
3x scale, 50 frames (0.05mm step) Helicon Focus stack, Nikon D70s + rare soviet Mikroplanar 65/4.5 lens.

Next step will be comparison of Mikroplanar 65/4.5 and Leitz Milar 65/4.5 lenses with Nikon D300, diffuser constructing and testing of different stacking software

Image
Image
Image

Resize
Image

Center crop
Image

Edge crop
Image

canonian
Posts: 891
Joined: Tue Aug 31, 2010 4:00 am
Location: Rotterdam, Netherlands
Contact:

Post by canonian »

Very interesting setup, nice XYZ stage !
Good results. Keep 'em coming !

dennisua
Posts: 98
Joined: Tue May 31, 2011 9:35 am
Location: Kiev, Ukraine
Contact:

Post by dennisua »

Vanya is that you? :D
Nice setup you've got there! Good job!

Chris S.
Site Admin
Posts: 4057
Joined: Sun Apr 05, 2009 9:55 pm
Location: Ohio, USA

Post by Chris S. »

Paganel, dobro pozholovat' to the forum!

Looks like a solid, innovative setup you've built--thanks for sharing! It's great to learn from other people's approaches. Your use of the Labophot stand to hold lights--in addition to performing the stacking movement--is new to me. My sense is that your lighting approach emphasizes efficiency, perhaps at some cost in flexibility. In my view, it's useful to see varied examples on the efficiency/flexibility curve.

Your Soviet Mikroplanar seems a pretty decent lens. Your lens gives the impression of being competitive at 3x--I'd be tempted just to shoot for it for the summer, and leave testing until winter.

Very nice first images. I also shoot quite a few lichens, but seldom use my ringlight, partly because I prefer more contrast than it permits, and also because I don't like the ring-shaped specular highlights. So I'll be watching for the results of your diffusion tests--maybe you will find an approach that makes me get my ringlight back out.

By the way, I have very fond memories of Ukraine, though I haven't been to Kiev--my time in Ukraine has been mainly the Odessa oblast.

Thumbs up! Hope you keep sharing your work.

Best,

--Chris

paganel
Posts: 20
Joined: Sun Mar 06, 2011 12:26 pm
Location: Ukraine, Kiev

Second light :)

Post by paganel »

2 monthes I tried to fix vibrations from mirror of my Nikon D70s. Rear flash and short expositions solve my problem only partially. With 5x and more magnification all details of image become very "soap".
I decide to use Arduino controller to control 2 Ikea lamps as flashes and camera shutter. The scheme is simple:

- open shutter
- set delay 0.25 sec to fix mirror vibration
- ON ikea lamps
- delay (1/1000 - 10 sec)
- OFF ikea lamps
- delay 0.25 sec
- close shutter

I use Arduino shield as base and add LCD Shield For Arduino (http://www.dfrobot.com/index.php?route= ... duct_id=51) for display and control.

Each of 2 lamps controlled by simple scheme:
Input pins connected to 11 and 12 PIN of LCD shield

Camera controlled with 4N35 optocoupler as described:
Input pin connected to 3 pin of LCD shield

Image

«Left» and «Right» buttons set the light delay from 1/1000 to 10 sec.
«Up» and «Down» buttons set correction from -3 to +3 to light delay

«Select» button has 2 function – short press start exposition and long press switch on/off led lamps (without exposition)

Today morning first experiments was very promising. Nikon CFI 10x (with achromatic tube lens) and El-nikor 50/2.8 get very sharp images.

Sample image of 1/2 cardamon grain with EL-Nikkor 50/2.8

Full frame (stack)
Image

Crop (stack)
Image

Setup
Image
[/img]

Arduino code:

Code: Select all

#include <LiquidCrystal.h>
LiquidCrystal lcd&#40;8, 9, 4, 5, 6, 7&#41;;
int adc_key_in  = 0;
int read_LCD_buttons&#40;&#41;
&#123;
 adc_key_in = analogRead&#40;0&#41;;
 if &#40;adc_key_in > 1000&#41; return 0; //None;
 if &#40;adc_key_in < 50&#41;   return 1; //RIGHT;  
 if &#40;adc_key_in < 195&#41;  return 2; //UP; 
 if &#40;adc_key_in < 380&#41;  return 3; //DOWN; 
 if &#40;adc_key_in < 555&#41;  return 4; //LEFT; 
 if &#40;adc_key_in < 790&#41;  return 5; //SELECT;   
 return 0;
&#125;
//
float speeds&#91;29&#93; = &#123;0.001,0.00125,0.0015625,0.002,0.0025,0.003125,0.004,0.00625,0.008,0.01,0.0125,0.016666667,0.033333333,0.05,0.1,0.2,0.25,0.333333333,0.5,1,2,3,4,5,6,7,8,9,10&#125;;
char speedsStr&#91;29&#93;&#91;8&#93; = &#123;"1/1000","1/800","1/640","1/500","1/400","1/320","1/250","1/160","1/125","1/100","1/80","1/60","1/30","1/20","1/10","1/5","1/4","1/3","1/2","1","2","3","4","5","6","7","8","9","10"&#125;;
int ci = 18;
int cic = 0;
int memKey = 0;
int cState = 0;
int lightState = 0;
int shutterPin = 3;
int flashPin1 = 11;
int flashPin2 = 12;
//
void setup&#40;&#41; &#123;
 Serial.begin&#40;9600&#41;; 
 lcd.begin&#40;16, 2&#41;;
 initMe&#40;&#41;;
 //
 pinMode&#40;shutterPin, OUTPUT&#41;;
 pinMode&#40;flashPin1, OUTPUT&#41;;
 pinMode&#40;flashPin2, OUTPUT&#41;;
&#125;
//
void loop&#40;&#41; &#123;
  checkKeys&#40;&#41;;
  definePress&#40;&#41;;
&#125;
//
void initMe&#40;&#41; &#123;
  printCShutter&#40;&#41;;
  switchLights&#40;lightState&#41;;
&#125;
//
int lcd_key  = 0;
void checkKeys&#40;&#41; &#123;
  lcd_key = read_LCD_buttons&#40;&#41;;
  delay&#40;50&#41;;
  if &#40;cState == 0&#41; &#123;
    if &#40;lcd_key!=memKey&#41; &#123;
      if &#40;lcd_key == 4&#41; &#123;
        addShutter&#40;-1&#41;;
      &#125; else if &#40;lcd_key == 1&#41; &#123;
          addShutter&#40;1&#41;;         
      &#125; else if &#40;lcd_key == 5&#41; &#123;
          //startPhoto&#40;&#41;;
      &#125; else if &#40;lcd_key == 2 &#41; &#123;
          correctShutter&#40;1&#41;;
      &#125; else if &#40;lcd_key == 3&#41; &#123;
          correctShutter&#40;-1&#41;;
      &#125;
      memKey = lcd_key;
    &#125;
  &#125;
&#125;
//

//
int addShutter&#40;int shiftx&#41; &#123;
  if &#40;shiftx > 0 && ci < 28&#41; &#123;
    ci = ci + 1;
    cic = 0;
  &#125; else if &#40;shiftx < 0 && ci > 0&#41; &#123;
    ci = ci - 1;
    cic = 0;
  &#125;
  printCShutter&#40;&#41;;
&#125;
//
int correctShutter&#40;int corrx&#41; &#123;
  if &#40;corrx > 0&#41; &#123;
    if &#40;ci == 28 && cic == 0&#41; return 0;
    //
    if &#40;cic < 3&#41; &#123;
      cic = cic + 1;
      printCShutter&#40;&#41;;
    &#125; else &#123;
      addShutter&#40;1&#41;;
    &#125; 
  &#125; else if &#40;corrx < 0&#41; &#123;
    if &#40;ci == 0 && cic == 0&#41; return 0;
    //
    if &#40;cic > -3&#41; &#123;
      cic = cic - 1;
      printCShutter&#40;&#41;;
    &#125; else &#123;
      addShutter&#40;-1&#41;;
    &#125;
  &#125;
&#125;
//
String pt;
void printCShutter&#40;&#41; &#123;
  lcd.clear&#40;&#41;;
  lcd.setCursor&#40;0,0&#41;;
  lcd.print&#40;"Shutter speed&#58;"&#41;;
  lcd.setCursor&#40;0,1&#41;;
  if &#40;cic > 0&#41; &#123;
    pt = String&#40;"> +"&#41;;
  &#125; else &#123;
    pt = String&#40;"> "&#41;;
  &#125;
  lcd.print&#40;"<" + String&#40;speedsStr&#91;ci&#93;&#41; + pt + String&#40;cic&#41;&#41;;
  lcd.setCursor&#40;13,1&#41;;
  lcd.print&#40;"L="+String&#40;lightState&#41;&#41;;
&#125;
//
int sdc,cpos;
void startPhoto&#40;&#41; &#123;
  cState = 1;
  //
  lcd.clear&#40;&#41;;
  if &#40;lightState == 1&#41; &#123;
    lcd.print&#40;"Light off"&#41;;
    switchLights&#40;0&#41;;
    cpos = 1;  
  &#125; else &#123;
    cpos = 0;
  &#125;
  lcd.setCursor&#40;0,cpos&#41;;
  lcd.print&#40;"Prepare..."&#41;;
  delay &#40;250&#41;;
  //
  lcd.clear&#40;&#41;;
  lcd.print&#40;"Open shutter"&#41;;
  digitalWrite&#40;shutterPin, HIGH&#41;;
  delay&#40;250&#41;;
  //
  if &#40;cic == 0&#41; &#123;
    sdc = 0;
  &#125; else &#123;
    int tmpa = cic / abs&#40;cic&#41;;
    sdc = abs&#40;speeds&#91;ci+tmpa&#93; - speeds&#91;ci&#93;&#41;/4*cic*1000;
  &#125;
  int shotDelay = speeds&#91;ci&#93;*1000 + sdc;
  lcd.clear&#40;&#41;;
  lcd.print&#40;"Start flash&#58;"&#41;;
  switchLights&#40;1&#41;;
  lcd.setCursor&#40;0,1&#41;;
  lcd.print&#40;String&#40;shotDelay&#41;&#41;;
  delay&#40;shotDelay&#41;;
 //
  lcd.clear&#40;&#41;;
  lcd.print&#40;"Stop flash"&#41;;
  switchLights&#40;0&#41;;
  delay&#40;250&#41;;
  //
  lcd.clear&#40;&#41;;
  lcd.print&#40;"Close shutter"&#41;;
  digitalWrite&#40;shutterPin, LOW&#41;;
  delay&#40;250&#41;;
  //
  if &#40;lightState == 1&#41; &#123;
    lcd.clear&#40;&#41;;
    lcd.print&#40;"Light on"&#41;;
    switchLights&#40;1&#41;;
    delay&#40;250&#41;;
  &#125;
  //
  cState = 0;
  initMe&#40;&#41;;
&#125;
//
void switchLights&#40;int lst&#41; &#123;
  if &#40;lst == 1&#41; &#123;
    digitalWrite&#40;flashPin1, HIGH&#41;;
    digitalWrite&#40;flashPin2, HIGH&#41;;
  &#125; else &#123;
    digitalWrite&#40;flashPin1, LOW&#41;;
    digitalWrite&#40;flashPin2, LOW&#41;;
  &#125;
&#125;
// --------------------------------------------------
int current = 0;
int count;
int previous = 0;
unsigned long firstTime; 

void definePress&#40;&#41; &#123;
  if &#40;cState == 0&#41; &#123;
    lcd_key = read_LCD_buttons&#40;&#41;;
      if &#40;lcd_key == 5&#41; &#123;
      current = 1;
    &#125; else &#123;
      current = 0;
    &#125;
    if &#40;current == 1 && previous == 0 && millis&#40;&#41; - firstTime > 50&#41;&#123;
      firstTime = millis&#40;&#41;; 
    &#125;
    if &#40;current == 0 && previous == 1 && millis&#40;&#41; - firstTime < 250&#41;&#123;
      startPhoto&#40;&#41;;
    &#125; else if &#40;current == 0 && previous == 1 && millis&#40;&#41; - firstTime > 250&#41;&#123;
      if &#40;lightState == 1&#41; &#123;
        lightState = 0;
      &#125; else &#123;
        lightState = 1;
      &#125;
        switchLights&#40;lightState&#41;;
        printCShutter&#40;&#41;;
      &#125;
    previous = current;  
  &#125;
&#125;
[/size]

AndrewC
Posts: 1436
Joined: Thu Feb 14, 2008 10:05 am
Location: Belgium
Contact:

Post by AndrewC »

Hi,

So what kind of minimum flash duration can you use ? Everytime I've tried with leds I can't get much less than 1/100"
rgds, Andrew

"Is that an accurate dictionary ? Charlie Eppes

paganel
Posts: 20
Joined: Sun Mar 06, 2011 12:26 pm
Location: Ukraine, Kiev

Post by paganel »

1/30 with diffuser or 1/60 without diffuser

AndrewC
Posts: 1436
Joined: Thu Feb 14, 2008 10:05 am
Location: Belgium
Contact:

Post by AndrewC »

paganel wrote:1/30 with diffuser or 1/60 without diffuser
That is pretty much in line with what I got with leds - I got down to <1/100 but that was with much more powerful leds. generating a current limited pulse gets interesting so I gave up trying to get build a schizophrenic led light which could flip between high power <1/10000 strobe flashes and constant lower level constant illumination
rgds, Andrew

"Is that an accurate dictionary ? Charlie Eppes

Post Reply Previous topicNext topic