Translate

(IOT) Monitor Heart Beat (BPM) secara ONLINE Aplikasi Blynk Sensor MAX30102 Wemos D1 ARDUINO

(IOT) Monitor Heart Beat (BPM) secara ONLINE Aplikasi Blynk Sensor MAX30102 Wemos D1 ARDUINO


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat memonitor heart beat atau heart rate (BPM) secara jarak jauh menggunakan media internet dan aplikasi yang digunakan yaitu Blynk. untuk mikrokontroller yang digunakan yaitu Wemos D1 dan sensornya menggunakan MAX30102. untuk lebih jelasnya berikut adalah program dan daftar komponennya.



a. Wemos D1




b. Sensor MAX30102






c. Program Arduino Uno

#include <Wire.h>
#define BLYNK_PRINT Serial    
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include "MAX30105.h"

#include "heartRate.h"

MAX30105 particleSensor;

const byte RATE_SIZE = 4; //Increase this for more averaging. 4 is good.
byte rates[RATE_SIZE]; //Array of heart rates
byte rateSpot = 0;
long lastBeat = 0; //Time at which the last beat occurred

float beatsPerMinute;
int beatAvg;
int counter;

char auth[] = "TRETRDgfcgczmjhghjHGJYhhngvhgCHGcbvc";
char ssid[] = "Hotspot HPku";
char pass[] = "123456789";

SimpleTimer timer;


void sendSensor()
{
 Blynk.virtualWrite(V5, beatsPerMinute);
 delay(1000);
}


void setup()
{
  Serial.begin(115200);
  Serial.println("Initializing...");

  // Initialize sensor
  if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Use default I2C port, 400kHz speed
  {
    Serial.println("MAX30105 was not found. Please check wiring/power. ");
    while (1);
  }
  Serial.println("Place your index finger on the sensor with steady pressure.");

  particleSensor.setup(); //Configure sensor with default settings
  particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running
  particleSensor.setPulseAmplitudeGreen(0); //Turn off Green LED

Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, sendSensor);

}

void loop()
{
  long irValue = particleSensor.getIR();

  if (checkForBeat(irValue) == true)
  {
    //We sensed a beat!
    long delta = millis() - lastBeat;
    lastBeat = millis();

    beatsPerMinute = 60 / (delta / 1000.0);

    if (beatsPerMinute < 255 && beatsPerMinute > 20)
    {
      rates[rateSpot++] = (byte)beatsPerMinute; //Store this reading in the array
      rateSpot %= RATE_SIZE; //Wrap variable

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

  counter++;

if(counter > 100){
 counter = 0;
 Blynk.run();
 timer.run();
}

  Serial.print("IR=");
  Serial.print(irValue);
  Serial.print(", BPM=");
  Serial.print(beatsPerMinute);
  Serial.print(", Avg BPM=");
  Serial.print(beatAvg);

  if (irValue < 50000)
    Serial.print(" No finger?");

  Serial.println();
}




d. VIDEO HASILNYA






No comments:

Post a Comment