Wearable Fall Detection for Elderly
Wearable Fall Detection for Elderly
By
                      Sudharshan Suresh
                            110113086
                             A student of
INSTRUMENTATION AND CONTROL ENGINEERING
       NATIONAL INSTITUTE OF TECHNOLOGY
                  TIRUCHIRAPALLI- 620015
                       DECEMBER 2014
                  ACKNOWLEDGEMENT
In addition, I would also like to thank our 3rd year mentors for helping us
during the initial stages of the internship.
Last but not the least; I give my sincere thanks to friends and family, who
have assisted me throughout the course of this month.
	
                                     2	
  
                                  ABSTRACT
Loss of consciousness and fall-induced injury is one of the leading problems faced by
the elderly. They are the leading cause for the transfer of senior citizens from the
comfort of their residence to assisted care environments. They also account for 40%
of injury related deaths and lack of timely action can prove fatal. On the personal side,
such sporadic events stifle the independence of the individuals, requiring a caretaker
to maintain constant surveillance.
My aim is to design a system to sense and alert doctors and nearest of kin of falls and
other related incidents of distress. It is also to provide the functionality of a
pedometer, to constantly monitor and relay the activities of the individual. The device
mustn’t be cumbersome, but rather wearable, so as to remove any social stigma
related to the possession of such a device. It must have a high degree of reliability and
differentiate activities of daily life from genuine falls. This would require a signal
plotting and thresholding-based approach to arrive upon a fall-detection algorithm.
With the dawn of the IoT (Internet of Things) era, it is ideal that such a device be
constantly relaying data via such a wireless network. This ensures seamless
connectivity between the patient, doctor and relatives – and swift response.
	
                                           3	
  
             TABLE OF CONTENTS
Title                                        Page no.
INTRODUCTION AND PROJECT MOTIVATION
Status Quo………………………………………………………………………5
Falls and their impact…………………………………………………………...6
The detection system……………………………………………………………7
BASIC FLOWCHART………………………………………………………..9
COMPONENT DESCRIPTION……………………………………………...10
PEDOMETER FUNCTIONALITY…………………………………………..16
CIRCUIT DIAGRAM………………………………………………………….17
WORKING OF SYSTEM……………………………………………………...18
ARDUINO CODE……………………………………………………………….23
PROCESSING CODE…………………………………………………………..30
REFERENCES…………………………………………………………………..37
	
                        4	
  
                 INTRODUCTION AND PROJECT
                                    MOTIVATION
Status Quo
We live in a generation that is pressed for time and that, arguably, has a lack of
compassion. As a result of this negligence, the old and infirm are unfortunately
forgotten. The institutions of assisted care environments mushroomed as a result of
this alarming trend. Along with a rapid growth in aging population there is also a
decrease in the population of caretakers.
       In India for example, there is a tremendous increase in the elderly population, with a
current estimate of 90 million over the age of 60. This is a result of a disproportionate
growth among age groups, with the 60+ population increasingly far more rapidly than
the 15-60 age group. The age dependence ratio of the country is now at a perilous
0.58. Studies show almost a quarter of such elders have poor health conditions, as
one could expect. This means that an approximate 22.5 million individuals are at risk
from occasional health complications.
This poses an alarming disadvantage to the elderly from a societal point of view. India
has a long and cherished culture of respect and devotion towards elders. However,
with the dawn of the nuclear family era, some communities find it hard to fully
commit to the senior citizens. This has heralded the growth of NGO’s and senior care
centers such as HelpAge India. But still, this begs the question- is it possible to attend
to our elders, regardless of the time? No, that is a far more pressing issue. It is indeed
time India took to caring for senior citizens 24/7 by embracing technology.
	
                                               5	
  
Falls and their impact
Falls are one of the most prominent causes of unintentional injury. They are not as
simple as what you may perceive them to be. They are coded as E880-E888 in
International Classification of Disease-9 (ICD-9), and as W00-W19 in ICD-10, which
include a wide range of falls including those on the same level, upper level, and other
unspecified falls. For the sake of it, we shall even define it according to WHO
literature-
        “Inadvertently coming to rest on the ground, floor or other lower level, excluding
              intentional change in position to rest in furniture, wall or other objects”.
