SISTEM
PERINGATAN DAN PENANGANAN DINI BANJIR DI PEMUKIMAN
Banjir merupakan bencana yang paling sering terjadi di Indonesia, terutama saat musim hujan. Tingginya intensitas curah hujan yang dipengaruhi oleh perubahan iklim, ditambah dengan kerusakan lingkungan seperti penggundulan hutan dan berkurangnya daerah resapan air, memperbesar risiko banjir. Selain itu, pembangunan kawasan permukiman yang tidak memperhatikan tata ruang dan sistem drainase yang memadai juga turut memperparah dampak banjir.
Permukiman padat penduduk menjadi wilayah yang paling rentan terdampak. Banjir dapat merusak rumah, fasilitas umum, dan infrastruktur penting lainnya. Gangguan terhadap layanan dasar seperti air bersih, transportasi, hingga potensi korban jiwa dan kerugian ekonomi sering kali menjadi konsekuensi dari keterlambatan dalam penanganan.
Sayangnya, sistem peringatan dini banjir yang ada masih belum optimal. Banyak di antaranya yang belum mampu memberikan informasi secara akurat dan cepat, serta belum menjangkau masyarakat secara menyeluruh. Padahal, waktu sangat berharga dalam situasi darurat seperti banjir untuk melakukan evakuasi dan mitigasi secara efisien.
Untuk menjawab tantangan tersebut, dikembangkanlah Sistem Peringatan dan Penanganan Dini Banjir di Pemukiman berbasis mikrokontroler yang dilengkapi sensor hujan, sensor ultrasonik, dan sensor sentuh. Sistem ini menampilkan informasi melalui LCD dan indikator LED berwarna sebagai tanda kondisi banjir (aman, siaga, bahaya). Diharapkan sistem ini dapat membantu masyarakat dan pihak terkait untuk merespons dengan cepat, mengurangi dampak bencana, dan mempercepat proses pemulihan.
- Mengetahui cara membuat alat “Peringatan Dan penanganan Dini banjir di pemukiman” otomatis dengan menggunakan mikrokontroler Raspberry pi pico dan STM32
- Memenuhi syarat untuk modul 4 Praktikum Mikroprosesor &
Mikrokontroler.
- Mendeteksi adanya potensi banjir di
pemukiman warga.
- Memberikan peringatan dini kepada warga.
- Meningkatkan kesadaran dan kesiapsiagaan masyarakat
·
Rapsberryy Pi Pico
·
STM32
·
Breadboard
·
LED
·
LCD I2C 2x16
·
Sensor Ultrasonik
·
Rain sensor
·
Touch sensor
·
Resistor
·
Buzzer
·
Jumper
·
ST-Link
1. PWM (Pulse Width Modulation)
PWM (Pulse
Width Modulation) adalah salah satu teknik modulasi dengan mengubah lebar
pulsa (Duty Cycle) dengan nilai
amplitudo dan frekuensi yang tetap. Satu siklus pulsa merupakan kondisi high
kemudian berada di zona transisi ke kondisi low. Lebar pulsa PWM berbanding
lurus dengan amplitudo sinyal asli yang belum termodulasi. Duty Cycle adalah perbandingan antara waktu ON (lebar
pulsa High) dengan perioda. Duty Cycle biasanya dinyatakan dalam bentuk persen (%).
Gambar 1. Duty Cycle
•
Duty
Cycle = tON /
ttotal
•
tON = Waktu ON atau Waktu
dimana tegangan keluaran
berada pada posisi tinggi (high atau 1)
•
tOFF
= Waktu OFF atau Waktu dimana tegangan keluaran berada pada posisi rendah (low atau 0)
•
ttotal
= Waktu satu siklus atau penjumlahan antara tON dengan tOFF atau disebut juga
dengan “periode satu gelombang”
2. ADC (Analog to Digital Converter)
ADC atau Analog to Digital Converter merupakan salah satu
perangkat elektronika yang digunakan sebagai penghubung dalam
pemrosesan sinyal analog oleh sistem digital. Fungsi utama
dari fitur ini adalah mengubah sinyal masukan yang masih dalam bentuk
sinyal analog menjadi
sinyal digital dengan
bentuk kode- kode digital.
Ada 2 faktor yang perlu diperhatikan pada proses kerja ADC yaitu kecepatan
sampling dan resolusi.
Kecepatan sampling
menyatakan seberapa sering perangkat mampu mengkonversi sinyal analog ke dalam
bentuk sinyal digital dalam selang waktu yang tertentu. Biasa dinyatakan dalam
sample per second (SPS). Sementara Resolusi
menyatakan tingkat ketelitian yang dimilliki.
3.Mikrokontroler
Mikrokontroler adalah salah satu dari bagian dasar dari suatu sistem komputer. Meskipun mempunyai bentuk yang jauh lebih kecil dari suatu komputer pribadi dan komputer mainframe, mikrokontroler dibangun dari elemen-elemen dasar yang sama. Secara sederhana, komputer akan menghasilkan output yang spesifik berdasarkan input yang diterima dan program yang dikerjakan. Seperti umumnya komputer, mikrokontroler sebagai alat yang mengerjakan perintah-perintah yang diberikan kepadanya
a.) Raspberry
Pi Pico
Raspberry Pi Pico adalah mikrokontroler berbiaya
rendah dan berkinerja tinggi yang dikembangkan oleh Raspberry Pi Foundation. Raspberry
Pi Pico bekerja sebagai otak dari sebuah alat elektronik. Saat diberi
daya, Pico mulai menjalankan program yang sudah ditanam di dalamnya. Ia bisa
membaca data dari berbagai sensor, seperti sensor suhu, air, atau cahaya,
melalui pin input yang tersedia. Data dari sensor ini kemudian diproses oleh
chip utama di Pico. Setelah diproses, Pico akan memberi perintah ke perangkat
lain sesuai program, misalnya menyalakan lampu, buzzer, atau menampilkan
informasi di layar. Semua proses ini berjalan berulang-ulang secara otomatis
selama alat dinyalakan. Dengan kata lain, Pico membaca data, memikirkan apa
yang harus dilakukan, lalu bertindak sesuai perintah program.
b.) STM32
STM32F103C8T6 bekerja sebagai otak
dari sistem elektronik dengan mengendalikan dan memproses data dari berbagai
input dan output. Mikrokontroler ini berbasis arsitektur ARM Cortex-M3 dan
memiliki kecepatan hingga 72 MHz. Prinsip kerjanya dimulai saat daya diberikan,
lalu mikrokontroler menjalankan program yang tersimpan di memori flash. Ia
membaca data dari sensor melalui pin input (seperti ADC untuk sensor analog),
memproses informasi tersebut berdasarkan logika yang diprogram, lalu memberikan
perintah ke perangkat output seperti LED, LCD, atau buzzer melalui pin output.
Dengan fitur seperti GPIO, ADC, UART, dan timer, STM32F103C8T6 mampu
menjalankan berbagai fungsi dalam sistem tertanam secara efisien dan real-time.
4.Komunikasi
a. Universal Asynchronous Receiver
Transmitter (UART)
UART (Universal Asynchronous Receiver-Transmitter) adalah bagian
perangkat keras komputer yang menerjemahkan antara bit-bit paralel data dan
bit-bit serial. UART biasanya berupa sirkuit terintegrasi yang digunakan untuk
komunikasi serial pada komputer atau port serial perangkat periperal.
Cara kerja komunikasi UART:
Data dikirimkan secara paralel dari data bus ke UART1. Pada
UART1 ditambahkan start bit, parity bit, dan stop bit kemudian dimuat dalam
satu paket data. Paket data ditransmisikan secara serial dari Tx UART1 ke Rx
UART2. UART2 mengkonversikan data dan menghapus
bit tambahan, kemudian
ditransfer secara parallel ke data bus penerima.
5. Sensor
kami memilih menggunakan ultrasonic sensor HC-SR04 dikarenakan harganya yang lebih terjangkau dan lebih cocok untuk praktek tugas yang sederhana. Ultrasonic sensor nantinya akan mendeteksi ketinggian air di permukaan tanah.Prinsip kerja sensor ultrasonik didasarkan pada penggunaan gelombang suara frekuensi tinggi (ultrasonik) untuk mengukur jarak suatu objek. Sensor ini memiliki dua komponen utama: transmitter (pemancar) dan receiver (penerima). Transmitter memancarkan gelombang ultrasonik (biasanya sekitar 40 kHz) ke arah objek. Ketika gelombang tersebut mengenai objek, ia akan dipantulkan kembali dan diterima oleh receiver. Mikrokontroler kemudian menghitung waktu yang dibutuhkan sejak gelombang dipancarkan hingga diterima kembali (time of flight). Dengan menggunakan rumus kecepatan suara (jarak = kecepatan × waktu / 2), sensor dapat menghitung jarak antara sensor dan objek secara akurat. Sensor ini banyak digunakan untuk mendeteksi ketinggian air, menghindari rintangan, dan aplikasi pengukuran jarak lainnya.

