Geeve George
Published © MIT

SUMO : Smart Pulse Monitor ( A Low Cost Smart ECG )

SUMO is a low cost pulse monitor which uses an algorithm to convert raw analog sensor data into BPM ( Beat's Per Minute )

AdvancedFull instructions provided3,736
SUMO : Smart Pulse Monitor ( A Low Cost Smart ECG )

Things used in this project

Hardware components

Intel Edison
Intel Edison
×1
Grove starter kit plus for Intel Edison
Seeed Grove starter kit plus for Intel Edison
×1
Breadboard (generic)
Breadboard (generic)
×1
Photo resistor
Photo resistor
×1
LED (generic)
LED (generic)
×1
Resistor 10k ohm
Resistor 10k ohm
×1
USB-A to Micro-USB Cable
USB-A to Micro-USB Cable
×1

Software apps and online services

AWS Cognito
Amazon Web Services AWS Cognito
AWS IoT
Amazon Web Services AWS IoT
Arduino IDE
Arduino IDE

Story

Read more

Custom parts and enclosures

SUMO Finger Holder

Code

Sumo Arduino Sketch

Arduino
/*
 * Smart Pulse Monitor 
 * Author : Geeve George
 */
 
 
#include <Wire.h>

const int analogInPin = A0;  


int sensorValue = 0;       

int count=0;
unsigned long time1=0;  
unsigned long time2;    


#include "rgb_lcd.h"

rgb_lcd lcd;

const int colorR = 255;
const int colorG = 0;
const int colorB = 0;

void setup() {
 
  Serial.begin(9600); 
 
  lcd.begin(16, 2);
    
    lcd.setRGB(colorR, colorG, colorB);
}

void loop() {

  
  
  
  if(count==0)
  {time1=millis();
  }
  time2=millis();
  sensorValue = analogRead(analogInPin);
  
     
    
    
    
 
  if(time2>=time1+10000)
  { counter();
  }
  

  if(sensorValue <500){
    
    lcd.clear();
    
    Serial.println("Insert finger");
    lcd.setCursor(0,0);
    lcd.print("Insert Finger");
  
   
    return;
 }
                       
       
      

  
  if(sensorValue >500){
    
    lcd.clear();
  digitalWrite(Led, HIGH);
    increment();

  Serial.println(sensorValue);
 Serial.println(count);
 Serial.println(time2);
 lcd.setCursor(0,0);
 lcd.print("Counting");
    
  }
  
 
 delay(200);
    
  }

void increment()
{
  count++;

} 

    void counter()
{ 
  lcd.clear();
  count=count*6;
  Serial.print("Heart beat: ");
  Serial.print(count);
  lcd.setCursor(0,0);
  lcd.print("Heart beat:");
  lcd.setCursor(0,1);
  lcd.print(count);
  lcd.print(" BPM");
  
  
  time1=0;
  time2=0;
  count=0;
  
 delay(5000);
    

  
 
}

Processing Sketch

Arduino
/*
 * Smart Pulse Monitor 
 * Author : Geeve George
 */
 


import processing.serial.*;
    Serial myPort;
    int xPos = 1;
    float oldHeartrateHeight = 0;

    void setup () {
    // set the window size:
    size(1000, 200);
    frameRate(30);

    // List available serial ports.
    println(Serial.list());

    // Setup which serial port to use.
    // This line might change for different computers.
    myPort = new Serial(this, "COM16", 115200);

    // set inital background:
    background(0);
    }

    void draw () {
    }

    void serialEvent (Serial myPort) {
    // read the string from the serial port.
    String inString = myPort.readStringUntil('\n');

    if (inString != null) {
    // trim off any whitespace:
    inString = trim(inString);
    // convert to an int
    println(inString);
    int currentHeartrate = int(inString);

    // draw the Heartrate BPM Graph.
    float heartrateHeight = map(currentHeartrate, 0, 1023, 0, height);
    stroke(0,255,0);
    line(xPos - 1, height - oldHeartrateHeight, xPos, height - heartrateHeight);
    oldHeartrateHeight = heartrateHeight;
    // at the edge of the screen, go back to the beginning:
    if (xPos >= width) {
    xPos = 0;
    background(0);
    } else {
    // increment the horizontal position:
    xPos++;
    }
    }
    }

AWS Lambda Function

JavaScript
var https = require('https');

var CONFIG = {
 
  partner_token:          'API_TOKEN',
  token:                  'USER_TOKEN', 
  user_id:    "user_id",
  serial_id:   "serial_id",
 
},
DATA = {};

function logData(event, context) {
  var clickType = event.clickType;
  switch(clickType.toLowerCase()) {
   
    }
    }
    }

  var data = {
    
    user_name:            CONFIG.user_name;
    sl_no:           CONFIG.dl_no;
    ,
    datalog: {},
    order_comment:                  'The data was sucesfully stored'
  };

 
  data = JSON.stringify(data);
  
  var headers = {
    'Content-Type':   'application/json',
    'Content-Length': Buffer.byteLength(data)
  };


  var req = https.request(options, function(res) {
    console.log(res.statusCode);
    if (res.statusCode == 200 || res.statusCode == 201) {
      context.succeed(event);
    } else if (context) {
      context.fail(event);
    }

    res.on('data', function (chunk) {
      console.log("" + chunk);
    });
  });

  req.write(data);
  req.end();
}

exports.handler = logData;

Credits

Geeve George

Geeve George

6 projects • 44 followers
I work on arduino, intel edison and android development for making assistive technologies for specially abled people.

Comments

Add projectSign up / Login