Skip to the content
2 layers155 × 115 mmSlider, the printed circuit board in 3D

Two stationary stepper motors drive a belt-and-gear mechanism that moves the carriage and rotates the camera platform.

Size
155 × 115 mm
Copper layers
2
Thickness
1.6 mm
Parts
136
Nets
70
Pads
360
Tracks, vias
785, 0
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
25 Sep 2026
Updated
25 Sep 2026

Overview

Slider is an open-source printed circuit board by positron48, from the positron48/camera-slider repository on GitHub. It is a 2-layer board of 155 × 115 mm with 136 parts on 70 nets, routed with 785 tracks and 0 vias.

It is built around the R-78E5.0-1.0, SN74LVC14AD and IRF4905. Its parts include 36 resistors, 23 capacitors, 8 connectors, 5 ICs and 3 transistors. It belongs with the ESP32 and RISC-V boards of this library.

Main components

3

README

README.md

Camera Slider

A DIY camera slider with independent linear travel and continuous pan, controlled by an ESP32-C6.

Two stationary stepper motors drive a belt-and-gear mechanism that moves the carriage and rotates the camera platform. Program a move with the rotary encoder, or open Motion Studio in a browser to build keyframe sequences, preview camera motion, and track a fixed point in the scene.

The repository contains the mechanical design, printable parts, KiCad electronics, firmware, and assembly documentation. The current mechanical release is v06, with 10 mm belts and a compact motor bridge.

Mechanical files · Web interface · OLED controls · Electronics · Getting started · Русский обзор

Camera Slider v06 CAD assembly

CAD rendering of the v06 assembly. Watch the 37-second demo with English captions · Animation sources

Features

  • Coordinated slide and pan. Set carriage position in millimeters and camera angle in degrees; both axes arrive together. Angles accumulate across turns, so 720° means two complete rotations.
  • Timed or speed-based moves. Use a specific duration or a constant travel speed. Stationary pans use degrees per second.
  • Standalone operation. An SSD1306 OLED and a rotary encoder provide HOME, manual movement, a local scenario editor, and controller settings without a phone or computer.
  • Persistent local scenarios. The encoder's 2–8-point scenario is saved in ESP32 nonvolatile memory when an edited value is confirmed or a point is added/deleted.
  • Browser-based Motion Studio. Create up to 64 keyframes and 16 target objects, with separate timing and tracking settings for each transition.
  • Geometric object tracking. Keep the camera aimed at a fixed scene coordinate during a slide, with an optional framing offset. This uses known coordinates, not computer vision.
  • Offline preview and JSON exchange. Scrub through frames, preview at different playback speeds, save named scenarios in the browser, and import/export JSON.
  • Wi-Fi with a fallback access point. Save your network's SSID and password through the web interface. The controller reconnects automatically while its own access point remains available.
  • Local hostname. Open slider.local on a network that supports mDNS, or use the controller's IP address.
  • On-device execution. A running scenario continues if the browser closes or Wi-Fi disconnects. The web STOP button, encoder button, and USB console can stop motion.

Motion Studio

The controller serves its own HTML and JavaScript: no cloud service, account, or internet connection is required. The web interface supports English and Russian. Use the Language / Язык selector in the header; the choice is remembered in this browser. On first visit, Russian browser locales use Russian and other locales use English. OLED menus are in English.

The screenshots below show the actual interface running against a local documentation fixture. Positions, HOME state, SSID, and IP are demonstration data, not a live hardware test.

Scene preview and tracking

Choose keyframes on a top-down view of the rail, place target objects, and inspect the camera's orientation before moving anything. The solid camera is the preview; the dashed camera represents the position reported by the controller.

Motion Studio scene preview with a fixed target object

Each transition can use a duration, speed, or frame count. Frame-count timing is calculated as frames / FPS; it does not trigger the camera shutter. Continuous tracking can be enabled separately for each transition.

Try the included object-tracking example: a 600 mm slide around a target at X=300 mm, Y=200 mm over 180 seconds.

