DIY mouse with "smooth" scroll

Hello! For a long time I've looked for a mouse which meets all my priorities (lots of buttons, blue or RGB lit, multi-profile, etc) AND has a "smooth" scroll wheel, which sends high resolution scroll messages more like a trackpad or magic mouse instead of the traditional coarse notches. Unfortunately, this seems like a thing people simply don't want to do because I can't find one anywhere!!

I currently have a fairly large mouse which I love except for the coarse scrolling, especially when doing fine detail work in CAD or video editing when I need to zoom very smoothly and precisely.

How feasible do y'all think it would be to "hack" this feature into it? Like get a high-res rotary encoder or hall sensor to replace the wheel, maybe replace the whole guts of it with the new Arduino Micro if needed... And I wouldn't even know where to begin looking for code tips to drive it... Thoughts?

I think this is more a function of the host-side software than the mouse hardware. There may even be a setting somewhere, in the OS, or maybe the mouse driver (original vendor or third party, even) For example, the logitech utility that runs on my Mac has a button to "enable smooth scrolling" (I can't really tell whether it's doing anything, though.)

Feasible, yes!
But you are going to be without a mouse until the project completes!

Build a prototype before becoming the next Dr. Frankenstein.

Firstly, you may need to invent a much higher-resolution scroll wheel. The scroll wheel in my mouse produces 24 pulses per rotation. That is pretty coarse. So, to achieve the kind of smooth scrolling you want I think you would need a way of producing maybe five times as many pulses per rotation, perhaps more.

Secondly, in Windows at least, the smallest mouse scroll increment is one line (in a text-based context, at least). If you want smooth scrolling you'll need to be able to scroll text by much smaller increments than one line of text. I've no idea if this is achievable by writing your own mouse driver, but even if it is, you'd probably not have the means to get it past Microsoft's testing and approval regime.

In summary, for a smoother scroll you need many more pulses per rotation of the mouse wheel, and you need these pulses to make much smaller increments on the screen. That means you'll need to develop a higher resolution wheel sensor mechanism, and a new mouse driver than can scroll text screens in increments of less than one line.

So I think it might prove to be impracticable. Not for Microsoft or Logitech, but probably for you.

That's probably pretty reasonable. What the OS does with these pulses would be more to the question. You just want it to move a smaller distance per step.

My cheap 5+ button wireless mice (and some others) have an extra (sixth if you look at it that way) button just below the wheel which successively selects three grades of scroll speed. I could be wrong, but presume this simply multiplies the number of "pulses" sent.

Yes, obviously. That's what I said:

Why did you feel the need to say it again?

Essentially because you started confusing matters suggesting there might somehow be some benefit in increasing the resolution of the scroll wheel.


Just noticed my (Dell) scroll wheel has rather substantial backlash! :astonished:

Which I still maintain to be true. Reducing the on-screen increment means the scrolling will be slower by the same proportion. Hence the need for more pulses-per-revolution of the wheel.

It seems obvious that one would want the overall scrolling speed to be about the same - merely with much smaller steps, hence the need for more pulses per second from the scroll wheel.

Yeah, the mouse I'm using is programmable but I don't think to that degree (at least not without hacking). I'm using it on both Windows and Mac, at the moment actually using my PC as a server via Synergy to work as a virtual KVM switch, so I can go back and forth between them quickly using the same mouse and keyboard.

Of course :laughing: I do have a few backup mice to use in the meantime

Yeah, that's what I was saying in my original question - that's what I meant by replacing the current scroll hardware with a higher resolution encoder or hall effect sensor which would have far more steps per rotation. That part I can figure out; the problem is getting it to interface correctly with the computer and/or the rest of the mouse.

That's exactly what I want to do! As Steve says,

That is the end goal here, I want things to scroll at the same speed when I rotate the mouse wheel, just with a higher resolution of steps making it less choppy.

What I was thinking is it must be possible since built-in trackpads and even external trackpads and some mice like Apple's "Magic Mouse" do this already. It just doesn't seem to be very common, especially for people to make their own, so it's been difficult to research.

My main idea is: ideally, I'd simply integrate a new sensor into the existing mouse hardware, which I have no idea how to do. Alternatively, I could try to take out just the scroll hardware and squeeze my own hardware alongside it, meaning there'd be two cables coming out of the mouse - one for the stock features and one just for the scroll wheel. That'd be clunky and I'm not sure if there's even room for that but it's an option. As a last resort, I could completely gut the mouse, essentially using it for the shell, and build my own electronics and driver from the ground up. This would be a lot of effort but probably the cleanest and best solution.

In any case, the main thing I'm stuck on is... How would I tell the computer to treat my custom mouse like a trackpad?

Yes, I was thinking the same thing. The new sensor will be tricky, but it's essentially a do-able mechanical problem. The hardest bit will probably be the Windows driver - either fooling Windows into thinking the mouse is a trackpad, or writing your own. Trouble is, I think Windows drivers have to be "signed", which might make writing your own unrealistic.

I think you'll need to research how USB hardware reports its type and capabilities to the OS, and then learn the signalling protocol used by trackpads. I think this is going to be a non-trivial task, to say the least.

Ahhhh I see... I'll look into it, I know it's possible to do stuff at a basic level since the Micro and Due etc can show up as a basic peripheral and send commands just plug-and-play, but maybe I'm missing something in how that works or if trackpads are different.

Why do you think I posted here?? :joy: I'll see what I can find with just making an Arduino-based trackpad, and work off that. I had yet to get my bearings on where to start since there are multiple ways to attempt this, but I think that's my first step. Thanks!

I don't think you're missing anything. Windows already has plenty of generic drivers built in, including for mice, keyboards, trackpads, etc. My point was that hacking together your own mouse driver is probably too much trouble. Making your device look like a trackpad is probably the easier way to go.

Even so, using a trackpad has all sorts of differences, including things like double-click-and-hold-then-drag to select things, whereas a mouse is single-click-and-hold-then-drag. Presumably your Arduino software will take care of all that.