Prinsip kerja rain sensor berbasis jalur tembaga didasarkan pada perubahan konduktivitas listrik akibat kehadiran air hujan pada permukaan sensornya. Sensor ini terdiri dari papan PCB dengan pola jalur tembaga yang saling berdekatan namun tidak terhubung langsung. Saat kondisi kering, tidak ada aliran listrik yang terjadi di antara jalur-jalur tersebut karena tidak adanya medium penghantar. Namun ketika air hujan turun dan membasahi permukaan sensor, air yang termasuk cairan elektrolit akan menghantarkan arus listrik dengan menghubungkan jalur-jalur tembaga. Pada saat inilah terjadi proses elektrolisis, yang memungkinkan arus mengalir karena meningkatnya konduktivitas. Sensor ini memiliki IC komparator yang menghasilkan output berupa sinyal digital (logika HIGH dan LOW) serta sinyal analog sesuai dengan tingkat kelembapan permukaan. Jalur tembaga pada pad sensor bertindak seperti potensiometer, di mana resistansinya bervariasi tergantung jumlah air yang mengenai permukaannya. Semakin banyak air yang terdeteksi, maka konduktivitasnya meningkat dan resistansinya menurun, sedangkan saat sedikit atau tidak ada air, konduktivitas rendah dan resistansinya tinggi. Dengan demikian, sensor ini efektif digunakan untuk memantau kondisi cuaca khususnya mendeteksi adanya hujan di lingkungan luar.
Touch sensor bekerja dengan mendeteksi sentuhan fisik manusia melalui perubahan medan listrik akibat kapasitansi tubuh. Sensor ini biasanya menggunakan prinsip kapasitif, di mana saat tidak ada sentuhan, kapasitansi tetap stabil. Namun, ketika jari manusia menyentuh permukaan sensor, kapasitansi meningkat karena tubuh manusia bersifat konduktif dan mempengaruhi medan listrik di sekitar sensor. Perubahan ini kemudian dikenali oleh sirkuit internal sensor dan diubah menjadi sinyal digital berupa logika HIGH atau LOW yang dikirim ke mikrokontroler. Dalam sistem rangkaian yang kami buat, touch sensor berfungsi sebagai input digital yang berperan sebagai saklar on/off untuk mengaktifkan atau menonaktifkan sistem secara langsung melalui sentuhan pengguna, menggantikan tombol mekanis konvensional.
Motor servo MG996R adalah motor DC dengan sistem kontrol posisi internal yang menggerakkan porosnya berdasarkan sinyal PWM (Pulse Width Modulation) yang diterima dari mikrokontroler. Servo ini memiliki mekanisme pengukuran posisi berupa potensiometer internal yang memberikan umpan balik ke rangkaian kontrol untuk menjaga posisi poros sesuai dengan lebar pulsa sinyal. Ketika mikrokontroler mengirimkan sinyal PWM dengan durasi tertentu, motor servo akan berputar hingga mencapai sudut yang sesuai dengan durasi pulsa tersebut, biasanya antara 0° hingga 180°. MG996R mampu menghasilkan torsi besar dan gerakan presisi, sehingga banyak digunakan dalam aplikasi kendali posisi mekanik seperti robotik, model RC, dan sistem otomasi.
Dalam proyek “SISTEM PERINGATAN DAN PENANGANAN DINI BANJIR DI PEMUKIMAN,” servo MG996R digunakan sebagai aktuator sistem drainase otomatis. Ketika sensor hujan atau sensor ketinggian air mendeteksi kondisi siaga atau bahaya, mikrokontroler akan mengirimkan sinyal PWM ke motor servo. Motor kemudian akan menggerakkan mekanisme saluran air seperti membuka katup atau mengangkat penutup drainase, sehingga mempercepat pembuangan air dan membantu mencegah terjadinya genangan atau banjir di area pemukiman.
1.
LCD terdiri dari beberapa lapisan utama:
Lapisan backlight
(sumber cahaya di belakang layar)
Filter polarisasi
depan dan belakang
Lapisan kristal cair (liquid crystal layer)
LCD (Liquid Crystal Display) atau Penampil Kristal Cair adalah perangkat optik elektronik panel datar yang bekerja dengan memanfaatkan sifat modulasi cahaya dari kristal cair. Kristal cair dalam LCD tidak memancarkan cahaya secara langsung, melainkan mengatur sejauh mana cahaya dari lampu latar (backlight) dapat melewati lapisan polarizer dan filter warna di dalam layar. Saat arus listrik dialirkan ke piksel tertentu, orientasi molekul kristal cair berubah, sehingga mengubah polarisasi cahaya yang melintasinya. Perubahan ini memungkinkan atau menghambat cahaya untuk diteruskan ke permukaan layar, membentuk gambar atau karakter. Dengan kombinasi polarizer, elektroda transparan, dan filter warna, LCD mampu menampilkan informasi visual baik dalam format monokrom maupun berwarna. Dalam konteks proyek sistem, LCD berfungsi sebagai penampil data yang dihasilkan oleh sensor, seperti status ketinggian air, intensitas hujan, atau kondisi sistem secara keseluruhan.
Buzzer piezomagnetik adalah komponen elektronika yang menghasilkan suara melalui getaran mekanis akibat efek piezomagnetik, yaitu perubahan bentuk bahan magnetostriktif ketika dialiri arus listrik. Saat diberikan tegangan listrik, medan magnet terbentuk di dalam inti magnetik buzzer, yang menyebabkan pelat logam atau diafragma di dalamnya bergetar secara periodik. Getaran ini kemudian menghasilkan gelombang bunyi yang dapat didengar oleh manusia. Buzzer piezomagnetik bekerja secara efisien dengan frekuensi tetap dan tidak memerlukan rangkaian osilator tambahan. Dalam penggunaannya, seperti pada sistem peringatan banjir, buzzer berfungsi sebagai alarm akustik yang menyala ketika sensor mendeteksi kondisi bahaya, seperti ketinggian air yang melewati ambang batas. Dengan hanya memberikan tegangan input sesuai spesifikasi, buzzer secara otomatis akan menghasilkan suara peringatan yang berguna untuk memperingatkan pengguna secara langsung.
LED (Light Emitting Diode) adalah komponen semikonduktor yang memancarkan cahaya saat dialiri arus listrik dalam kondisi tegangan maju (forward bias). Ketika tegangan diberikan pada kaki anoda dan katoda LED, elektron dari sisi negatif (n-type) berpindah dan berrekombinasi dengan hole di sisi positif (p-type), sehingga melepaskan energi dalam bentuk foton atau cahaya. Warna cahaya yang dihasilkan bergantung pada bahan semikonduktor yang digunakan. Dalam sistem ini, LED digunakan sebagai indikator visual untuk menunjukkan status kondisi yang terdeteksi oleh sensor. LED hijau menandakan kondisi normal (aman), LED kuning atau biru sebagai siaga, dan LED merah sebagai tanda bahaya atau peringatan banjir. Dengan nyala cahaya yang terang dan konsumsi daya rendah, LED sangat efektif untuk memberikan sinyal visual yang mudah dikenali oleh pengguna dalam sistem peringatan dini.
Tegangan Maju (Vf): 2.0 V typical @ 20 mA
Arus Maju (If): 20 mA typical
Tegangan reverse (Vr): 5 V max (tegangan balik harus dihindari)
Panjang gelombang cahaya (λ): sekitar 620–630 nm
Jumper adalah
konektor kecil yang digunakan untuk menghubungkan dua pin pada papan sirkuit.
Fungsi utamanya adalah mengatur konfigurasi, memilih mode kerja, atau
menghubungkan komponen tanpa menyolder. Jumper yang digunakan adalah jumper
male to male dan jumper male to female.
Resistor berfungsi membatasi arus listrik
dalam rangkaian. Komponen ini penting untuk mencegah kerusakan pada LED,
sensor, atau komponen lain yang sensitif terhadap arus tinggi.
5.Percobaan [kembali]
1.) Rangkai Semua komponen pada raspberry pi pico menggunakan bread board
a.) Hubungkan LCD pada Raspberry dan HC-SR04 pada STM32
b.) Hubungkan LED dan Buzzer pada Raspberry
c.) Hubungkan Servo pada Raspberry
d.) lalu buatkan program sesuai kondisi yang di inginkan pada thonny,dan simpan
2.) Rangkai komponen lainnya pada STM32
a.) Hubungkan Rain dan Touch Sensor pada STM32
b.) Buatkan listing Program STM32 menggunakan Arduino ide pada laptop,lalu simpan
3.) Hubungkan STm32 dan Raspberry secara UART
Blok Diagram
STM32
#define TRIG_PIN PA5
#define ECHO_PIN PA4
#define RAIN_PIN PB7
#define TOUCH_PIN PA2 // Touch sensor sebagai toggle ON/OFF
long duration;
int distance;
int hujan;
bool aktif = true; // Aktif sejak awal
bool lastTouch = false; // Untuk mendeteksi transisi sentuhan
void setup() {
Serial1.begin(9600); // UART1: PA9 (TX), PA10 (RX)
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RAIN_PIN, INPUT_PULLUP); // Sensor hujan aktif LOW
pinMode(TOUCH_PIN, INPUT); // Touch sensor digital
}
void loop() {
int touchStatus = digitalRead(TOUCH_PIN);
// Deteksi toggle (sentuhan naik dari LOW ke HIGH)
if (touchStatus == HIGH && !lastTouch) {
aktif = !aktif; // Toggle status sistem
delay(300); // Debounce delay
}
lastTouch = (touchStatus == HIGH);
if (aktif) {
// Baca status hujan
hujan = digitalRead(RAIN_PIN); // 0 = hujan
// Trigger sensor ultrasonik
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Hitung jarak
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2;
// Kirim data: "jarak,hujan"
Serial1.print(distance);
Serial1.print(",");
Serial1.println(hujan);
} else {
// Jika sistem tidak aktif, kirim "OFF"
Serial1.println("OFF");
}
delay(500);
}
Raspberry Pi Pico
import utime
import machine
from machine import I2C, UART, Pin, PWM
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd
# --- Konfigurasi LCD I2C ---
I2C_ADDR = 0x27
I2C_NUM_ROWS = 4
I2C_NUM_COLS = 20
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
lcd.clear()
# --- UART ---
uart = UART(1, baudrate=9600, tx=Pin(8), rx=Pin(9))
# --- LED dan Buzzer ---
led_merah = Pin(2, Pin.OUT)
led_biru = Pin(3, Pin.OUT)
led_hijau = Pin(4, Pin.OUT)
buzzer = Pin(17, Pin.OUT)
buzzer.value(0)
# --- Servo ---
servo = PWM(Pin(16))
servo.freq(50)
def set_servo_derajat(derajat):
min_u16 = 1638
max_u16 = 8192
duty_u16 = int(min_u16 + (derajat / 180) * (max_u16 - min_u16))
servo.duty_u16(duty_u16)
def set_led_status(status):
if status == "Aman":
led_merah.value(0)
led_biru.value(0)
led_hijau.value(1)
buzzer.value(0)
set_servo_derajat(0)
elif status == "Siaga":
led_merah.value(0)
led_biru.value(1)
led_hijau.value(0)
buzzer.value(0)
set_servo_derajat(0)
elif status == "Bahaya":
led_merah.value(1)
led_biru.value(0)
led_hijau.value(0)
buzzer.value(1)
set_servo_derajat(90)
# --- Fungsi baca UART ---
def baca_data_uart():
if uart.any():
data = uart.readline()
try:
text = data.decode().strip()
if text == "OFF":
return "OFF", "OFF"
parts = text.split(',')
if len(parts) == 2:
jarak = int(parts[0])
hujan = int(parts[1])
return jarak, hujan
except:
pass
return None, None
# --- Variabel status ---
last_status = ""
last_jarak = -1
while True:
jarak, hujan = baca_data_uart()
if jarak == "OFF":
if last_status != "OFF":
lcd.clear()
lcd.move_to(0, 0)
lcd.putstr("Sistem: NONAKTIF")
set_led_status("Aman")
buzzer.value(0)
last_status = "OFF"
utime.sleep(0.5)
continue
if jarak is not None and hujan is not None:
# --- Logika status ---
if hujan == 0 and jarak > 5:
status = "Bahaya"
elif jarak >= 100 and hujan != 0:
status = "Aman"
elif jarak >= 5 or hujan == 0:
status = "Siaga"
else:
status = "Bahaya"
# --- Update LCD baris 1: Jarak ---
if jarak != last_jarak:
lcd.move_to(0, 0)
lcd.putstr(" ")
lcd.move_to(0, 0)
lcd.putstr("Jarak: {} cm".format(jarak))
last_jarak = jarak
# --- Update LCD baris 2: Status ---
if status != last_status:
lcd.move_to(0, 1)
lcd.putstr(" ")
lcd.move_to(0, 1)
lcd.putstr("Status: {}".format(status))
set_led_status(status)
last_status = status
utime.sleep(0.1)
Komentar
Posting Komentar