Hi, geeks.
This is yet another attempt to make a DIY mouse, but using Arduino.
# TL;DR# IntroductionI spotted an old thread "DIY PMW-3360 Gaming mouse",
https://geekhack.org/index.php?topic=89837 and I hope to resurrect the project. I got a PMW3360 sensor module, which is still one of the best in mice market, from Tindie and attempted to get it to work.
The MrJohnK's original Arduino examples (
https://github.com/mrjohnk/PMW3360DM-T2QU) doesn't work quite well with fast movement (e.g.,
https://github.com/mrjohnk/PMW3360DM-T2QU/issues/22)
In the other hand, the most successful attempts for interfacing PMW3360 family so far have been done by qsxcv et al. with a combination of Teensy 2.0 + PMW 3366 (or PMW 3360) sensor, as like in
https://www.overclock.net/forum/375-mice/1561041-reverse-engineering-3366-a-35.html#post26314321 and
https://www.youtube.com/watch?v=nyb6M89QrWI&t=1s. They used a bulk transfer to minimize the communication cost between the module and MCU, which works better at high speed.
As Arduino is an easy and handy platform than a cumbersome AVR-GCC coding on Teensy, I feel like I need a complete set of examples which can drive the module on Arduino IDE.
# Implementation Example# DownloadGo
https://github.com/SunjunKim/PMW3360_Arduino and hit the download link. Detailed instruction is provided on the README.
# What it does- PMW3360DM-Burst: Minimal burst reading (Serial outputs x/y displacements)
- PMW3360DM-Mouse: A functional high-performance mouse implementation
- PMW3360DM-Camera: A raw sensor image capture
# Mouse firmware demo## DIY mouse (PMW3360) vs. Logitech G502 (PMW3366)Test method: Logged with MouseTester v1.5
https://www.overclock.net/forum/375-mice/1590569-mousetester-software-reloaded.htmlIn dual mouse mode. I shaked the two mice together, one in straight and one in reverse. The logged data will result in negative to each other. Both mice set to the same CPI, 1200.
Blue: G502 / Green: DIY
=> Almost equivalent performance.
## Playing Osu! with DIY mouse=> Gamer-grade performance. No flaw in action (except my poor Osu! score...)