// ESP32 dengan sensor HX711 dan LCD 16x2
#include <Wire.h> // Mengimpor library untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // Mengimpor library untuk LCD I2C
// Mengimpor library HX711
#include "HX711.h"
// Inisialisasi LCD (alamat I2C 0x27, 16 kolom dan 2 baris)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Inisialisasi objek HX711
// Pengkabelan sirkuit HX711
const int LOADCELL_DOUT_PIN = 14; // Pin data dari sensor beban
const int LOADCELL_SCK_PIN = 12; // Pin clock dari sensor beban
HX711 scale; // Membuat objek HX711
float calibration_factor = -1365; // Faktor kalibrasi untuk sensor beban
// Inisialisasi pin untuk buzzer, relay, dan LED
const int BUZZER_PIN = 18; // Pin untuk buzzer
const int RELAY_PIN = 5; // Pin untuk relay
const int LED_PIN = 19; // Pin untuk LED
void setup() {
Serial.begin(115200); // Memulai komunikasi serial dengan baud rate 115200
// Inisialisasi LCD
lcd.init(); // Menginisialisasi LCD
lcd.backlight(); // Menghidupkan lampu latar LCD
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); // Memulai objek HX711 dengan pin yang ditentukan
scale.set_scale(); // Mengatur skala (faktor kalibrasi)
scale.tare(); // Mengatur skala ke 0
long zero_factor = scale.read_average(); // Mendapatkan pembacaan dasar
delay(1000); // Menunggu selama 1 detik
// Siap digunakan
Serial.println("HX711 READY!!!"); // Menampilkan pesan bahwa HX711 siap digunakan
lcd.clear(); // Menghapus tampilan LCD
lcd.setCursor(0, 0); // Mengatur posisi kursor di baris 0 kolom 0
lcd.print("HX711 READY!!!"); // Menampilkan pesan "HX711 READY!!!"
delay(1000); // Menunggu selama 1 detik
// Inisialisasi pin untuk buzzer, relay, dan LED
pinMode(BUZZER_PIN, OUTPUT); // Mengatur pin buzzer sebagai output
pinMode(RELAY_PIN, OUTPUT); // Mengatur pin relay sebagai output
pinMode(LED_PIN, OUTPUT); // Mengatur pin LED sebagai output
}
void loop() {
unsigned int ADC = scale.get_units(); // Mendapatkan nilai ADC dari sensor beban
float weight = float(ADC) / 2100.00 * 5.00; // Menghitung berat berdasarkan nilai ADC
Serial.print("ADC = "); // Menampilkan nilai ADC di serial monitor
Serial.println(ADC);
Serial.print("Weight = "); // Menampilkan berat di serial monitor
Serial.print(weight);
Serial.println(" kg"); // Menampilkan satuan "kg"
Serial.println("-------------");
// MENAMPILKAN BERAT DI LCD
lcd.clear(); // Menghapus tampilan LCD
lcd.setCursor(0, 0); // Mengatur posisi kursor di baris 0 kolom 0
lcd.print("WEIGHT:"); // Menampilkan label "WEIGHT:"
lcd.setCursor(0, 1); // Mengatur posisi kursor di baris 1 kolom 0
lcd.print(weight, 2); // Menampilkan berat dengan 2 angka desimal
lcd.print(" KG"); // Menampilkan satuan "KG"
// Logika untuk mengendalikan buzzer, relay, dan LED
if (weight > 3.0) { // Misalnya, jika berat lebih dari 3 kg
digitalWrite(BUZZER_PIN, HIGH); // Menghidupkan buzzer
digitalWrite(RELAY_PIN, HIGH); // Menghidupkan relay
digitalWrite(LED_PIN, HIGH); // Menghidupkan LED
} else {
// Jika berat kurang dari atau sama dengan 3 kg, pastikan semua output dimatikan
digitalWrite(BUZZER_PIN, LOW); // Mematikan buzzer
digitalWrite(RELAY_PIN, LOW); // Mematikan relay
digitalWrite(LED_PIN, LOW); // Mematikan LED
}
delay(2000); // Menunggu selama 2 detik sebelum mengulangi loop
}