// Nama : Muhammad Hamzamir
// Nim : 2204005010001
// otomasi pompa menggunakan sensor ultrasonik dengan arduino dan
// penjelasan dari otomasi tersebut dan penjelasan program
// Jika jarak kurang dari 10 cm, servo/Pompa akan aktif dan berputar ke 180 derajat dan
// relay akan diaktifkan untuk menghidupkan pompa. Jika jarak lebih dari
// 10 cm, servo akan kembali ke 0 derajat dan relay dimatikan untuk
// mematikan pompa.
#include <Servo.h> // Mengimpor library Servo untuk mengendalikan servo motor
Servo myservo; // Membuat objek Servo bernama myservo
int trigPin = 2; // Pin Trig sensor ultrasonik
int echoPin = 3; // Pin Echo sensor ultrasonik
int relayPin = 4; // Pin relay yang mengontrol pompa
long duration; // Variabel untuk menyimpan durasi getaran dari Echo sensor
int distance; // Variabel untuk menyimpan jarak yang diukur oleh sensor ultrasonik
int servoAngle = 0; // Variabel untuk mengendalikan sudut servo
void setup() {
myservo.attach(5); // Menghubungkan servo dengan pin 5 pada Arduino
pinMode(trigPin, OUTPUT); // Mengatur pin Trig sebagai OUTPUT
pinMode(echoPin, INPUT); // Mengatur pin Echo sebagai INPUT
pinMode(relayPin, OUTPUT); // Mengatur pin relay sebagai OUTPUT
digitalWrite(relayPin, LOW); // Mematikan relay (pompa dimatikan) pada awalnya
Serial.begin(10000); // Memulai komunikasi serial dengan kecepatan 10000 bps
}
void loop() {
digitalWrite(trigPin, LOW); // Mengirim sinyal ultrasonik yang rendah selama 2 mikrodetik
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // Mengirim sinyal ultrasonik yang tinggi selama 200 mikrodetik
delayMicroseconds(200);
digitalWrite(trigPin, LOW); // Menghentikan pengiriman sinyal
duration = pulseIn(echoPin, HIGH); // Mengukur durasi getaran dari Echo sensor (waktu pantulan balik)
distance = duration * 0.034 / 2; // Menghitung jarak berdasarkan waktu pantulan
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
// Mengatur servo berdasarkan jarak
if (distance < 10) { // Jika jarak kurang dari 10 cm
servoAngle = 180; // Putar servo ke 180 derajat
digitalWrite(relayPin, HIGH); // Aktifkan relay (hidupkan pompa)
}
else {
servoAngle = 0; // Putar servo ke 0 derajat
digitalWrite(relayPin, LOW); // Matikan relay (matikan pompa)
}
myservo.write(servoAngle); // Menggerakkan servo sesuai sudut yang telah diatur
delay(200); // Tunggu 200 milidetik sebelum pengukuran berikutnya
}