Problem on Android V6?

We recently set up a Samsung Galaxy Tab A (Running Android V6.0.1) to run as a Network Data Source to act as a remote alarm annunciator for Benjamin’s seizure detector, connected using WiFi.   We have been using this system for a couple of years – we were just using a different tablet computer.

Since we set it up it has go into an odd state twice – where it appears like it should be in a Fault condition, issuing fault ‘pips’, but it is not, and the status is shown as OK, with the data time shown as 00:00 – see screenshot below.

This is a significant failure of OpenSeizureDetector, because I designed it to do self checking to warn the user if something was not right, and it is not doing it.

Has anyone else seen this and not reported it?   It may be limited to the ‘Network Data Source’ mode of operation, and I don’t think many people are using that, but please let me know if you have seen it, as I haven’t spotted the cause of it yet.

Thanks

Graham.

 

 

 

 

 

 

 

Custom Hardware Seizure Detector

We have made some progress with a feasibility study into running OpenSeizureDetector on very low cost hardware – I have started a page Custom Hardware Seizure Detector that I will update as we develop it.

It would be really good to know if people are interested in this – please either get in touch with graham@openseizuredetector.org.uk or our facebook page http://facebook.com/openseizuredetector.

Custom Hardware – Back to Basics

clone tag: 4666059039841896442

I have been carrying the proof-of-concept custom hardware set up (an ESP8266 module (clone of Wemos D1 mini) and an ADXL345 accelerometer module – shown right) up and down the country for a couple of weeks.

I can program it to flash an LED on and off, so the input output is working, but it wouldn’t talk to the ADXL345 accelerometer – I tried adding pull-up resistors, switching which input output line I was using, but to no avail.

So this evening i went back to basics and started with a new ESP8266 board and a new accelerometer module, and wired it on a breadboard so I can probe what is happening easier (see right).

