

Controller2
Custom Gamepad Controller
- Size
- 132.1 × 96.5 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 38
- Nets
- 41
- Pads
- 174
- Tracks, vias
- 361, 52
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 10 Sep 2026
- Updated
- 10 Sep 2026
Overview
Controller2 is an open-source printed circuit board by Somet647, from the Somet647/Controller repository on GitHub. It is a 2-layer board of 132.1 × 96.5 mm with 38 parts on 41 nets, routed with 361 tracks and 52 vias.
It is built around the ATMEGA32U4-AU. Its parts include 14 switches, 10 capacitors, 6 resistors, 2 connectors and 1 IC. It belongs with the keyboards and input boards and the AVR (ATmega, ATtiny) boards of this library.
Main components
1README
README.mdCustom ATmega32U4 USB HID Gamepad
A custom USB gamepad designed and built around an ATmega32U4 microcontroller. This project started as a breadboard prototype using an Arduino and was developed into a standalone custom PCB, combining embedded firmware, digital and analog inputs, USB HID communication, and PCB design.
Features
Hardware & PCB Design
- Custom ATmega32U4 Design: Designed a standalone gamepad around the ATmega32U4, integrating the microcontroller, clock circuitry, USB interface, programming header, analog inputs, and digital inputs onto a custom PCB.
- USB-C Interface: Implemented a USB-C device interface with 5.1kΩ CC pull-down resistors, 22Ω D+/D− series resistors, and dedicated power decoupling for reliable communication.
- Analog Input System: Integrated analog data processing using the ATmega32U4's ADC channels to provide joystick functionality.
- Power & Decoupling: Distributed the +5V USB supply across the board with local 100nF and bulk 10μF capacitors to reduce noise and add stability.
- External Clock: Implemented a 16MHz crystal oscillator with 22pF load capacitors to provide the ATmega32U4 with a stable system clock.
- ISP Programming: Added a dedicated 6-pin AVR ISP header for directly programming the ATmega32U4 on the custom PCB.
- PCB Layout: Designed the complete schematic and multi-layer PCB layout in KiCad.
Firmware
- Standalone USB HID: Configured the ATmega32U4 as a USB HID gamepad, providing direct PC compatibility without a secondary USB-to-UART bridge or custom PC software.
- Analog Input Handling: Used the ATmega32U4's 10-bit ADC to support 2 analog joysticks across 4 axes (X, Y, Rx, Ry).
- Digital Input Handling: Configured 14 button inputs using the MCU's internal pull-up resistors and active-low logic, eliminating the need for external pull-up components.
- Low-Latency Input: Sampled button and analog inputs at approximately 100 Hz using a 10 ms control loop for responsive controller input.
- Input Mapping: Developed a software mapping between the ATmega32U4 GPIO/ADC pins and the corresponding gamepad buttons and analog axes.
Hardware Specifications
| Component | Specification |
|---|---|
| MCU | ATmega32U4 |
| Supply | 5 V from USB |
| USB Connector | USB-C |
| USB Data | D+ / D− with 22 Ω series resistors |
| CC Configuration | 5.1 kΩ pull-downs on CC1/CC2 |
| Digital Inputs | 14 buttons, internal pull-ups |
| Analog Inputs | 4 × 10-bit ADC channels |
| Analog Controls | 2 × dual-axis joysticks |
| System Clock | 16 MHz external crystal |
| ISP | 6-pin AVR ISP header |
| PCB | Custom multi-layer PCB |
| Design Software | KiCad |
Repository Structure
├── firmware/ # C++ / Arduino controller logic and USB HID descriptors
├── hardware/ # KiCad schematics, PCB board layout, and Gerber manufacturing files
└── README.md # Project technical summaryParts
38| Qty | Value | Footprint | References |
|---|---|---|---|
| 14 | SW_Push | Button_Switch_THT:SW_PUSH_6mm | SW1, SW2, SW3, SW4, SW5, SW6, SW7, SW8, SW9, SW10, SW11, SW12, SW13, SW14 |
| 4 | 100n | Capacitor_SMD:C_0805_2012Metric | C4, C5, C6, C8 |
| 4 | R_Potentiometer | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | RV1, RV2, RV3, RV4 |
| 2 | 10k | Resistor_SMD:R_0805_2012Metric | R5, R6 |
| 2 | 10u | Capacitor_SMD:C_0805_2012Metric | C7, C9 |
| 2 | 22 | Resistor_SMD:R_0805_2012Metric | R3, R4 |
| 2 | 22p | Capacitor_SMD:C_0805_2012Metric | C2, C3 |
| 2 | 5.1k | Resistor_SMD:R_0805_2012Metric | R1, R2 |
| 1 | 0.1u | Capacitor_SMD:C_0805_2012Metric | C10 |
| 1 | 16MHz | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | Y1 |
| 1 | 1u | Capacitor_SMD:C_0805_2012Metric | C1 |
| 1 | ATmega32U4-A | Package_QFP:TQFP-44_10x10mm_P0.8mm | U1 |
| 1 | Conn_02x03_Odd_Even | Connector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_Vertical | J2 |
| 1 | USB_C_Receptacle_USB2.0_16P | Connector_USB:USB_C_Receptacle_GCT_USB4085 | J1 |
Questions
How big is the Controller2 PCB?
It measures 132.1 × 96.5 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Controller2 use?
38 parts, built around the ATMEGA32U4-AU. 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 Controller2 KiCad files?
From the Somet647/Controller repository on GitHub, at the commit this page was made from: the board is Hardware/Controller2/Controller2.kicad_pcb and its schematic Hardware/Controller2/Controller2.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Controller2 design in my own project?
Its repository states no licence, so its author keeps all rights: ask Somet647 before reusing the design.
Similar boards
- 2 layers243.2 × 106 mm

- 2 layers228.4 × 85 mm

LeChiffre
tominabox1/Le-Chiffre-Keyboard
Great thanks goes to Jake at P3D for really making the case amazing and open sourcing his work. Check him out at P3Dstore.com
105 parts183GPL-3.0 - 2 layers228.6 × 76.8 mm

Schwann Rev0.5b
The-Royal/The_Royal_Open-Source-Projects
A Master Repository For All things Royal Made
127 parts159MIT - 2 layers30 × 65 mm

Keyboard mcu
dpapavas/lagrange-keyboard
A configurable, handwired, ergonomic keyboard
26 parts137AGPL-3.0 - 2 layers88.4 × 80 mm

LHS Controller PCB
dmcke5/ZenDeck
This is the second revision of my Mini PC based handheld Gaming PC! It is designed for a Beelink SER 5 Mini PC but could be adapted to other systems by changing the mounting brackets and outlet plate.
76 parts133CERN-OHL-S-2.0 - 2 layers259.5 × 89.1 mm

- 2 layers99.1 × 99.1 mm

Power supply panelized
thebiguno/microcontroller-projects
A home for a bunch of microcontroller projects which don't warrant their own repos.
223 parts75 - 2 layers323.9 × 95.1 mm

UnSplit
swiftrax/UnSplit
Ergo 40% mechanical keyboard with all components on the top with diodes arranged in an array
110 parts68GPL-2.0