Manual movement

Enter an absolute X position and angle, then choose a duration or speed. The interface also provides motor arming, manual HOME, and switch-based homing.

Motion Studio manual movement with target position, angle, and duration

Previewing or editing a scenario does not move the motors. To execute a scenario, establish HOME, validate it, move to its first keyframe, wait for the controller to become ready, and then run it.

Network settings

Enter your 2.4 GHz Wi-Fi SSID and password under Settings → Connection, then select Save and connect. The credentials are stored on the ESP32 and applied without a reboot. Use Forget network to return to access-point-only operation.

Motion Studio Wi-Fi settings and local network address

The CameraSlider access point remains enabled even when connected to a router. Failed connections, lost connections, and unfinished DHCP attempts are retried every 30 seconds. A channel change during connection can briefly interrupt an access-point client.

Open http://slider.local from the same local network. If mDNS is blocked or client isolation is enabled, use the IP shown in the connection panel or USB log. The hostname assumes one slider on the network.

What is saved where?

DataStorageAfter a restart
Encoder scenario: point count, X, angle, transition timeESP32 NVSRestored automatically
Calibration, travel limit, rates, microsteps, rotation inversionESP32 NVSRestored automatically
Wi-Fi SSID and passwordESP32 NVSReconnection attempted automatically
Web drafts, named scenarios, editor preferences, and interface languageBrowser localStorageAvailable in the same browser and at the same site address
Position, HOME, and execution stateRuntime memoryHOME must be established again; no automatic motion

The encoder scenario and browser library are separate. Export JSON to transfer browser scenarios between devices or between the AP IP, LAN IP, and slider.local addresses.

Standalone control

Hold the encoder button for about 0.8 seconds to arm the motors. Turn to select an item; click to open it or confirm an edited value. A long press ends editing or returns to the main menu.

Six OLED screens: menu, manual move, point editor, scenario, progress, and completion

These are pixel-accurate outputs from the firmware's 128×64 display renderer, enlarged 3×. They are not photographs of a physical OLED.

MenuPurpose
HOMESet the current position to zero without moving, or home against an NC switch
MANUALSet absolute X, accumulated angle, and a move duration
SCENARIOEdit 2–8 points, add/delete points, move to a point, or run from point 1
SETTINGSConfigure travel, calibration, rates, HOME, per-motor microsteps, and rotation inversion
POWER OFFDisable the motor drivers and require arming again

For local scenarios, NEXT is the time from the selected point to the next one, from 1 to 3600 seconds. Confirm the edited field before switching off power: flash is written on confirmation, not on every encoder detent. A failed write shows SCENARIO SAVE ERROR and can be retried by confirming again.

During motion, the OLED shows progress, passed/upcoming keyframes, elapsed time, and time remaining. A completed move shows DONE. Pressing the encoder during ordinary motion requests a stop; pressing it during automatic homing accepts the current position as HOME.

Mechanical design and parts

The v06 design uses a 700 mm V-Slot 2020 rail, a four-wheel carriage, two 17HS4401S NEMA 17 motors, and a 1/4″-20 camera mount. Both motors stay at one end of the rail. The camera platform supports continuous mechanical rotation; the camera and any attached cables must allow it.

Componentv06 specification
Carriage plate50 × 50 × 6 mm, four wheels
BeltsTwo endless 2GT belts, 10 mm wide, nominal 1400 mm pitch length
Motor pulleysPurchased 20T 2GT pulleys, 5 mm bore
Carriage transmissionPrinted 40T belt pulleys / 30T gears driving a 60T center gear
BearingsFour 625 and two 608 bearings
Motor bridge110 mm wide; motor shaft spacing 65.3 mm
Platform height75.7 mm above the table, excluding camera and protruding mounting screw
Printed partsPETG; bearing and belt-profile test coupons included

The rail length is not the usable travel. Set the firmware travel limit to the actual assembled clearance; the default is 600 mm.

