Thursday, October 8, 2009

Helmet Concussion Sensor Design/Application

For our project this week in PComp, we were asked to get a little creative and use the knowledge we have gained from the first month of class to come up with a Stupid Pet Trick. This project had a few parameters, mainly that we gather information from the analog world and do something with it via our Arduino Microcontroller and some programming language. I had several ideas, but fell back on something that "hits" close to home for me.


Head trauma and concussions in the world of football.

As a long time athlete, I witnessed many head trauma incidents in the world of football. I have also witnessed the arbitrary testing that goes on to diagnose concussions as well as player avoidance of medical staff after a concussive event has occurred. Recently, there has been new information brought forward on head trauma and dementia in the world of sports. The New York Times broke a story recently that former NFL players ages 30-49 suffer dementia at 19 times the national average. This is alarming to say the least and only heightens the need to further understand these traumatic events and seek to protect players immediately.

Briefly, the head trauma that is incurred on the football field is due to acceleration (also think deceleration) events. The brain sits suspended in a liquid medium, Cerebral Spinal Fluid (CSF). As the head and helmet are quickly accelerated, the brain has no where to go as the CSF can only minimally slow the brain down in these events. The greater the acceleration, the greater the force and impact the brain will incur inside the skull both linearly and rotationally...Force=Mass x Acceleration in linear systems and (Mass x V^2)/R in rotational systems...(Video).

We can think of accelerations in terms of "G's". G's are normally spoken of as G-Force, this is somewhat of a misnomer as G's are actually accelerations, but are easily understood as force through F=ma. 1 G is equivalent to gravity here on earth, 9.8 m/s/s. For a number of years, it has been common convention to assume that concussive events are correlated with accelerations of ~75 G's or more. Once recent North Carolina study had this to say:

"In football, a hit can easily jerk the head, for milliseconds, at 50g, and hits above 100g are common. One player in the study experienced 168g. It was previously suggested that a forces above 75g would likely result in a concussion, but these new results call into question that finding.

The UNC studies showed that some players suffered concussions at little more than 60g, while others sustained hits creating more than 90g and showed no signs of concussions; less than .35 percent (only one-third of one percent) of impacts greater than 80g resulted in concussions."


Given this and other studies/data, it is clear the sports world must urgently seek to find out more about the mechanisms of head trauma in football and to protect the millions of grade school, jr high, high school, college, and professional athletes who play full contact football on a weekly basis.


What I have come to hope for is a device that would signal coaches, medical staff and game officials that a potentially traumatic event has occurred with a player's head. To this end, I took the liberty of heading in the general project direction of Mom, I want to play football but don't want to suffer undo brain trauma Pet Trick. This is what I came up with:

I designed a system that would utilize an accelerometer (or an array of accelerometers in future versions) to detect linear and rotational accelerations due to activity on the football field. If a threshold level of acceleration was reached, a conductive sticker or other outward display would change from white to red on the back of the players helmet. This would immediately signal to medical staff, coaches, and officials that the player needs to come out of the game to be examined. The sticker, depending on its construction, could either be reset or discarded and another sticker could be placed in the system for further use. My number one design principle while looking at this problem was to communicate a potentially concussive event with a minimal amount of resources (cost).

For my prototype, I used a 3-axis accelerometer that can sense up to 3G's. This is obviously a lower G threshold than almost all concussive events, but this accelerometer was an extremely low cost option for the prototype. If an event of 3G's (or whatever level I set in my code) is detected in the prototype, 5V is sent to a red LED on the back of the helmet (emulating the sticker).


And here is the system in action. The LED will light up and stay lit up for 3 seconds every time a threshold acceleration (2.5G's in this video) or greater is sensed.







Currently, there is a system in limited production that is being tested by several major college teams. This system is very robust and signals to a computer on the sideline when a concussive event has occurred. This is fantastic. The technology used is the HIT system developed by Symbex. This technology was acquired by helmet maker Ridell costs $80,000 per team to implement (about $1000/player).



I hope to continue to develop this technology in the coming weeks and months. More than this, I hope that the sports world will focus itself on solving this problem and protecting the young and professional athletes who play all contact sports.

CODE

/*This program allows for the detection of accelerations using a three axis
accelerometer (ADXL 3xx)..Originally referenced Tom Igoe/David A. Mellis code
http://www.arduino.cc/en/Tutorial/ADXL3xx

created 2 Oct 2009
by Chris Anthony

*/

const int groundpin = 19; //Setting groundpin to Analog pin 5
const int xpin = 4; //x axis readings of accelerometer
const int ypin = 3; //y axis readings of accelerometer
const int zpin = 2; //z axis readings of accelerometer
int ledPin = 6; //digital pin that turns on our LED
int a = 0; //x axis
int b = 0; //x axis
int c = 0; //y axis
int d = 0; //y axis
int e = 0; //z axis
int f = 0; //z axis
long lastPulse = 0; //for millis fx
int refreshTime = 5; //for millis fx


void setup()
{
// initialize the serial communications:
Serial.begin(9600);

pinMode(groundpin, OUTPUT); //This code turns the groundpin
digitalWrite(groundpin, LOW); //into a voltage sink=ground.
pinMode(ledPin, OUTPUT); //tell our ledPin to output voltage when commanded
a = (float)analogRead(xpin); //this is for the x axis
c = (float)analogRead(ypin); //this is for the y axis
e = (float)analogRead(zpin); //this is for the z axis
delay(5); //I use this delay just in void setup to attempt to mimick millis, this is used just once
}

void loop()
{
if (millis() - lastPulse >= refreshTime) {
b = (float)analogRead(xpin);
d = (float)analogRead(ypin);
f = (float)analogRead(zpin);
//Code below is coming up with a final vector that takes into account the
//vectors of all three axes. If this final vector is greater than 200, which is
//equivalent to 2.5G's with 3.3V input to acclerometer, we turn on the LED
//note that with this setup 1 G will be equivalent to a change in ~70
//on your serial monitor. This is where we get 175 in below math
if (sqrt(sq(a-b) + sq(c-d) + sq(e-f)) > 175) {
digitalWrite(ledPin, HIGH);
delay(3000); //this code keeps LED on for 3 seconds just for interaction purposes
}
else digitalWrite(ledPin, LOW);
a = b; //we swith our variables so we can now look at the 3 set of readings
c = d; //compared to the second set.
e = f;

Serial.print(analogRead(xpin));
// print a tab between values:
Serial.print("\t");
Serial.print(analogRead(ypin));
// print a tab between values:
Serial.print("\t");
Serial.print(analogRead(zpin));
Serial.println();

lastPulse = millis();
}
}