#include <WiFi.h>
#include <FirebaseESP32.h>
#include <LiquidCrystal_I2C.h>
#define HOST "https://iot02-79cbd-default-rtdb.firebaseio.com/"
#define AUTH "C5GQ0XlIg7MMGT7fhW3NqAKkuo0g3ZQhalK3dJAQ"
#define SSID "Wokwi-GUEST"
#define PASS ""
#include "HX711.h"
#define trigPin 23
#define echoPin 36
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
int jarak = 0;
float tinggi;
float unit;
float ons;
int Kg;
HX711 scale;
FirebaseData firebaseData;
FirebaseJson Data1;
FirebaseJson Data2;
FirebaseJson Data3;
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void setup() {
Serial.begin(115200);
pinMode (trigPin, OUTPUT);
pinMode (echoPin, INPUT);
WiFi.begin(SSID, PASS);
Serial.print("Menghubungkan Wi-Fi");
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("terhubung dengan IP: ");
Serial.println(WiFi.localIP());
Serial.println();
Firebase.begin(HOST, AUTH);
Firebase.reconnectWiFi(true);
Firebase.setReadTimeout(firebaseData, 1000 * 60);
Firebase.setwriteSizeLimit(firebaseData, "tiny");
Serial.println("------------------------------------");
Serial.println("Terhubung...");
Serial.println("Initializing the scale");
scale.begin(5, 4);
lcd.init();
lcd.backlight();
}
void loop() {
tinggiBadan();
beratBadan();
float bbi = Kg / (tinggi * tinggi) * 10000;
if (bbi > 18 && bbi < 23) {
Serial.println("Berat Badan Normal");
Data3.set("Index", "Normal");
lcd.setCursor(0, 2);
lcd.print("Berat Badan Normal");
} else if (bbi > 23 && bbi < 27.5) {
Serial.println("Berat Badan Berlebih");
Data3.set("Index", "Berlebih");
lcd.setCursor(0, 2);
lcd.print("Berat Badan Berlebih");
} else if (bbi < 18.5 ) {
Serial.println("Berat Badan Kurang");
Data3.set("Index", "Kurang");
lcd.setCursor(0, 2);
lcd.print("Berat Badan Kurang");
} else if (bbi > 27.5) {
Serial.println("Obesitas");
Data3.set("Index", "Obesitas");
lcd.setCursor(0, 2);
lcd.print("Obesitas");
}
Data1.set("Tinggi", tinggi);
Data2.set("Berat", Kg);
Firebase.updateNode(firebaseData,"Hasil",Data1);
Firebase.updateNode(firebaseData,"Hasil",Data2);
Firebase.updateNode(firebaseData,"Hasil",Data3);
lcd.setCursor(0, 0);
lcd.print("Tinggi : ");
lcd.setCursor(9, 0);
lcd.print(tinggi);
lcd.setCursor(17, 0);
lcd.print("cm");
lcd.setCursor(0, 1);
lcd.print("Berat : ");
lcd.setCursor(9, 1);
lcd.print(Kg);
lcd.setCursor(17, 1);
lcd.print("Kg");
delay(1000);
}
void tinggiBadan() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds (10);
digitalWrite(trigPin, LOW);
duration = pulseIn (echoPin, HIGH);
distance = (duration/2) / 29.1;
tinggi = 200-distance;
Serial.print("Tinggi badan anda ");
Serial.print(tinggi);
Serial.println("cm");
}
void beratBadan() {
unit = scale.get_units();
ons = unit / 11.9067997;
Kg = ons / 35.274;
Serial.print(Kg);
Serial.println(" Kg");
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
cell1:VCC
cell1:DT
cell1:SCK
cell1:GND
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL