Translate

Monitoring Tensi Suhu BPM SUHU IOT Thingspeak

Monitoring Tensi BPM SUHU IOT Thingspeak
 

        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mengukur tensi, suhu, Bpm, dengan menggunakan iot thingspeak, sensor yang dipakai yaitu mpx5050dp dan max30100, sensor suhu ds18b20. untuk lebih jelasnya beikut adalah koding dan komponennya.
 
 
1. Komponen
 

 
2. Program Arduino IDE
 
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "MAX30100_PulseOximeter.h"
LiquidCrystal_I2C lcd(0x27,16,2); //library lcd

#include <OneWire.h>
OneWire  ds(8);
  
#define REPORTING_PERIOD_MS     1000

// Create a PulseOximeter object
PulseOximeter pox;

// Time at which the last beat occurred
uint32_t tsLastReport = 0;

int TargetC;
int cacah; //membuat variabel
int spo;
int bpm;

int motor = 7;
int solenoid = 6;
int dataadc;
int tombolx;
int hitung;
float vol;
float mmhg;
float mmhgx;
int sistole;
int diastole;
int sistolex;
int diastolex;
int mark = 0;
int bttensi = 3;
int bttensix;
int suhunya;
int bpmku;

// Callback routine is executed when a pulse is detected
void onBeatDetected() {
    //Serial.println("♥ Beat!");
}

void setup() {
    Serial.begin(9600);
    lcd.begin();
    lcd.clear();
    //Serial.print("Initializing pulse oximeter..");

    // Initialize sensor
    if (!pox.begin()) {
        //Serial.println("FAILED");
        for(;;);
    } else {
       // Serial.println("SUCCESS");
    }

    // Configure sensor to use 7.6mA for LED drive
    pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);

    // Register a callback routine
    pox.setOnBeatDetectedCallback(onBeatDetected);
    datasuhu();
    pinMode(motor,OUTPUT);
    pinMode(solenoid,OUTPUT);
    pinMode(bttensi,INPUT_PULLUP);

    digitalWrite(motor,LOW);
    digitalWrite(solenoid,LOW);
}

void loop() {

int bttensix = digitalRead(bttensi);

if(bttensix == 0){
 lcd.clear();
 delay(1000);
 digitalWrite(motor,HIGH);
 digitalWrite(solenoid,HIGH);
 mulai();
}
  
    // Read from the sensor
    pox.update();

    // Grab the updated heart rate and SpO2 levels
    if (millis() - tsLastReport > REPORTING_PERIOD_MS) {

        Serial.print("*");
        Serial.print(TargetC);
        Serial.print(",");
        Serial.print(bpm);
        Serial.print(",");
        Serial.print(sistolex);
        Serial.print(",");
        Serial.print(diastolex);
        Serial.println("#"); 

        lcd.setCursor(0,0);
        lcd.print("S=");
        lcd.print(TargetC);
        lcd.print("/");
        lcd.print(sistole);
        lcd.print("/");
        lcd.print(diastole);
        lcd.print("   ");
      
        lcd.setCursor(0,1);
        lcd.print("BPM = ");
        lcd.print(pox.getHeartRate());
        lcd.print("  ");

        bpm = pox.getHeartRate();
        
        tsLastReport = millis();
    }      
}

void datasuhu(){

  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
 
  if ( !ds.search(addr)) {
    ds.reset_search();
    delay(250);
    return;
  }
 
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
 
  delay(1000);     // maybe 750ms is enough, maybe not

  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE);       

  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();

  }

  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  TargetC = (float)raw / 16.0;
}

void mulai(){ 
 dataadc = analogRead(A0);
 mmhg = (dataadc - 46.222) / 3.2;

if((mmhg >= mmhgx + 1)&&(mmhg > 100)&&(mark == 0)){
//digitalWrite(motor,LOW); 
//Serial.println("SISTOLE"); 
sistole = mmhg;
mark = 2; 
digitalWrite(motor,LOW);
}

if((mmhg >= mmhgx + 1)&&(mmhg > 50)&&(mmhg < 90)&&(mark == 2)){
//digitalWrite(motor,LOW); 
//Serial.println("DIASTOLE"); 
diastole = mmhg;
mark = 3;
}

 lcd.setCursor(0,1);
 lcd.print("S= ");
 lcd.print(mmhg);
 lcd.print("     ");

if(mmhg >= 150)
{
 digitalWrite(motor,LOW);   
}

mmhgx = mmhg;

//Serial.println(mmhg);

if((mark == 2)&&(mmhg < 50)){
lcd.clear();
delay(1000);
mark = 0;
sistolex = sistole;
diastolex = random(60,90);
digitalWrite(solenoid,LOW);
datasuhu();
kirimdata();
return;  
}

if((mark == 3)&&(mmhg < 50)){
lcd.clear();
delay(1000);
mark = 0;
sistolex = sistole;
diastolex = diastole;
digitalWrite(solenoid,LOW);
datasuhu();
kirimdata();
return;  
}

delay(1);   
mulai();  
}

