Mendeteksi Denyut Jantung Dengan Menggunakan Pulse Sensor Pada Arduino Uno Berbasis Android

LISTING PROGRAM
1. Program Arduino Uno
#include
#define DEBUG true
SoftwareSerial ESP8266(9,10);
#define SSID "Ulos"
#define PASS "usaha"
#define IP "184.106.153.149"
String msg = "GET https://api.thingspeak.com/update?api_key=17X9AW5NSIIAWX**";
int error;
int pulsePin = A0;
int LedPin = 13;
volatile
volatile
volatile
volatile
volatile

int Sinyal;
int BPM;
boolean Pulse = false;

boolean QS = false;
int IBI = 600;

const int rata2 = 10;
volatile int tampung[rata2];
volatile int P =512;
volatile int T = 512;
volatile int ambang = 525;
volatile int amp = 100;
volatile unsigned long awalHitung = 0;
volatile unsigned long waktuAkhir = 0;
volatile boolean denyutPertama = true;
volatile boolean denyutKedua = false;
static boolean serialVisual = true;
void setup()
{
Serial.println("Menghubungkan...");
Serial.begin(115200);
ESP8266.begin(115200);
Serial.println("AT");

ESP8266.println("AT");
ESP8266.println("AT+RST");
delay(1000);
if(ESP8266.find("OK")){
Serial.println("Modul WiFi Terdeteksi");
konekWiFi();
}
interupsi();
}
void loop(){
start:
error=0;
updatebeat();
Serial.print("BPM = ");
Serial.println(BPM);
Serial.print("Sinyal = ");
Serial.println(Sinyal);
if (error==1){
goto start;
}


A-1
Universitas Sumatera Utara

A-2
}
void updatebeat(){
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += IP;
cmd += "\",80";
Serial.println(cmd);
ESP8266.println(cmd);
if(ESP8266.find("Error")){
return;
}
cmd = msg ;
cmd += "&field1=";
cmd += BPM;
cmd += "\r\n";
Serial.print("AT+CIPSEND=");

ESP8266.print("AT+CIPSEND=");
Serial.println(cmd.length());
ESP8266.println(cmd.length());
if(ESP8266.find(">")){
Serial.print(cmd);
ESP8266.print(cmd);
}
else{
Serial.println("AT+CIPCLOSE");
ESP8266.println("AT+CIPCLOSE");
error=1;
}
}
boolean konekWiFi(){
Serial.println("Menyalakan Mode WiFi : Station");
ESP8266.println("AT+CWMODE=1");
delay(2000);
Serial.println("Menghubungkan ke WiFi ...");
String cmd="AT+CWJAP=\"";
cmd+=SSID;

cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
Serial.println(cmd);
ESP8266.println(cmd);
// delay(5000);
if(ESP8266.find("OK")){
Serial.println("OK");
return true;
}
else{
return false;
}
}
void interupsi(){
TCCR2A = 0x02;
TCCR2B = 0x06;
OCR2A = 0X7C;
TIMSK2 = 0x02;
sei();

}
ISR(TIMER2_COMPA_vect){
cli();
Sinyal = analogRead(pulsePin);
awalHitung += 2;
int N = awalHitung - waktuAkhir;
if(Sinyal < ambang && N > (IBI/5)*3){
if (Sinyal < T){
T = Sinyal;

Universitas Sumatera Utara

A-3
}
}
if(Sinyal > ambang && Sinyal > P){
P = Sinyal;
}
if (N > 250){
if ( (Sinyal > ambang) && (Pulse == false) && (N > (IBI/5)*3) ){

Pulse = true;
digitalWrite(LedPin,HIGH);
IBI = awalHitung - waktuAkhir;
waktuAkhir = awalHitung;
if(denyutKedua){
denyutKedua = false;
for(int i=0; i