/*************************************************************
Download latest Blynk library here:
https://github.com/blynkkk/blynk-library/releases/latest
Blynk is a platform with iOS and Android apps to control
Arduino, Raspberry Pi and the likes over the Internet.
You can easily build graphic interfaces for all your
projects by simply dragging and dropping widgets.
Downloads, docs, tutorials: http://www.blynk.cc
Sketch generator: http://examples.blynk.cc
Blynk community: http://community.blynk.cc
Follow us: http://www.fb.com/blynkapp
http://twitter.com/blynk_app
Blynk library is licensed under MIT license
This example code is in public domain.
*************************************************************
This example runs directly on ESP32 chip.
Note: This requires ESP32 support package:
https://github.com/espressif/arduino-esp32
Please be sure to select the right ESP32 module
in the Tools -> Board menu!
Change WiFi ssid, pass, and Blynk auth token to run :)
Feel free to apply it to any other example. It's simple!
*************************************************************/
/* Comment this out to disable prints and save space */
//mendeklarasikan/mendefisinikan port virtual yang ada di blynk
//mendefinisikan BLYNK_PRINT sebagai Serial, yang digunakan untuk mencetak output dari library Blynk ke port Serial
#define BLYNK_PRINT Serial
/* Fill-in your Template ID (only if using Blynk.Cloud) */
//mendefinisikan identitas proyek Blynk, seperti ID template, nama template, dan token otentikasi.
#define BLYNK_TEMPLATE_ID "TMPL6xDyNlhdG"
#define BLYNK_TEMPLATE_NAME "Smart monitoring infus"
#define BLYNK_AUTH_TOKEN "pN0gIRcdS0qItqoay-zKDm6DG9ShSENs"
//library yang digunakan untuk menyambung ke wifi
#include <WiFi.h>
#include <WiFiClient.h>
//library yang digunakan agar esp32 dapat tersambung dengan blynk
#include <BlynkSimpleEsp32.h>
//library sensor berat hx711
#include "HX711.h"
//deklarasi untuk pin DOUT dan CLK pada sensor berat
const int DOUT = 18;
const int CLK = 4;
//const int buzzerPin = 17; //
//dekalarasi button dan led
const int ledHijau = 21;
const int ledKuning = 22;
const int ledMerah = 23;
const int ledBiru = 2;
#define btn 19
int nBtn = 0;
//deklarasi HX711/sensor berat
HX711 scale;
float calibration_factor = 398.00;
//deklarasi gram yang akan digunakan sebagai
//variable yang menampung nilai berat
float GRAM;
//variable untuk menampung nilai maximal berat
float maxGRAM = 0;
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
// memasukkan authentication project yang dibuat
//di aplikasi blynk
char auth[] = BLYNK_AUTH_TOKEN;
// Your WiFi credentials.
// Set password to "" for open networks.
//memasukkan nama dan password wifi yang digunakan
char ssid[] = "Mi 11 Lite";
char pass[] = "00000000";
//fitur pada blynk untuk mengirim data dengan waktu yang ditentukan
BlynkTimer timer;
//fungsi untuk mengirim data ke blynk
void myTimerEvent(){
scale.set_scale(calibration_factor); // Mengatur skala sensor berat dengan faktor kalibrasi
GRAM = scale.get_units(), 10; // Mendapatkan nilai berat dari sensor dan mengalinya dengan 10
Blynk.virtualWrite(V0, GRAM); // Mengirim nilai berat (GRAM) ke pin virtual V0 di Blynk
delay(100);
//Mengambil berat maximal infus
if (nBtn == 0 ){
//memeriksa apakah nilai nBtn sama dengan 0, yang menandakan bahwa tombol belum ditekan sebelumnya.
maxGRAM = GRAM; // Mengambil nilai berat saat ini sebagai berat maksimum
digitalWrite(ledBiru, HIGH); // Menyalakan LED biru
delay(250); // Memberi jeda selama 250 ms
digitalWrite(ledBiru, LOW);
delay(250);
digitalWrite(ledBiru, HIGH);
delay(250);
digitalWrite(ledBiru, LOW);
delay(250);
}
//kondisi yang digunakan untuk mengatur virtual pin
//atau komponen virtual yang ada pada blynk
//berdasarkan data yang diterima oleh blynk (GRAM)
if (GRAM < (maxGRAM/6)){
// Jika berat kurang dari 1/6 dari berat maksimum
Blynk.virtualWrite(V1, HIGH); //led merah pada blynk menyala
Blynk.virtualWrite(V2, LOW);
Blynk.virtualWrite(V3, LOW);
} else if (GRAM > (maxGRAM/6) && GRAM < (maxGRAM/3)){
// Jika berat antara 1/6 dan 1/3 dari berat maksimum
Blynk.virtualWrite(V2, HIGH); //led kuning di blynk menyala
Blynk.virtualWrite(V1, LOW);
Blynk.virtualWrite(V3, LOW);
} else if (GRAM > (maxGRAM/3)){
// Jika berat lebih dari 1/3 dari berat maksimum
Blynk.virtualWrite(V2, LOW);
Blynk.virtualWrite(V1, LOW);
Blynk.virtualWrite(V3, HIGH); //led hijau menyala
}
}
//dijalankan sekali
//digunakan untuk menginisialisasi konfigurasi awal,
//seperti mengatur pin I/O, menghubungkan ke WiFi, menginisialisasi sensor,
//dan memulai komunikasi dengan platform Blynk
void setup()
{
//Mengatur mode pin sebagai OUTPUT untuk LED
Serial.begin(115200);
pinMode(ledMerah, OUTPUT);
pinMode(ledKuning, OUTPUT);
pinMode(ledHijau, OUTPUT);
pinMode(ledBiru, OUTPUT);
pinMode(btn, INPUT_PULLUP); // Mengatur mode pin sebagai INPUT_PULLUP untuk tombol (button)
// pinMode(buzzerPin, OUTPUT);
// digitalWrite(buzzerPin, LOW); // Pastikan buzzer dimatikan pada awalnya
//sensor berat mulai menghitung berat
scale.begin(DOUT, CLK);
//fungsi yang digunakan untuk mengkalibrasi nilai berat
scale.set_scale();
//berat yang baca oleh sensor berat agar lebih akurat untuk mengukur berat bersih tanpa memperhitungkan berat awal yang ada pada sensor.
scale.tare();
//memulai koneksi ke blynk
Blynk.begin(auth, ssid, pass);
// Menetapkan jeda waktu untuk memanggilfungsi myTimerEvent
timer.setInterval(1000L, myTimerEvent);
}
void loop()
{
//Membaca/mengambil nilai btn
nBtn = digitalRead(btn);
//memulai mengirim serta mengolah data dari fungsi yang dibuat tadi
Blynk.run();
// Menjalankan timer yang telah diatur sebelumnya
timer.run();
// Mengatur LED berdasarkan nilai berat (GRAM)
if (GRAM < (maxGRAM/6) || GRAM < 1.0){
digitalWrite(ledMerah, HIGH);
digitalWrite(ledKuning, LOW);
digitalWrite(ledHijau, LOW);
//digitalWrite(buzzerPin, HIGH); // Hidupkan buzzer
//delay(2000); // Tunda selama 2 detik
//digitalWrite(buzzerPin, LOW); // Matikan buzzer setelah 2 detik
} else if (GRAM > (maxGRAM/6) && GRAM < (maxGRAM/3)){
digitalWrite(ledKuning, HIGH);
digitalWrite(ledHijau, LOW);
digitalWrite(ledMerah, LOW);
} else if (GRAM > (maxGRAM/3)){
digitalWrite(ledMerah, LOW);
digitalWrite(ledKuning, LOW);
digitalWrite(ledHijau, HIGH);
}
// Menampilkan nilai tombol, berat, dan berat maksimum di Monitor Serial
Serial.print ("Nilai Button = ");
Serial.println(nBtn);
Serial.print ("Berat = ");
Serial.println(GRAM);
Serial.print ("Berat max = ");
Serial.println (maxGRAM);
}