The (REAL) RSI free mouse!
Nowadays, most of us spend a large part of the day behind our computer-desks. Unfortunately the human being was not built intentionally for operating a computer.
And that’s exactly why more and more people suffer from RSI (Repetitive Strain Injury) issues sooner or later, and especially regarding that mouse.
But let me first start to explain the source of all these RSI related issues with that mouse:
- Your hand is about ‘horizontal’ on the surface in front of you (this is totally killing!!!)
- Repetitive movements (clicker, and mostly the scroll-wheel)
- Due to today’s GUI, people tend to ‘rest’ their hand on this mouse all the time, without any trigger to release it a.s.a.p. when no longer necessary.
- The height of the input device that doesn’t allow you to let your arm/ wrist peacefully rest on the table: This causes a lot of pressure on the bottom of your wrist, and in addition it requires continuous force in your muscles to avoid randomly clicking buttons too.
In fact this list is also applicable to your keyboard too, which is the reason to avoid laptops for daily use or bulky/ high (non-ergonomic) keyboards from an RSI point of view. (i.e.; IMHO long travel/ mechanical keyboards) But in this article I will focus only on RSI issues using the mouse.
Any solution for that ‘evil’ mouse?
Okay, a cat won’t be the solution for every mouse problem of course! But isn’t there any other solution available (yet)? And I know what you’re thinking:
“The RSI free mouse is nothing new under the sun, there are already plenty of known off-the-shelf solutions on the market!”
Well… I agree. Partially… Because most of them don’t really address the root cause issue (soft mouse pads), abuse another source (a mouse with the ball on top), or are just ‘a pain’ to use for daily work (especially the joysticks).
There is only one little neat approach I came across in my research, which is a mouse with an integrated rumble-motor to trigger the user’s mind to remove their hand. Too bad it doesn’t address all other issues. However as a bonus at the end of this tutorial I’ll give you a hint with an approach how to get it done by modifying your own favorite mouse! (Since variation between input devices will still improve effects)
But in general all these RSI products currently available on the market don’t address (all) the root cause issues and they have another thing in common, since they are all very… very… very expensive. But hey: this is DIY stuff right? Let’s come up with a better approach, and design that (REAL) RSI free mouse!
In order to design a solution, I had to set some requirements first. I wanted to set one high goal; address ALL the listed design-issues that we faced with the conventional mouse. This mission was clearly to shoot for the moon (and we may hit some stars).
Q: How to address the horizontal position?
A: Take the position of an idle hand, as most comfortable reference position.
Q: How to avoid repetitive movements?
A: The input device must be symmetrical, allowing easy changing operation between left and right hand (preferably without changing button preferences in software). All the functionality should be addressable independent of predefined hand or fingers. Sorry left-click finger, scroll-finger and right-click finger, you have some competition here 😉
Q: How to avoid the user from resting their hand on the mouse?
A: Design a surface that doesn’t allow your hand to rest on.
Q: How to avoid excessive wrist-pressure?
A: Create a design that doesn’t require substantial force to operate (especially not in idle), while trying to avoid any additional height and bezels in its design.
This personal research all started for me during my graduation thesis, which is about 3 years ago before this write-up, because the sharp edges of that Apple MacBook Pro were killing! It looks beautiful, but seriously: Who came up with this design?
I found a quick (and dirty) solution offered by Apple, which is their low-profile keyboard and track-pad to avoid these kinds of issues. Back in that day, I was happy because no issue appeared anymore for over two years!
I really like the multi-touch gesture approach for a few couple of reasons, however the working-angle didn’t match my ergonomic-requirements. I found a simple workaround that seemed to work for me:
However, the drivers appeared not perfectly suitable for Windows, which is the terrible OS that I’m also used to work with. In addition, I found the working-angle still not ideal and the surface even too big when not in horizontal position. So, back to the ‘drawing board’…
I figured that I could use a track-pad from an old Windows notebook that I had lying around. Time to take it apart, and see if it matches expectations!
Well, my expectations were USB 1.0 compatibility. Unfortunately with a bit of reverse engineering using my oscilloscope, it turned out that there was a PS/2 compatible pinout; GND, 5V, data-, and clock-wire:
So apparently I took a very old notebook and had to use a PS/2-to-USB converter too, but it will do the job. But if you are just a bit lazy or if you don’t have a pile of notebooks, one can buy a track-pad online: http://www.ergonomictouchpad.com (lucky you; it comes with USB integrated!) Let’s build a proto with external right-, and left-clicker buttons:
This one was promising, but I was still not sure about its working-angle. This is because of its upper part, which is prone to flip over when applying slight pressure. I considered additional weight, and even magnets in combination with a metal piece in a mouse mat. I quickly noticed that this piece of track-pad supported the tap to click (and double-tap to drag) feature, which allows me to remove at least the left-click button. But finally I came up with this raw design concept, which doesn’t suffer from that flip-over issue and provides also a solution for the ‘ugly’ buttons:
I had chosen to put four buttons underneath the track-pad surface, and make some notches in wood. And no; I didn’t have my hands on a 3D printer yet in that day, but I realised that 3D printing this object would have been a great idea. Using wood the notches are tricky since the polishing procedure is likely to destroy the outer part, but actually we don’t necessarily need them after all. Gluing all the required four right-click switches in parallel:
Avoiding wear and tear of the PCB and the ‘cheap’ clicking-sound using a simple piece of tape… (I mean; try to imagine the sound of the whole office clicking like mad!):
Find out the button-and PCB pinout using reverse engineering the signals and or data/wire-tracing, and if you’re lucky there might be datasheets available on the interwebs using the track-pad serial number. Try to use the largest spots able to solder (with the smallest amount of risk for shorts).
Again: Triple-check all the contacts with your DMM in order to avoid shorting out either your pointing device controller or even your computer! Otherwise this can seriously ruin your day!
Finally it doesn’t hurt to find some nice decoration to make its look and feel a bit more appealing 😉 For example I had some nice warning-stickers, yellow hard plastic in the same colour scheme and rubber-knobs lying around from another project. And hey pssst; don’t tell anyone; I made ALL the ugly edges disappear with black isolation tape to make it look like one uniform (expensive) piece. So no one can tell it was a DIY project, and they might even ask you where to buy it!
In general I would try to start drawing ‘the perfect circle’ in order to test a pointing device, and determine if it felt natural (and check if the result looks okay and non-interrupted). This is the point where most of the existing RSI-mice’s fail, or lack user-friendly operation.
After using the new design for only two days, I noticed that all the RSI issues disappeared! And after a while I was even able to use that other mouse again in cases there was no alternative (for example with CAD-tooling or flex-locations).
Some other things I found remarkable: The Windows drivers act different when the PS/2-to-USB converter is used. I was lucky to connect this mouse to a docking station with a native PS/2 port, and use the multi-touch scroll functionality supported by the Windows 7 Synaptics driver. But too bad this functionality was broken in Windows 10, and I have to use the keyboard to scroll through pages (or use Linux). Alternatively I might look into converting drivers or create my own PS/2-to-USB converter. But let’s discuss this in the “Further improvements” paragraph.
Something else that is remarkable… I found that the most optimal position for this mouse on your desk is to stow it a bit away from your keyboard in the direction of your monitor. (like in the right-hand picture) I would recommend this for two reasons:
- When you ‘blindly switch’ between operation of mouse and keyboard, it is likely that you forget the mouse and wipe it in the direction of your keyboard (since you don’t hold it when idle)
- It automatically triggers the user to rest their arm and wrist fully on the desk, to avoid centralised pressure points in your wrist.
I am using this device now for over half a year, and something I might do different next time is the choice of glue and materials. The rubber pieces are prone to get dusty, and the plastic / sticker parts wear-out a bit due to finger grease. Honestly I don’t know if it will last for a reasonable lifetime expectation of about 5 years, but the glued parts are definitely most doubtful because I had to rework some parts already after the first week.
Besides the material choice I would like to point out the need for USB compatibility and the support of scrolling gestures. Nonetheless, the PS/2 standard is still usable and PS/2-to-USB converters are very affordable. But I think in general it might be a feasible-, and interesting exercise for future improvement of this project to look into creating my own custom USB-PS/2 converter. The PS/2 protocol is fairly easy to understand, and this customization allows adding:
- Scroll-functionality by translating scrolling action into page-up/page-down HID keyboard activity using the Teensy or Arduino
- Capturing user-activity to suggest changing hands or suggest a little break (like the rumble motor or another actuator)
- The possibility to transfer the data wirelessly to a paired computer (via Bluetooth or a custom USB-dongle)
However, battery operated devices usually come with a few additional challenges too:
- Battery level monitoring and control (whether chargeable or not)
- Energy consumption
- And usually a considerable amount of additional weight / volume.
The mouse definitely seems to do the job, however it’s not perfect. Officially we can judge this thing after a few years of intensive use, but by definition of respecting the basic RSI principles it is already heading into the right direction.
Of course there are always nice-to-haves and other wishes, but at least you have to start somewhere before losing focus in the details of features.
Bonus material: Alternative approach (modify your favourite mouse!)
If you’re still interested in modifying your favourite mouse with a rumble motor trigger (for CAD-purposes I can imagine): You can use a microcontroller to count the amount of times that the LED (in case of an optical mouse) went brightly (i.e. indicating activity) during a specific time frame of 3-15 minutes. (Timing is depending on your preferences)
The idea is that this brightly activated LED is quite an accurate measure for touching (and using) that mouse. You don’t even have to monitor the buttons, since it is virtually impossible to keep your mouse steady enough for a general mouse spec of 800/1600DPI accuracy not to detect any movement.
And in order to ‘reset’ the counter, you can implement idle time like 15 seconds – 1 minute in order to ‘recover’. Be aware to avoid sensing the LED in this ‘mode’, because otherwise it will trigger false alarm.
But you have to make sure to check for the space left in your specific type of mouse, in order to store:
- A small rumble motor (you can just salvage one from your old mobile phone), or just find another random motor with an unbalanced weight
- A transistor to activate the motor (and take a flyback diode for reverse voltage protection, and just in case a capacitor to avoid noise or voltage drops that can potentially reset your mouse uC)
- And maybe a kill-switch for on/ off mode, sensitivity or timing adjustment…
- Some space for an Arduino microcontroller Nano/ Micro*
* You can even do better and shrink down this Arduino project to AT TINY 45/ 85 level. (yes, this one is even available in SO-8 package dimensions)
Or for an analogue approach, I think a simple RC-timing circuitry might even do the job. At some point you reach the threshold of a full capacitor, and an op-amp or transistor setup will activate a rumble motor. Avoiding input due to the motor during recover time can be tricky. So either you have to use another transistor to block input, or you can choose a buzzer that produces a short beep like your watch can do every hour. Or you can act funny and generate the sound of a scroll-wheel by tuning an astable multivibrator flip-flop to a square-wave signal of about 2 to 5 Hz, and connect it up to a small speaker. But don’t blame me if your colleague puts your mouse (eventually including user) in the waste bin someday 😅…
In addition, you might also give RSI software tooling a try. For example I have used Workrave, and it is freely available for Windows and Linux. http://www.workrave.org
I’ve seen Mac variants in the past, but the popups are quite aggressive sometimes. And that might disturb you in your workflow when you are just about to write down that great idea!