ALAT DETAK JANTUNG BERBASIS ARDUINO UNO

 

      

Dosen Pengampu : Dr. Samuel Beta Kuntoardjo.,ING.TECH,M.T.,DR.

KELOMPOK B1

Ahmad Ali Munawar (3.32.20.1.01)

Annisa Safina I. S. (3.32.20.1.04)

Masukan : MAX 30102

Pemroses : ARDUINO UNO

Keluaran : LCD OLED, BEL

LATAR BELAKANG

Denyut jantung merupakan parameter penting yang digunakan oleh paramedis untuk mengetahui kondisi kesehatan fisik maupun kondisi mental seseorang. BPM atau Heart Rate merupakan representasi dari denyut nadi per satuan waktu dari suatu objek. Biasanya jantung orang dewasa berdetak sebanyak 60 sampai 100 kali per menit pada kondisi istirahat. Mahalnya alat kedokteran dan kurang-nya waktu seseorang untuk melakukan pemeriksaan di rumah sakit menyulitkan seseorang untuk mengawasi kesehatan, terutama kesehatan jantung. Untuk itu dibutuhkan alat sederhana yang memiliki kemudahan dalam pengoperasiannya dan dapat digunakan di rumah walaupun saat sedang beraktifitas.

PPT klik di sini





















PROGRAM
#include <Adafruit_GFX.h>        
#include <Adafruit_SSD1306.h>
#include <Wire.h>
#include "MAX30105.h"           
#include "heartRate.h"           
//#include<ESP8266WiFi.h>
MAX30105 particleSensor;

const byte RATE_SIZE = 4;        
byte rates[RATE_SIZE];           
byte rateSpot = 0;
long lastBeat = 0;               
float beatsPerMinute;
int beatAvg;
unsigned long menit=0;
long data=0;

#define SCREEN_WIDTH 128         
#define SCREEN_HEIGHT 32        
#define OLED_RESET    -1        

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); 

const unsigned char polines_logo [] PROGMEM = {
  // 'Logo Polines - tagline, 128x32px
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x1f, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x7a, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x01, 0xcf, 0xfe, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x03, 0xef, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x07, 0xff, 0xff, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x0f, 0x7b, 0xff, 0xdc, 0x01, 0xff, 0xfc, 0x7f, 0xe7, 0xdf, 0x3f, 0xf8, 0xff, 0xc7, 0xfc, 0x00, 
  0x1e, 0xfb, 0xfb, 0xfe, 0x00, 0x3e, 0x3c, 0xf1, 0xe7, 0x9f, 0x3c, 0x79, 0xf3, 0xef, 0x00, 0x00, 
  0x3f, 0xeb, 0xf2, 0xff, 0x00, 0x3e, 0x7d, 0xf3, 0xef, 0x9e, 0x7c, 0x79, 0xe3, 0xdf, 0x00, 0x00, 
  0x7b, 0xe3, 0x14, 0xf7, 0x80, 0x3e, 0x7d, 0xe3, 0xef, 0x9e, 0x7c, 0xfb, 0xe3, 0xdf, 0xfc, 0x00, 
  0x3f, 0xe6, 0x0c, 0xff, 0x80, 0x3c, 0x79, 0xe3, 0xcf, 0x3e, 0x78, 0xfb, 0xe7, 0x80, 0x3e, 0x00, 
  0x3f, 0xd6, 0x09, 0x77, 0x80, 0x7c, 0x7b, 0xe7, 0xdf, 0x3e, 0xf8, 0xf3, 0xe0, 0x00, 0x3c, 0x00, 
  0x3f, 0xcc, 0x04, 0x73, 0x00, 0x7f, 0xf1, 0xff, 0x9f, 0xbe, 0xf9, 0xfb, 0xff, 0xff, 0xf8, 0x00, 
  0x3f, 0xc4, 0x00, 0xff, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x3f, 0x9c, 0x0f, 0x7b, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x3d, 0xc2, 0x08, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x1f, 0xe1, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x1f, 0xff, 0xef, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x1f, 0x80, 0xc0, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x1f, 0x80, 0xc0, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x0f, 0x80, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x07, 0xf8, 0xe7, 0xfc, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x17, 0x0c, 0x6f, 0x4c, 0x00, 0x00, 0x00, 
  0x07, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x03, 0xdf, 0xfe, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x03, 0xdd, 0xb6, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x01, 0xff, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x01, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

static const unsigned char PROGMEM logo2_bmp[] =
{ 0x03, 0xC0, 0xF0, 0x06, 0x71, 0x8C, 0x0C, 0x1B, 0x06, 0x18, 0x0E, 0x02, 0x10, 0x0C, 0x03, 0x10,              
0x04, 0x01, 0x10, 0x04, 0x01, 0x10, 0x40, 0x01, 0x10, 0x40, 0x01, 0x10, 0xC0, 0x03, 0x08, 0x88,
0x02, 0x08, 0xB8, 0x04, 0xFF, 0x37, 0x08, 0x01, 0x30, 0x18, 0x01, 0x90, 0x30, 0x00, 0xC0, 0x60,
0x00, 0x60, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x1B, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x04, 0x00,  };

static const unsigned char PROGMEM logo3_bmp[] =
{ 0x01, 0xF0, 0x0F, 0x80, 0x06, 0x1C, 0x38, 0x60, 0x18, 0x06, 0x60, 0x18, 0x10, 0x01, 0x80, 0x08,
0x20, 0x01, 0x80, 0x04, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0xC0, 0x00, 0x08, 0x03,
0x80, 0x00, 0x08, 0x01, 0x80, 0x00, 0x18, 0x01, 0x80, 0x00, 0x1C, 0x01, 0x80, 0x00, 0x14, 0x00,
0x80, 0x00, 0x14, 0x00, 0x80, 0x00, 0x14, 0x00, 0x40, 0x10, 0x12, 0x00, 0x40, 0x10, 0x12, 0x00,
0x7E, 0x1F, 0x23, 0xFE, 0x03, 0x31, 0xA0, 0x04, 0x01, 0xA0, 0xA0, 0x0C, 0x00, 0xA0, 0xA0, 0x08,
0x00, 0x60, 0xE0, 0x10, 0x00, 0x20, 0x60, 0x20, 0x06, 0x00, 0x40, 0x60, 0x03, 0x00, 0x40, 0xC0,
0x01, 0x80, 0x01, 0x80, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x30, 0x0C, 0x00,
0x00, 0x08, 0x10, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x01, 0x80, 0x00  };


void setup() {  
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);                
 display.clearDisplay();                                    
    display.drawBitmap(0, 0, polines_logo, 128, 32, WHITE);
    display.display();
    delay(3000);
  // Initialize sensor
  particleSensor.begin(Wire, I2C_SPEED_FAST);              
  particleSensor.setup(); //Configure sensor with default settings
  particleSensor.setPulseAmplitudeRed(0x0A);                

}

