DIY trackball with scroll ring

Overview

DIY trackball with scroll ring

This repository contains design files and code that can be used to make a fully programmable four-button USB trackball with a scroll ring.

Trackball photo

It uses the following components:

  • 57.2mm billiard ball
  • PMW3360 optical sensor
  • RP2040+PMW3360 PCB
  • button switch mount PCBs
  • 3D printed case
  • Omron D2FC switches (or similar)
  • 2x SS49E Hall effect sensors (TO-92 package)
  • 72x 2x2mm neodymium cylinder magnets (axially magnetized)
  • 60x78x10mm bearing (6812 ZZ)
  • 2.5mm zirconium oxide (or silicon nitride) bearing balls
  • M3x4 screws for mounting the main PCB and assembling the case
  • M2x4 screws for mounting the buttons and the secondary PCBs
  • USB cable (cut off the device end and solder the wires directly to the PCB)
  • some hookup wire

The main PCB uses the RP2040 chip from Raspberry Pi. The firmware supports remapping of ball, button and ring functions using a configuration tool without the need to recompile the source code. All the configuration is stored on device, so the configuration tool is only needed to change the settings, not during normal use.

Configuration tool UI screenshot

So far I only tested the configuration tool on Linux, but it should in theory run on Windows and Mac as well. I will try to provide ready-to-use packages in the future.

The provided UF2 file can be used to flash the firmware onto the device. When first connected, a "RPI-RP2" drive will show up and you flash the chip by copying the UF2 file to that drive. If you want to flash it again, hold the BOOT button and press the RESET button on the board.

I printed the case parts with 0.2mm layer height. They don't need supports.

The bearing and the magnets are press-fit into the case, but depending on your particular printer you might want to use glue. The Hall effect sensors should be oriented "face-up" and will definitely need some glue to stay in place.

The magnets should be installed with alternating polarity (the outside-facing pole should be N-S-N-S... etc.).

The Hall sensors' + leads are connected to 3.3V. The rest of the pin numbers are defined at the top of trackball.cc.

Exploded view

Internals of the trackball

Internals of the trackball

You might also like...
An STL-compatible, legible ring buffer in C++11.

baudvine/ringbuf Overview This is a header-only ring/circular buffer implementation in C++11, with the following goals: Reasonably performant. Readabl

Import of the DIY Dynamic Template v2, retrieved from the Internet Archive
Import of the DIY Dynamic Template v2, retrieved from the Internet Archive

Dynamic Templates This is a copy of the D*I*Y Planner Dynamic Template application that was posted to diyplanner.com/node/6210 back in 2009,

ESP32 based DIY word clock project
ESP32 based DIY word clock project

Wordclock ESP32 based DIY wordclock project TL;DR: check out this ✨ demo video ✨ Another take on the classic DIY word clock. This one requires a laser

DIY LCD touchscreen for Home Automation
DIY LCD touchscreen for Home Automation

HA SwitchPlate HASPone The HASPone is a DIY touchscreen controller you can mount into a standard North American work box. It connects to your home aut

Arduino firmware for DIY haptic gloves. Officially compatible with LucidVR gloves.

lucidgloves-firmware This repo contains the arduino firmware as well as the STL files for Prototype 3 of the LucidVR glove prototype. This is a finger

Arduino/ESP32 firmware for DIY haptic gloves. Officially compatible with LucidVR gloves.
Arduino/ESP32 firmware for DIY haptic gloves. Officially compatible with LucidVR gloves.

Arduino/ESP32 firmware for DIY haptic gloves. Officially compatible with LucidVR gloves.

DIY Zigbee CC2530 Motion sensor (AM312/ AM412/ BS312/ BS412), Temperature /Humidity /Pressure sensor (BME280), Ambient Light sensor (BH1750), 2.9inch e-Paper Module
DIY Zigbee CC2530 Motion sensor (AM312/ AM412/ BS312/ BS412), Temperature /Humidity /Pressure sensor (BME280), Ambient Light sensor (BH1750), 2.9inch e-Paper Module

How to join: If device in FN(factory new) state: Press and hold button (1) for 2-3 seconds, until device start flashing led Wait, in case of successfu

