![]() |
![]() |
The firmware is written with zephyr. The code is in ./app.
The environment can be bootstrapped via nix run .#init and west is either available via nix run .#west -- ... or in nix develop.
It runs on STM32H7B3I-DK (in Zephyr: stm32h7b3i_dk). Bluetooth is added with the dev board X-NUCLEO-IDB05AI.
- The rail knows its absolute position and the current target position.
- It knows how many images to take per stack.
- It knows the absolute positions of Start and End of the stack.
It internally has a state machine:
The version of zephyr is pinned via the ./flake.nix and the script ./scripts/init-and-chores.sh updates the app/west.yml from that.
It has a GUI with LVGL.
connected via https://maxhbr.github.io/zephyr-rail/, which hosts the static HTML part of the PWA.
Some of the shelf Mechanical Parts used in this project:
- Rail: HiWin KK5002P
- Stepper Motor: iCL Series NEMA 17 Integrated Closed Loop Stepper Motor
- Arca Swiss Clamp round, diameter 60mm: link to mjkzz
- Camera Plate 200mm: e.g. LEOFOTO Quick Release Plate PL-200
Some adapters and parts are 3D printent. See ./3d-print.scad.
![]() |
![]() |
Electronics
- Control of the Stepper Motor
- Control of the Camera via Bluetooth
- Frontend via Bluetooth PWA
- 24v -> 5v conversation to power the MCU
- Ideas:
- IMU to wait for the rail to settle
- piezo beeper
- limit switches and positioning
A high level sketch:
For stacking and other things the project https://github.com/maxhbr/myphoto is used.



