Haptick: The Strain Gauge Based 6DoF Controller

Six degrees of freedom (6DoF) controllers are used for manipulating an object in a CAD or 3d modeling program and are often called spacemice. You can twist it, push it, and even bop it. Most work with optical encoders, shining an LED through a slit to some form of photodetector on the other side. [Matthew Schubert] wanted to make his own spacemouse, but had some new ideas of how to go about it. His two-part project, dubbed haptic, focuses on measuring the forces, not the displacement.

He decided to try thick-film resistors as strain gauges and revisit load cells and proper strain gauges later. The actual structure quickly converged on the Stewart Platform, formed from three custom PCBs. A base to sit on, a knob for the top, and a middle board designed to take the strain with SMD resistors. A Teensy 3.2 talks to the ADS131M06 ADC and streams 4k samples per second to the host computer via serial. For prototyping, the calculations were done on the PC.

The first attempt showed a massive amount of noise in the reading as there were only a few filters already in place. Experimentation and referencing the spec sheets of the ADC showed that all the channels except channel 1 were near the noise levels specified by the ADC. A fourth-order Butterworth low-pass filter at 10hz offered significantly better signal-to-noise while remaining responsive. Using a known 390g mass, he placed it on the top disk, allowing him to measure the sensitivity of the gauges, which worked out to 7.8uV/newton. Ideally, [Matt] wants to measure forces down to 40-50mN, which is about 350nV, which is hard to detect even with the filtering. For the current version, he’ll just push a little harder but for the next version he’s switching to proper strain gauges for added sensitivity.

There are a few other issues such as measurement drift due to temperature differences and improving the ergonomics of a flat disk. The code and design files are all up on GitHub under CERN Open Hardware and GNU GPL3 licenses.

But it’s a wonderful journey with thought-out experimentation and investigation. We’re looking forward to the next revision. If you can’t wait, there’s a potentiometer-based spacemouse project that might tide you over.

Video after the link.

Thanks to [madpilot] for the tip!

16 thoughts on “Haptick: The Strain Gauge Based 6DoF Controller

  1. It wouldn’t have even occurred to me to use an SMD resistor as a strain gauge. One of the best posts on HaD.

    It may not be suitable for its purpose, but the author of the hack went through with it. It’s clearly usable to measure larger forces.

    Great work !

  2. “focuses on measuring the forces, not the displacement” isn’t strictly true, of course. Strain gauges are 100% measuring displacement, they are just very very very sensitive to small displacements, and if you design your physical beams correctly (not entirely a trivial task) you can map your small elastic displacements to forces.

  3. This is really cool, but I feel like the next logical step is how small you could make it. The sensors are tiny, the displacements are tiny… How small could you really make this thing? Would be very cool to see keyboards with these the same way rotary encoders have become popular lately.

  4. Nice design for sure! Would be really cool to get this working with regular resistors, I didn’t know you could use them in this way.
    I can’t open the design files to check but it looks like the resistor bridge is being read directly by the ADC. If that’s the case maybe an instrumentation amplifier could be build from some opamps to improve the signal to noise ratio further?

    1. I use the 3DConnexion stuff all day every day and let me tell you this: your hand/fingers need some real movement of the “knob”, disk or whatever you choose to grab in the long run.

      “Twisting” and “turning” a super sturdy disk (e.g. zero movement) will be super unconfortable very quickly. It’s the exact same problem with projected keyboards. Noone wants to type on a hardwood desk for longer than this comment takes to type…

      There’s a reason the manufacturer uses springs and optics for the spacemouses and navigators. Years and years of research and user feedback.

      It it wasn’t for their pricing and awful drivers/software now with planned obsolescence built in…

      1. That’s also a lesson learned with the F-16 sidestick, which is also force-sensing. IIRC, the design changed from completely immobile to “moves a little to indicate it is at maximum input level” so that pilots wouldn’t pull it til it broke. Hopefully that’s not just an urban legend.

      2. I imagine he could put a rubbery cover over the disk, akin to the nub of a trackpoint. The actual shaft has a miniscule amount of flex, but there’s sufficient give to be comfortable due to the cap.

  5. Could this be achieved using capacitors instead of resistors? I’ve read somewhere that MLCC SMD capacitors are very susceptible to being bent, maybe that could be useful in this context. I believe that’s the idea (at another scale) in MEMS sensors. Doing it solely with copper traces would be very cool, though I doubt it would lead to any kind of realistically-measurable signal.

  6. Technically very interesting but as a user interface I think I’d prefer something with movement that was more noticeable to my senses.
    I’m a human incidentally, not a bot. No offense meant to bots who would possibly like this better.
    Mind you, the regular 3D mice also don’t have a really pronounced reference to experience, but more than this I’d say.

  7. It’s the coolest thing I’ve seen all day for sure.
    I wonder if it would be nicer and also more sensitive by using some mechanical leverage. Maybe a handle with a ball joint?

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.