Monitor Suhu Tubuh Non Contact dan BPM ONLINE Blynk
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang digunakan untuk mengukur suhu tubuh dan bpm secara online via aplikasi Blynk. keuntungan alat ini yaitu bisa monitor secara jarak jauh dan juga bisa dimonitor dimanapun berada asalkan kedua device terkoneksi internet. untuk lebih jelasnya berikut adalah komponen dan programnya.
a. Wemos D1 Mini
b. Sensor Suhu MLX90614
c. Sensor BPM max30102
d. LCD + I2C
e, Program Arduino IDE
#include <Wire.h>
#define BLYNK_PRINT Serial
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include "MAX30105.h"
#include <LiquidCrystal_I2C.h>
#include "heartRate.h"
#include <Adafruit_MLX90614.h>
LiquidCrystal_I2C lcd(0x27, 16,2);
MAX30105 particleSensor;
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
float TargetC;
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[] = "hgjhgjTJUIYRgfhjjhrerewiuoiuokjhkjgfh";
char ssid[] = "myHotspot";
char pass[] = "1234567";
SimpleTimer timer;
const int speakerPin = 12;
int ledmerah = 14;
int ledhijau = 2;
void sendSensor()
{
Blynk.virtualWrite(V5, TargetC);
Blynk.virtualWrite(V6, beatsPerMinute);
delay(1000);
}
void setup()
{
lcd.clear();
lcd.begin();
lcd.noCursor();
Serial.begin(115200);
Serial.println("Initializing...");
pinMode(ledmerah,OUTPUT);
pinMode(ledhijau,OUTPUT);
pinMode(speakerPin, OUTPUT);
digitalWrite(ledmerah,LOW);
digitalWrite(ledhijau,LOW);
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, sendSensor);
}
void loop()
{
// 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
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;
mlx.begin();
TargetC = mlx.readObjectTempC();
lcd.setCursor(0,1);
lcd.print("Temp= ");
lcd.print(TargetC);
lcd.println(" 'C ");
if (TargetC <= 37.5) {
digitalWrite(speakerPin, LOW);
digitalWrite(ledmerah,LOW);
digitalWrite(ledhijau,HIGH);
}
if (TargetC > 37.5 ) {
digitalWrite(speakerPin, HIGH);
digitalWrite(ledmerah,HIGH);
digitalWrite(ledhijau,LOW);
delay (3000);
}
Blynk.run();
timer.run();
}
lcd.setCursor(0,0);
lcd.print("BPM= ");
lcd.print(beatsPerMinute);
lcd.println(" ");
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();
}
f. VIDEO HASILNYA
No comments:
Post a Comment