Build a Motorized Camera Slider: 3D-Printed Rail, Stepper Drive, and ESP32 Control
A motorized slider turns a static product shot or a timelapse into something with real production value — smooth, repeatable linear motion that would otherwise require renting equipment or eyeballing a manual push along a tripod rail. This build is almost entirely 3D-printed: a printed carriage rides on smooth steel rods or an aluminum extrusion rail, driven by a GT2 belt and a NEMA 17 stepper, with an ESP32 running the motion profile and exposing a simple web interface so you can trigger moves from a phone without a laptop on set. It's a satisfying build that combines mechanical design, motor control, and firmware in one project, and the finished slider is genuinely useful for both video work and automated multi-angle product photography.
How It Works
A NEMA 17 stepper mounted at one end of the rail drives a GT2 timing pulley, which pulls a closed belt loop running the length of the slider; the printed carriage clamps to the belt so that each full step (or microstep, with a driver like the TMC2209 covered in our TMC2209 tuning guide) moves the carriage a known, repeatable distance. An ESP32 running a stepper library handles acceleration and deceleration ramping so the camera doesn't jerk at the start and end of a move, and either a limit switch or sensorless homing (if you're using TMC2209 drivers) establishes a known zero position on power-up.
Rail and Carriage Design
Two rail approaches both work well: 8mm smooth steel rod supported at both ends (cheap, widely available, needs printed linear bearing holders — LM8UU bearings press-fit directly into a printed carriage) or V-slot aluminum extrusion with printed or purchased V-wheels (stiffer over longer spans, easier to mount to a tripod at multiple points). For a slider under 60cm, rod-and-bearing is simpler and lighter; past 80-100cm, extrusion resists sag and twist far better. Print the carriage in PETG rather than PLA — it's handling repeated belt tension and bearing preload, and PLA's tendency to creep under sustained clamping load will loosen bearing fit over weeks of use. Design the carriage with a standard 1/4-20 camera mount thread (a printed insert works, but a brass threaded insert installed per our threaded insert guide will survive far more mounting cycles) and add an adjustable friction clamp or cable channel so the camera's power/HDMI cable doesn't snag as the carriage travels.
Electronics
ComponentRole ESP32 Dev BoardRuns the motion controller and serves a web UI for move commands over WiFi TMC2209 or A4988 Stepper DriverConverts step/dir signals from the ESP32 into phase current for the motor NEMA 17 Stepper MotorDrives the belt; 40-59Ncm torque is plenty for a camera-weight carriage Limit/Endstop SwitchEstablishes home position; skip if using TMC2209 sensorless homing (StallGuard) 18650 Battery Pack or USB Power BankMakes the slider cordless for field use — a stepper at rest draws holding current, so include a physical power switchWire the driver following the same step/dir/enable pattern used across Arduino and ESP32 motor projects (see our motor driver guide if you haven't wired a stepper driver before), and keep the driver's current limit set conservatively at first — an overcurrent-set TMC2209 will run hot and can lose steps under load, which shows up as a carriage that drifts from its intended position over a long timelapse.
Firmware and Control
The ESP32 firmware needs three things: a motion profile generator (trapezoidal acceleration is enough — the AccelStepper library handles this out of the box), a homing routine that runs on boot, and a control interface. The simplest useful interface is a small AsyncWebServer page (the same pattern used in our standalone ESP32 web control panel guide) exposing three modes: manual jog, point-to-point move with a set duration (for a fixed-length video pan), and continuous timelapse mode where the carriage advances a small step between each camera trigger. For camera triggering itself, a simple relay or opto-isolated trigger cable wired to the camera's remote-shutter port, fired by a GPIO pin timed against the move sequence, keeps the whole rig self-contained without needing an intervalometer.
Calibration
Once assembled, measure actual belt travel per motor revolution against the pulley's tooth count and belt pitch (2mm for GT2) to compute steps-per-mm, then verify by commanding a 100mm move and measuring the real carriage travel with a tape measure — small discrepancies here compound over a long slide and are worth correcting in firmware rather than living with. Check that the belt has consistent tension along its full length; a belt that's tight at one end and loose at the other will produce micro-stutters in video that are far more visible in the final footage than they are by eye during a bench test.
Where to Go From Here
Once the linear-axis slider works reliably, the natural extension is adding a second stepper-driven pan axis at the carriage for coordinated slide-and-pan moves, which is the same multi-axis motion-control problem covered conceptually in our printer kinematics guide — just at a much smaller scale and lower speed. A basic single-axis slider is a solid weekend build and a genuinely useful piece of shop and studio equipment once it's dialed in.
Related Guides
- Designing Enclosures for Electronics Projects: Materials, IP Ratings, Ventilation, and Cable Entry
- Build a Motorized Filament Rewinder and Respooler for Bulk Filament
- How to Design and 3D Print Functional Threads: Screws, Nuts, and Threaded Inserts
- How to Print Multi-Color Models with a Single Extruder Using M600 Filament Changes
- How to Design Snap-Fit Joints and Living Hinges for 3D Printed Parts
- How to Program Addressable LED Strips: WS2812B Patterns, Effects, and Power Design
- How to Use the ESP32-CAM: Video Streaming, Motion Detection, and Time-Lapse
- How to Anneal 3D Prints and Vapor Smooth ABS/ASA for Strength and Finish