DIY Zigbee CC2530 Motion sensor (AM312/ AM412/ BS312/ BS412), Temperature /Humidity /Pressure sensor (BME280), Ambient Light sensor (BH1750), 2.9/2.13/1.54 inch e-Paper Module
DIY Zigbee CC2530 Motion sensor (AM312/ AM412/ BS312/ BS412), Temperature /Humidity /Pressure sensor (BME280), Ambient Light sensor (BH1750), 2.9/2.13/1.54 inch e-Paper Module

How to join: If device in FN(factory new) state: Press and hold button (1) for 2-3 seconds, until device start flashing led Wait, in case of successfu

DIY Smart Blinds controller for ESP8266

Window blinds to home assistant DIY window blinds controller software for ESP8266 (Wemos D1) to control existing window blinds using servos. The full

Comments
  • need a breakout pcb for the scroll ring encoders.

    need a breakout pcb for the scroll ring encoders.

    there should be kicad files for a simple pcb that carries the vcc and gnd between both hall effect sensors, the pcb would have a hole to screw it to the top stl. the pcb would prevent the legs of the hall effect sensors from shorting together. the pcb would have headers for the 4 wires, 3.3v, gnd, and the two sensor pins.

    also the button switch pcb should have a location for a through hole pullup resistor (to avoid smt assembly cost), and an extra header for 3.3v. It would be better if each button switch pcb had two headers for gnd and two for 3.3v. that is so that you can daisy chain a wire from one switch to the next, rather than having a large bundle of grounds tied together that could short something out if moved.

    opened by itsnoteasy 0
Owner
Jacek Fedoryński
Jacek Fedoryński
Turing-ring is a simple Turing Machine using just a Nano, a NeoPixel ring and a rotary encoder+push-button The ring is the tape and the UI.

Turing-ring Turing-ring is a simple Turing Machine using just a Nano, a NeoPixel ring and a rotary encoder+push-button The ring is the tape and the UI

Mark Wilson 2 Dec 26, 2021
DIY trackball with two balls

DIY two-ball trackball This repository contains design files and code that can be used to make a fully programmable two-ball, three-button USB trackba

Jacek Fedoryński 176 Dec 24, 2022
Scroll pos - Provides some additional functions to ScrollController to define item position relative to the screen.

Scroll Position Provides some additional functions to ScrollController to define item position relative to the screen. A live version is available her

Kevin Vuilleumier 11 Nov 13, 2022
It creates a random word by mixing two English common words into a single one, each one with the first character in capital letter. It also allow you to scroll down infinitely without repeating the same word twice.

startup_namer A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if

Samuel Cobas 2 Feb 3, 2022
The ball is the trackball

The ball is the trackball This is Arduino code and 3D-printable models for a Bluetooth trackball in which all the electronics are inside the ball.

Jacek Fedoryński 132 Dec 28, 2022
Devterm keyboard & trackball firmware

DevTerm Keyboard Firmware How to install Install Arduino STM32 hardware package on your Arduino IDE https://github.com/rogerclarkmelbourne/Arduino_STM

SeongChan Lee 23 Dec 24, 2022
imGuIZMO.quat is a ImGui widget: like a trackball it provides a way to rotate models, lights, or objects with mouse, and graphically visualize their position in space, also around any single axis (Shift/Ctrl/Alt/Super)

imGuIZMO.quat v3.0 imGuIZMO.quat is a ImGui widget: like a trackball it provides a way to rotate models, lights, or objects with mouse, and graphicall

Michele Morrone 276 Dec 28, 2022
Ring powered by an adafruit gemma + neopixel that sends a positive affirmation message to me via morse code

Positive Affirmation Morse Code Ring ✨ Ring powered by an adafruit gemma + neopixel that sends a positive affirmation message to me via slowed-down mo

Stephanie 3 Dec 31, 2021
Fix some extrinsic parameter importing problems. 6-axis IMU works now. Lidar without ring works now.

LVI-SAM-MODIFIED This repository is a modified version of LVI-SAM. Modification Add function to get extrinsic parameters.The original code assumes the

null 88 Dec 9, 2022
A repository for I/O ring demos, use cases and performance testing on Windows

IoRing_Demos A repository for I/O ring demos, use cases and performance testing on Windows Overview of I/O ring on Windows: https://windows-internals.

null 29 Nov 25, 2022