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”

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”

Project: EOGee – EOGlass Drift Reduction

In a previous article I showed how the bias current of the AD8226 amplifier was causing a 20nV current to flow through the electrodes resulting in a large voltage offset due to the impedance mismatch between the left and right electrodes. This resulted in a large drift in the signal due to changes in impedance between the user and electrodes as they moved or sweated, which often saturated the ADC. I built a test board and showed how this could be reduced by a factor of about 1000x by using the AD8220 which has a bias current of less than 10pA.

Continue reading “Project: EOGee – EOGlass Drift Reduction”

Project: EOGee – Improving Drift via Reduced Bias Current

Problem: The previous prototypes of EOGlass that I have shown use wet electrodes to make good contact to the user. This results in a reliable, low-impedance connection but is also messy and inconvenient. Recently I’ve been trying out dry electrodes for convenience, but they suffer from two main issues: drift and noise.

EOG data over about an hour shows a significant drift effect. The EOG data is there beneath the drift.
Continue reading “Project: EOGee – Improving Drift via Reduced Bias Current”

Project EOGee: EOGlass1

I want to develop the EOG algorithms to do something useful, but having three electrodes dangling from your head and plugged into a box is quite uncomfortable and annoying. This is a frustration that I have seen echoed in papers, for example Bulling and Gellersen report the difficulties of capturing a labelled dataset in their paper Robust Recognition of Reading Activity in Transit.

Continue reading “Project EOGee: EOGlass1”

Project EOGee: EOGee2 and DC Coupling, Part 3

The main barrier to getting a DC coupled signal using EOGee1 was that the DC offset voltage of the EOGee signal was much larger than the actual signal itself. Because the signal itself is so small we need a large gain to amplify it, but this also amplifies the offset voltage which then saturates the amplifier.

My solution is to use a signal chain like this:

sigchain

EOGee2 Signal Chain

Continue reading “Project EOGee: EOGee2 and DC Coupling, Part 3”