Skip to the content
PCBKitNew board
2 layers36.7 × 75.2 mmShifter, the printed circuit board in 3D

Rally Shifter Pro is a fully open DIY sim-racing sequential shifter based on a mechanical design sourced from GrabCAD. It integrates a custom ESP32-S3 firmware exposing a native USB HID Gamepad, analog Hall effect sensing (SS49E), and a polished Python desktop application for real-time telemetry, calibration, and configuration.

Size
36.7 × 75.2 mm
Copper layers
2
Thickness
1.6 mm
Parts
3
Nets
39
Pads
49
Tracks, vias
40, 0
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
9 Apr 2026
Updated
12 May 2026

Overview

Shifter is an open-source printed circuit board by LMHDPRO, from the LMHDPRO/open-sequential-shifter repository on GitHub. It is a 2-layer board of 36.7 × 75.2 mm with 3 parts on 39 nets, routed with 40 tracks and 0 vias.

It is built around the ESP32-S3-DEVKITC-1-N8. Its parts include 2 connectors and 1 IC. It belongs with the ESP32 boards of this library.

Main components

1

README

README.md
text
██████╗  █████╗ ██╗     ██╗  ██╗   ██╗    ███████╗██╗  ██╗██╗███████╗████████╗███████╗██████╗
██╔══██╗██╔══██╗██║     ██║  ╚██╗ ██╔╝    ██╔════╝██║  ██║██║██╔════╝╚══██╔══╝██╔════╝██╔══██╗
██████╔╝███████║██║     ██║   ╚████╔╝     ███████╗███████║██║█████╗     ██║   █████╗  ██████╔╝
██╔══██╗██╔══██║██║     ██║    ╚██╔╝      ╚════██║██╔══██║██║██╔══╝     ██║   ██╔══╝  ██╔══██╗
██║  ██║██║  ██║███████╗███████╗██║       ███████║██║  ██║██║██║        ██║   ███████╗██║  ██║
╚═╝  ╚═╝╚═╝  ╚═╝╚══════╝╚══════╝╚═╝       ╚══════╝╚═╝  ╚═╝╚═╝╚═╝        ╚═╝   ╚══════╝╚═╝  ╚═╝
Open DIY Sequential Shifter — ESP32-S3 · Hall Sensor · USB HID

PlatformIO Python License HID Status

Open-source, plug-and-play USB sequential shifter with analog Hall sensing and pro-grade desktop calibration software.

Compact mechanical design (80×80×5 mm), CNC-machined aluminum body, and a clean Python UI — assembled in minutes, no drivers required.


Overview

Rally Shifter Pro is a fully open DIY sim-racing sequential shifter based on a mechanical design sourced from GrabCAD. It integrates a custom ESP32-S3 firmware exposing a native USB HID Gamepad, analog Hall effect sensing (SS49E), and a polished Python desktop application for real-time telemetry, calibration, and configuration.

Mechanical design source: GrabCAD — Mini Sequential Shifter and Handbrake (80×80×5 mm)
All credit to the original mechanical designer.


Features

  • USB HID Gamepad — plug & play, no drivers needed on Windows, Linux, or macOS
  • Analog Hall sensor (SS49E) — true continuous sensing, no mechanical wear
  • Signal processing pipeline — moving average filter → normalization → dead zone → hysteresis
  • On-device calibration — 3-step wizard (min / center / max)
  • Persistent configuration — settings saved to ESP32 NVS (survives power loss)
  • Serial CDC protocol — bidirectional JSON config, live STATUS, PING/PONG
  • Desktop companion app — live telemetry, deadzone tuning, calibration wizard (PySide6)
  • Compact form factor — 80×80×5 mm main body
  • All-metal construction — CNC aluminum 6061, bronze bushings, PLA/PETG printed parts

System Architecture

text
[ Mechanical Assembly — CNC Al 6061 + Printed Parts ]
                        ↓
          [ SS49E Hall Sensor + M6x10 Neodymium Magnet ]
                        ↓
         [ ESP32-S3 — 12-bit ADC · Moving Average ]
                        ↓
          [ Normalize → Dead Zone → Hysteresis ]
                        ↓
      ┌─────────────────┴─────────────────┐
      │                                   │
[ USB HID Gamepad ]             [ USB CDC Serial ]
  leftStick axis X                CONFIG / CAL / STATUS
  Button 0 = Shift Down
  Button 1 = Shift Up
      │                                   │
      └─────────────────┬─────────────────┘
                        ↓
         [ Rally Shifter Pro — Python UI ]
           Live telemetry · Tuning · Flash

Hardware

Microcontroller

ParameterValue
MCUESP32-S3 DevKit-C 1
FrameworkArduino (PlatformIO)
USBNative HID + CDC (simultaneous)
ADC12-bit (0–4095), 3.3V
Hall pinGPIO 9 (ADC capable)

Sensor — SS49E Hall Effect

PinConnection
VCC3.3V
GNDGND
OUTGPIO 9 (ADC)

Full wiring details: docs/wiring.md

Materials

PartMaterial
Main body platesCNC Aluminum 6061
Bushing (M8-10×12)Graphite self-lubricating bronze
FastenersStainless steel
3D printed brackets / coversPLA or PETG
Optional enclosure panelsAcrylic

Bill of Materials

See hardware/bom/bom.csv and hardware/bom/bom_explained.md


Firmware

Built with PlatformIO for ESP32-S3.

bash
# Install PlatformIO (VS Code extension recommended)
# Clone and open the repo, then:

pio run                        # build
pio run --target upload        # flash
pio device monitor             # serial monitor (115200)

Serial Protocol