Falls are responsible for 40% of all injury related deaths and need immediate medical
attention. The reason for a fall may be heart problems, loss of consciousness, fatigue,
exhaustion, diseases and loss of balance. Although falls occur through all age groups,
the major chunks of incidents are those of senior citizens. Approximately 28-35% of
people aged 65 and above fall every year. This figure only increases for the age group
of 70+ with 32-42%.
The major talking point is the need for swift medical aid. 50% of all injury-type
hospitalizations for the concerned age group are fall related. Thirty-two percent of
elderly people aged over 75 years have ever fallen at least once a year, and among
them, 24% have been seriously injured. Approximately 3% of all fallers lie
unattended for periods greater than 20 minutes, leading to insufficient medical action.
       An upsetting figure is that 40% of nursing home admissions are directly linked with
incidents of falls.
	
                                                 6	
  
The detection system
Now that the root issue has been established, we shall identify a method of sensing.
The major criteria one has in mind for detection of falls are -
              i.   Non-invasive
             ii.   Wearable system
         iii.      No false-positives
         iv.       No delay time
             v.    Common route of communication
         vi.       Interactivity
In the world of technology, wearable have always had a special appeal. This is due to
the ease of access and usage, as well as the seamless nature of the product. One does
not bear the brunt of social stigma by wearing such a device, thus satisfying the user.
Efficiency of the system is paramount, as the message must be delivered from point A
to point B in a matter of seconds. An established mode of communication must be
employed; in this case the Short Message Service (SMS) can reach people the
quickest. False alarms can be both extremely annoying and wastes both time and
money. So in order to ensure accuracy, the fall-detection algorithm must be perfected
and the device must be made interactive.
Taking all the above factors into consideration, I would propose the use of an
accelerometer-based sensing device around the waistline. This would not only mimic
the look of a commonplace belt, but is also the location of the center of gravity
(Figure 1). As a result, readings that one obtains from the sensor will be accurate and
trustable.
	
                                          7	
  
Communication can be made possible via wireless means to a central database. This
database is to be located at the doctor’s end, giving a constant stream of information
related to the patient. In case of any issues detected, a suitable alert is issued both at
the central display, as well as via SMS to the doctors and relatives. SMS is the most
rudimentary, ever-accessible means of communication in the modern world and
cannot be missed by any individual.
Wirel
	
                                                 8	
  
                                  BASIC FLOWCHART
                                                                                                             Relay	
  data	
  
 Detect	
  change	
  in	
                                                  Is	
  it	
  a	
                regarding	
  the	
  fall	
  
acceleration	
  along	
                                                    fall	
  or	
                    being	
  sensed	
  to	
  
                                                                          an	
  ADL?	
  	
     FALL	
  
 with	
  inclination	
  	
                                                                                   the	
  central	
  
                                                                                                              database	
  
                                                                                                                      	
  
                                                                   ADL	
  	
  
                                                                 ADL	
  
                                No	
  problem	
  	
  
ADL
              False	
                                     Yes	
  	
  
              Alarm	
  	
  
                                                                       Wait	
  for	
  response	
  
                                                    Response?	
  	
   from	
   patient’s	
  side	
  
                                                                           (20	
  secs)	
  
          Distress	
                                                                  	
  
         confirmed.	
                                     No	
  	
  
         Help	
  is	
  on	
  
           its	
  way	
  
                  	
  
 	
                                                               9	
  
              COMPONENT DESCRIPTION
         I.    Arduino Uno:
The Uno is a microcontroller board that is based on the ATmega328. It is widely
preferred for its ease-of-use, programming capabilities and large pool of online
documentation. It operates on very low current of 40-50 mA and has a logic level of 0
to 5V. It possesses 14 digital I/O pins ( 6 with PWM functionality). 6 analog inputs,
onboard LEDs, a reset switch and ceramic resonator. It can be supplied power through
USB connection or external power jack. It has a memory size of 32 KB,
programmable via Arduino IDE.
One could otherwise employ IoT ready boards such as the Texas Instruments
cc3200 or Arduino Yun or IoT implementable boards such as the Intel Galileo.
	
                                        10	
  
The advantage of this sensor are twofold-
        i.   Extremely low noise
       ii.   Low power consumption of approximately just 320 micro Amperes.