Close-up of the v06 carriage, belt routing, and camera platform

Download and build

ResourceFiles / documentation
Complete mechanical packagev06 release folder and release notes
Editable Fusion assemblycamera-slider-v06.f3d
Complete STEP assemblycamera-slider-v06.step
Individual parts / detail modelsSTEP parts · STL parts
Bill of materialsParts, quantities, dimensions, and fasteners
Assembly instructionsAssembly sequence
Print preparationPrint orientation and fit checks
Snapmaker U1 projectPrepared plate and slicer settings
TransmissionBelt routing and kinematics
Design decisionsv06 revision notes
CAD sourcePython geometry and build scripts

Detailed mechanical and electronics notes are currently mostly in Russian. Part IDs are consistent across the BOM, STEP/STL files, and CAD generators. Do not mix parts from different revisions.

The Fusion bodies are editable solids. Dimensions are reproduced by the Python generators; Fusion motion joints and a parametric feature timeline are not configured. Older designs remain under cad/ and manufacturing/ for reference.

Electronics

The controller combines a MuseLab nanoESP32-C6 v1.0, two TMC2209 modules, an SSD1306 I²C OLED, a KY-040 rotary encoder, and one optional normally closed HOME switch.

ResourceLink
KiCad projectslider.kicad_pro
Top-level schematicslider.kicad_sch
PCB layoutslider.kicad_pcb
Local symbols and footprintsSlider.kicad_sym · Slider.pretty
Electronics status and assembly notesElectronics README
Electronics BOMComponent list
Module pinout correctionTMC2209 pin mapping notes
Firmware wiring referenceBoard pin definitions · Detailed wiring guide

Open the project from the electronics/kicad/ directory so its local libraries resolve. The PCB contains manual layout/routing work. The electronics notes document a driver pinout correction and a required schematic-to-PCB review; archived manufacturing files and old DRC results do not certify the current board. Do not regenerate the PCB over those edits.

Firmware pin assignment

SignalESP32-C6 GPIO
OLED SDA / SCL6 / 7
Motor 1 STEP / DIR / EN18 / 19 / 15
Motor 2 STEP / DIR / EN20 / 21 / 1
Encoder CLK / DT / button10 / 11 / 3
HOME switch0

The firmware uses STEP/DIR control without TMC2209 UART. Each driver has its own enable signal. The default microstep settings are 1/8 for M1 and 1/32 for M2; set the firmware to match the physical MS1/MS2 straps. Software settings do not change the driver's electrical mode.

Use 12 V for motor power, the board's designated 5 V input or USB for the MCU, and 3.3 V for the OLED and encoder, with a common ground. Check module orientation, coil pairs, VREF/current, and the wiring guide before powering the motors.

Getting started

  1. Review the BOM and print the fit coupons before the main mechanical parts. Follow the v06 assembly guide and check belt clearance and free movement.
  2. Verify the electronics and set each driver's current and microstep straps. Connect the OLED and encoder; a HOME switch is optional when using manual zero.
  3. Build and flash the firmware.
  4. Set travel and calibration for your mechanism. Place the carriage and camera at the intended origin, arm the motors, and choose SET HOME HERE, or use automatic homing with a correctly wired switch.
  5. Start with a short, slow move before trying a full scenario.

Build and flash

The firmware uses ESP-IDF 6.0.2, targeting ESP32-C6. From an activated ESP-IDF environment:

sh
cd firmware
idf.py set-target esp32c6
idf.py build
idf.py -p /path/to/serial-port flash monitor

From the repository root, the Makefile provides the equivalent convenience commands:

sh
make build IDF_PATH=/path/to/esp-idf
make upload IDF_PATH=/path/to/esp-idf PORT=/path/to/serial-port
make monitor IDF_PATH=/path/to/esp-idf PORT=/path/to/serial-port

IDF_PATH defaults to ~/esp/esp-idf-v6.0.2. Replace the serial port with your device's port, such as /dev/ttyACM0 or /dev/cu.usbmodemXXXX. Exit the serial monitor with Ctrl+].

