#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <AccelStepper.h>
#include <NewPing.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C LCD 0x27, dengan 20 kolom dan 4 baris
RTC_DS1307 rtc;
AccelStepper stepper(1, 8, 9); // Inisialisasi stepper motor pada pin 8 (STEP) dan 9 (DIR)
NewPing sonar(2, 3); // Inisialisasi ultrasonic sensor pada pin 2 (TRIG) dan 3 (ECHO)
const int buzzerPin = 11;
const int pirPin = 7;
const int potPin = A0;
float speed = 0;
float volume = 0;
bool alarm = false;
void setup() {
lcd.begin(20, 4); // Inisialisasi LCD dengan 20 kolom dan 4 baris
lcd.backlight();
stepper.setMaxSpeed(1000); // Set maksimum kecepatan stepper motor (contoh)
pinMode(buzzerPin, OUTPUT);
pinMode(pirPin, INPUT);
Serial.begin(9600);
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (!rtc.isrunning()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime now = rtc.now();
int potValue = analogRead(potPin);
speed = potValue / 1023.0 * 100; // Kecepatan dalam persen
stepper.setSpeed(speed); // Set kecepatan stepper motor berdasarkan nilai potensiometer
unsigned int distance = sonar.ping_cm(); // Mengukur jarak dari ultrasonic sensor dalam cm
volume = distance / 10.0; // Konversi jarak menjadi volume (contoh)
if (digitalRead(pirPin) == HIGH) {
alarm = true;
digitalWrite(buzzerPin, HIGH);
} else {
alarm = false;
digitalWrite(buzzerPin, LOW);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Speed: ");
lcd.print(speed);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Volume: ");
lcd.print(volume);
lcd.print(" ml");
lcd.setCursor(0, 2);
lcd.print("Time: ");
lcd.print(now.hour());
lcd.print(":");
lcd.print(now.minute());
lcd.print(":");
lcd.print(now.second());
lcd.setCursor(0, 3);
if (alarm) {
lcd.print("ALARM!!!");
} else {
lcd.print("System OK");
}
delay(500);
}