#include <Servo.h>
#include <HX711.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi objek HX711
HX711 scale;
// Konstanta-konstanta kalibrasi load cell
const float actualWeight1 = 100.0; // Beban terukur pertama dalam gram
const float actualWeight2 = 200.0; // Beban terukur kedua dalam gram
const float actualWeight3 = 300.0; // Beban terukur ketiga dalam gram
// Konstanta-konstanta ultrasonik dan LED
const int trigPin = 9; // Pin trigger ultrasonik
const int echoPin = 10; // Pin echo ultrasonik
const int led1Pin = 2; // Pin LED pertama
const int led2Pin = 3; // Pin LED kedua
const int led3Pin = 4; // Pin LED ketiga
Servo myServo;
// Inisialisasi objek LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD, 16 kolom, 2 baris
void setup() {
Serial.begin(9600);
// Setup load cell
scale.begin(A2, A3); // Hubungkan pin DT ke D2, dan pin SCK ke D3
// Setup ultrasonik, LED, dan servo
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(led3Pin, OUTPUT);
myServo.attach(11); // Hubungkan servo ke pin 11
// Setup LCD
lcd.begin(16, 2);
lcd.print("Load Cell & Ultrasonic");
lcd.setCursor(0, 1);
lcd.print("Monitoring");
delay(2000);
lcd.clear();
}
void loop() {
// Baca output load cell
float reading = scale.read();
// Tampilkan output pada Serial Monitor
Serial.print("Reading: ");
Serial.print(reading);
Serial.println(" grams");
// Lakukan kalibrasi
if (reading < actualWeight1) {
// Kalibrasi menggunakan persamaan garis
float calibratedReading = map(reading, 0, actualWeight1, 0, actualWeight1);
Serial.print("Calibrated Reading: ");
Serial.print(calibratedReading);
Serial.println(" grams");
// Tampilkan informasi di LCD
lcd.clear();
lcd.print("Calibrated Reading:");
lcd.setCursor(0, 1);
lcd.print(calibratedReading);
lcd.print(" grams");
} else if (reading >= actualWeight1 && reading < actualWeight2) {
// Kalibrasi menggunakan persamaan garis
float calibratedReading = map(reading, actualWeight1, actualWeight2, actualWeight1, actualWeight2);
Serial.print("Calibrated Reading: ");
Serial.print(calibratedReading);
Serial.println(" grams");
// Tampilkan informasi di LCD
lcd.clear();
lcd.print("Calibrated Reading:");
lcd.setCursor(0, 1);
lcd.print(calibratedReading);
lcd.print(" grams");
} else if (reading >= actualWeight2 && reading < actualWeight3) {
// Kalibrasi menggunakan persamaan garis
float calibratedReading = map(reading, actualWeight2, actualWeight3, actualWeight2, actualWeight3);
Serial.print("Calibrated Reading: ");
Serial.print(calibratedReading);
Serial.println(" grams");
// Tampilkan informasi di LCD
lcd.clear();
lcd.print("Calibrated Reading:");
lcd.setCursor(0, 1);
lcd.print(calibratedReading);
lcd.print(" grams");
} else {
// Kalibrasi menggunakan persamaan garis
float calibratedReading = map(reading, actualWeight3, 1023, actualWeight3, actualWeight3);
Serial.print("Calibrated Reading: ");
Serial.print(calibratedReading);
Serial.println(" grams");
// Tampilkan informasi di LCD
lcd.clear();
lcd.print("Calibrated Reading:");
lcd.setCursor(0, 1);
lcd.print(calibratedReading);
lcd.print(" grams");
}
// Baca jarak menggunakan sensor ultrasonik
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;
// Tampilkan jarak pada Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);
// Kendalikan LED dan servo berdasarkan jarak
if (distance < 10) {
digitalWrite(led1Pin, HIGH); // Nyalakan LED pertama
digitalWrite(led2Pin, LOW); // Matikan LED kedua
digitalWrite(led3Pin, LOW); // Matikan LED ketiga
myServo.write(90); // Posisi tengah servo jika objek terdeteksi
} else if (distance >= 10 && distance < 20) {
digitalWrite(led1Pin, LOW); // Matikan LED pertama
digitalWrite(led2Pin, HIGH); // Nyalakan LED kedua
digitalWrite(led3Pin, LOW); // Matikan LED ketiga
myServo.write(0); // Posisi awal servo jika tidak ada objek
} else {
digitalWrite(led1Pin, LOW); // Matikan
}
delay(1000);
}
}
}