Connect to the controller

SettingDefault
Wi-Fi access pointCameraSlider
Access-point passwordslider-control
Access-point URLhttp://192.168.4.1
Local-network URLhttp://slider.local or the DHCP IP

Join CameraSlider and open its URL. You can then configure your own Wi-Fi network in Motion Studio. There is no automatic movement after boot, even when a saved scenario exists.

Development and validation

DirectoryContents
firmware/ESP-IDF application, web assets, host tests, and example scenarios
cad/v06/Geometry, Fusion generation, OpenCascade builds, and validation scripts
manufacturing/prototype-v06/Released mechanical models, print meshes, BOM, and assembly notes
electronics/KiCad project, specifications, libraries, and historical reports
animation/v06/Scene assets, demonstrations, and rendering tools
docs/README screenshots and reproducible documentation tools
references/Component photos and dimensional references

Run the firmware's host checks with a C compiler, Python 3, and Node.js:

sh
python3 firmware/tests/run.py
node firmware/tests/test_web.mjs

The tests cover motion planning, coordinated motor stepping, encoder decoding, HOME and stop behavior, local scenario persistence, Wi-Fi retry/fallback logic with mocked ESP-IDF calls, and display rendering. The web tests cover scenario timing, tracking, JSON migration, and browser storage serialization.

The v06 mechanical package includes reports for solid geometry, belt clearance, gear engagement, motion combinations, and mesh integrity. These checks and host tests do not establish physical payload capacity, missed-step behavior, repeatability, or camera footage quality. The current firmware uses constant-speed motion without acceleration ramps; practical speed and load limits must be established on the assembled mechanism.

For full operating details, see the firmware guide. For screenshot provenance and regeneration, see documentation images. Third-party geometry references are recorded in the v06 source notes.

Parts

