PhotoStepper/README.md

119 lines
3.2 KiB
Markdown
Raw Normal View History

2022-01-27 20:05:14 +00:00
# PhotoStepper
2022-01-27 20:33:57 +00:00
A stepper motor controller for use in photography.
2022-02-22 16:25:52 +00:00
This is a device that can be used to control a stepper motor and a camera, to
make a defined number of photos with a defined movement in between. A stepper
motor can be attached to a rotating platform or to a linear drive, so either
the object or the camera can be moved between the pictures.
2022-01-27 20:33:57 +00:00
## Hardware
2022-02-22 16:25:52 +00:00
The device consists of the following components:
- Arduino Uno, the brains of the operation
- LCD & keypad shield, as the user interface
- an A4988 stepper motor driver
- a 100uF capacitor
- two PC817 opto-isolators
- two 1k resistors
The circuit is pretty simple:
![Circuit](circuit/photostepper_bb.jpg)
Atop of that, I used an M13 connector for the stepper motor and a 2.5mm stereo
phone connector for the camera. To interface my camera, I had a ready made
cable from a remot camera controller (Ayex AX-5). The whole thing is powered by
a 12V power supply, connected directly to the Arduino.
2022-01-27 20:33:57 +00:00
This is the ideal case for the build:
https://www.thingiverse.com/thing:142282/files
2022-02-03 23:40:45 +00:00
2022-02-22 16:25:52 +00:00
## Software
This project makes heavy use of the following libraries:
- [ArduinoMenu 4](https://www.arduino.cc/reference/en/libraries/arduinomenu-library/) (v4.21.4) for the menu structure
- [StepperDriver](https://www.arduino.cc/reference/en/libraries/stepperdriver/) (v1.3.1) for motor control
- [AnalogKeypad by Makuna](https://www.arduino.cc/reference/en/libraries/analogkeypad/) (v1.1.1) for reading input keys
## Menu structure
The main menu offers the following features:
### Jog
Up and down buttons move the motor manually, pressing the buttons for more than
a second doubles the speed.
### Configuration
General settings for the device:
#### Settle time (tSettle, default 1000ms)
Pause between motor movement and camera triggers, to avoid shaking.
#### Focus time (tFocus, default 1000ms)
Half-press of the shutter button, time to let the camera focus.
#### Shutter time (tShutter, default 1000ms)
How long to press the trigger.
#### Return (default: On)
Reverse any movement to starting point after shooting the whole scene.
#### DarkenLCD (default: Off)
Turn off LCD backlight while shutter is open.
### Scene
#### Steps (nSteps, default 10)
Number of steps for this scene.
2022-02-03 23:40:45 +00:00
2022-02-22 16:25:52 +00:00
#### Distance per step (distance, default 0.5mm)
2022-02-03 23:40:45 +00:00
2022-02-22 16:25:52 +00:00
How far to move between the steps.
2022-02-03 23:40:45 +00:00
2022-02-22 16:25:52 +00:00
### Run
2022-02-03 23:40:45 +00:00
2022-02-22 16:25:52 +00:00
Run the whole setup.
2022-02-18 16:22:00 +00:00
## Example results
This is the first image that was made using this project:
2022-02-22 16:25:52 +00:00
![Extreme closeup of a coin](example_images/220213_macro_cent.jpg)
2022-02-18 16:22:00 +00:00
Depth of field for my setup is a little more than 1mm, so this image is
composed from 30 different shots, each 1mm apart. Here's an animation of the
non-fused images:
2022-02-22 16:25:52 +00:00
![Animated focus stack](example_images/220213_macro_cent_-_animation.gif)
2022-02-18 16:22:00 +00:00
The images were taken as JPG. For some reason the align-program did strange
things with my full size images, so I reduced them in size first -- it's only a
first test:
```
for i in *.JPG; do convert $i -resize 50% $i.tif; done
```
Then I was able to align all images:
```
align_image_stack -ma aligned_ AJ9E94*.tif
```
Once all images had been alignes, I created the final image from my stack of photos:
```
enfuse -o result.tif --exposure-weight=0 --saturation-weight=0 --contrast-weight=1 --hard-mask --contrast-edge-scale=0.5 aligned_00*
```