

Controller
This is my first custom hardware module for the hackxpansion console. It combines a physical rotary encoder knob with two extra push buttons so you can scroll through menus, tweak settings, and play games with tactile…
- Size
- 32 × 25.5 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 8
- Nets
- 14
- Pads
- 35
- Tracks, vias
- 60, 7
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 24 Aug 2026
- Updated
- 24 Aug 2026
Overview
Controller is an open-source printed circuit board by Alcindoromycine1, from the Alcindoromycine1/controller repository on GitHub. It is a 2-layer board of 32 × 25.5 mm with 8 parts on 14 nets, routed with 60 tracks and 7 vias.
Its parts include 3 switches, 2 resistors and 1 connector.
README
README.mdController!
This is my first custom hardware module for the hackxpansion console. It combines a physical rotary encoder knob with two extra push buttons so you can scroll through menus, tweak settings, and play games with tactile controls.
Design
I wanted to build something practical for menu navigation without taking up too much space.
I combined a standard EC11 rotary encoder (with its built-in push switch) alongside two standalone push buttons. The encoder handles spinning controls for scrolling lists or adjusting levels, while the buttons give you quick action controls for selecting items or going back.
Schematic
I made this schematic in KiCad by routing the encoder pins (GPIO0 & GPIO1), the two external buttons (GPIO2 & GPIO3), and the encoder shaft button (GPIO4) directly to the hackxpansion pin headers.
Layout
The board layout fits a single hackxpansion module slot. It uses a standard 2-layer PCB with ground planes on both top and bottom layers.
You can inspect the design in your browser using the Live Interactive PCB Layout (KiCanvas).
Case & 3D Model
I modeled the enclosure in Fusion 360 using the hackxpansion base template. The shell holds the PCB using two M2 screws from the back so the knob and buttons stay solid when pressed.
Check out the interactive 3D model via the Fusion 360 Live Web Link.
Software & Hardware Config
The driver for this module was built in Rust using xpanse-api.
- Public Project Page: https://hackxpansion.hackclub.com/explore/1k:36k
- MD0 Resistor: 1kΩ (R1K)
- MD1 Resistor: 36kΩ (R36K)
Pin mapping:
GPIO0&GPIO1-> Rotary Encoder rotationGPIO2-> Button AGPIO3-> Button BGPIO4-> Encoder Shaft Push Switch (Button X)
The driver code lives in the /firmware folder.
BOM
| Component / Vendor | Quantity | Unit Price ($) | Link |
|---|---|---|---|
| ALPSALPINE EC11 Encoder | 1 | 2.24 | LCSC C202365 |
| SHOU HAN 6x6 Tactile Switches | 2 | 0.05 | LCSC C393938 |
| 0805 1kΩ Resistor (MD0) | 1 | 0.01 | LCSC C2889523 |
| 0805 36kΩ Resistor (MD1) | 1 | 0.01 | LCSC |
| PCB Fabrication (JLCPCB) | 1 | 4.00 | JLCPCB |
| Printing Legion 3D Printed Case | 1 | 10.00 | Custom Print |
| Shipping Costs | 1 | 17.00 | N/A |
| Total Cost | $33.37 |
Parts
8| Qty | Value | Footprint | References |
|---|---|---|---|
| 2 | SW_Push | Button_Switch_THT:SW_PUSH_6mm | SW2, SW3 |
| 1 | 1k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R1 |
| 1 | 35k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R2 |
| 1 | RotaryEncoder_Switch | Rotary_Encoder:RotaryEncoder_Bourns_Vertical_PEC12R-3x17F-Sxxxx | SW1 |
| 1 | ~ | Hackxpansion:Male_Module | J1 |
The 6 most common of 8 parts.
Questions
How big is the Controller PCB?
It measures 32 × 25.5 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Controller use?
8 parts. 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 Controller KiCad files?
From the Alcindoromycine1/controller repository on GitHub, at the commit this page was made from: the board is pcb/controller.kicad_pcb and its schematic pcb/controller.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Controller design in my own project?
Its repository states no licence, so its author keeps all rights: ask Alcindoromycine1 before reusing the design.
Similar boards
- 2 layers20.5 × 24.8 mm

- 2 layers14.4 × 10.5 mm

OSO SWAB B1-00 Sensor Watch Accelerometer
joeycastillo/Sensor-Watch
A board replacement for the classic Casio F-91W wristwatch
8 parts2.1k - 2 layers7.9 × 39.1 mm

Brain board STM32F407 SD wing it
rusefi/rusefi
rusefi - GPL internal combustion engine control unit
8 parts1.2k - 2 layers59.9 × 25.7 mm

Buffer
hoglet67/RGBtoHDMI
Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI
8 parts1kGPL-3.0 - 2 layers52 × 12.6 mm

USB
shanteacontrols/OpenDeck
A platform for building interactive control and sensing devices using MIDI and OSC built with Zephyr RTOS.
8 parts960Apache-2.0 - 2 layers87.5 × 48.5 mm

7 input macropad
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
8 parts915 - 2 layers36.2 × 63.1 mm

PicoMemcard pico
dangiu/PicoMemcard
Emulating PSX Memory Card (or controller) using a Raspberry Pi Pico
8 parts694GPL-3.0 - 2 layers36 × 10 mm

PCB4-PWR BTN Rev.A
OLIMEX/DIY-LAPTOP
Do It Yourself Open Source Hardware and Software Modular Hacker's Friendly Laptop
8 parts578Apache-2.0