Skip to the content
PCBKitNew board
2 layers30.8 × 48.5 mmMouse pointer, the printed circuit board in 3D

Accessible mouse implemented with ZMK.

Size
30.8 × 48.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
32
Nets
22
Pads
99
Tracks, vias
254, 82
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
29 Apr 2026
Updated
16 Jun 2026

Overview

Mouse pointer is an open-source printed circuit board by Mazzorella, from the Mazzorella/ClickTapToe repository on GitHub. It is a 2-layer board of 30.8 × 48.5 mm with 32 parts on 22 nets, routed with 254 tracks and 82 vias.

It is built around the TPD4E05U06DQAR, TLV74318PDBVR-TP and 54602-908LF. Its parts include 10 capacitors, 4 ICs, 3 resistors and 2 connectors.

Main components

3

README

README.md

ClickTapToe

ClickTapToe is a custom foot-operated mouse for people who need to reduce repetitive hand and arm movement. The goal is to move common mouse actions away from the hands by using foot pedals for clicking, a large foot-driven scroll wheel, and a separate mouse pointer module.

This repository contains the firmware, hardware notes, and project documentation for ClickTapToe. The current firmware target is a Seeed Studio XIAO nRF52840 / XIAO BLE running as a USB HID mouse with ZMK. Bluetooth is disabled for the ClickTapToe firmware build.

Current Status

The current firmware supports USB mouse clicks from external pedals, USB vertical scrolling from the input hub scroll wheel, and pointer movement from the mouse pointer module:

  • Left click on the first pedal input
  • Right click on the second pedal input
  • Vertical scroll from the AS5600 magnetic angle sensor connected to the input hub scroll wheel
  • Pointer movement from the PMW3610 sensor in the mouse pointer module
  • D2 and D3 remain spare/test inputs and are not exposed as production pedal jacks on the current input hub PCB

PMW3610 pointing support is active for the current firmware target.

Hardware Overview

ClickTapToe is built from two custom electronics modules plus external pedals:

  • The input hub contains the XIAO nRF52840 controller, USB connection, external pedal TS jacks, RJ45 pointer connection, and a large foot-operated scroll wheel coupled to an AS5600 magnetic angle sensor.
  • The mouse pointer module is shaped like a slipper, houses a PMW3610 pointing sensor, and connects to the input hub over RJ45 with a short Ethernet cable.
  • The pedals are premade external pedals connected to the input hub so higher-quality parts can be used and the project is easier to reproduce.

See HARDWARE.md for the current pin map and hardware notes. For a public-facing hardware overview with embedded board previews, open the ClickTapToe Hardware Viewer.

BoardSourceKiCanvas preview
Input hubhardware/input-hub/Open preview
Mouse pointerhardware/mouse-pointer/Open preview

Repository Layout

  • .github/workflows/build.yml runs the upstream ZMK user-config build workflow.
  • build.yaml defines the firmware build matrix.
  • config/west.yml tracks upstream ZMK and imports ZMK's west manifest.
  • zephyr/module.yml declares this repository as the zmk-keyboard-clicktaptoe module and exposes its board, devicetree binding, Kconfig, and driver files.
  • boards/shields/clicktaptoe/ contains the ClickTapToe shield definition, overlay, metadata, and default keymap.
  • Makefile wraps the local west build command for Docker/devcontainer use.
  • hardware/ contains the input hub and mouse pointer KiCad source files.
  • docs/ is reserved for assembly, usage, and release documentation.

Build Target

The active firmware target is:

yaml
board: xiao_ble//zmk
shield: clicktaptoe
artifact-name: clicktaptoe_xiao_usb_zmk

Flashing

  1. Build the firmware with GitHub Actions or a local ZMK toolchain.
  2. Put the XIAO BLE into bootloader mode so it mounts as a UF2 drive.
  3. Copy the generated clicktaptoe_xiao_usb_zmk.uf2 file onto the mounted drive.
  4. After the board reboots, connect it to the host over USB.

Hardware Test

