

A high polling rate pointing device designed for osu!
- Size
- 65 × 13 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 4
- Nets
- 6
- Pads
- 15
- Tracks, vias
- 37, 1
- Pours
- 2
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 19 Jul 2026
- Updated
- 12 Oct 2026
Overview
Arm is an open-source printed circuit board by DexonRax, from the DexonRax/tabletto repository on GitHub, published under the AGPL-3.0 licence. It is a 2-layer board of 65 × 13 mm with 4 parts on 6 nets, routed with 37 tracks and 1 via.
Its parts include 1 capacitor and 1 connector.
README
README.mdTabletto V1S
A ridiculously fast DIY osu! "tablet" built around a SCARA arm mechanism, powered by an RP2040 (RP2040-Zero) and dual AS5600 magnetic rotary encoders.
Tabletto V1S was designed with one goal in mind: the lowest possible input latency using inexpensive, easy-to-source components, fully 3D printed mechanics, and custom open-source PCBs.
Gallery
Features
- ⚡ 1000 Hz report rate (1 ms USB HID polling)
- 🎯 Minimal cursor jitter
- 🚀 Faster than most commercial graphics tablets
- 🖨️ Fully 3D printable mechanical design
- 🔩 Custom open-source KiCad PCBs (base + arm sensor board)
- 🧠 On-device forward kinematics — standalone, works with OpenTabletDriver
- 🔘 Physical button: short press toggles the tablet, hold 3 s to calibrate
- 💾 Calibration stored in the RP2040's flash, survives power cycles
How it works
Tabletto uses a SCARA (Selective Compliance Assembly Robot Arm) mechanism.
Two AS5600 magnetic rotary encoders measure the angle of each arm joint — one lives on the base PCB, the other on a small board at the elbow. The RP2040 firmware reads both encoders over two separate I2C buses and computes the pen position with forward kinematics, then sends it to the host as a vendor-defined HID report.
Because the sensors provide high-resolution angle measurements and the mechanism has very little moving mass, the result is an extremely responsive pointing device well suited for rhythm games like osu!.
Hardware
Required components:
| Quantity | Part |
|---|---|
| 1 | RP2040-Zero (or similar module) |
| 2 | AS5600 Magnetic Rotary Encoder |
| 2 | MR128ZZ 8x12x3.5mm Bearings |
| 4 | 4.7kΩ Resistor |
| 1 | 100nF Capacitor |
| 1 | JST XH 2.54mm straight connector |
| 1 | JST XH 2.54mm male cable |
| 1 | Keyboard Switch |
| 4 | 10mm M3 Screws |
| 1 | 6mm M3 Screws |
| 2 | 4x3mm Diametral magnets |
| — | 3D Printed Parts |
| — | PCBs - from V1S/pcb |
Both boards have 3.2 mm M3 mounting holes.
PCBs
The electronic design is open source and lives in V1S/pcb:
pcb/base— base board: RP2040-Zero module, one AS5600, 4.7kΩ I2C pull-ups, calibration button, and a 4-pin connector to the arm board.pcb/arm— elbow board: the second AS5600 with a 100 nF decoupling cap, connected over a short 4-pin cable.
Open the .kicad_sch / .kicad_pcb files in KiCad 8+ and order them from any PCB fab (both boards are two-layer).
Firmware pin mapping
| Function | Pin |
|---|---|
| I2C0 SDA (base) | GP0 |
| I2C0 SCL (base) | GP1 |
| I2C1 SDA (arm) | GP2 |
| I2C1 SCL (arm) | GP3 |
| Calibration btn | GP4 |
Firmware
Located in V1S/firmware. Built with the Raspberry Pi Pico SDK and TinyUSB.
Flashing (easiest)
A precompiled build is included at V1S/firmware/precompiled/tabletto.uf2:
- Plug the RP2040-Zero into USB while holding BOOT
- Drag and drop
tabletto.uf2onto the USB drive that appears - Done — the device enumerates as a HID tablet (VID
0x1209, PID0x0001)
Building from source
Requires the Pico SDK and CMake:
cd V1S/firmware
cmake -B build -DPICO_SDK_PATH=/path/to/pico-sdk
make -C buildThe resulting build/tabletto.uf2 can be flashed as above.
Driver
Tabletto exposes a standard vendor-defined HID report, so no custom driver is needed — just use OpenTabletDriver.
Import the configuration from V1S/driver/OpenTabletDriver Configuration/TablettoV1S.json
into OpenTabletDriver (restart needed):
- Linux: ~/.local/share/OpenTabletDriver/Configurations/ (create it if missing: mkdir -p ~/.local/share/OpenTabletDriver/Configurations)
- Windows: %LOCALAPPDATA%\OpenTabletDriver\Configurations
It defines:
- Work area: 180 × 112.5 mm (X 0–18000, Y 0–11250, 0.01 mm units)
- Input report length: 9 bytes
libinputoverride: 1for reliable Linux behavior
Calibration
- With the tablet connected, pull the arm straight down (toward you), so both sensors read their reference position.
- Hold the button for 3 seconds.
- Short-press the button at any time to toggle the tablet on/off.
Direction tuning lives in the firmware (X_DIR / Y_DIR in main.c) if the axes ever need flipping.
Why SCARA?
Unlike traditional graphics tablets, Tabletto directly measures arm angles with magnetic encoders.
Advantages include:
- extremely low latency
- high update rate
- no pressure to use specialized tablet hardware
- inexpensive components
- entirely repairable and printable
3D Printing
All .stl files can be found in V1S/models:
| File | Purpose |
|---|---|
arm1_up.stl | Arm segment 1 (magnet-up variant) |
arm1_down.stl | Arm segment 1 (magnet-down variant) |
arm2.stl | Arm segment 2 (elbow to pen) |
base_down_workarea.stl | Bottom side of the base |
base_up_debug.stl | Upper side of the base (debug has a cutout for RP2040 buttons) |
workarea.stl | Flat work area plate |
offset_nib_3.6mm.stl | Nut-like offset for spacing (6 needed) |
Every structural component is designed to be 3D printed — no CNC machining or laser cutting required. Place the magnets that came with the AS5600s on top of the bearings.
Repository layout
V1S/
├── driver/ OpenTabletDriver configuration (JSON)
├── firmware/ RP2040 firmware (Pico SDK + TinyUSB) + precompiled UF2
├── models/ 3D printable STL files
└── pcb/ KiCad sources: base board + arm sensor boardLicense
Copyright (C) 2026 Dexon Rax
Tabletto is free and open source (AGPLv3) for personal and noncommercial use — this covers the RP2040 firmware, the OpenTabletDriver configuration, the 3D printable models, and the KiCad PCB sources.
💡 Want to manufacture or sell Tabletto commercially, or use it in a closed product? Contact me for licensing — see LICENSE-COMMERCIAL.md.
Parts
4| Qty | Value | Footprint | References |
|---|---|---|---|
| 1 | 100nF | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C1 |
| 1 | AS5600 | AS5600:SOIC8 | AS5600 |
| 1 | Conn_01x04_Pin | Connector_JST:JST_XH_S4B-XH-A_1x04_P2.50mm_Horizontal | J1 |
The 3 most common of 4 parts.
Questions
How big is the Arm PCB?
It measures 65 × 13 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Arm use?
4 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 Arm KiCad files?
From the DexonRax/tabletto repository on GitHub, at the commit this page was made from: the board is V1S/pcb/arm/2.kicad_pcb and its schematic V1S/pcb/arm/2.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Arm design in my own project?
Its repository publishes it under the AGPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
More from DexonRax/tabletto
1- 2 layers52 × 65 mm

Similar boards
- 2 layers18.5 × 26 mm

24g2usb rp2350zero
joypad-ai/joypad-os
Universal controller firmware for building adapters, dongles, and custom controllers.
4 parts1.7kApache-2.0 - 2 layers116 × 33 mm

- 2 layers19 × 18 mm

Daughter board
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
4 parts915 - 2 layers24.8 × 24.8 mm

Nrf24 breakout
tardate/LittleArduinoProjects
a collection of "Little Electronic & Arduino Projects", most involving electronics or an Arduino in one way or another!
4 parts803MIT - 2 layers26 × 20 mm

Cap chain
drandyhaas/KiCadRoutingTools
A set of Python/Rust tools to aid routing in KiCad
4 parts744MIT - 2 layers34.7 × 20 mm

XG Station Power MSI
osy/XG_Mobile_Station
Open source eGPU dock for ROG Ally and ROG Flow
4 parts712CC-BY-4.0 - 2 layers20.3 × 24.5 mm

Jack power input
Luos-io/luos_engine
Open-source and real-time orchestrator for cyber-physical-systems, to easily design, test and deploy embedded applications and digital twins.
4 parts546MIT - 2 layers35.1 × 92.1 mm

SDEX2M2 MicroSD Express to M.2 NVMe Adapter for Switch 2 WIP
NVNTLabs/switch2-SDEX2M2
Micro SD Express to M.2 NVME Adapter for Nintendo Switch 2
4 parts542GPL-3.0