Project: Vortex Ring – Proof of Concept

In the previous article we introduced the Vortex ring and derived the governing equations. We found that the voltage developed on the sense coil could be described by the following equation:

We also defined a rough process for designing the ring.

Ring Parameters

The first step is to select the material and dimensions of the ring itself. For a proof of concept, it is unnecessary and expensive to create a custom ring and so instead I looked online for existing solutions. Luckily, toroidal ferrite cores are a common component for creating inductors and transformers. These are effectively just a ring of a high permeability material which is exactly what I need – although they aren’t generally made to fit on a finger. The best solution I found was the TDK Electronics B64290L0647X038 which has an inner diameter of 17.7mm, an outer diameter of 31.0mm and a length of 16.1mm. The magnetic permeability is about 10000 which is pretty good. This is definitely a chunky ring and barely fits on my finger, but it was the best off-the-shelf compromise I could find for now. The effective area and effective magnetic length can be read from the data sheet as 76.98mm2 and 73.78mm.

Continue reading “Project: Vortex Ring – Proof of Concept”

Project: Vortex Ring – Introduction and Theory


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).

There are two broad classes of HBC – galvanic (where current is used to transmit information) and capacitive coupling (where voltage is used to transmit information). These are described in the paper A Review on Human Body Communication: Signal Propagation Model, Communication Performance, and Experimental Issues by Zhao et al.

Galvanic and Capacitive Coupling Human Body Communication
Continue reading “Project: Vortex Ring – Introduction and Theory”

Project: EOGee/EOGlass – Summary

For a quick overview of the final design, EOGlass2, please see the summary video here.

I’ve been working on EOGee, my electrooculography project, for almost a year and a half now. I feel like I’ve gotten to a point of marginal returns. There are a number of ways my work so far could be extended, but they each require significant investment in terms or time and/or money for potentially marginal gains. For this reason I have decided to de-focus from this project and focus my energy on new projects where I will learn faster. I may continue this project in the future but for now I want to document all of my efforts so far in one place.

EOGee 1

Introduction to Electrooculography

At the beginning of this project, I wasn’t sure how hard it would be to get even a basic electrooculogram. I had read a little about the topic: Electrooculography relies on the potential different between the retina and the cornea (“corneal-retinal potential difference”) resulting in a potential difference between the subject’s temples depending on the rotation of their eyes. This potential is typically around 500µV peak-to-peak difference between when the subject is looking fully to the left compared to the when the subject is looking fully to the right.

Animation showing how retinal-corneal potential results in a potential difference at the temples.
Continue reading “Project: EOGee/EOGlass – Summary”

Mini Project: Magnetic FEA – Current Sense Coil Position Dependency

One method of measuring current through a wire is using a current sense coil. This is a mostly nonintrusive way of measuring current by detecting the magnetic field around the wire, however it only works for AC signals. In this setup we have a coil of wire wrapped around a ferromagnetic toroid. We then pass our AC current carrying wire through the centre of this toroid and measure the voltage induced on the coil. Due to the very high permeability of the toroid, we can assume that the magnetic field inside it is insensitive to the exact location of the wire passing through the toroid.

A voltage is induced on the orange coil when an AC current flows through the red wire

I wanted to investigate this relationship between the sensitivity to the location of the wire inside the toroid and the permeability of the toroid. This can inform how high the permeability needs to be before we can assume that the position of the wire is not important. To do this I used the FEMM finite element magnetics package. This allows me to create an arbitrary geometry of coils and toroid and measure the magnetic field inside the toroid.

But first, a little background on the theory…

Continue reading “Mini Project: Magnetic FEA – Current Sense Coil Position Dependency”

Contributing to Pygame

In the past I’ve used python to create small programs to interface with my hardware projects like EOGee and ShArc. I use the Matplotlib animation class to plot live data, however I’ve found this to be very slow, typically only updating a few times a second. To help remedy this I’ve begun using the Pygame library. Pygame is an open source python library for developing games – it provides a simple structure for running a main loop while drawing to the screen, and update rates of 60Hz are easily achievable.

While using the Pygame library for developing a ShArc demo, I came across a shortcoming in the function for drawing arcs, which I was using the visualise the shape of the sensor.

When drawing an arc of very large radius, I found that the arc typically would not be completely drawn. This is illustrated in the following image which shows four arcs which should be connecting to each other, however clearly there are large gaps between them. If the arc was short enough, with large enough radius, it may not be drawn at all.

Four arcs do not connect due to the bug
Continue reading “Contributing to Pygame”

Project: Recreating ShArc – Testing Linearity

In the previous article I showed my successful implementation of ShArc, a novel bend/shape sensor using capacitive sensing. My video showed that the system could track the bend shape of the sensor but it was not quantitively analysed.

To take this a little further I wanted to show the relationship between the signal that the sensor generates and the radius of curvature. To begin with I 3D printed a flexible covering for the flex using TPU filament and the modified extruder I designed to enable TPU printing on my Monoprice 3D printer.

Continue reading “Project: Recreating ShArc – Testing Linearity”

Project: EOGee – Injecting Fake Signals with FakeEyes for Frequency Analysis

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.

Continue reading “Project: EOGee – Injecting Fake Signals with FakeEyes for Frequency Analysis”

Project: EOGee – Programming the EOGlass microcontrollers

There are two main ways to program the STM32 microcontroller in the EOGlass prototypes. The first is by using a dedicated programmer/debugger (e.g. the STLink) to connect to the SWD pins of the chip and programming it directly. However this requires adding a pin header to the board to enable this connection. The second option is to use the bootloader.

The bootloader is a small program that is stored in the microcontroller flash memory that can receive a program via SPI/USB/UART etc. and program itself. In this case, we have a USB port on the board anyway, so we can use this to program the device without having to add any more connections to the board.

In order to enter the bootloader, however, it is necessary to hold the BOOT pin high while resetting the device. This is typically done using a pull-down resistor and a push button to pull the BOOT pin high when you want to enter bootloader.

Resistor R109 holds BOOT0 pin low until you press SW101
Continue reading “Project: EOGee – Programming the EOGlass microcontrollers”

Project: EOGee – Hardware Noise Analysis

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.

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.

Continue reading “Project: EOGee – Hardware Noise Analysis”