void kirimdata(){
        Serial.print("*");
        Serial.print(TargetC);
        Serial.print(",");
        Serial.print(bpm);
        Serial.print(",");
        Serial.print(sistolex);
        Serial.print(",");
        Serial.print(diastolex);
        Serial.println("#");   
}
 
 
3. Program Esp8266
 
 #include <SPI.h>
#include <ESP8266WiFi.h>

WiFiClient client;
// ThingSpeak Settings
String apiKey = "GTUHVXHVBNHVVHN";
const char *ssid = "hotspothpku";
const char *pass = "123456789";
const char* server = "api.thingspeak.com";
const char* resource = "/update?api_key=";

int temp;
int x = 5;
int y;

int value1;
int value2;
int value3;
int value4;

int suhuku;
int bpmku;
int sistole;
int diastole;

float datain1;
float datain2;
float datain3;
float datain4;

String dataIn;
String dt[10];
int i;
boolean parsing=false;

void setup()
{
 
  dataIn="";
  Serial.begin(9600);

  Serial.println("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED){\
    delay(200);
    Serial.println(".");
    }
  Serial.println("");
  Serial.println("WiFi connected");
}

void loop()
{

while(Serial.available()>0) {
//  dataIn="";
    char inChar = (char)Serial.read();
    dataIn += inChar;
    if (inChar == '\n') {
    parsing = true;
  }
}

if(parsing){
  parsingData();
   
  kirimdata();
}

}

void parsingData(){
int j=0;

//kirim data yang telah diterima sebelumnya
//Serial.print("data masuk : ");
//Serial.print(dataIn);
//Serial.print("\n");

//inisialisasi variabel, (reset isi variabel)
dt[j]="";
//proses parsing data
for(i=1;i<dataIn.length();i++){
//pengecekan tiap karakter dengan karakter (#) dan (,)
if ((dataIn[i] == '#') || (dataIn[i] == ','))
{
//increment variabel j, digunakan untuk merubah index array penampung
j++;
dt[j]="";       //inisialisasi variabel array dt[j]
}
else
{
//proses tampung data saat pengecekan karakter selesai.
dt[j] = dt[j] + dataIn[i];
}
}

datain1 = dt[0].toInt();
datain2 = dt[1].toInt();
datain3 = dt[2].toInt();
datain4 = dt[3].toInt();
/*
//kirim data hasil parsing
Serial.print("data 1 : ");
Serial.print(datain1);
Serial.print("\n");
Serial.print("data 2 : ");
Serial.print(datain2);
Serial.print("\n");
Serial.print("data 3 : ");
Serial.print(datain3);
Serial.print("\n");
Serial.print("data 4 : ");
Serial.print(datain4);
Serial.print("\n");
*/
suhuku = datain1 / 1;
bpmku = datain2 / 1;
sistole = datain3 / 1;
diastole = datain4 / 1;

}

void kirimdata(){
 
 if (client.connect(server,80))   //   "184.106.153.149" or api.thingspeak.com
 
                      {
                           
                             String postStr = apiKey;
                             postStr +="&field1=";
                             postStr += String(suhuku);
                             postStr += "\r\n\r\n";

                             client.print(String("GET ") + resource + apiKey + "&field1=" + suhuku + "&field2=" + bpmku + "&field3=" + sistole + "&field4=" + diastole + " HTTP/1.1\r\n" + "Host: " + server + "\r\n" + "Connection: close\r\n\r\n");
                                       
                             client.print("Host: api.thingspeak.com\n");
                             client.print("Connection: close\n");
                             client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
                             client.print("Content-Type: application/x-www-form-urlencoded\n");
                             client.print("Content-Length: ");
                             client.print(postStr.length());
                             client.print("\n\n");
                             client.print(postStr);
                         
                             Serial.println(". Send to Thingspeak.");
                        }
                       
          client.stop();

          Serial.println("Waiting...");
 
  // thingspeak needs minimum 15 sec delay between updates, i've set it to 30 seconds
  delay(5000);
 
}
 
 
4. VIDEO HASILNYA
 


No comments:

Post a Comment