#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "HX711.h"
// Pin untuk HX711 (Load Cell)
#define DOUT 3 // Pin DT (Data)
#define CLK 2 // Pin SCK (Clock)
// Pin untuk LED, Buzzer, dan Pushbutton
#define LED_PIN 8
#define BUZZER_PIN 6
#define BUTTON_PIN 4
// Inisialisasi objek HX711 untuk load cell
HX711 scale;
// Inisialisasi LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat LCD I2C 0x27 (sesuaikan jika berbeda)
float Force_N = 0.0; // Variabel untuk nilai gaya dalam Newton
float previousWeight = 0.0; // Untuk menyimpan nilai berat sebelumnya
bool alarmActive = false; // Status alarm
// Konstanta kalibrasi (contoh) - ganti dengan nilai yang sesuai dengan sensor Anda
float a = 0.01; // Slope, tergantung pada sensor (contoh)
float b = 0; // Offset (contoh)
void setup() {
Serial.begin(9600); // Mulai komunikasi serial untuk debugging
// Inisialisasi HX711
scale.begin(DOUT, CLK); // Tentukan pin untuk DT dan SCK
// Kalibrasi load cell jika diperlukan
scale.set_scale(2280.f); // Kalibrasi dengan nilai scale yang sesuai (dapat diubah)
scale.tare(); // Set nilai awal ke 0 (reset pengukuran)
// Inisialisasi LCD
lcd.begin(16, 2); // Tentukan ukuran LCD
lcd.clear(); // Bersihkan layar LCD
lcd.setCursor(0, 0); // Posisikan kursor di baris pertama
lcd.print("Load Cell"); // Tampilkan "Load Cell"
lcd.setCursor(0, 1); // Posisikan kursor di baris kedua
lcd.print("Sensor Aktif");
// Inisialisasi LED, Buzzer, dan Pushbutton
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // Pushbutton dengan pull-up internal
digitalWrite(LED_PIN, LOW); // Matikan LED pada awalnya
noTone(BUZZER_PIN); // Matikan Buzzer pada awalnya
}
void loop() {
// Membaca nilai gaya dari load cell
Force_N = scale.get_units(10); // Ambil rata-rata pembacaan dari 10 sampel
// Debugging: Tampilkan hasil pembacaan di Serial Monitor
Serial.print("Weight (N): ");
Serial.println(Force_N); // Menampilkan hasil pembacaan dalam Serial Monitor
// Menampilkan nilai pembacaan di LCD
lcd.setCursor(0, 0); // Set posisi cursor pada baris pertama
lcd.print("Weight: "); // Tampilkan teks "Weight: "
lcd.setCursor(7, 1); // Set posisi cursor di baris kedua
lcd.print(Force_N, 2); // Tampilkan hasil pembacaan gaya (dalam Newton) dengan 2 angka desimal
// Deteksi pengurangan berat (barang hilang)
if (Force_N < previousWeight - 0.5) { // Jika ada pengurangan lebih dari 0.5 N
// Barang hilang (pengurangan berat terdeteksi)
alarmActive = true; // Aktifkan alarm
}
// Jika tombol ditekan (untuk menonaktifkan alarm)
if (digitalRead(BUTTON_PIN) == LOW) { // Pushbutton ditekan
alarmActive = false; // Matikan alarm
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarm Dimatikan");
delay(2000); // Tunda 2 detik untuk memberi waktu tampilan
}
// Menyalakan alarm jika ada pengurangan berat
if (alarmActive) {
digitalWrite(LED_PIN, HIGH); // Nyalakan LED
tone(BUZZER_PIN, 1000); // Nyalakan Buzzer dengan frekuensi 1000 Hz
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Barang Hilang!"); // Tampilkan pesan "Barang Hilang" di LCD
} else {
digitalWrite(LED_PIN, LOW); // Matikan LED
noTone(BUZZER_PIN); // Matikan Buzzer
}
// Menyimpan nilai berat sebelumnya untuk deteksi perubahan
previousWeight = Force_N;
delay(500); // Tunggu 500ms sebelum pembacaan berikutnya
}