The HC-05 is a class 2 bluetooth module, capable of easy connectivity with android
platforms or serial port communication with the computer. It serves as an efficient
replacement for wired solutions, offering mobility. It operates on 3.3V DC logic with
a current drawing capacity of 50mA.
	
                                          11	
  
             SOFTWARE AND LIBRARY PACKAGES
                                                    REQUIRED
        I.    Arduino IDE
This is an open-source Arduino environment that enables us to type and
upload code to the board via serial connection. Available for Windows,
Mac OS X and Linux, this environment is the ubiquitous go-to software
for Arduino projects. The environment is structure using Java and based
off Processing, another software we shall be using.
       II.    Processing
	
  
Processing	
  is	
  an	
  open-‐source	
  programming	
  language	
  and	
  IDE	
  that	
  is	
  aimed	
  
towards	
  computer	
  programming	
  in	
  a	
  visual	
  context.	
  Each	
  project	
  is	
  referred	
  to	
  
as	
  a	
  sketch	
  –	
  providing	
  computational	
  and	
  graphics	
  functions.	
  This	
  allows	
  us	
  to	
  
receive	
  instant	
  visual	
  feedback	
  to	
  any	
  process.	
  A	
  major	
  advantage	
  processing	
  
possesses	
  is	
  the	
  wide-‐array	
  of	
  3rd	
  party	
  libraries	
  available	
  for	
  use.	
  Similar	
  to	
  
Arduino,	
  it	
  too	
  is	
  built	
  upon	
  the	
  Java	
  model.	
  	
  
	
  
III.          Temboo
Temboo	
  is	
  a	
  virtual	
  library	
  that	
  is	
  our	
  key	
  to	
  the	
  Internet	
  of	
  Things.	
  With	
  
streamlined	
  access	
  to	
  over	
  100+	
  APIs	
  across	
  various	
  programming	
  languages,	
  
this	
  intuitive	
  web-‐based	
  coding	
  framework	
  helps	
  us	
  perform	
  machine-‐to-‐
machine	
  communication.	
  	
  We	
  are	
  required	
  to	
  create	
  an	
  ID	
  for	
  their	
  service	
  and	
  
download	
  the	
  library	
  package	
  for	
  Processing.	
  Using	
  this,	
  one	
  can	
  transmit	
  text	
  
messages	
  to	
  cellular	
  device	
  via	
  an	
  online	
  server.	
  	
  	
  
	
  
IV.           Twilio
Twilio	
  is	
  a	
  cloud-‐based	
  communication	
  portal	
  that	
  allows	
  developers	
  to	
  make	
  
calls	
  and	
  send	
  SMS	
  programmatically.	
  The	
  web	
  service	
  API	
  can	
  be	
  accessed	
  used	
  
the	
  choreos	
  of	
  Temboo	
  and	
  billing	
  is	
  based	
  on	
  usage.	
  For	
  this,	
  we	
  can	
  use	
  a	
  trial	
  
	
                                                                  12	
  
account	
  on	
  Twilio	
  that	
  gives	
  us	
  limited	
  access	
  to	
  generating	
  text	
  messages	
  to	
  a	
  
pre-‐determined	
  number.	
  	
  
                                                               	
  
                                                               	
  
The analog values that the microcontroller receives are the acceleration quantities
along each axis. However, one must first calibrate their device to ensure accuracy
keeping the device in a position such as the one shown in the figure. We know that
both X and Y-axis readings must be 0 as it is parallel to the ground while the Z-axis
reading must be the maximum. Adjust the correcting factor to obtain this.
In the above orientation, the values in g’s must be – (0g, 0g, 1g). Simple mathematical
manipulation tells us to divide the corrected analog value by the maximum value.
	
                                                           13	
  
Thus, we have successfully converted the voltage values into g’s value.
The net acceleration is the root of the sum of the squares of all 3 values.
Net acceleration is an incredibly valuable quantity for fall detection. When a body
undergoes free-fall, the phenomenon of weightlessness will occur. This implies that
during a fall, the Anet will tend towards 0g. It is true an ordinary fall is different from
free-fall; but Anet will still be substantially lesser than 1g.
The final quantities of interest we obtain are those of orientation – pitch and roll.
These values give us an understanding of orientation of the user, which is vital when
it comes to detecting falls. The acceleration along each axis can be used, along with a
bit of trigonometry, to find out the pitch and roll angles.
                        !"                                  !"