text
PING                → PONG:RallyShifter:1.0
STATUS              → STATUS:<raw>,<axis>,<hyst_state>
CONFIG:{json}       → ACK:CONFIG  |  ERR:JSON
CAL:0..3            → ACK:CAL:<n>
DEFAULTS            → ACK:DEFAULTS

Full protocol: docs/protocol.md


Software (Python)

Desktop companion app — calibration, tuning, and live telemetry.

bash
pip install -r software/requirements.txt
python software/src/main.py

Stack

LibraryPurpose
PySide6Desktop UI framework
pygameUSB HID Gamepad reading
pyserialCDC serial config/calibration

Assembly Guide

  1. Print or source mechanical parts (see GrabCAD link above)
  2. Machine main plates from aluminum 6061 (or order CNC)
  3. Install F688 flange bearings, bronze bushings, and mold springs
  4. Mount M6×10 neodymium magnet on the crossbar
  5. Mount SS49E sensor aligned with magnet axis (see docs/wiring.md)
  6. Wire ESP32-S3 (3 wires: VCC, GND, signal)
  7. Flash firmware via PlatformIO
  8. Run calibration wizard in desktop app
  9. Plug in and play — recognized as USB Gamepad

Repository Structure

text
rally-shifter-pro/
├── README.md
├── LICENSE
├── .gitignore
├── CONTRIBUTING.md
│
├── docs/
│   ├── images/            ← device photos, UI screenshots
│   ├── protocol.md        ← serial CDC protocol reference
│   ├── wiring.md          ← hall sensor wiring + pinout
│   ├── calibration.md     ← calibration procedure
│   └── design_notes.md    ← technical decisions
│
├── hardware/
│   ├── mechanical/
│   │   ├── source.md      ← GrabCAD credits + link
│   │   └── modifications.md
│   ├── pcb/               ← (future — schematic + gerbers)
│   └── bom/
│       ├── bom.csv
│       └── bom_explained.md
│
├── firmware/
│   ├── platformio.ini

Signal Processing

The firmware applies a 4-stage pipeline on every ADC sample:

text
ADC Read (12-bit) → Moving Average (12 samples) → Normalize (-1.0..+1.0)
        → Dead Zone removal → Hysteresis shift detection
ParameterDefaultDescription
dz_low-0.13Dead zone lower bound
dz_high+0.13Dead zone upper bound
thr_down-0.62Shift-down threshold
thr_up+0.62Shift-up threshold
hysteresis0.10Return-to-neutral margin

All values are tunable live via the desktop app and persisted to NVS.


License

MIT License — see LICENSE

This project uses and credits the mechanical design published on GrabCAD. All firmware, electronics, and software are original work released under MIT.


Credits

Mechanical design: GrabCAD contributor

RoleName
Electronics, Firmware & SoftwareJosé Pardiñaz
ContributorÁlvaro Martínez
ContributorNatalia McDonald
ContributorAlberto Negrete

Made with ☕ in Mérida, Yucatán, MX


Disclaimer

DIY project. No warranty expressed or implied. Build and use at your own risk.

Parts

3
QtyValueFootprintReferences
2Conn_01x03_SocketConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ1, J2
1ESP32-S3-DevKitCPCM_Espressif:ESP32-S3-DevKitCU1

Questions

How big is the Shifter PCB?

It measures 36.7 × 75.2 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Shifter use?

3 parts, built around the ESP32-S3-DEVKITC-1-N8. 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 Shifter KiCad files?

From the LMHDPRO/open-sequential-shifter repository on GitHub, at the commit this page was made from: the board is hardware/pcb/Shifter/Shifter.kicad_pcb and its schematic hardware/pcb/Shifter/Shifter.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Shifter design in my own project?

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

Similar boards

  • 4 layers95 × 95 mmCube motherboard, the printed circuit board in 3D

    Cube motherboard

    willem-pennings/balancing-cube

    A cube that balances itself in a corner or edge using reaction wheels

    52 parts1.1kGPL-3.0
  • 2 layers129.9 × 63.6 mmTraeger rev 2.3.0.kicad pro, the printed circuit board in 3D

    Traeger rev 2.3.0.kicad pro

    jazzmonger/Traeger-PID-Controller

    Traeger Smoker/Grill Controller based on an

    45 parts36
  • 2 layers168.8 × 78.9 mmGameboy3, the printed circuit board in 3D

    Gameboy3

    ohasanov-hbrw/tribit32-advanced

    A tri-microcontroller, overengineered GameBoy Advance clone. More value was given to the controls and the exterior look, which is cool!

    61 parts8
  • 2 layers134.6 × 49.5 mmMem esp, the printed circuit board in 3D

    Mem esp

    fread/visvitalis

    A very simple modular relay computer

    71 parts7
  • 2 layers90 × 102 mmPL Toon, the printed circuit board in 3D

    PL Toon

    pl-toon/pl-toon-codes

    PL-TOON material

    39 parts7
  • 2 layers119.4 × 98.9 mmPCB Pami, the printed circuit board in 3D

    PCB Pami

    FIPATECH/CDFR26_PAMI

    Open source firmware and PCB for a differential mobile robot (PAMI) based on ESP32-S3 - Coupe de France de Robotique

    25 parts6
  • 2 layers76.2 × 40.6 mmEspressifESP32toExpressAdaptor, the printed circuit board in 3D

    EspressifESP32toExpressAdaptor

    dnhutchins/ETC_Express_Reverse_Eng

    The ultimate goal of this work is to develop an interface to use the control surface from a legacy ETC Express 24/48 lighting controller as a modern EOSNomad compatible programming and fader wing.

    3 parts5
  • 2 layersE ink multi sensor, the printed circuit board in 3D

    E ink multi sensor

    heckler/esphome-device-configs

    Configuration definitions for local ESPHome files

    11 parts4Apache-2.0