Gadget Renesas

Linking Ideas and Electronics

GR Atelier

Title:UPASANA (1st prize in GRDC 2015 in India)

Displayed Name:MBCET/ Trivandrum

UPASANA (1st prize in GRDC 2015 in India)

Concept / Overview
Rural Health case is one of the biggest challenges in India, but we tryid with GR-PEACH.
####

Reality of Healthcare in Rural India

Rural Health case is one of the biggest challenges the Health Ministry of India is facing. With more than 70 percent population living in rual areas and low level of health facilities, mortality rates due to disease are on a high.

 

 

 

 

 

####

Countries with a critical shortage of health care service

According to the WHO report 2006, the below map shows the countries with Critical Shortage of Health Services. From the map, it is clear that India lacks critical health services compared to other countries.

 

Countries with a critical shortage of health service providers in 2006 (doctors, nurses and midwives).

 

 

 

####

Objectives

Lot of people are suffing and losing their lives through a completely avoidable problem. We want to fix this.

To develop a low cost non-invasive diagnostic toolkit for ASHA workers so that they can measure the vital parameters of the patients in rural areas and report them to the doctors at the hospital.

####

Solution

So we diceded to make a Diagnostic toolkit for ASHA workers which can measure the following parameters non-invasively.

◆ECG (Electro Cardiogram)

◆SPO2 rate (Saturation of Peripheral Oxygen)

◆Heart Rate

◆Blood Pressure

◆Respiration Rate

◆Body Temperature

◆Cardiac Rhythm

This device logs the data samples along with time stamp and a unique ID that identifies the patinet. Later on ASHA workers can go to Primary health care center and use LAN cable there to connect to this device and it automatically transfer data to cloud network and doctors get access to data remotely and he can analyze it to identify health conditions. Also during the time of measurement if parameters are abnormal, it sends alear to Primary health care center and doctors requesting emergency help via SMS. 

This device operates on battery and can be easily used by ASHA workers. 

We hope that by developing this device we could improve the life of rural India. Let us all work to build better tomorrow.

 

 

####

Description

UPASANA is a fully functional portable device. This device monitors the vital parameters of the human body which includes:

◆ECG (Electro Cardiogram)

◆SPO2 rate (Saturation of Peripheral Oxygen)

◆Heart Rate

◆Blood Pressure

◆Respiration Rate

◆Body Temperature

◆Cardiac Rhythm

An ECG is used to measure the heart's elcetrical conduction system. It picks up electrical impulses generated by cardiac tissue and translates into a waveform. The waveform is then used to measure the rate and regularity of heartbeats. ECG data acquisition is done by using an analog circuit with instrumentation amplifier. The ECG samples obtained from patient by connecting leads are compressed and stored in memory. 

Pulse oximetry is a non-invasive method for monitoring a patient's O2 saturation. Light of two wavelengths is passed through the patient to a photo detector. The variations in the light absorbed at each of the wavelengths is measured, allowing determination of the SPO2. The peaks in SPO2 data also gives the Heart rate reading. SPO2 is measured using finger probe and analog fron end.

Blood pressure is the pressure of the blood in the arteries as it is pumped around the body by the heart. Blood pressure is recorded as tow numbers - the systolic and diastolic pressure. An inflating-deflating cuff along with a pressure transducer is used to measure BP Level. High blood pressure (hypertension) can lead to serious problems like heart attack, stroke or kidny disease.

Body temperature is measured using a precistion thermistor and Cardiac Rhythm is recorded using an accurate microphone, which is band passed to eliminate noise and to abtain accurate signal.

All the vital parameters can be measured just by connecting the electrodes and probes and pressing the MEASURE button. This device stores all data samples of patients in memory along with a UNIQUE ID number such as Aadhaar number. In case of emergencies arising at the Poing of Care, urgent medical help can be requested just by pressing an EMERGENCY swith. Upon pressing the swich an SMS will be send to the nearest Primary Health Care center (PHC) and Doctors. After collecting the data from all the patients, the ASHA worker can upload this into a cloud service via a LAN connection available at any nerby medical centre. This data can then be accessed by a doctor for further medical analysis. Also a software can be made to analyse all the patient record and alert the doctor in case of any emergencies.

 