Pitch is 𝑡𝑎𝑛 !! (                 ). Roll is 𝑡𝑎𝑛!! (                  ).
                     !" ! !!"   !                        !" ! !!" !
	
                                            14	
  
           FALL DETECTION ALGORITHM
It was an extremely difficult process to generalize falls based on only two parameters.
However after many trial and error sessions and a whole lot of signal analysis, I
present to you my algorithm:
To safely conclude that a given action is a fall, you must eliminate the other activities
of daily life. These include lying down, sitting, jumping, running, squatting, hopping,
etc. Therein lies a major difficultly, because many of these actions give similar analog
readings as that of falling. Thus assigning simple thresholds will never do the job.
What I have done is create a series of checkpoints that must all be satisfied to
conclude that a certain event is a fall.
Checkpoint 1: As elucidated in the previous section, there will be a fall in the Anet
value when the fall commences. Thus if the value goes below a specific threshold (in
this case, 0.8g) it passes the first checkpoint.
Checkpoint 2: Following the fall, the user makes impact with the ground or surface.
A sharp spike in the Anet readings characterizes this. For our purposes, we consider
	
                                                         15	
  
this as greater than 1g. The time lag between the checkpoints must be no greater than
2 seconds.
Checkpoint 3: The pitch and roll of the user is checked and compared with a
predefined threshold (In this case, greater than 60 degrees). The time lag between
checkpoint 2 and 3 must be very small – in the order of milliseconds.
Checkpoint 4: There is now a good chance that the user has fallen. We now check for
a period of 3 seconds whether the user gets up, by setting a threshold on inclination. If
3 seconds have elapsed, we can assume a fall has been sensed.
Checkpoint 5: We now wait for a period of 20 seconds for the user to disable the
alert, in case of false alarm. If 20 seconds have elapsed, we confirm the fall and
required action is taken.
PEDOMETER FUNCTIONALITY
The first criterion is that the user must be in ‘stable’ state. This means that he must be
upright and not in the process of falling.
The second criteria it checks for is a spike in the net acceleration as a result of foot
contact. Each time a step is taken, we detect this and increment the number of steps
taken.
	
                                           16	
  
       CIRCUIT DIAGRAM
	
          17	
  
                                      WORKING OF SYSTEM
Finished device
	
                                                   18	
  
We have highlighted the fall-detection algorithm that we shall use in the previous
section. This has been translated into code (as you will see in the code section) and
burned into the microcontroller. The other modules and components are integrated
with the MCU as you have seen in the circuit diagram. Here is the breakdown-
ADXL335: Connected to the analog pins 0, 1, 2 and 3 of the Arduino. They receive
the analog values of acceleration and necessary computation is performed on them.
The unit is powered with the +5V and the GND pins.
The unit is position perpendicular with the ground and fixed onto the inside of the
wearable unit. It is calibrated in accordance to this position.
HC-05 Bluetooth Module: It is connected to the pins 10 and 11, which function as
software serial pins of the Arduino. One line transmits data to the module while the
other line receives data. The module is powered by 3.3V pin and the GND.
	
                                                19	
   to	
  frame
                       Bluetooth	
  module	
  attached	
  
To connect the Bluetooth module for serial communication, we must identify and
open both the incoming and outgoing ports. For this project I have opened the
outgoing port with TeraTerm while the Processing sketch handles data from the
incoming port.
Piezo buzzer:
The buzzer is connected between the pin 9 and ground. We use the tone() function to
generate a pwm pulse of specified frequency at that pin. When a fall is first sensed,
we activate a 250Hz pulse and when confirmed, a 4000Hz pulse.
Push button:
It is wired between pin 12 and ground, and pulled up by default. When it is pressed,
the pin is grounded- triggering an event. The event in this case is the false alarm
signal.
	
                                                    20	
  
Implementation as wearable:
It can be used as a belt-type accessory tied around the waist with the help of the
Velcro strap. In the prototype, frontward falls may damage the structure, although a
compact, rugged casing can be used instead.
Belt-‐like wearable
                                              	
  
                                       Fall	
  testing
	
                                          21	
  
         PROCESSING + TEMBOO + TW	
  ILIO
	
                                             22	
  
                              ARDUINO CODE