136
QtyValueFootprintReferences
1210kSlider:R_0805_2012MetricR15, R21, R24, R25, R26, R27, R31, R32, R33, R34, R35, R36
7100nSlider:C_0805_2012MetricC8, C9, C10, C12, C13, C14, C15
71kSlider:R_0805_2012MetricR20, R41, R42, R43, R44, R45, R46
610nSlider:C_0805_2012MetricC21, C22, C23, C24, C25, C26
5100RSlider:R_0805_2012MetricR10, R11, R12, R13, R14
5100kSlider:R_0805_2012MetricR1, R16, R17, R18, R19
54k7Slider:R_0805_2012MetricR51, R52, R53, R54, R60
4H1, H2, H3, H4
20RSlider:R_0805_2012MetricR22, R23
2100n 50VSlider:C_0805_2012MetricC16, C17
2220u 35VSlider:CP_Radial_D8.0mm_P3.50mmC2, C3
2BSS138 G/S/DSlider:SOT-23Q2, Q3
2MKS TMC2209 V1.0Slider:MKS_TMC2209_V1U2, U3
1+3V3Slider:TESTPOINTTP3
1+5VSlider:TESTPOINTTP2
110uSlider:C_0805_2012MetricC7
110u 16VSlider:C_0805_2012MetricC5
110u 50VSlider:C_0805_2012MetricC4
112V INPUTSlider:POWER_P7.40J1
112V ZENER K/ASlider:D_SOD-123D2
11uSlider:C_0805_2012MetricC11
1470u 35VSlider:CP_Radial_D10.0mm_P5.00mmC1
147u 16VSlider:CP_Radial_D6.3mm_P2.50mmC6
1DISPLAY G V C DSlider:CONN_4_P2.50J7
1DISPLAY VOLTAGESlider:HDR_3_P2.54JP2
1DRV_ENSlider:TESTPOINTTP5
1ENDSTOP1Slider:HDR_3_P2.54J4
1ENDSTOP2Slider:HDR_3_P2.54J5
1ENDSTOP3Slider:HDR_3_P2.54J6
1FUSE HOLDERSlider:FUSE_WIRESF1
1GNDSlider:TESTPOINTTP4
1IRF4905Slider:TO-220-3_VerticalQ1
1KY-040 CABLESlider:HDR_5_P2.54J8
1MCU POWERSlider:HDR_2_P2.54JP1
1MOTOR1Slider:CONN_4_P2.50J2
1MOTOR2Slider:CONN_4_P2.50J3
1MuseLab nanoESP32-C6 v1.0Slider:MCU_2x15U1
1R-78E5.0-1.0Slider:RECOM_SIP3U5
1SMBJ15A K/ASlider:D_SMBD1
1SN74LVC14ADSlider:SOIC-14_3.9x8.7mm_P1.27mmU4
1TMC_UART_BUSSlider:TESTPOINTTP6
1VMSlider:TESTPOINTTP1
1WIRE +3V3Slider:Wire_W37W37
1WIRE +3V3Slider:Wire_W38W38
1WIRE +3V3Slider:Wire_W36W36
1WIRE +5VSlider:Wire_W2W2
1WIRE DRV_ENSlider:Wire_W19W19
1WIRE ENC_CLK_FSlider:Wire_W29W29
1WIRE ENC_CLK_MCUSlider:Wire_W20W20
1WIRE ENC_CLK_RAWSlider:Wire_W13W13
1WIRE ENC_DT_FSlider:Wire_W28W28
1WIRE ENC_DT_MCUSlider:Wire_W22W22
1WIRE ENC_DT_RAWSlider:Wire_W30W30
1WIRE ENC_SW_FSlider:Wire_W14W14
1WIRE ENC_SW_RAWSlider:Wire_W11W11
1WIRE ES1_FSlider:Wire_W6W6
1WIRE ES1_MCUSlider:Wire_W5W5
1WIRE ES2_FSlider:Wire_W39W39
1WIRE ES2_MCUSlider:Wire_W33W33
1WIRE GNDSlider:Wire_W44W44
1WIRE GNDSlider:Wire_W46W46
1WIRE GNDSlider:Wire_W43W43
1WIRE GNDSlider:Wire_W45W45
1WIRE GNDSlider:Wire_W42W42
1WIRE GNDSlider:Wire_W41W41
1WIRE I2C_SCL_LSlider:Wire_W15W15
1WIRE I2C_SDA_LSlider:Wire_W27W27
1WIRE M1_A1Slider:Wire_W24W24
1WIRE M1_A2Slider:Wire_W31W31
1WIRE M1_B1Slider:Wire_W40W40
1WIRE M1_DIRSlider:Wire_W17W17
1WIRE M1_DIR_MCUSlider:Wire_W4W4
1WIRE M1_STEPSlider:Wire_W10W10
1WIRE M1_STEP_MCUSlider:Wire_W25W25
1WIRE M2_B1Slider:Wire_W32W32
1WIRE M2_B2Slider:Wire_W18W18
1WIRE M2_DIRSlider:Wire_W21W21
1WIRE M2_DIR_MCUSlider:Wire_W3W3
1WIRE M2_MS2Slider:Wire_W16W16
1WIRE M2_STEPSlider:Wire_W1W1

The 128 most common of 136 parts.

More from positron48/camera-slider