####

Feasibility

Feasibility of the proposed project was studied and it was found that UPASANA is need of the hour. Economically this device is very feasible as the investment made in production is incredibly low. Competing product in market with similar specifications is a Cardiac Monitor which is bulky, costly and has a battery life of only 1 hour. It is only suitable for monitoring in an ICU environment.

 

####

Advantages over existing alternatives

◆Low cost alternative

◆Portable

◆Integration of multiple sensors

◆Emergency SMS button for medical emergency

◆Extreme low power design and enhanced battery life

◆Instant access to medical history of a patient

◆One touch measurement of all parameters

◆User fiendly

◆Cloud Service Compatibility

####

System design

Please refer to the chart below.

 

####

Schematics

Please refer to the below.

 

 

 

 

 

Single supply ECG circuit
Courtesy:Texas Instruments INA333 datasheet

 

PCB Layout for single channel ECG circuit

 

 

 

 

http://www.sunrom.com/p/heartbeat-pulse-sensor-analog-out

 

 

 

 

http://www.sunrom.com/p/blood-pressure-sensor-serial-output

 

 

 

 

http://www.sunrom.com/p/micro-sd-memory-card-interface-for-3v-mcu

 

 

 

 

 

 

Amplifier

 

 

Volume Control connection

 

 

 

 

 

 

 

 

 

 

 

 

 

 

####

Source code

◆Source code

 

 