This is a straight connection (no external pull-up resistors etc.   Wemos D1 (=GPIO5) connected to SCL, Wemos D2 (=GPIO4) to SDA.

Then I ran a simple i2c scanner, which just looks for a non-error response for every possible address (see source code on Github).   With that, I finally get a response….the module is using address 0x53, which is the ALTERNATIVE ADXL345 address, not the primary one I suspect my earlier problems could have been as simple as trying to read the wrong device address rather than wiring issues as I had assumed – Doh!!!

Potential Custom Seizure Detector Hardware?

With Pebble watches not being available any more, and Android Wear devices being very expensive, I am still wondering about an alternative seizure detector hardware platform.

I have heard about ESP8266 modules – they are small microcontrollers with built in wifi capability.    Although most people connect them to another microcontroller, it is possible to write your own software to run directly on it so I am wondering if it may be possible to make a seizure detector watch with them – It would need an ESP8266 module, an accelerometer chip and a LiPo battery, and put it in a 3D printed case.

I have just got an ESP8266 module with a built in USB interface.  This is a bit on the big side, but about the same size as a Pebble Time, so not out of the question (top image on right)

I have also got a few smaller modules that do not have a USB interface, so will take a bit more programming, but they are a lot smaller (bottom image on right)

The most surprising thing is the cost – the big one with extra hardware was just over £5, but the small ones are less than £2 each – it is hard to believe anyone can manufacture things and ship them from China for that price….

I have set up the compiler toolchain from https://github.com/pfalcon/esp-open-sdk, and obtained the tools to interact with the boards from https://github.com/espressif/esptool, and finally obtained some example programmes from https://github.com/esp8266/source-code-examples.git, which includes a ‘blink’ example.

After a bit of faffing to get the Makefile to work with my new cross compiler, ‘make’ will compile the programme, and ‘make flash’ will write it to the board.

After which – the on-board LED flashes on and off every second – success – the Microcontroller equivalent of ‘Hello World!’.

Next steps are:

  • Connect an accelerometer chip  to the board, using the SPI or I2C interface and try to read data from it (like I did using an Arduino back in 2013 – Soldering onto Surface Mount ICs).
  • Port the Pebble_SD seizure detector algorithm to the board to see if it will fit.
  • Get it to act as an OpenSeizureDetector network data source so that other devices can connect to it to detect alarms etc.
  • See if we can get the power consumption down enough that running it off a watch battery is feasible.
  • If it seems feasible, re-commission my 3D printer and try to make a case.
  • Think about adding an optical heart rate and blood saturation measurement to it.

The video below is not exciting, but it proves we can at least run a programme on one of these tiny (and very cheap) boards.

 

Beta Release of OpenSeizureDetector V2.5.1

I have just released a new Beta test release of OpenSeizureDetector on Google Play Store (V2.5.1).

The only change is an improvement to handling alarms from short duration seizures.   If a seizure is only detected for a short period, the previous version may only give a single set of Alarm beeps, which may be insufficient to alert a carer.

With the new version, if you enable “Latch Alarms” in the Alarms settings then when an alarm initiates, the alarm beeps will sound for the period specified in the “Latch Alarm Timer Duration” setting, even if the alarm resets quicker.

You can stop the alarm to silence the beeps earlier by pressing the Accept Alarm button.  This works both on the main OpenSeizureDetector app screen, and also if you are running it on another device using Network Datasource to provide alarm annunciation in a different part of the house.

This is as a result of the seizure Benjamin had last week, when we only got a single sent of alarm beeps.   This is fine if you are awake and alert, but if you are asleep it may not be enough to rouse you.   More details of this event on the Real Test of OpenSeizureDetector page.    A further update will follow fairly soon with an improved algorithm to detect seizures with lower frequency movement.

Real Test of OpenSeizureDetector

Summary

Benjamin had a seizure yesterday morning (03/05/2017).  It was not a ‘classic’ tonic clonic seizure (with rapid shaking of the arms).  Instead he was lying on his back with arms stiff in the air and ‘waving’.  This movement was on the borderline of detectability by OpenSeizureDetector.  It gave one WARNING and one ALARM.   On the positive side, it did detect the seizure.   On the negative, it only gave a single ALARM initiation, which might not be enough to wake you up if asleep.   Reducing the AlarmRatioThresh setting will increase sensitivity to improve detection reliability in the future.

Description

The seizure was not a ‘classic’ tonic clonic seizure (quite rapid shaking of the arms).  Instead Benjamin was lying on his back with arms stiff in the air and ‘waving’.

OpenSeizureDetector gave one WARNING notification at 06:24:24 on 03/05/2017 followed by a single ALARM initiation at 06:20:30, then it re-set.

The movement was right on the limit of detection using default settings which look at a frequency range of 3bHz to 8bHz as the Region of Interest.   The movement peak was at 4bHz, but there was quite a lot of power in the 1-3bHz range too and not much above.  This meant that the region of interest average power was quite low – see graph below showing the frequency spectrum of the movement during the alarm (the grey shaded area is the 3-8 Hz region of interest).

The calculated spectrum ratio (=10x[Region of Interest Power]/Spectrum Power) was 59, against a threshold of 56 (the threshold had been set higher than the default 50 to reduce false alarm rate).

We use a second android device running OpenSeizureDetector in ‘Network’ mode to relay the alarm notifications to other parts of the house over wifi.   The second device gave a WARNING but did not go into alarm.   I think this is because of a timing issue with the ALARM being raised for only a short period, so this is something to look at as we would have expected the alarm to sound on both devices.

Changes to Settings

Detection of this particular type of seizure could be improved by reducing the Region of Interest to be 3-6 Hz rather than 3-8 Hz, but this would reduce the sensitivity to seizures resulting in higher frequency movement.   Benjamin’s worst fits have been the higher frequency type, so I am minded to retain detection in that region so have retained 3-8 Hz region of interest for now.

I have reduce the AlarmRatioThreshold back to 50 rather than the 56 that we were using to increase sensitivity.

So the main settings we will be using for now are:

  • alarmFreqMin = 3 Hz
  • alarmFreqMax = 8 Hz
  • alarmRatioThresh = 50

Software Changes

I will update the phone app to give multiple alarm sounds rather than just 3 beeps in the near future to improve the chances of you noticing a single alarm annunciation.

In the meantime, users could consider switching on the Latch Alarms option in the Alarms settings – this will make the system alarm continuously until you press the ‘Accept Alarm’ button on the phone app.

Conclusion

OpenSeizureDetector did detect this slightly unusual seizure, but it was right on the limit of detection, so just gave a single WARNING and a single ALARM notification.

Increasing the sensitivity by reducing the AlarmRatioThresh setting should improve detection in the future.  Other changes would improve detection of this seizure type to the detriment of detection of higher frequency movement seizures, which is probably not a good idea.

Android Wear Version – Update 1

We have made some progress with an Android Wear version of OpenSeizureDetector (long train journeys for work have their uses!).  It is not ready for testing yet, but it is starting to take shape.   What we have got is:

  • A very simple Android Wear app that does the basic seizure detection calculations – collects acceleration data and does Fourier Analysis to get us a frequency spectrum.
  • Packages the analysis results into a message that is sent to the OpenSeizureDetector app on the phone.
  • The development version of the OpenSeizureDetector phone app (V3.0.0) has an ‘Android Wear’ data source that works in a similar way to the Pebble data source – it waits for the watch to send it data, and displays the data on the screen, raising alarms when necessary.
  • You can see it running on the phone and my Android Wear watch below

 

 

 

 

 

For those who are interested, the source code for the watch app is at https://github.com/openseizuredetector/AndroidWear_SD

and the updated phone app is the V3.0.x branch at https://github.com/OpenSeizureDetector/Android_Pebble_SD/tree/V3.0.x

Any offers of help would be gratefully received!!

What is left to do?

Plenty!:

  • Check the seizure detection calculations on Android Wear – I think the values are higher than the equivalent Pebble one, so we must have units wrong somewhere.
  • Provide a way of editing the seizure detection settings for the Android Wear seizure detector (They are hard coded at present – need to provide a user interface on the phone to edit settings, and ability to send settings to the watch), and maybe allow on-watch editing too?
  • Add ability to start the seizure detector watch app from the phone, so it starts when the OpenSeizureDetector phone app starts.
  • Add a user-interface to the watch like we have on pebble – ability to raise alarms manually, and mute alarms if you are doing something that is liable to trigger a false alarm.
  • Find out why it does odd things when I disconnect the debugger from the watch – it was working fine for half an hour with the USB debugger connected, and is showing FAULT now I have disconnected it….. (seemed to need a manual re-start…).    I think it may be going to sleep after a while….
  • Some Android Wear devices have heart rate monitors – maybe use that to look at heart rate and blood oxygen saturation too? (I’ll need to get a watch with these sensors to try that though – my Sony SmartWatch 3 does not have them).

Android Wear Version of OpenSeizureDetector?

With Pebble watches no longer being produced we will need a different hardware platform if we keep the OpenSeizureDetector project going.

We could just leave it and use the Embrace watch, but I am not that happy with Embrace for two reasons:

  • I am not convinced about its detection reliability – I can not make it go off doing what I think of as seizure-like movements (but other people report it working well for them, so it could just be me).
  • The alarm annunciation infrastructure is very complex – the watch talks to the paired phone, which uses a wifi or mobile internet connection to connect to the Empathica servers.  The servers then use the mobile phone infrastructure to make a phone call.   But I mostly want a device in the next room to go ‘beep’, so I would rather have a more direct connection (OpenSeizureDetector uses WiFi so avoids a lot of the infrastructure)

So, given that I am looking for an alternative platform for OpenSeizureDetector.   It is very tempting to try to make one – it would be fun to do the electronic design and firmware, but that would be a big undertaking, and not something I could do in my spare time, so I need a commercially available platform.

I have been looking at Android Wear, which has been suggested by a few people – I did not use this before because Android Wear devices are so much more expensive than Pebble Watches.  For Android Wear to be feasible, we need to confirm a couple of things:

  • We can obtain accelerometer readings at a high enough frequency (~50 Hz), and do Fourier analysis on it to do the seizure detection.
  • The battery consumption has to be reasonable.

I have made a proof-of-concept Android Wear app to test it out.   The App does the following:

  • Starts a background service that collects accelerometer data for about 5 seconds, then calculates a Fourier Transform of the data….then repeats indefinitely.
  • The activity connects to the service and shows the number of samples collected, so you can see it is doing something.

It does not look very exciting – see picture of it running on my Sony Smartwatch 3 above.
...but most importantly, it is surprisingly (suspiciously so if I am honest) frugal with the battery.   The second half of this trace has the new app running, and it is still only draining of the order 1% per hour.

So based on this, I think porting OpenSeizureDetector to Android Wear is feasible.   There is quite a lot to do to get it working though:

  • Communication to the phone (both settings and alarm status updates)
  • On-watch user interface (mute, manual alarm etc.)
  • Port Seizure Detection algorithm – the acceleration units are different in AndroidWear compared to Pebble, so we need to do some scaling so that the seizure detector settings can be the same.
  • Package the Android Wear App – it will probably be a different Google Play Store app, so we will need to integrate that into the OpenSeizureDetector Android App.

Fortunately there are a couple of other people interested in helping, so there is a fair chance of getting this finished this year.

 

Errors from Pebble Web Site

A user has reported getting errors from the Pebble web site while installing the Pebble App to connect the watch to the phone.

You seem to get this screen when you are creating a Pebble account as part of the set-up process.

Despite the error you can go back to the Pebble App and finish the set-up ok (it will update the watch firmware etc.), and OpenSeizureDetector will work ok.

So, although we get an error, it still works – OpenSeizureDetector does not need the Pebble web site once the watch has been connected to the phone ok.

Production Release of V2.3.2

I have just released V2.3.2 of OpenSeizureDetector as the main version of the App on Google Play Store.   The main changes in this version are:

  • Changes to the Watch App to improve efficiency (Note this will also make it more sensitive, so you may need to increase the Alarm Ratio Threshold setting from the default of 30 to between 50 and 60 to reduce false alarms).
  • Improved start-up screen that has buttons to help solve problems with set-up, and make initial set-up easier – updated installation instructions page to match.
  • Added an initial run message prompting user to subscribe to updates to this web site or the facebook page.
  • Added facility to auto-start the app on phone boot up.
  • Added GPS location information to SMS alarm notification messages.
  • See CHANGELOG.md for more details.

Next I will start work on converting OpenSeizureDetector to work with Android Wear and wrist worn Android Phone devices so it will continue to work once Pebble Watches are no longer available.