Now that I have finally wrapped up EOGee/EOGlass I can focus on my next project. I decided to do something with magnetics because I wanted to build a little more applied intuition and understanding of magnetic sensors and actuators. My original plan was to investigate building my own electro-permanent magnets, because I can think of some interesting applications for a switchable magnet. However in the process of my research I came up with a new idea for a wearable communication technology.
Human Body Communication (HBC) is a catch-all term for communication methods that use the human body as a communication channel. This means that the signals are contained within the human body and do not travel through a wire or through the air. This is potentially useful in wearable devices that may need to communicate with each other, for example a smart-watch can communicate with a heart rate monitor on the user’s chest, or an accelerometer on their leg, or even a medical device like pacemaker or cochlea implant. In such a network, all devices can communicate with a central hub (e.g. smart-watch) that then communicates to the user’s phone or other device to deliver the data to the user. Advantages of this approach potentially include reduced power consumption (due to the body’s higher channel gain compared to air), reduced network congestion (as each human will constitute a separate network rather than all sharing the air), as well as increased security and/or privacy (since the signals are constrained to the user’s body).
In order to further characterise and test the EOGee prototypes, it is important to be able to inject known signals and measure the output. This is not trivial, as the devices are configured to measure micro-volts of signal and a normal signal generator cannot synthesising a signal of such small magnitude. Secondly, the device takes a differential measurement, and so a differential signal is required rather than a single-ended one, as most signal generators produce.
To fix this issue I designed FakeEyes, a PCB to take a 3.3V peak single ended signal and convert it into a 1700uV peak differential signal.
Having previously improved the drift performance of EOGlass, I decided to look a little into the sources of noise. It’s pretty clear that there is a lot of noise on the signal.
It’s actually pretty tricky to know exactly what is noise, given that I don’t really know exactly what my eyes were supposed to be doing and, even if I did, the eyes often make micro-saccades that the conscious brain isn’t aware of. If I zoom into a section that looks like I was keeping my eye relatively still, the noise turns out to be about 60 ADC counts peak-to-peak. This is equivalent to approximately 21863nVpkpk, when referred to the input (ie before amplification) (12-bit ADC, 3.3V range, gain of 2211).
I wanted to know how much of this noise was coming from the hardware, and how much was coming from the user. For this I decided to analyse the noise contributions from each stage of the signal chain. Texas Instruments have a good application note on noise analysis.
The sensor is made of two flexible circuit boards (“flexes”) stacked either side of multiple layers of polyimide material, which is the same material used for the flex substrate. Both flexes are constrained together at one end, and when the flexes are bent, they slide relative to each other. The topmost flex (TX Flex) has a series of transmit electrodes along its length, while the bottom most flex (RX Flex) has a series of corresponding receive electrodes along its length. As the two flexes slide relative to each other, the capacitance between each TX and RX electrode pair changes. By measuring this capacitance the system can infer the relative slide between the two flexes and in turn infer the bend radius.
In the first article, I showed the amplified electrooculography signals on my oscilloscope. In the second article I showed the STM32 streaming a synthesised saw-tooth wave over USB to a simple python plotting script on my Mac.
The next step was to enable the ADC on the STM32 to digitise the analog signal and send that over the USB.
I’ve seen some cool tricks you can do by measuring the electrical signals of the body. One of these was using electrooculography (the measurement of the electrical signals of the eye) to detect movement of the eyes.
I looked about online and found the Spiker Shield by Backyard Brains, which is a board designed to interface with Arduino and measure EEG/EOG/ECG signals but it didn’t quite match my requirements – I wanted multiple channels and I wanted to work with an ARM processor. Luckily their design is open source so I took their basic analog design and built my own digital interface.
A couple of things went wrong on the first PCB. Firstly, the fab I used did not support V-grooves, which meant that instead of being able to mount the BBC MicroBit vertically by snapping off the top section of the PCB, it had to mount horizontally. Secondly, I needed to include level translation so that the MicroBit (which operates at 3.3V) could talk to the LEDs (which operate at 5V).
This project ultimately just uses the power of the BBC Microbit to communicate via radio and control the LED strips, therefore this board started out purely as a passive breakout board to mount the MicroBit and connect it to the LED strip but quickly became more complex.
I bought a set of Philips Hue White Personal Wireless Lighting LED Starter Kit on eBay which were listed as “untested” (just another way to say broken). These, when working, allow you to control the brightness of your lights via the internet from your phone. Being broken, I bought for a fraction of the cost. Now all I had to do was fix them.