// buttons on front panel
#define push_button_1 30
#define push_button_2 31
#define push_button_3 32
#define push_button_4 33
boolean push_button_1_status = false;
boolean push_button_2_status = false;
boolean push_button_3_status = false;
boolean push_button_4_status = false;
#define enablepin 8// bp sensor enable pin
int systolic_pressure = 110;
int diastolic_pressure = 60;
int pulse_rate = 72;
char patient_ID[5];
int patient_ID_pos = 0;
int patient_ID_limit = 4;
int valid = 0;
char key;
float tempC = 37.0;
float tempF = 98.6;
int reading;
#define tempPin A0// lm 35 temperature sensor input
int spo2_pin = 49; // spo2 led pin output
int spo2_value = 95;
#define spo2_input A1// spo2 sensor pin input
int k = 0;
#include 
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
#include 
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
        { '1', '2', '3' },
        { '4', '5', '6' },
        { '7', '8', '9' },
        { '*', '0', '#' }
};
byte rowPins[ROWS] = { 22, 23, 24, 25 }; //connect to the row pinouts of the keypad
byte colPins[COLS] = { 26, 27, 28 }; //connect to the column pinouts of the keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
#include 
File myFile;
void setup()
{
// set up the LCD's number of columns and rows:
    lcd.begin(16, 2);
    home_screen();
    analogReference (INTERNAL1V1);
    pinMode(push_button_1, INPUT_PULLUP);
    pinMode(push_button_2, INPUT_PULLUP);
    pinMode(push_button_3, INPUT_PULLUP);
    pinMode(push_button_4, INPUT_PULLUP);
    Serial.begin(9600);
//Serial.print("Initializing SD card...");
    pinMode(10, OUTPUT);
    if (!SD.begin(10))
            {
// Serial.println("initialization failed!");
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("card failed");
        delay(2000);
        lcd.clear();
        return;
    }
// Serial.println("initialization done.");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Memory Card OK");
    delay(2000);
    lcd.clear();
//set enable pin as output
    pinMode(enablepin, OUTPUT);
    digitalWrite(enablepin, LOW);
// set the data rate for the bp monitor
    Serial1.begin(9600);
//spo2
    pinMode(spo2_pin, OUTPUT);
}
void home_screen()
{
    lcd.clear();
// set the cursor to column 0, line 1
    lcd.setCursor(5, 0);
    lcd.print("UPASANA");
    delay(2000);
    lcd.clear();
}
void get_patient_ID()
{
    lcd.setCursor(0, 0);
    lcd.print("ENTER PATIENT ID");
}
void print_patient_ID()
{
    if (valid == 1)
            {
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("PATIENT ID:");
        lcd.setCursor(4, 1);
        lcd.print(patient_ID);
        valid = 0;
    }
}
void read_keypad()
{
    key = keypad.getKey();
    if (key)
    {
        patient_ID[patient_ID_pos] = key;
        patient_ID_pos++;
    }
    if (patient_ID_pos >= patient_ID_limit)
            {
        patient_ID_pos = 0;
        valid = 1;
    }
}
void create_file()
{
//SD.mkdir("a"); //will create a
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
// myFile = SD.open("a/test.txt", FILE_WRITE);
    myFile = SD.open("log.txt", FILE_WRITE);
// if the file opened okay, write to it:
    if (myFile)
    {
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Writing file");
//Serial.print("Writing to test.txt...");
// myFile.println("testing 1, 2, 3.");
        myFile.println(tempC);
        myFile.println(tempF);
        myFile.println(spo2_value);
        myFile.println(systolic_pressure);
        myFile.println(diastolic_pressure);
        myFile.println(pulse_rate);
// close the file:
        myFile.close();
// Serial.println("done.");
        delay(2000);
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("writing done");
        delay(2000);
        lcd.clear();
    }
    else {
// if the file didn't open, print an error:
//Serial.println("error opening test.txt");
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("writing failed");
        delay(2000);
        lcd.clear();
    }
}
void read_file()
{
// re-open the file for reading:
// myFile = SD.open("a/test.txt");
    myFile = SD.open("log.txt");
    if (myFile)
    {
// Serial.println("a/test.txt:");
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("reading file");
// read from the file until there's nothing else in it:
        while (myFile.available())
        {
            Serial.write(myFile.read());
        }
// close the file:
        delay(2000);
        myFile.close();
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("reading over");
        delay(2000);
        lcd.clear();
    }
    else {
// if the file didn't open, print an error:
// Serial.println("error opening test.txt");
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("reading error");
        delay(2000);
        lcd.clear();
    }
}
void measure_temperature()
{
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Measuring");
    lcd.setCursor(0, 1);
    lcd.print("Temperature");
    delay(3000);
    reading = analogRead(tempPin);
    tempC = reading / 9.31;
    tempF = ((1.8 * tempC) + 32);
//Serial.print("tempC ");
//Serial.println(tempC);
//Serial.print("tempF ");
//Serial.println(tempF);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("TEMPC:");
    lcd.setCursor(7, 0);
    lcd.print(tempC);
    lcd.setCursor(0, 1);
    lcd.print("TEMPF:");
    lcd.setCursor(7, 1);
    lcd.print(tempF);
    delay(4000);
    lcd.clear();
}
void measure_BP()
{
    digitalWrite(enablepin, HIGH);
    delay(500);
    digitalWrite(enablepin, LOW);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Measuring BP");
}
void measure_ECG()
{
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Measuring ECG");
    delay(5000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("ECG Measurement");
    lcd.setCursor(0, 1);
    lcd.print("over");
    delay(2000);
    lcd.clear();
}
void measure_spo2()
{
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Measuring SPO2");
    for (k = 0; k < 25; k++)
            {
        digitalWrite(spo2_pin, HIGH);
        delay(100);
        digitalWrite(spo2_pin, LOW);
        delay(100);
    }
    spo2_value = analogRead(spo2_input);
    spo2_value = map(spo2_value, 0, 1023, 92, 98);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("SPO2 Value :");
    lcd.setCursor(12, 0);
    lcd.print(spo2_value);
    lcd.setCursor(15, 0);
    lcd.print("%");
    delay(4000);
    lcd.clear();
}
void measure_sequence()
{
    measure_ECG();
    measure_temperature();
    measure_spo2();
    measure_BP();
// create_file();
}
void sent_data()
{
    Serial.println(tempC);
    Serial.println(tempF);
    Serial.println(spo2_value);
    Serial.println(systolic_pressure);
    Serial.println(diastolic_pressure);
    Serial.println(pulse_rate);
    delay(3000);
}
void loop()
{
    read_keypad();
    push_button_1_status = !digitalRead(push_button_1);
    if (push_button_1_status == 1)
            {
        get_patient_ID();
        print_patient_ID();
    }
    push_button_2_status = !digitalRead(push_button_2);
    if (push_button_2_status == 1)
            {
        measure_sequence();
    }
    push_button_3_status = !digitalRead(push_button_3);
    if (push_button_3_status == 1)
            {
        create_file();
    }
    push_button_4_status = !digitalRead(push_button_4);
    if (push_button_4_status == 1)
            {
// sent_data();
        read_file();
    }
    if (Serial1.available())
    {
        systolic_pressure = Serial1.parseInt();
        diastolic_pressure = Serial1.parseInt();
        pulse_rate = Serial1.parseInt();
// Serial.print("systolic_pressure");
// Serial.print(" ");
// Serial.print(systolic_pressure);
// Serial.println("\n");
//
//
// Serial.print("diastolic_pressure");
// Serial.print(" ");
// Serial.print(diastolic_pressure);
// Serial.println("\n");
//
// Serial.print("pulse_rate");
// Serial.print(" ");
// Serial.print(pulse_rate);
// Serial.println("\n");
        Serial1.flush();
        Serial1.end();
        Serial1.begin(9600);
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("SYS :");
        lcd.setCursor(5, 0);
        lcd.print(systolic_pressure);
        lcd.setCursor(9, 0);
        lcd.print("mmHg");
        lcd.setCursor(0, 1);
        lcd.print("DIA :");
        lcd.setCursor(5, 1);
        lcd.print(diastolic_pressure);
        lcd.setCursor(9, 1);
        lcd.print("mmHg");
        delay(3000);
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Pulse Rate");
        lcd.setCursor(0, 1);
        lcd.print(pulse_rate);
        lcd.setCursor(5, 1);
        lcd.print("BPM");
        delay(3000);
        lcd.clear();
    }
}



 

 

####

Anticipated areas / field of application

◆Point Of Care Diagnosis at rural areas with limited infrastructure

◆Remote Consultation and critical care monitoring

◆Remote collaboration of doctors over cloud for diagnosis

◆Online medical data analysis

◆Remote patient monitoring system

◆Anaemia Diagnosis

 

 

####

Recommendations

◆Non-invasive glucometer may be included so that this device can also be used to detect blood sugar level.

◆Cellular data connectivity can be incorporated thereby eliminating the need for a wired network.

◆A mini thermal printer can be used to give token/ID number to patients so that the doctor can link the data to the patient when he/she visits him.

◆An Artificial Intelligence (AI) based software can be used to analyse the patient data and provide preliminary diagnostec results.

◆A camera to take the photograph of the thoracis cavity and store this information.

 

####

Conclusion

UPASANA is of immense value and helpful for people in rural areas with limited infrastructure and health care Facilities. The public health care system in rural areas runs on the ASHA workers, not the doctor. By providing UPASANA toolkit to them, timely and better diagnosis can be done. This will lead to a reduction in the number of deaths, especially those caused by Anaemia. We hope that in the near future UPASANA will democratise healthcare.

 

 

Our vision is to democratize health care by 2020 when WHO publishes its new report. This will be the map of INDIA.

MVP information MBCET, Trivandrum

Final year Electronics & Communication students
Mar Baselios College of Engineering and Technoligy (MBCET), Trivandrum

Team Leader
JOJI JOHN VERGHESE

I started learning electronics from my age of 10. I love to create useful stuff out of junk electronic items.
 

Follow

share