Close
0%
0%

thumbMouse

Small and unobtrusive thumb-controller pointer device, avoiding shoulder pain from mouse/laptop touchpad use

Similar projects worth following
The motivation for thumbMouse is the muscle aching (typically in the shoulder) and the uneven posture that involves using the embedded touchpad on most laptops (which involves placing the right hand asymetrically to the left hand on the keyboard) or even an external mouse which also typically sits to far to the side and at a different height.

The idea is to have a small device that can be attached to your thumb or index finger, which includes a BlackBerry style trackball or trackpad (still to be decided), allowing you to control the mouse from any hand position and without requiring any arm/hand motion, only by rolling your thumb against your index. This design allows you to leave both hands on the keyboard while typing and does not require to change your hand position to control the mouse.

Design decisions

While analyzing similar devices or ideas (which are small enough and possible to mount on the fingers), I considered initially two options: using either a blackberry trackball or a trackpad. Both options are really low cost since these components are widely available as replacements.

While another typical and attractive option is to use an IMU, in my opinion this also involves some uncomfortable use, since it is hard for an IMU to be used (without further sensors) as an absolute positioning device. In other words, you control de displacement and not the position. This further means that there's no precise user feedback (besides the position of the cursor on the screen) on where's the reference frame from which you define the motion. This is in contrast to a typical mouse or touchpad where you know which way is up/down left/right.

For this reason, at this point I'd rather go for a trackball/trackpad where these axes are well defined, irregardless of how the sensor sits in your fingers. Moreover, this design only involves relative rolling finger motion and not repetitive motion of the finger/hand in space.

For starters I will consider a trackball since it is easier to interface, but I will eventually compare its performance to the trackpad and device which is best. It may be even useful to have one in each hand.

Also, I will start with a simple wired design, possibly using a cheap STM32 MCU with USB HID firmware. Eventually this could be made wireless but I'd rather skip all battery/charger/wireless protocol issues for later.

