
Rollino base
tompi/rollino
Low-profile DIY finger trackball: ball floats 1 mm above the table, two PMW3610 sensors, nice!nano/ZMK

Low-profile DIY finger trackball: ball floats 1 mm above the table, two PMW3610 sensors, nice!nano/ZMK
Rollino sensor is an open-source printed circuit board by tompi, from the tompi/rollino repository on GitHub. It is a 2-layer board of 27.5 × 23.2 mm with 14 parts on 15 nets, routed with 154 tracks and 10 vias.
It is built around the PMW3610DM-SUDU and FH12-6S-0.5SH(55). Its parts include 9 capacitors, 2 ICs, 1 resistor and 1 connector. It belongs with the keyboards and input and sensors and measurement boards of this library.
An attempt to make a cheap, solid and low profile DIY finger trackball.
The ball floats just 1 mm above the table on three ceramic support balls. Two PMW3610 sensors look up at the ball from below its equator, placed so their lines of sight are orthogonal (X, Y and twist are all observable). A Seeed XIAO nRF52840 running ZMK and a 602020 LiPo lie flat in a squashed dome in front of the ball. The XIAO is soldered upside down onto a base PCB that sits in a groove in the underside and reaches round under both sensors, each wired up with a short FPC ribbon; a cover over the whole underside hides it, held by the same screws.

case/rollino.scad - parametric OpenSCAD model (ball size, sensor/MCU
placement, battery, ...). Set part to assembly, exploded, hardware, section,
or body / base_cover for printable parts.case/renders/ - preview renders: case/render_previews.sh (OpenSCAD) and
case/render_exploded.sh (Blender, with KiCad's 3D models of the boards).pcb/ - KiCad projects for the sensor boards and the base board: schematics
and routed boards, generated from the case model (see pcb/readme.md).
datasheets/ - component datasheets. The PMW3610 datasheet is available
here.ZMK, built by GitHub Actions on every push (download firmware.zip from the
run, then double-tap the XIAO's reset and copy the .uf2 onto it). It's a
standalone Bluetooth/USB mouse.
zmk/boards/shields/rollino/ - the shield: pins, the two PMW3610 sensors
(Zephyr's driver), three optional buttons.zmk/src/ball_fusion.c - combines the two sensors: each one only sees the
ball's surface sliding past in its own tilted plane; together they give the
ball's whole rotation. Rolling moves the pointer (as if the finger on top
dragged it), twisting about the vertical axis scrolls.config/rollino.keymap - the buttons: left, right, middle click.| XIAO pin | Use |
|---|---|
| D8 | SCLK, both sensors |
| D10 | SDIO, both sensors (SPI MOSI and MISO on the same pin) |
| D7 | NCS, right sensor |
| D6 | NCS, left sensor |
| D3 | MOTION, right sensor |
| D2 | MOTION, left sensor |
| D0, D1, D9 | optional buttons to GND: left, right, middle click |
| D4, D5 | free |
Calibrating the sensors' orientation. The fusion needs to know which way
each sensor's X axis points (rotation in the shield's ball_fusion node,
plus the sensor's invert-x / invert-y), which depends on how the chip
sits on the sensor PCB. Roll the ball right: the pointer should go right;
towards you: down; twist it: scroll, with no drift. If one direction is off,
try one sensor at a time (cover the other's lens) and fix its rotation /
inversion until rolling right moves the pointer mostly right.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 2 | 100nF | Capacitor_SMD:C_0603_1608Metric | C2, C3 |
| 2 | 1uF | Capacitor_SMD:C_0603_1608Metric | C8, C9 |
| 1 | 100nF X7R | Capacitor_SMD:C_0603_1608Metric | C4 |
| 1 | 10k | Resistor_SMD:R_0603_1608Metric | R1 |
| 1 | 10nF | Capacitor_SMD:C_0603_1608Metric | C5 |
| 1 | 10nF X7R | Capacitor_SMD:C_0603_1608Metric | C7 |
| 1 | 10uF X7R | Capacitor_SMD:C_0603_1608Metric | C6 |
| 1 | 3.3uF | Capacitor_SMD:C_0603_1608Metric | C1 |
| 1 | FH12-6S-0.5SH | Connector_FFC-FPC:Hirose_FH12-6S-0.5SH_1x06-1MP_P0.50mm_Horizontal | J1 |
| 1 | M2 | MountingHole:MountingHole_2.2mm_M2 | H1 |
| 1 | PMW3610DM-SUDU | rollino:PMW3610DM-SUDU | U1 |
| 1 | TPS7A0518PDBVR | Package_TO_SOT_SMD:SOT-23-5 | U2 |

tompi/rollino
Low-profile DIY finger trackball: ball floats 1 mm above the table, two PMW3610 sensors, nice!nano/ZMK

sandman21vs/SandKrux
Placa de desenvolvimento baseada no chip K210, com entradas para touch, câmera e LCD grande, criada especificamente para rodar o firmware Krux.

snize/BOB-PMW3610-SEIBOKU
This project is licensed under the CERN OHL-P v2. You may use, distribute, and modify this design under the terms of the CERN OHL-P v2. Original design by snize.



limmjacc/custom-wireless-mouse
Project to track the hardware and firmware for a custom made computer mouse.


rikkodo/Rikkodo_PCB
This project is licensed under the CERN OHL-P v2. You may use, distribute, and modify this design under the terms of the CERN OHL-P v2. Original design by snize.

SebastianKristo/pult-forsterker
Ett kort (180 × 100 mm, 2 lag) som erstatter alle modulene, og som i tillegg har USB-delingsswitch, to AUX-innganger som digitaliseres (så alt kan mikses), «smart relé» for strømmen til forsterkerdelen…
It measures 27.5 × 23.2 mm and has 2 copper layers, 1.6 mm thick.
14 parts, built around the PMW3610DM-SUDU and FH12-6S-0.5SH(55). 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.
From the tompi/rollino repository on GitHub, at the commit this page was made from: the board is pcb/sensor/rollino-sensor.kicad_pcb and its schematic pcb/base/rollino-base.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask tompi before reusing the design.