#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "HX711.h"
// Definisikan pin HX711
#define DOUT 4
#define CLK 5
// Inisialisasi HX711 dan LCD
HX711 scale;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Ganti alamat ini jika perlu
// Faktor kalibrasi (ini harus disesuaikan dengan timbangan Anda)
float calibration_factor = 1100.0; // Anda mungkin perlu menyesuaikan nilai ini
// Batas berat untuk peringatan
const float warning_threshold_kg = 40.0; // Berat dalam kilogram untuk peringatan
const float max_weight_kg = 50.0; // Berat maksimum yang dapat ditangani load cell
void setup() {
// Inisialisasi serial monitor
Serial.begin(115200);
// Inisialisasi HX711
scale.begin(DOUT, CLK);
// Inisialisasi LCD
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Aktifkan backlight
lcd.clear(); // Bersihkan layar LCD
lcd.print("Kalibrasi...");
// Tare scale to reset the offset
scale.tare();
// Kalibrasi load cell
lcd.clear();
lcd.print("Kalibrasi 1kg...");
delay(5000); // Waktu untuk menempatkan beban kalibrasi (misalnya 1 kg)
// Ambil rata-rata dari 15 pembacaan untuk mendapatkan nilai kalibrasi yang lebih stabil
long sumReading = 0;
int samples = 15;
for (int i = 0; i < samples; i++) {
sumReading += scale.get_units(10);
delay(100);
}
long reading = sumReading / samples;
calibration_factor = reading / 1000.0; // Hitung faktor kalibrasi berdasarkan 1 kg
lcd.clear();
lcd.print("Faktor kalibrasi:");
lcd.setCursor(0, 1);
lcd.print(calibration_factor, 2);
delay(3000);
// Terapkan faktor kalibrasi
scale.set_scale(calibration_factor);
lcd.clear();
lcd.print("Siap mengukur!");
delay(2000);
lcd.clear();
}
void loop() {
// Ambil nilai berat dari load cell dalam kilogram
float weight_kg = scale.get_units(10); // Membaca rata-rata dari 10 pembacaan
// Konversi ke gram
float weight_g = weight_kg * 1000.0;
// Cetak hasil ke Serial Monitor
Serial.print("Berat: ");
Serial.print(weight_g, 2);
Serial.println(" g");
// Tampilkan hasil di LCD dalam gram
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Berat: ");
lcd.print(weight_g, 2); // Cetak dengan 2 angka desimal
lcd.print(" g");
// Cek apakah berat mendekati batas yang ditentukan
if (weight_kg >= warning_threshold_kg && weight_kg < max_weight_kg) {
Serial.println("Peringatan: Mendekati 50 Kg");
lcd.setCursor(0, 1);
lcd.print("Mendekati 50 Kg");
} else if (weight_kg >= max_weight_kg) {
Serial.println("Peringatan: Berat maksimum tercapai!");
lcd.setCursor(0, 1);
lcd.print("Berat maksimum!");
}
delay(1000); // Delay 1 detik sebelum pembacaan berikutnya
}