Finally, any attachment structure will possibly be 3D printer, which also allows adapting to different finger shapes, sizes, mounting positions, etc.

  • Project on hold

    Matias N.10/04/2019 at 22:34 0 comments

    While I have a protoype working, as I mentioned previously, I have an issue of not having an appropriate connector for the two sensor modules I have. I actually found ONE manufacturer (I-Pex) that provides one that could work for one of the two models. I contacted them and requested a sample, however while they were nice it was basically "we cannot pay for shipping this product if you are not developing something commercially and have your own company". So, at the moment, I guess I will not get a connector.

    The remaining option is to design a footprint for the sensor which has little holes in the pads. In theory I could add solder to the PCB and FPC and then melt them together this way, but it is a bit tricky and I'm not sure it will work.

    I have written the schematic for the circuit though: I found appropriate PSU ICs for the 1.8v and 2.85v supplies and also included the MOSFETs for logic-level conversion. I have not yet designed the PCB as I'm not currently motivated to continue this in this way. In any case, I will most likely finish the PCB design in the future, when I make an order on digikey for some other parts and then I can order the required components for this board. Then, I will probably build a complete protoype, at least to finish this with something built. I will eventually decide if there's enough interest to work on this further or not.

    In reality I lately became more motivated in picking up my BicycleCompanion project, for which I already have a working protoype. I want to do a second version with many new features and also with several improvements. Thus, I will direct my focus there at the moment.

    In any case, let me know if you have any particular interest in this project or any questions or comments.

  • Functional Proof of Concept

    Matias N.08/25/2019 at 18:01 0 comments

    I have the trackpad working as a mouse! I will try to make a video of it, but it is difficult to show both the trackpad being used and the pointer moving on the screen. But, it indeed works. I'm amazed on how sensitive and precise it is. I'm actually able to move across the whole screen without much effort and at the same time, make small and precise movements. I'm not sure if Linux is adding some sort of acceleration to the pointer, but it works perfectly.

    At the moment I'm polling the sensor via I2C since my interrupt line is not being converted to 3.3v (I'm reading the 1.8v line directly) and it does not work reliably as one would expect. Fixing this will eventually enable low-power reading of the sensor.

    With this result I'm actually deciding on going ahead and design a PCB with everything needed for a wired version: USB connector, the two power supplies, logic-level converter and MCU (not sure if STM32F103, I might go with some STM32L MCU to eventually have a low-power design ready for a wireless version). I will also need some way of reading button presses. I will probably better to have capacitive touch buttons than mechanical ones, since I imagine it will be more comfortable. Also, I need to design this so that the device is not too big and I can design a part to be 3D printed to mount the whole thing on a finger.

    Anyway, there's a slight issue with this: I need to find an appropriate connector for the sensor. I found some shady vendors on strange sites, selling blackberry parts. I would like to find something that I can buy from a reputable source such as digikey or similar ones. I don't really know if this kind of connector is supposed to be more or less standard or if it is custom-made for blackberry (seems unlikely). If you could help identifying I would be really thankful!!

    Here's a picture of the BlackBerry 9800 sensor (the one I'm using) on the left, and a 9900 sensor on the right. It would be cool to find both, but I need at least for the 9800 one:

    And here's a picture with a caliper included, for scale (each tick is a milimiter). So it is about 5mm from extreme contact to the other (and there are 13 contacts). So I figure the 9800 sensor has a ~0.4mm pitch connector:

  • Success!

    Matias N.08/23/2019 at 23:15 0 comments

    Last few days I made some considerable advances so this will probably be a long post. TLDR: trackpad works!


    Trackball

    First thing I received was the blackberry trackball evaluation module. Since my expectation was that it would not be very accurate as a mouse replacement, I limited myself to simply analyze what was the actual resolution of the device. After connecting my cheap-o logical analyzer to the relevant outputs, I could see that there were around 9 pulses per one complete sweep of the finger on the ball (ie. the maximum that you could move the finger in one move). If you count edges, you then get about 18 counts. As expected this is a bit low. In fact, I tested only slightly moving the finger and indeed it required a bit of motion to get the first pulse.

    In conclusion, this kind of interface is more to either replace a mouse scroll wheel or for other kind of projects altogether. For example, it could be used for navigating a GUI displayed on a small screen, avoiding the need for four buttons.

    Trackpad

    Now this is where it gets interesting. I was eager to try these modules and see what could I get from them. I bought four units: two BB9900 trackpads, and two BB9800. As mentioned in the previous log, these have 13-contact flexible PCB connectors. From my research, these present a I2C interface, instead of the SPI used in other models. Still, it was supposed to implement a similar register map than that of ADNS3060 optical mouse sensors. One extra difficulty in these models, though, is that it requires both a 2.85v supply for the sensor itself and 1.8v for the logic. This of course also means it requires a level-shifter to map 3.3v <-> 1.8v.

    So, the first task was to solder some tiny wires to the connector and make a DIP-like module for it, so that I could place it on the breadboard. While I actually had a digital microscope on the way, I gave it a try in soldered the wires with the naked eye. I must say it ended up quite nice. Here's a picture with the microscope of the job done:

    The brown part is some leftover flux. Or maybe it is a bit of burnt substrate, but it did not damage any of the fine traces. Also, I verified that there were no shorts. The module then looks something like this:

    The second step was to build the pair of power-supplies. Using an switching adjustable power supply (my new low-cost bench PSU at the moment), I converted from a 12v wall adapter to regulated 5.0v. Then, I've built the 2.85v and 1.8v supplies using a pair of LM317's and a small breadboard. I then wired the supplies to the module and used the logic-level converter to map the SCL and SDA lines.

    For testing I bought a BluePill board (STM32F103) but for some reason USB did not work (even after the R10 resistor fix). I then moved to an Arduino Pro Mini for initial testing. Later on, I re-used my old BluePill (which lacked the USB connecter) and transferred the malfunctioning board's connector towards the old board.

    The complete test setup can be seen in the following photo:

    Interfacing with the module

    At first I encountered many problems which led me to think that it just was not possible to talk to the board. Maybe the pinout wasn't correct. Maybe this model was different. Anyways, after lots of trying I finally found that I had some wires setup wrong in the breadboard. But that was not all. While playing with the wires and running an I2C device scanner Arduino example, I suddenly got a response from a device with a 0x3B address. Then, after playing with the wires again I got a 0x33 address instead. At first I assumed it was noise in the line, but it was actually pretty consistent. Finally, I concluded that depending on the assigned SHUTDOWN pin value, and after resetting the module, it presented itself with either one of these addresses. I've tested for the expected motion registers and concluded that the one that worked was the 0x3B one, so I left the wires for that case.

    Once I got that working it all went pretty well. From my tests, it seems that it...

    Read more »

  • Of trackballs and trackpads

    Matias N.08/12/2019 at 20:03 0 comments

    The TrackBall

    I have a BlackBerry trackball module on its way to start tests with that. This module includes the appropriate hall sensors to read the rolling magnets which allow to detect the ball motion. Also, it includes a series of LEDs and a touchpad button beneath the trackball.

    https://s15-us2.startpage.com/cgi-bin/serveimage?url=https%3A%2F%2Fae01.alicdn.com%2Fkf%2FHTB1BSr2JFXXXXbdXVXXq6xXFXXXn%2FICSH044A-ICSTATION-Blackberry-Trackball-Breakout-Board.jpg_640x640.jpg&sp=451957bbba26b013761e43b766f563dc&anticache=432953

    After looking up some videos and reading up on its performance, I expect it to be a bit underwhelming. I've read that it can detect about 9 pulses per full revolution, which does not seem to be very much. It is actually a strange design, since the button has four magnets and four sensors, where there's actually 2DoF. For some reason, instead of designing this to have a quadrature encoder ouput (where for each axis, we have to out-of-phase square waves, thus having 4x resolution if counting all flanks), it works by only activating one of the rollers corresponding to the motion direction. This means that only one hall sensor is activated per axis motion, and simply generates pulses.

    Anyway, I was more or less expecting this and I mostly want to test this to see if it is worth using in combination for a trackpad or maybe even in some other projects.

    The TrackPad

    When looking for spare BlackBerry parts, I saw that the trackpad is actually quite common since it was used in many more models. It is not much more expensive either. From what I've seen (it is difficult to find precise information), all trackpads work by emiting an IR light into the finger surface, which is then captured by an IR sensor which is able to compute delta motion of the surface. This is actually how old optical mouses worked. In fact, it seems that the registers it exposes actually conform with the comon ADNS3060 module.https://ae01.alicdn.com/kf/HTB1F3o9RXXXXXakXFXXq6xXFXXXv/Trackpad-Trackball-Joystick-Mid-Middle-Navigation-Home-Key-Button-Flex-Cable-For-BlackBerry-9700-9780-9900.jpg

    The difficult part is that there are many different modules used in various BlackBerry phones. Some use a surface connector and others directly expose the pads, in order to insert the tip into a surface connector. Also, it is difficult to find actual pinout for each, but I managed to unify information from different pages (and, mostly, from this project https://vlukash.com/2019/01/15/trackpad-in-keycap-corne-crkbd-keyboard/ which provides a lot of good information, including pinouts, schematics and code). In the end, I managed to build a list of interchangeable modules, but from these I have pinout for only three groups (one with connector, other two with exposed flex PCB pads). The first group of modules (used in crkbd project, linked above) works over SPI, whereas the other two work over I2C. Moreover, it would appears that the latter include a LED and button. Finally, these also appear to be more modern, since they are featured in the latter BlackBerry phones.

    I'm going to try to have a sample of a few of these. I prefer the exposed PCB pad version, since it would be easier to solder wires to it. The downside is that these appear to require not only a 2.85v regulator, but also a 1.8v for the logic.

    Pinouts:

    The following is a list (number is pin number, not yet clear which pin is pin 1) of pin assignments of intercompatible modules.

    9900/9930/9850/9860 series:

    Flex PCB, with exposed pads:

    1. DOME_A Dome Switch A
    2. DOME_B Dome Switch B
    3. LED- LED Cathode
    4. LED+ LED Anode
    5. VDDIO Supply voltage for I/O pads
    6. VDDA Operating Voltage supply
    7. GND_CSP CSP Ground
    8. NRST Resets chips
    9. IO_MISO_SDA Bidirectional open drain serial data
    10. MOTION Motion Interrupt
    11. IO_CLK Clock for serial port
    12. GND_ISOLATED Isolated Ground
    13. SHUTDOWN Low Iddq Enable

    9800/9810/9100/9105/9300 series:

    Also Flex PCB, with exposed pads. Appears to have same pinout from above series, however the footprint of the pads is different (pads are bigger):

    1. KEYOUT
    2. KEYIN
    3. GND
    4. VSYS
    5. V1_8
    6. V2_85
    7. GND
    8. RST_N
    9. SDA
    10. MOTION_N
    11. SCL
    12. GND
    13. SHTDOWN

    8520/8530 series:

    The conector required to mate with this module is the following: DF30FB-20DS-0.4V

    1. GND
    2. SIG(3)
    3. NC
    4. SIG(2)/INT
    5. RESET
    6. SIG(1)
    7. SHTDOWN
    8. SIG(0)
    9. CS
    10. 2.85v (220ohm)
    11. CLK
    12. 2.85v
    13. SDI
    14. GND (220ohm)
    15. SDO
    16. KEY_OUT
    17. MOTION
    18. KEY_IN
    19. 2.85v
    20. GND

View all 4 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates