# ALAT PENDETEKSI BANJIR
## Anggota :
1. Khalishah (1103213045)
2. Anita Firda Nuralifah (1103213117)
3. Topaz Tauhid (1103202020)
4. Dony Tri Nugroho (1103202041)
5. Nasywa Muzdalifa (1103202084)
6. Wildan Budi Anggara (1103200176)
## Daftar Isi
> [TOC]
> **[CLO 4]** Memiliki kemampuan untuk menganalisis sistem kendali loop tertutup pada kondisi transien dan steady state untuk melihat performansinya.
> **[CLO 5]** Memiliki kemampuan merancang sistem kendali motor DC.
<!--
> **Capaian CLO 4:**
> 1.Mahasiswa mampu menjelaskan konsep kendali umpan balik.
> 2.Mahasiswa mampu merancang sistem kendali PID.
> 3.Mahasiswa mampu mengevaluasi dan optimasi sistem kendali PID.
> **Capaian CLO 5:**
> 1.Mahasiswa mampu mendapatkan fungsi transfer sistem dari mekanisme transfer daya.
> 2.Mampu menjelaskan cara kerja dan karakteristik motor listrik, khususnya motor DC.
> 3.Mampu menganalisis hubungan antara torsi dan kecepatan motor.
> 4.Mahasiswa mampu mendemonstrasikan sistem mekanisme transfer daya sederhana menggunakan gear dan motor DC.
>
-->
## Pendahuluan
Banjir merupakan bencana alam yang sering terjadi dan menjadi salah satu fokus perhatian pemerintah, karena masih banyak menimbulkan kerugian dan korban jiwa. Banjir dapat terjadi akibat meluapnya air, karena itu diperlukan sebuah sistem untuk mendeteksi sedini mungkin terhadap perubahan level ketinggian air. Penelitian ini bertujuan untuk membangun suatu sistem dan untuk mengetahui kemungkinan datangnya banjir sebelum banjir terjadi menggunakan peringatan berupa alarm yang berbuunyi. Metode penelitian adalah sistem pendeteksi banjir peringatan yang dibangun dengan menggunakan Arduino sebagai mikrokontroler yang mengendalikan sensor ultrasonik untuk mendeteksi air, dalam mendeteksi air (kemungkinan banjir) serta ketinggiannya.
Pembuatan alat pendeteksi banjir ini memerlukan beberapa tahap pembuatan. Langkah pertama adalah mempersiapkan alat dan bahan yang akan digunakan, seperti Arduino uno water sensor dan buzzer. Langkah kedua adalah meletakkan komponen-komponen eletronika agar dapat memudahkan dan penyesuaian sistem dalam penggunaannya. Proses berikutnya adalah membuat rangkaian skematik elektronik alat pendeteksi banjir dimana pada mikrokontroler Arduino uno dihubungkan ke beberapa komponen lainnya seperti water sensor, servo, buzzer, indicator LED, resistor, dan beberapa komponen yang lain.
## Rancangan Sistem Kendali Loop Tertutup PID
PID adalah singkatan dari Proporsional, Integral, dan Derivatif, yang merupakan jenis kontrol umpan balik atau feedback yang banyak digunakan dalam otomatisasi dan sistem kontrol. PID digunakan untuk mengendalikan sistem dinamis dengan cara mengukur perbedaan antara nilai yang diinginkan dan nilai yang sebenarnya.<br>
Nilai P, I, dan D memiliki pengaruh masing-masing pada sebuah respon sistem. Dan pada sistem ball balancer kami, P akan menentukan seberapa cepat bola bergerak untuk mengimbangi perubahan posisi. Jika nilai P terlalu kecil, bola mungkin tidak merespons cukup cepat terhadap perubahan posisi, dan jika nilai P terlalu besar, sistem dapat menjadi tidak stabil atau berayun berlebihan. Nilai D akan mengimbangi kecepatan bola dan akan berusaha menghentikan bola tersebut tepat di set point. Dan nilai I akan berkontribusi untuk mengurangi kesalahan tetap dan menjaga bola tetap di posisi yang diinginkan seiring waktu.<br>
Jika kesalahan statis muncul, integral dapat membantu "mengakumulasi" respons untuk mengkompensasi kesalahan tersebut.<br>
Penelitian dimulai dengan menyusun model sistem bola penyeimbang menggunakan styrofoam dan meletakkan pin besi sebagai penyeimbang. Setelah alat hardware sudah terbentuk, kita membuat codingan arduino untuk mengimplementasikan PID ke arduino tersebut. Setelah hardware, software, dan embedded system sudah dibuat dan disatukan, kita sudah dapat melakukan pengetesan ball balancing.

## Hasil Pengukuran / Deskripsi Hardware

Sistem ini menggunakan motor servo untuk mengontrol posisi bola pingpong. Ketika set point ditetapkan, sensor ultrasonik akan memberitahu motor servo bahwa bola akan bergerak ke nilai set point tersebut, dan motor servo berfungsi sebagai aktuator untuk mempertahankan keadaan bola sampai nilai set point tersebut tercapai.

Arduino UNO R3 adalah papan mikrokontroler berbasis ATmega328P. Terdapat 14 pin input/output digital (6 di antaranya dapat digunakan sebagai output PWM), 6 input analog, resonator keramik 16MHz, koneksi USB, colokan listrik, header ICSP, dan tombol reset. Perangkat ini dilengkapi semua i/o yang diperlukan untuk mendukung mikrokontroler, cukup sambungkan ke komputer dengan kabel USB atau nyalakan dengan adaptor AC-DC atau baterai.

Sensor ultrasonik HC-SR04 merupakan sensor siap pakai yang berfungsi sebagai pengirim, penerima dan pengontrol gelombang ultrasonik. Sensor ini bisa digunakan untuk mengukur jarak benda dari 2 cm – 4 m dengan akurasi 3 mm. Sensor ultrasonik memiliki 4 pin, pin Vcc, Gnd, Trigger, dan Echo. Pin Vcc digunakan sebagai listrik positif dan Gnd sebagai ground. Pin Trigger digunakan untuk trigger keluarnya sinyal dari sensor dan pin Echo untuk menangkap sinyal pantul dari benda.

Motor servo adalah motor DC yang memiliki rangkaian kendali dan sistem closed feedback yang terintegrasi di dalamnya. Ketika motor servo berputar, posisi putaran sumbunya dikirim kembali ke rangkaian kendali yang ada di dalamnya.
Grafik Hasil Pengukuran Sebelum Dilakukan Tuning PID
Pada percobaan ini, kami mengatur value p, i, dan d sebesar 0. Sehingga sistem tidak merespon jarak bola terhadap set point.

## Tuning Kontrol / Analisa Kestabilan
Setelah melakukan tuning PID pada system ball balancer dengan mengatur nilai P menjadi 15, nilai I menjadi 0,02, dan nilai D menjadi 20. Berikut adalah hasil grafiknya :

## Mekanik Motor DC
Pada alat pendeteksi banjir ini menggunakan servo, teori fungsi transfer dapat diartikan sebagai hubungan antara input (misalnya, tingkat air) dan output (gerakan servo) dalam domain frekuensi. Pada dasarnya, alat ini dapat dianggap sebagai sistem kontrol yang merespons perubahan tingkat air dengan menggerakkan servo sesuai dengan kondisi deteksi banjir. Servo mendapatkan daya dari Arduino melalui kabel jumper. Servo umumnya membutuhkan tegangan dan arus tertentu untuk beroperasi, dan Arduino menyediakan daya ini melalui pin yang terhubung ke servo.
Servo pada umumnya memiliki beberapa jenis mekanisme penggerak, dan yang paling umum adalah mekanisme roda gigi (gear mechanism). Mekanisme ini memanfaatkan gigi yang terhubung untuk mengubah putaran menjadi gerakan sudut yang presisi. Ketika sinyal kontrol diberikan, servo merespons dengan menggerakkan gigi-gigi ini untuk menyesuaikan posisi rotor dan, oleh karena itu, posisi output.
## Analisis Transient Respon
Lakukan pengukuran pada sistem yang dibuat
analisis plot hasil pengukuran seperti gambar
gunakan serial plot pada arduino atau aplikasi [Serial Plot windows](https://serialplot.ozderya.net/downloads/serialplot-0.12.0-win32-setup.exe) atau serial plot [versi OS lain](https://hackaday.io/project/5334-serialplot-realtime-plotting-software)
serial plot memungkinkan melakukan plot realtime data hasil dari data serial
```
#include <Servo.h>
int lowerThreshold = 360;
int upperThreshold = 430;
// Sensor pins
#define sensorPower 7
#define sensorPin A0
Servo myservo;
// Value for storing water level
int val = 0;
int tones[] = {0, 277, 293, 311, 329, 349, 369, 392, 415, 440, 466, 493, 523 ,554};
// Declare pins to which LEDs are connected
int redLED = 2;
int yellowLED = 3;
int greenLED = 4;
int Buzzer = 5;
void setup() {
Serial.begin(9600);
pinMode(sensorPower, OUTPUT);
digitalWrite(sensorPower, LOW);
// Set LED pins as an OUTPUT
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode (Buzzer, OUTPUT);
// Initially turn off all LEDs
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
digitalWrite (Buzzer, LOW);
myservo.attach(6);
}
void loop() {
int level = readSensor();
if (level == 0) {
Serial.println("Water Level: Empty");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
myservo.write(0);
noTone(Buzzer);
}
else if (level > 0 && level <= lowerThreshold) {
Serial.println("Water Level: Low");
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
noTone(Buzzer);
myservo.write(60);
}
else if (level > lowerThreshold && level <= upperThreshold) {
Serial.println("Water Level: Medium");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(greenLED, LOW);
tone(Buzzer, tones[4]);
myservo.write(120);
}
else if (level > upperThreshold) {
Serial.println("Water Level: High");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH);
tone(Buzzer, tones[10]);
myservo.write(180);
}
delay(500);
}
//This is a function used to get the reading
int readSensor() {
digitalWrite(sensorPower, HIGH);
delay(10);
val = analogRead(sensorPin);
digitalWrite(sensorPower, LOW);
return val;
}
```
Hasil Pengukuran

<!--
Panduan Analisis (CLO4)
1 Plot respon transient Kondisi nilai KP, KI, dan KD yang seperti apa yang membuat sistem paling cepat stabil
2 Plot respon transient Kondisi nilai KP, KI, dan KD yang seperti apa yang membuat sistem memiliki error paling besar
3 Bandingkan set point dengan output hitung berapa besar steady state error (SSE)
4 Mana yang paling rentan menyebabkan sistem berosilasi?
5 (Catatan: dikatakan berosilasi jika berulang kali bolak-balik melewati set point untuk mencapai set point yang diinginkan sampai berada di titik stabil.
6 Bagaimana respons transien sistem tersebut dari masing-masing kategori kecepatan yang diberikan? Hitung dengan menggunakan stopwatch dan berikan penjelasan dari masing-masing waktu berikut ini:
1.Delay time (Td)
2.Rise time (Tr)
3.Peak time (Tp)
4.Settling time (Ts)
-->
Pengukuran ulang setelah dilakukan tuning PID
Hasil Pengukuran

## Analisis Mekanika
<!--
Panduan Analisis Mekanika (CLO 5)
-->
## Pengukuran Mekanik Gear
Analisis ukuran gear terhadap transfer daya (lihat komentar untuk panduan Analisis)
1.Ukur pitch diameter (D) dan circular pitch (Pc) setiap gear yang digunakan dengan menggunakan penggaris.
Pitch diameter dan circular pitch pada gear servo SG90 tidak dapat diukur dengan manual menggunakan penggaris karena hasil ukuran yang di dapat tidak akan spesifik.
2.Hitung jumlah gigi dari gear tersebut secara manual, kemudian buktikan dengan menggunakan rumus.
pada umumnya jumlah gigi dari gear pada servo sg90, yaitu 24, dengan pembuktian rumus sebagai berikut:

3.Hitung rasio gear dari dua ukuran berbeda. Jelaskan cara perhitungannya!
GR : jumlah gigi servo SG90/jumlah gigi servo MG996
GR : 24/40 = 0.6
Hubungkan kedua gear tersebut dengan kondisi:
1.Posisikan gear yang kecil sebagai driver gear dan gear yang besar sebagai driven gear. Putar driver gear sebanyak 360. Berapa derajat driven gear berputar?
Ketika SG90 diputar sebanyak 360 derajat:
GR : jumlah gigi yg diputar/jumlah gigi yg digerakkan
GR : 24/40 = 0.6
Putaran MG996 : 360 derajat x GR
Putaran MG996 : 360 derajat x 0.6
Putaran MG996 : 216 derajat
2.Posisikan gear yang besar sebagai driver gear dan gear yang kecil sebagai driven gear. Putar driver gear sebanyak 360. Berapa derajat driven gear berputar?
Ketika MG996 diputar sebanyak 360 derajat:
GR : jumlah gigi yg diputar/jumlah gigi yg digerakkan
GR : 40/24 = 1.7
Putaran SG90 : 360 derajat x GR
Putaran SG90 : 360 derajat x 1.7
Putaran SG90 : 212 derajat
3.Menurut kelompok Anda, lebih baik gear yang kecil atau besar yang dijadikan sebagai driver gear? Mengapa?
gear yang besar lebih baik dijadikan sebagai driver gear karena, jika alat pendeteksi banjir akan menghadapi beban yang memerlukan torsi besar, menggunakan gear yang besar sebagai driver gear dapat lebih sesuai, lalu gear yang lebih besar cenderung memiliki efisiensi yang lebih baik karena mengurangi kerugian gesekan dan juga gear yang besar umumnya lebih tahan terhadap beban berat dan memiliki umur pakai yang lebih lama.
## Analisis Kecepatan Motor terhadap Beban
Analisis parameter-parameter yang mempengaruhi kecepatan motor(lihat komentar untuk panduan Analisis)
Motor masih dapat berputar jika beban yang ditambahkan tidak melebihi kemampuan motor untuk mengatasinya. Saat beban ditambahkan, torsi yang diperlukan oleh motor untuk memutar beban bertambah. Seiring bertambahnya beban, kecepatan motor dapat menurun karena torsi yang dihasilkan tidak mampu mengatasi torsi yang dibutuhkan oleh beban. Jika menggunakan gear (roda gigi), kita dapat mentransmisikan torsi dari motor ke beban dengan cara yang lebih efisien. Gear akan memberikan keuntungan mekanis yang dapat meningkatkan torsi tetapi dengan mengurangi kecepatan. Mengatur komposisi gear melibatkan pemilihan ukuran gigi pada roda gigi yang terhubung. Jika beban terlalu berat untuk motor, gigi dengan rasio torsi yang lebih tinggi (misalnya, gigi besar pada motor dan gigi kecil pada beban) dapat digunakan untuk meningkatkan torsi sambil mengurangi kecepatan. Beban dapat berputar setelah ditambahkan rangkaian gear karena torsi yang diperlukan oleh beban dapat diatasi oleh torsi yang diberikan oleh motor melalui gigi yang tepat.
Kecepatan motor dapat menurun seiring penambahan beban, terutama jika tidak ada penyesuaian untuk mempertahankan kecepatan. Saat kecepatan motor menurun, CEMF juga dapat mengalami penurunan karena CEMF berkaitan dengan kecepatan rotor. Penurunan CEMF dapat meningkatkan arus motor. Seiring penambahan beban, arus motor dapat meningkat karena motor perlu memberikan torsi tambahan untuk mengatasi beban tersebut. Torsi motor perlu meningkat untuk mengatasi peningkatan beban. Jika beban terlalu berat, motor mungkin tidak dapat memberikan torsi yang cukup, dan penambahan gear dapat membantu meningkatkan torsi yang diperlukan.
## Hasil dan Saran
Hasil
Setelah dilakukan uji coba dapat dilihat bahwa ketika alat diuji coba saat tidak digunakan lampu merah yang menyala, servo diposisi sekitar 60 derajat kemudian ketika air menyentuh sekitar 1/3 dari water sensor lampu biru menyala dan posisi servo di 120 derajat. Kemudian ketika air menyentuh sekitar 2/3 dari water sensor lampu kuning akan menyala dan servo diposisi sekitar 180 derajat.
Saran
Untuk penelitian berikutnya agar dapat menggunakan lampu indikator yang lebih banyak sehingga dapat dilihat lebih detail perubahannya pergerakan servo ketika diberi ketinggian air yang berbeda. Pemeliharaan rutin dan pemantauan terus-menerus diperlukan untuk memastikan sistem tetap berfungsi dengan baik.
## Referensi
Suradi Suradi, Ahmad Hanafie, Sahir Leko (2019). Rancang Bangun Sistem Alam Pendeteksi Banjir Berbasis Arduino Uno.
https://www.neliti.com/publications/326083/rancang-bangun-sistem-alam-pendeteksi-banjir-berbasis-arduino-uno
Horetech ID (2021). Alat Pendeteksi Banjir ll Arduino Project ll cuma 5 MENIT!
https://youtu.be/NANM_gVt6T4?si=ziflMim-vgZYKf1w
Ashar Arifin (2021). 8 Contoh Sistem Open Loop dan Close Loop.
https://www.carailmu.com/2021/10/contoh-sistem-open-loop-close-loop.html
Imelda Zahra Tungga Dewi (2020). Kontrol PID (Proportional Integral Derivative Controller).
https://imeldaazahraa.medium.com/kontrol-pid-proportional-integral-derivative-controller-c173086724af
Aldy Razor(2020). Breadboard Arduino: Pengertian, Prinsip Kerja, dan Jenisnya.
https://www.aldyrazor.com/2020/05/breadboard-arduino.html