OpenFlexure stage controller
A standalone controller for an OpenFlexure Delta Stage — part of an open two-photon microscope project. Three rotary encoders drive three stepper motors through the mainboard, with live position feedback on an LCD. No PC required.
Ingredients
BeeHive boards:
| Board | Qty | Role |
|---|---|---|
| ESP32 BeeHive mainboard | 1× | Reads the encoders, converts input to delta-stage coordinates and drives the motors. |
| Rotary encoder DB | 3× | One encoder per stage axis / actuator. |
| 28BYJ-48 stepper driver | 3× | Drives the three 28BYJ-48 stepper motors. |
| LCD panel (HD44780, I2C) | 1× | Live position/status feedback. |
Other components:
| Component | Qty | Notes |
|---|---|---|
| Rotary encoders | 3× | Manual input, one per stage axis. |
| 28BYJ-48 stepper motors with driver boards | 3× | Move the delta stage. |
| HD44780 character LCD (I2C backpack) | 1× | Live coordinate readout. |
| OpenFlexure Delta Stage | 1× | The stage being controlled. |
How it works
The OpenFlexure Delta Stage moves its sample with three actuators in a delta geometry. Here, three rotary encoders act as the manual interface: turning an encoder feeds counts to the mainboard, which converts them into delta-stage movement coordinates and drives the three 28BYJ-48 stepper motors accordingly.
Position and status are shown live on an HD44780 LCD over I2C, so the whole controller works without a PC — USB serial is optional for logging or remote control. The same approach simplifies to cartesian stages: with a cartesian geometry the coordinate conversion collapses to one encoder per axis driving one motor.
Wiring
- Each rotary encoder DB to a mainboard data line (A/B channels), plus power and ground.
- Each 28BYJ-48 driver to mainboard data lines for its motor; motor power from the appropriate rail.
- HD44780 LCD (I2C backpack) to the mainboard I2C data lines (SDA/SCL), plus power and ground.
- Optional USB serial to a host PC.
Schematic
Board schematics and connector pinouts live in the BeeHive repository.
Code
Illustrative — not published upstream
This standalone controller belongs to the separate open 2-photon microscope
project, not the BeeHive org repositories, so no matching code was found. The
skeleton below is an illustrative starting point — the delta-stage
coordinate maths and the stepper stepping routine are left as TODOs.
Controlled via MicroPython. A minimal encoder-to-motor skeleton (coordinate conversion omitted):
# TODO: pins/addresses are placeholders; add the delta-stage coordinate maths
# and your stepper stepping routine.
from machine import Pin, I2C
import time
# Three encoders (A/B per axis)
enc = [(Pin(4, Pin.IN), Pin(5, Pin.IN)),
(Pin(12, Pin.IN), Pin(13, Pin.IN)),
(Pin(14, Pin.IN), Pin(15, Pin.IN))]
lcd_i2c = I2C(0, scl=Pin(22), sda=Pin(21)) # HD44780 via I2C backpack
pos = [0, 0, 0]
def read_delta(i):
# TODO: quadrature decode to +1 / -1 / 0
return 0
def to_stage_coords(pos):
# TODO: delta-stage geometry; for a cartesian stage this is the identity
return pos
def drive_motors(target):
# TODO: step each 28BYJ-48 towards target
pass
def show(coords):
# TODO: write coords to the HD44780 over I2C
pass
while True:
for i in range(3):
pos[i] += read_delta(i)
coords = to_stage_coords(pos)
drive_motors(coords)
show(coords)
time.sleep_ms(5)
Results / notes
The controller gives a self-contained, PC-free way to drive an OpenFlexure Delta Stage from three rotary encoders, with live LCD feedback. It reduces to a simple one-encoder-per-axis controller for cartesian stages.
Source
See the BeeHive repository and the OpenFlexure Delta Stage.