HallSense

About
This contraption is a first experiment in providing myself with a 6th sense. After much thought and discussion (some of which will hopefully appear on the blog), it was decided to add a magnetometer, similar to that in a smartphone.
The whole point of adding a sense is that, through neuroplasticity, it becomes an automatic and subconscious thing: this requires the user to wear the device for prolonged periods of time, and practice with known inputs to build up an association between the environment and the feedback. This design goal also imposes certain requirements on the device itself, which must be durable and comfortable, as well as providing useful information.
Hardware
I’m not a hardware nut, so kept things simple for the prototype. The logic is handled by an Arduino Mini Pro. This is responsible for polling the sensor (a HMC5883L) and driving the actuators through a small motor controller mounted to its right. The board at the back handles power and switching for the actuators.
Hijacking a Sense

Another major issue with the goal of neuroplasticity is deciding on a sense to hijack. This device supports two actuators. The former is shown at the top of the page, and consists of a matrix of vibration motors around the inside of a sleeve.
These vibrate with various strengths to indicate the relative power of magnetic flux in the X, Y and Z dimensions, providing a simple mapping that the user can learn. There’s a fourth actuator that represents overall strength, but it’s not connected in the photos as it doesn’t mean an awful lot.
These actuators are driven by PWM, controlled by software on the AVR—One major disadvantage of the vibration motors is that they stall below a certain point, and often require a ‘kick’ to get the running again, which can be quite distracting. Generally, though, they work well and it’s simple enough to learn the input from them.

A second actuator was produced that shines different coloured LEDs into the periphery of the left eye. This somewhat heath-robinson approach was designed to be so far out of the way of normal sight that it becomes subconscious, in the same way that people don’t go around all day thinking about what their nose looks like (though you are now).
Signal Processing
Signal processing for such a device is fairly challenging: the output must be high-resolution enough to convey useful information, yet not persistently annoying (such that it is constantly noticed by its wearer) or so complex that it cannot be learned easily.
The prototype software essentially maps one of the three axes on the sensor to a single actuator, then normalises the lot based on a moving average. This behaviour thus makes the thing slightly more sensitive when necessary (compass bearings), yet still allows it to handle large swings in signal (such as placing it next to a motor or magnet). The fall-off for the LED-based actuators is totally different to that used for the sleeve due to differing levels of ’nocitability’ and problems with the vibration motors stalling at low revs.
One intricacy of this is representing polarity of a field: when one dimension is strongly negative, the other two float high. This behaviour was the hardest to learn, and perhaps absolute strength should be used in future versions of the software. The fourth actuator is available for this reason, to indicate overall mean or ‘zero point’ value.
So what can it do?
Well, first and foremost it can detect anything magnetic, and anything with a motor in. After a bit of practice locating the source and polarity of such things relative to the sensor (which is located just behind one hand) becomes trivial. The issue with this mode of operation is that if you’re waving your hand near something, it’s usually obvious whether or not it has a magnetic field around it anyway.
Secondly, it can describe the earth’s magnetic field sufficient to indicate north. This function is quite cool, and mirrors that of the direction belt that various others have tested. Unfortunately it’s also not entirely useful because my hand moves around relative to the direction I’m looking in, so this association is not as direct as for systems worn on the body.
Generally, due to the fragility of my prototype, I didn’t wear this for long enough to become fully accustomed to its input. Since I now have Google Glass, it seems possible to do much of this entirely in software, so I may not develop a version 2.