#include <Servo.h> // Include Servo library
#include <LiquidCrystal.h>
#include "HX711.h"
// Definisi pin Load Cell dan HX711
#define LOADCELL_DOUT_PIN 3
#define LOADCELL_SCK_PIN 2
// Definisi pin Sensor Ultrasonik dan LED
#define TRIG_PIN 4
#define ECHO_PIN 5
#define LED_PIN 6
#define SERVO_PIN 7
// Ambang batas
const float weightThreshold = 1.0; // Berat minimum (kg) untuk mengaktifkan eskalator
const float distanceThreshold = 100.0; // Jarak maksimum (cm) untuk mendeteksi objek
// Faktor kalibrasi load cell (sesuaikan sesuai kebutuhan Anda)
#define calibration_factor 2000.0 // Ubah faktor kalibrasi sesuai dengan kebutuhan Anda
// Inisialisasi HX711 (Load Cell)
HX711 scale;
// Inisialisasi LCD
const int rs = 13, en = 11, d4 = 10, d5 = 9, d6 = 8, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // Inisialisasi LCD
// Inisialisasi Servo
Servo servo;
void setup() {
// Inisialisasi Serial Monitor
Serial.begin(9600);
// Inisialisasi Load Cell
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.set_scale(calibration_factor); // Kalibrasi load cell
scale.tare(); // Set nilai awal ke nol
// Inisialisasi Ultrasonik
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Inisialisasi LED
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW); // Matikan LED pada awal
// Inisialisasi Servo
servo.attach(SERVO_PIN);
// Inisialisasi LCD
lcd.begin(16, 2); // Inisialisasi LCD 16x2
lcd.print("Hello Master!");
lcd.setCursor(0, 1);
lcd.print("Waiting...");
}
void loop() {
// Baca berat dari Load Cell
float weight = scale.get_units();
if (weight < 0.1) {
weight = 0.1; // Set nilai minimal untuk berat
}
Serial.print("Berat: ");
Serial.print(weight);
Serial.println(" kg");
// Baca jarak dari sensor Ultrasonik
float distance = readUltrasonicDistance();
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
// Logika pengaktifan eskalator (LED) berdasarkan berat dan jarak
if (weight > weightThreshold && distance < distanceThreshold) {
digitalWrite(LED_PIN, HIGH); // Nyalakan LED (simulasi eskalator aktif)
Serial.println("Eskalator Aktif");
// Aktifkan servo untuk memberi makan
servo.write(180); // Servo bergerak untuk memberikan makanan
delay(1000); // Tunggu sebentar
servo.write(0); // Kembalikan servo ke posisi semula
} else {
digitalWrite(LED_PIN, LOW); // Matikan LED (simulasi eskalator mati)
Serial.println("Eskalator Mati");
}
// Tampilkan informasi di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Berat: ");
lcd.print(weight);
lcd.print(" kg");
lcd.setCursor(0, 1);
lcd.print("Jarak: ");
lcd.print(distance);
lcd.print(" cm");
// Delay untuk mencegah pembacaan terlalu cepat
delay(2000); // Delay 2 detik
}
float readUltrasonicDistance() {
// Kirim pulsa ultrasonik
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Hitung durasi pulsa echo
long duration = pulseIn(ECHO_PIN, HIGH);
// Konversi durasi ke jarak (cm)
return duration * 0.034 / 2;
}