The Arduino receives the data, performs calculations and outputs the data via
Bluetooth serial connection. In addition it controls the LED and piezo buzzer.
/*
The circuit:
         ADXL335 (Accelerometer)
         -----------------------
         analog 0: accelerometer self test
         analog 1: z-axis
         analog 2: y-axis
         analog 3: x-axis
         GND: ground
         +5V: vcc
         Piezobuzzer
         -----------
         Digital Pin 9(PWM): +ve
         GND: -ve
         3-color LED
         -----------
         Digital Pin       2: RED
         Digital Pin       3(GND): Ground
         Digital Pin       4:GREEN
         Digital Pin       5:BLUE
       Push Button
       -----------
       Connected between Digital Pin 12 and GND
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	
                                        23	
  
       Standard Serial over bluetooth link @ COM21
       (Incoming)---- via Processing
       Standard Serial over bluetooth link @ COM23
       (Outgoing)---- via TeraTerm
*/
#include <SoftwareSerial.h>
       void setup()
         {
           mySerial.begin(9600);   // initialize the
       software serial communication
	
                             24	
  
           pinMode(12, INPUT_PULLUP); // Pull-up switch
       connection
           pinMode(9, OUTPUT); // PWM output for
       piezobuzzer
           pinMode(13, OUTPUT);
           digitalWrite(13, LOW);
            digitalWrite(2,   LOW);
            digitalWrite(3,   LOW);
            digitalWrite(4,   HIGH);
            digitalWrite(5,   LOW);
            steptime = millis();
        }
       void loop()
         {
           analogReference(EXTERNAL); // Enable Aref @ 3.3V
	
                              25	
  
            mySerial.println(float(steps));
       void pedometer()
         {
           stepcheck = !stepcheck; // To sense every
       alternate iteration
       if((Anet>1.2)&&(stepcheck==true)&&(state==0)&&(first
       foot==false)) // Sense initial spike in acc. reading
             {
               firstfoot = true;
               steptime = millis();
             }
           if((Anet<0.9)&&(((millis()-
       steptime)/1000)<2)&&(firstfoot == true)) // Sense
       subsequent drop in acc. reading
             {
               steps++;
               firstfoot = false;
             }
           else if((((millis()-
       steptime)/1000)>2)&&(firstfoot == true))       //
       maximum permissible time between above 2 conditions
               firstfoot = false;
         }
       void distress()
         {
           if ((state==0)&&(digitalRead(12) == LOW))
       // detects button PRESS
           {
             button++;
             if(button>70)
       // detects button HOLD
               {
	
                            26	
  
                 tone(9,4000);
       // Generate piezotone for distress
                 state = 42;
               }
           }
       void fall_detect()
         {
           if(state ==0)
             {
               digitalWrite(2, LOW);
               digitalWrite(5, LOW);
               digitalWrite(4, HIGH);
             }
           if((Anet<0.8)&&(state==0)&&((abs(pitch)<60)&&(a
           bs(roll)<60)))               // Initial drop in
           acc. due to free-fall like condition
            {
              state = 1;
              time = millis();
            }
           if(state == 1)
             {
               if(Anet>1)                       // Increase
       in acceleration due to impact of fall
               {
                 state = 2;
                 time = millis();
               }
               if(((millis()-time)/1000)>2)    // max.
       permissible time between states 1 and 2
                 state = 0;
             }
if(state == 2)
	
                           27	
  
             {
                if((abs(pitch)>60)||(abs(roll)>60))     //
       Senses a fall in any orientation by factoring pitch
       and roll
                  {
                    state = 3;
                    time = millis();
                  }
                if((millis()-time)>100)         // max.
       permissible time between states 2 and 3
                    state = 0;
             }
           if(state == 3)
             { digitalWrite(4, LOW);
               digitalWrite(5, HIGH );
               if((abs(pitch)<60)&&(abs(roll)<60))    //
       Detects getting-up and prevents false alarm
                 {
                   count++;
                   if(count>20)
                     {
                       state = 0;
                       count = 0;
                     }
                 }
               if(((millis()-time)/1000)>3)          // 3
       second window after fall between states 3 and 4
                 {
                   state = 4;
                   ALERT = 1;
                   tone(9,250);         // Fall, perhaps?
                 }
             }
           if((state ==4)&&(ALERT==1))
             {
               digitalWrite(5, (blinkstate) ? LOW: HIGH);
               digitalWrite(2, (blinkstate) ? HIGH: LOW);
               blinkstate = !blinkstate;
               if(digitalRead(12) == LOW)          //
       Checks for button press to indicate false alarm
                 {
                   ALERT = 0;
                   state = 0;
                 }
               if(((millis()-time)/1000)>20)     // if
       patient is unresponsive for more than 20 secs, fall
       is confirmed-- necessary action taken via processing
	
                           28	
  
                 {
                   state = 5;
                   tone(9,4000);           // Generate
       piezotone for distress
                   digitalWrite(5, LOW);
                 }
             }
         }
	
                           29	
  
                          PROCESSING CODE
       The processing sketch acts as the central monitoring unit for the patients. By
       graphical means, we represent-
          •   Graphs of pitch and roll and the angle data for the same.
          •   Patient bio-data, time and date.
          •   Condition of patient
          •   Number of steps taken (Pedometer)
Processing window
	
                                       30	
  
       /*Temboo is a cloud-based platform with 2000+
       processes for APIs, databases, and more. The
       Processing + Temboo library enables us to connect
       with TWILIO,
         a cloud communication company that allows
       developers to send/receive SMS and phone calls
       programmatically. This solution is cost efficient,
       effective and
         is an alternate to a bulky, power hungry GSM
       module. */
       import com.temboo.core.*;
       import com.temboo.Library.Twilio.SMSMessages.*;
       void setup()
       {
         size(1260, 400);        // Window dimensions
         effHeight = 300 / graphPara;
	
                           31	
  
           myPort.bufferUntil('\n');
background(0);
           // initialize pitch:
           values[0] = 0;
           min[0] = -90;
           max[0] = 90;
           valColor[0] = color(255, 0, 0); // red
           // initialize roll:
            values[1] = 0;
            min[1] = -90;
            max[1] = 90;
            valColor[1] = color(0, 255, 0); // green
           // state variable
           values[2] = 0;
           // steps variable
           values[3] = 0;
       }
           textSize(40);
           fill(255);
           text("Patient Name: XYZ", 750,80);
textSize(45);
	
                              32	
  
       fill(0);
       rect(0,300,630,100);
       textSize(20);
       text(int(values[2]), 1230, 20);
       textSize(50);
       fill(0);
       rect(630,300,630,100);
       if (inputString != null)
       {
         // trim off any whitespace:
         inputString = trim(inputString);
	
                            33	
  
           // splits the serial string on the delimiters
       and assigns it to a float array, here the delimiter
       can be a ,--[comma] , --[space] , \t--[tab]
           values = float(splitTokens(inputString, ",
       \t"));
               // draw lines:
               stroke(valColor[i]);
               line(xPos, effHeight*(i+1)- mappedVal + 2,
       xPos, effHeight*(i+1) - mappedVal-2);
	
                             34	
  
                       // erase graph window with translucent black
                       fill(0,200);
                       rect(0,0,630,300);
                   }
                   else
                     xPos++;           // increment graph position
               }
           }
           print(values[2]);
           if(values[2]==5)
             status = "FALL confirmed";
           else if(values[2] == 0)
             status = "Stable";
           // Set credential
           sendSMSChoreo.setCredential("AlertSMS");
// Set inputs
           // Print results
           println(sendSMSResults.getResponse());
	
                                   35	
  
                              SAMPLE TEST DATA
                                        𝟑𝟒
                         Accuracy =           ×𝟏𝟎𝟎 = 𝟗𝟕. 𝟏𝟓%
                                        𝟑𝟓
	
                                           36	
  
                                  REFERENCES
http://www.who.int/ageing/publications/Falls_prevention7March.pdf
       http://www.futurehealthsystems.org/publications/heterogeneity-in-self-assessed-health-
                                   status-among-the-elder.html
http://www.helpageindia.org/about-us.php
http://www.gjmedph.org/uploads/r2-vo2no4.pdf
http://bildr.org/2011/04/sensing-orientation-with-the-adxl335-arduino/
http://physics.rutgers.edu/~aatish/teach/srr/workshop3.pdf
http://www.arduino.cc/
https://temboo.com/
https://www.twilio.com/
37