Use a safe desktop target for click testing, such as an empty Finder window or browser page.

  • Short physical D0 to GND; the host should receive a left click.
  • Short physical D1 to GND; the host should receive a right click.
  • Rotate the AS5600 scroll wheel; the host should receive vertical scroll events.
  • Move the mouse pointer module over a surface; the host pointer should move smoothly in the same direction.
  • Test the PMW3610 once through the RJ45 cable path; pointer response should match the direct breadboard wiring test.
  • Leave the AS5600 magnet away from the sensor once as a negative test; the host should not scroll continuously.
  • Verify D2 and D3 only as spare/test GPIOs if they are wired for bring-up.

If macOS does not immediately recognize the updated HID device, unplug and reconnect the XIAO BLE. If an old Bluetooth name appears after flashing, remove the cached Bluetooth entry from the host. This firmware build disables ZMK BLE. If the PMW3610 does not move the pointer after flashing, power-cycle the XIAO once. The input hub physically routes PMW3610 nRESET on XIAO D6 / RJ45 pin 8, but the current firmware still relies on SPI/software reset and does not drive that reset line yet.

Local Build Notes

This repository is both a ZMK config repository and a ZMK module. Local builds should make the repository visible to ZMK as the config path and as an extra module so the custom clicktaptoe shield can be discovered.

The preferred local workflow is to build from a ZMK Docker/devcontainer environment and use this repository's Makefile.

One common local layout is to keep this repository next to a ZMK firmware checkout:

text
projects/
  zmk/
  zmk-pmw3610-driver/
  ClickTapToe/

Open the ZMK firmware checkout in VS Code:

sh
code /path/to/projects/zmk

Then use Dev Containers: Reopen in Container. If using a devcontainer, bind mount this repository into the container and run the build commands from the ClickTapToe repository directory.

On the first devcontainer launch, initialize the Zephyr workspace from the ZMK checkout:

sh
west init -l app/
west update

Restart the devcontainer after west update completes.

Clone the PMW3610 driver module where the Makefile can find it. In the default devcontainer layout:

sh
git clone https://github.com/badjeff/zmk-pmw3610-driver /workspaces/zmk-pmw3610-driver

After that, run the build commands from this repository:

sh
make build

To build and copy the generated UF2 into this repository's firmware/ directory:

sh
make uf2

The copied firmware path is:

sh
firmware/clicktaptoe_xiao_usb_zmk.uf2

Build outputs are written under this repository's ignored build/ directory, not under ZMK's app/ tree.

By default, the Makefile expects ZMK's app directory to be available at ../zmk/app, which matches the sibling directory layout shown above. Override ZMK_APP if your checkout path differs:

sh
make uf2 ZMK_APP=/path/to/zmk/app

The wrapped west command has this shape:

sh
west build -d "/path/to/this-repo/build/clicktaptoe" -b "xiao_ble//zmk" -- \
  -DSHIELD=clicktaptoe \
  -DZMK_CONFIG="/path/to/this-repo/config" \
  -DZMK_EXTRA_MODULES="/path/to/this-repo;/path/to/zmk-pmw3610-driver"

By default, the Makefile expects the PMW3610 driver module at ../zmk-pmw3610-driver. Override PMW3610_MODULE if your checkout path differs:

sh
make uf2 PMW3610_MODULE=/path/to/zmk-pmw3610-driver

Parts

32
QtyValueFootprintReferences
6MountingHoleMountingHole:MountingHole_3.2mm_M3_ISO14580H1, H2, H3, H4, H5, H6
30RResistor_SMD:R_0603_1608MetricJP1, JP2, JP3
3100nFCapacitor_SMD:C_0603_1608MetricC2, C3, C4
3TestPointTestPoint:TestPoint_Pad_D1.5mmTP1, TP2, TP3
210nFCapacitor_SMD:C_0603_1608MetricC5, C7
21uFCapacitor_SMD:C_0603_1608MetricC8, C9
2TPD4E05U06DQARmouse_pointer:IC_TPD4E05U06DQARU3, U4
1100Resistor_SMD:R_0603_1608MetricR3
1100kResistor_SMD:R_0603_1608MetricR2
110kResistor_SMD:R_0603_1608MetricR1
110uFCapacitor_SMD:C_0805_2012MetricC6
122nFCapacitor_SMD:C_0603_1608MetricC10
13.3uF/16VCapacitor_SMD:C_0805_2012MetricC1
154602-908LFmouse_pointer:RJ45_Amphenol_54602-x08_HorizontalJ2
1Conn_PinHeaderConnector_PinHeader_2.54mm:PinHeader_1x07_P2.54mm_VerticalJ1
1EMPOWER_Hand_Line_Silkscreen_7mm_MildSmoothmouse_pointer:EMPOWER_Hand_Line_Silkscreen_7mm_MildSmoothG***
1PMW3610mouse_pointer:PMW3610DM-SUDU 16PinU1
1TLV74318PDBVRPackage_TO_SOT_SMD:SOT-23-5_HandSolderingU2

Questions

How big is the Mouse pointer PCB?

It measures 30.8 × 48.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Mouse pointer use?

32 parts, built around the TPD4E05U06DQAR, TLV74318PDBVR-TP and 54602-908LF. 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 Mouse pointer KiCad files?

From the Mazzorella/ClickTapToe repository on GitHub, at the commit this page was made from: the board is hardware/mouse-pointer/kicad/mouse_pointer.kicad_pcb and its schematic hardware/input-hub/kicad/input_hub.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Mouse pointer design in my own project?

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

More from Mazzorella/ClickTapToe

1
  • 2 layers93.5 × 36 mmInput hub, the printed circuit board in 3D

    Input hub

    Mazzorella/ClickTapToe

    Accessible mouse implemented with ZMK.

    35 parts

Similar boards

  • 2 layers27 × 22.5 mmPmw3360 pcb ffc, the printed circuit board in 3D

    Pmw3360 pcb ffc

    siderakb/pmw3360-pcb

    PMW3360 optical mouse sensor breakout board, support both 3.3V and 1.8V logic

    20 parts195CERN-OHL-P-2.0
  • 2 layers23.5 × 31.5 mmPmw3610-pcb, the printed circuit board in 3D

    Pmw3610-pcb

    siderakb/pmw3610-pcb

    PMW3610 laser mouse sensor breakout board, support either 1.8V or 3.3V logic

    24 parts123CERN-OHL-P-2.0
  • 2 layers225.5 × 185.2 mmLevels, the printed circuit board in 3D

    Levels

    Good-Great-Grand-Wonderful/levels54

    Levels54 is for people who care about how things are made and how they feel. Every component—from ceramic trackball bearings to stainless switch plates—is chosen to deliver smooth, precise, durable performance.

    243 parts67MIT
  • 4 layers14.7 × 31.5 mmSval pmw low asym, the printed circuit board in 3D

    Sval pmw low asym

    svalboard/svalboard-open-trackball

    svalboard open trackball design

    16 parts23CERN-OHL-P-2.0
  • 2 layers26.6 × 24.4 mmTrackball, the printed circuit board in 3D

    Trackball

    Modulable-Keyboard-Developer/public-data

    18 parts15CERN-OHL-W-2.0
  • 2 layers30 × 42 mmTrackball sensor-3610, the printed circuit board in 3D

    Trackball sensor-3610

    Good-Great-Grand-Wonderful/PMW3360DM-T2QU

    Trackball sensor + models for Crosses/Bridges

    16 parts6CC-BY-4.0
  • 4 layers90 × 90 mmZenith 3 Flight Computer, the printed circuit board in 3D

    Zenith 3 Flight Computer

    BarrettT123/CanSat-Team-Cosmos

    (The software I contributed to this project can be found in the CanSat-Team-Cosmos-Software repository)

    118 parts
  • 2 layers344.7 × 123.6 mmFrog 8k ergodox pcb, the printed circuit board in 3D

    Frog 8k ergodox pcb

    my-fi-25073/frog8k_ergodox

    Frog 8K ergodox keyboard pcb & qmk firmware

    217 partsGPL-2.0