void loop() {
 long irValue = particleSensor.getIR();                     
                                                            
if(irValue > 7000){                                         
    display.clearDisplay();                               
    display.drawBitmap(5, 5, logo2_bmp, 24, 21, WHITE);     
    display.setTextSize(2);                                
    display.setTextColor(WHITE); 
    display.setCursor(50,0);                
    display.println("BPM");             
    display.setCursor(50,18);                
    display.println(beatAvg); 

//    for(int i=0; i<=32; i++){
//    display.setTextSize(2);                               
//    display.setTextColor(WHITE); 
//    display.setCursor(85,i);                
//    display.println("|");
//    }
   
    unsigned long dpm = millis();
    if (dpm - menit >= 60000){
    data  = beatAvg;
    menit = dpm;
    }
    display.setTextSize(1);                                 
    display.setTextColor(WHITE); 
    display.setCursor(100,10);                
    display.println("DPM");             
    display.setCursor(100,20);                
    display.println(data); 
    display.display();
  if (checkForBeat(irValue) == true)                       
  {
    display.clearDisplay();                                 
    display.drawBitmap(0, 0, logo3_bmp, 32, 32, WHITE);     
    display.setTextSize(2);                                
    display.setTextColor(WHITE);             
    display.setCursor(50,0);                
    display.println("BPM");             
    display.setCursor(50,18);                
    display.println(beatAvg); 
    
    display.setTextSize(1);                               
    display.setTextColor(WHITE); 
    display.setCursor(100,10);                
    display.println("DPM");             
    display.setCursor(100,20);                
    display.println(data); 
    display.display();
    tone(3,1000);                                 
    delay(100);
    noTone(3);                                             
    //We sensed a beat!
    long delta = millis() - lastBeat;                       
    lastBeat = millis();

    beatsPerMinute = 60 / (delta / 1000.0);                 

    if (beatsPerMinute < 255 && beatsPerMinute > 20)      
    {
      rates[rateSpot++] = (byte)beatsPerMinute;             
      rateSpot %= RATE_SIZE;                                

      //Take average of readings
      beatAvg = 0;
      for (byte x = 0 ; x < RATE_SIZE ; x++)
        beatAvg += rates[x];
      beatAvg /= RATE_SIZE;
    }
  }

}
  if (irValue < 7000){                                      
     beatAvg=0;
     display.clearDisplay();
     display.setTextSize(1);                    
     display.setTextColor(WHITE);             
     display.setCursor(30,5);                
     display.println("letakan jari "); 
     display.setCursor(30,15);
     display.println("pada sensor! ");  
     display.display();
     noTone(3);
     }
   
}

VIDEO PROYEK


Komentar