8
  • 2 layers155 × 115 mmSlider unrouted, the printed circuit board in 3D

    Slider unrouted

    positron48/camera-slider

    Two stationary stepper motors drive a belt-and-gear mechanism that moves the carriage and rotates the camera platform.

    90 parts
  • 2 layers155 × 115 mmSlider unrouted, the printed circuit board in 3D

    Slider unrouted

    positron48/camera-slider

    Two stationary stepper motors drive a belt-and-gear mechanism that moves the carriage and rotates the camera platform.

    38 parts
  • 2 layers155 × 115 mmSlider, the printed circuit board in 3D

    Slider

    positron48/camera-slider

    Two stationary stepper motors drive a belt-and-gear mechanism that moves the carriage and rotates the camera platform.

    36 parts
  • 2 layers155 × 115 mmSlider unrouted, the printed circuit board in 3D

    Slider unrouted

    positron48/camera-slider

    Two stationary stepper motors drive a belt-and-gear mechanism that moves the carriage and rotates the camera platform.

    31 parts
  • 2 layers155 × 115 mmSlider unrouted, the printed circuit board in 3D

    Slider unrouted

    positron48/camera-slider

    Two stationary stepper motors drive a belt-and-gear mechanism that moves the carriage and rotates the camera platform.

    29 parts
  • 2 layers155 × 115 mmSlider unrouted, the printed circuit board in 3D

    Slider unrouted

    positron48/camera-slider

    Two stationary stepper motors drive a belt-and-gear mechanism that moves the carriage and rotates the camera platform.

    29 parts
  • 2 layers155 × 115 mmSlider, the printed circuit board in 3D

    Slider

    positron48/camera-slider

    Two stationary stepper motors drive a belt-and-gear mechanism that moves the carriage and rotates the camera platform.

    27 parts
  • 2 layersSlider, the printed circuit board in 3D

    Slider

    positron48/camera-slider

    Two stationary stepper motors drive a belt-and-gear mechanism that moves the carriage and rotates the camera platform.

    23 parts

Similar boards

  • 2 layers405 × 135 mmKeyboard, the printed circuit board in 3D

    Keyboard

    jasperhax0r/CompaqPortableKeyboard

    Mechanical Keyboard for the original Compaq Portable XT-Class

    188 parts2MIT
  • 2 layers205 × 205 mmThree channel dc motor driver pcb, the printed circuit board in 3D

    Three channel dc motor driver pcb

    SrcnUysl/three-channel-dc-motor-driver-pcb

    KiCad-based three-channel DC motor driver and control PCB featuring STM32 interfacing and integrated power management.

    39 parts
  • 2 layers125 × 89.5 mmLta logic module, the printed circuit board in 3D

    Lta logic module

    kimballa/like-the-art-pcb

    PCB Schematics for Like The Art project

    113 parts
  • 4 layers84.5 × 64 mmMESC brain board, the printed circuit board in 3D

    MESC brain board

    owhite/balancing-robot-notes

    A control theory and software development repo for a balancing robot.

    45 partsMIT
  • 2 layers135 × 105 mmSmartBin Carrier, the printed circuit board in 3D

    SmartBin Carrier

    Sylphiette666/stm32-rfid-smart-bin

    STM32F103 and RFID smart mobile bin coursework: assembly guide, mechanical design, wiring, PCB archives and firmware resources

    112 parts
  • 2 layers171.5 × 106.7 mmSequencer, the printed circuit board in 3D

    Sequencer

    westlicht/performer-hardware

    PER|FORMER Eurorack Sequencer - Hardware Design Files

    435 parts110
  • 2 layers200 × 81 mmPSU-30W, the printed circuit board in 3D

    PSU-30W

    ctag-fh-kiel/PSU-30W

    Eurorack power supply unit DCDC

    43 parts24
  • 2 layers27.2 × 96.1 mm24vled esp32c6, the printed circuit board in 3D

    24vled esp32c6

    arlyon/rust-matter-led

    A Matter-compatible 5-channel RGBCW LED controller built on a custom PCB with an ESP32-C6, written entirely in Rust.

    26 parts5

Questions

How big is the Slider PCB?

It measures 155 × 115 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Slider use?

136 parts, built around the R-78E5.0-1.0, SN74LVC14AD and IRF4905. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Slider KiCad files?

From the positron48/camera-slider repository on GitHub, at the commit this page was made from: the board is electronics/archive/rev-c-before-simplification-20260914-212133/kicad/slider.kicad_pcb and its schematic electronics/archive/rev-c-before-simplification-20260914-212133/kicad/display.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Slider design in my own project?

Its repository states no licence, so its author keeps all rights: ask positron48 before reusing the design.