Project Modul 4
MODUL 4
Early Warning System Keamanan Kendaraan pada Jembatan Gantung Darurat Saat Debit Sungai Tinggi Berbasis STM32F103C8T6
1. Tujuan [kembali]
Tujuan dari pembuatan prototipe ini adalah:
1. Merancang dan membangun prototipe sistem peringatan
dini jembatan gantung darurat yang mampu mendeteksi parameter debit air dan perubahan kemiringan jembatan secara real-time.
2. Mengimplementasikan mikrokontroler STM32F103C8T6
menggunakan STM32CubeIDE sebagai unit pemroses utama yang mengintegrasikan
berbagai sensor dan aktuator pada sistem peringatan dini.
3. Menghasilkan output peringatan berupa sinyal visual
(LED tiga warna) dan sinyal audio (buzzer) serta informasi pada display LCD
16x2 sebagai antarmuka pengguna.
4. Menyediakan media edukasi kebencanaan yang interaktif
bagi masyarakat dan pelajar di kawasan Batu Busuk, Padang mengenai deteksi dini
bencana banjir.
5. Mengembangkan sistem klasifikasi tingkat bahaya banjir ke dalam tiga level : AMAN, WASPADA, dan BAHAYA berdasarkan pembacaan sensor simultan.
2. Alat dan Bahan [kembali]
Hardware
a) Mikrokontroler STM32F103C8T6
3. Landasan Teori dan Grafik Respon Sensor [kembali]
3.1 Banjir Bandang dan Sistem Peringatan Dini
Project ini dibuat untuk meningkatkan keamanan kendaraan saat melintasi jembatan gantung darurat, terutama ketika debit sungai meningkat dan kondisi jembatan menjadi tidak stabil. Sistem ini bekerja sebagai pendeteksi dini (Early Warning System/EWS) yang mampu memberikan peringatan otomatis kepada pengguna jembatan apabila terdeteksi kondisi berbahaya.
Sistem Peringatan Dini (Early Warning System / EWS) adalah serangkaian prosedur dan mekanisme teknis yang dirancang untuk mendeteksi tanda-tanda awal bencana dan menyebarkan peringatan kepada masyarakat sebelum bencana terjadi. Komponen utama EWS meliputi: (1) sensor/instrumen monitoring, (2) unit pemrosesan data, (3) sistem komunikasi, dan (4) protokol respons masyarakat.
3.2 Mikrokontroler STM32F103C8T6
STM32F103C8T6
(Blue Pill) adalah mikrokontroler berbasis arsitektur ARM Cortex-M3 32-bit yang
diproduksi oleh STMicroelectronics. Spesifikasi utamanya adalah:
•
Kecepatan clock maksimum: 72 MHz
•
Memori Flash: 64 KB untuk penyimpanan program
•
Memori SRAM: 20 KB untuk data runtime
•
Jumlah pin GPIO: 37 pin yang dapat dikonfigurasi
•
ADC 12-bit: 10 channel untuk pembacaan sensor analog
•
Komunikasi: UART, SPI, I2C, USB, CAN
•
Tegangan operasi: 2.0V - 3.6V
•
Package: LQFP48
STM32CubeIDE merupakan Integrated Development Environment (IDE) resmi dari STMicroelectronics yang mengintegrasikan STM32CubeMX untuk konfigurasi hardware dan Eclipse IDE untuk pengembangan kode. Pemrograman dilakukan menggunakan bahasa C dengan dukungan HAL (Hardware Abstraction Layer) library.
3.3 Laser Distance Sensor (VL53L0X)
Sensor VL53L0X merupakan sensor jarak berbasis teknologi Time of Flight (ToF) yang menggunakan sinar laser inframerah untuk mengukur jarak objek secara akurat. Sensor ini bekerja dengan memancarkan pulsa laser dan mengukur waktu yang dibutuhkan cahaya untuk dipantulkan kembali ke sensor. Berbeda dengan sensor ultrasonik atau sensor inframerah analog, VL53L0X memiliki akurasi yang lebih tinggi dan tidak terlalu dipengaruhi oleh warna maupun tekstur permukaan objek.
Pada sistem ini, sensor VL53L0X dihubungkan ke STM32 melalui komunikasi I2C menggunakan pin PB6 (SCL) dan PB7 (SDA). Sensor digunakan untuk memantau jarak atau ketinggian permukaan air terhadap titik referensi pada jembatan gantung darurat. Apabila jarak yang terukur berada di bawah batas aman yang telah ditentukan, sistem akan mengaktifkan status WASPADA atau BAHAYA sesuai tingkat kedekatan permukaan air terhadap sensor. Informasi kondisi ditampilkan pada LCD serta ditandai dengan perubahan indikator LED dan buzzer.
Spesifikasi :
Tabel 3.1 Karakteristik Respon Laser Distance Sensor (VL53L0X)
|
Kondisi Permukaan Air |
Jarak Terukur (cm) |
Output Digital |
Respon Sistem |
|
Normal |
> 100 cm |
Jarak Aman |
Normal — LED Hijau |
|
Waspada |
50 - 100 cm |
Jarak Mendekati Batas |
Waspada |
| Bahaya | < 50 cm | Jarak Kritis | Bahaya — LED Merah + Buzzer ON |
3.4 Water Flow Sensor (YF-S201)
Sensor YF-S201 merupakan sensor aliran air yang bekerja berdasarkan efek Hall Effect. Di dalam sensor terdapat rotor dengan magnet kecil yang akan berputar ketika air mengalir melewati sensor. Setiap putaran rotor menghasilkan pulsa listrik yang dideteksi oleh sensor Hall Effect. Frekuensi pulsa yang dihasilkan berbanding lurus dengan laju aliran air (flow rate), sehingga mikrokontroler dapat menghitung debit air yang mengalir dalam satuan liter per menit (L/min).
Pada sistem ini, sensor YF-S201 dihubungkan ke pin PA1 STM32 yang dikonfigurasi sebagai input interrupt untuk menghitung jumlah pulsa secara real-time. Sensor digunakan untuk memantau kecepatan aliran sungai di sekitar jembatan gantung darurat. Semakin tinggi debit aliran air yang terukur, semakin besar potensi terjadinya banjir atau tekanan pada struktur jembatan. Apabila nilai debit air melebihi batas yang telah ditentukan, sistem akan mengaktifkan status WASPADA atau BAHAYA, ditandai dengan indikator LED, buzzer, serta pesan peringatan pada LCD.
Spesifikasi :
Tabel 3.2 Karakteristik Respon Water Flow Sensor (YF-S201)
Kondisi Aliran Sungai | Debit Air (L/min) | Output Digital | Respon Sistem |
Normal | < 15 L/min | Pulsa Rendah | Normal — LED Hijau |
Waspada | 15 - 30 L/min | Pulsa Sedang | Waspada — LED Kuning + Buzzer Intermiten |
| Bahaya | > 30 L/min | Pulsa Tinggi | Bahaya — LED Merah + Buzzer ON |
3.5 Sensor Kemiringan (Tilt Sensor SW-520D)
Pada sistem ini, sensor SW-520D dihubungkan ke pin PA2 STM32 yang dikonfigurasi sebagai input digital. Sensor digunakan untuk memantau kemiringan struktur jembatan gantung darurat akibat beban berlebih, pergeseran pondasi, atau pengaruh debit sungai yang tinggi. Apabila kemiringan jembatan melebihi batas aman yang telah ditentukan, sensor akan memberikan sinyal HIGH (logika 1) yang langsung memicu status BAHAYA. Kondisi ini ditandai dengan aktivasi LED merah, buzzer, serta tampilan pesan peringatan pada LCD.
Tabel 3.3 Zona Kemiringan dan Respon Sistem
|
Zona |
Rentang Sudut |
Nilai ADC |
Status |
Respon Output |
|
Normal |
0° – 5° |
0 – 455 |
AMAN |
LED Hijau ON, Buzzer OFF, LCD: "Normal" |
|
Waspada |
5° – 15° |
456 – 1365 |
SIAGA |
LED Kuning ON, Buzzer intermiten, LCD: "Waspada" |
|
Bahaya |
> 15° |
> 1365 |
KRITIS |
LED Merah ON, Buzzer ON, LCD: "BAHAYA!" |
3.6 LCD 16x2 dengan Interface I2C (PCF8574)
LCD (Liquid
Crystal Display) 16x2 mampu menampilkan 16 karakter dalam 2 baris teks. Module
I2C PCF8574 yang terintegrasi memungkinkan komunikasi hanya menggunakan 2 pin
(SDA dan SCL), menghemat penggunaan GPIO STM32. Alamat I2C default adalah 0x27
atau 0x3F tergantung posisi jumper. Pada sistem ini, LCD digunakan untuk
menampilkan nilai sensor secara real-time dan status level peringatan.
3.7 Sistem Prioritas dan Logika Deteksi
Sistem menggunakan logika if-else bertingkat (cascaded if-else) untuk memproses pembacaan sensor sesuai urutan prioritas bahaya. Jika beberapa sensor aktif secara bersamaan, sistem akan menampilkan status berdasarkan sensor dengan prioritas tertinggi.
Tabel 3.4 Tabel Kebenaran Sistem Monitoring Lengkap
|
Getaran |
Hujan |
Sudut Tilt |
LED |
Buzzer |
Prioritas |
Tampilan LCD |
|
HIGH |
ANY |
ANY |
Merah |
ON |
P1 |
"BAHAYA! / Getaran Kuat" |
|
LOW |
HIGH |
ANY |
Merah |
ON |
P2 |
"BAHAYA! / Hujan Deras" |
|
LOW |
LOW |
> 30° |
Merah |
ON |
P3 |
"BAHAYA! / Banjir" |
|
LOW |
LOW |
10°–30° |
Kuning |
Intermiten |
P3 |
"Kemiringan / Waspada" |
|
LOW |
LOW |
0°–10° |
Hijau |
OFF |
P3 |
"Kemiringan / Normal" |
|
ANY |
ANY |
ANY |
Merah |
ON |
INTERRUPT |
"EMERGENCY / WARNING" |
4. Flowchart dan Listing Program [kembali]
- Flowchart
- Listing Program
main.c
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
* Copyright (c) 2026 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* Private includes ----------------------------------------------------------*/
#include <string.h>
/* Private variables ---------------------------------------------------------*/
ADC_HandleTypeDef hadc1;
TIM_HandleTypeDef htim1;
volatile uint32_t pulseCount = 0;
uint32_t debit = 0;
uint32_t lastFlow = 0;
uint16_t levelAir = 0;
/* Function Prototypes */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
static void MX_TIM1_Init(void);
/* ================= LCD ================= */
void LCD_Send4Bit(uint8_t data)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, (data>>0)&1);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, (data>>1)&1);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3 , (data>>2)&1);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4 , (data>>3)&1);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
HAL_Delay(1);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
}
void LCD_Cmd(uint8_t cmd)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
LCD_Send4Bit(cmd >> 4);
LCD_Send4Bit(cmd & 0x0F);
HAL_Delay(2);
}
void LCD_Data(uint8_t data)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
LCD_Send4Bit(data >> 4);
LCD_Send4Bit(data & 0x0F);
HAL_Delay(2);
}
void LCD_Clear(void)
{
LCD_Cmd(0x01);
HAL_Delay(2);
}
void LCD_SetCursor(uint8_t row, uint8_t col)
{
uint8_t addr;
if(row == 0)
addr = 0x80 + col;
else
addr = 0xC0 + col;
LCD_Cmd(addr);
}
void LCD_Print(char *str)
{
while(*str)
{
LCD_Data(*str++);
}
}
void LCD_Init_Custom(void)
{
HAL_Delay(50);
LCD_Send4Bit(0x03);
HAL_Delay(5);
LCD_Send4Bit(0x03);
HAL_Delay(5);
LCD_Send4Bit(0x03);
HAL_Delay(5);
LCD_Send4Bit(0x02);
LCD_Cmd(0x28);
LCD_Cmd(0x0C);
LCD_Cmd(0x06);
LCD_Cmd(0x01);
HAL_Delay(5);
}
uint16_t ReadADC(void)
{
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,100);
return HAL_ADC_GetValue(&hadc1);
}
void Servo_Open(void)
{
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,2000);
}
void Servo_Close(void)
{
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,1000);
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
MX_TIM1_Init();
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
LCD_Init_Custom();
LCD_Clear();
LCD_SetCursor(0,0);
LCD_Print("SISTEM READY");
Servo_Open();
HAL_Delay(2000);
while (1)
{
levelAir = ReadADC();
uint8_t tilt =
HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_2);
if(HAL_GetTick() - lastFlow >= 1000)
{
debit = pulseCount;
pulseCount = 0;
lastFlow = HAL_GetTick();
}
/* BAHAYA */
if(levelAir > 3000 ||
debit > 50 ||
tilt == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,GPIO_PIN_SET);
Servo_Close();
LCD_Clear();
LCD_SetCursor(0,0);
LCD_Print("STATUS");
LCD_SetCursor(1,0);
LCD_Print("BAHAYA");
}
/* WARNING */
else if(levelAir > 1500 ||
debit > 20)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,GPIO_PIN_RESET);
Servo_Open();
LCD_Clear();
LCD_SetCursor(0,0);
LCD_Print("STATUS");
LCD_SetCursor(1,0);
LCD_Print("WARNING");
}
/* AMAN */
else
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,GPIO_PIN_RESET);
Servo_Open();
LCD_Clear();
LCD_SetCursor(0,0);
LCD_Print("STATUS");
LCD_SetCursor(1,0);
LCD_Print("AMAN");
}
HAL_Delay(500);
}
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_0)
{
pulseCount++;
}
}
main. h
/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * Copyright (c) 2026 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" /* Private includes ----------------------------------------------------------*/ #include <string.h> /* Private variables ---------------------------------------------------------*/ ADC_HandleTypeDef hadc1; TIM_HandleTypeDef htim1; volatile uint32_t pulseCount = 0; uint32_t debit = 0; uint32_t lastFlow = 0; uint16_t levelAir = 0; /* Function Prototypes */ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_ADC1_Init(void); static void MX_TIM1_Init(void); /* ================= LCD ================= */ void LCD_Send4Bit(uint8_t data) { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, (data>>0)&1); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, (data>>1)&1); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3 , (data>>2)&1); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4 , (data>>3)&1); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); HAL_Delay(1); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); } void LCD_Cmd(uint8_t cmd) { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET); LCD_Send4Bit(cmd >> 4); LCD_Send4Bit(cmd & 0x0F); HAL_Delay(2); } void LCD_Data(uint8_t data) { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET); LCD_Send4Bit(data >> 4); LCD_Send4Bit(data & 0x0F); HAL_Delay(2); } void LCD_Clear(void) { LCD_Cmd(0x01); HAL_Delay(2); } void LCD_SetCursor(uint8_t row, uint8_t col) { uint8_t addr; if(row == 0) addr = 0x80 + col; else addr = 0xC0 + col; LCD_Cmd(addr); } void LCD_Print(char *str) { while(*str) { LCD_Data(*str++); } } void LCD_Init_Custom(void) { HAL_Delay(50); LCD_Send4Bit(0x03); HAL_Delay(5); LCD_Send4Bit(0x03); HAL_Delay(5); LCD_Send4Bit(0x03); HAL_Delay(5); LCD_Send4Bit(0x02); LCD_Cmd(0x28); LCD_Cmd(0x0C); LCD_Cmd(0x06); LCD_Cmd(0x01); HAL_Delay(5); } uint16_t ReadADC(void) { HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1,100); return HAL_ADC_GetValue(&hadc1); } void Servo_Open(void) { __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,2000); } void Servo_Close(void) { __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,1000); } int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_ADC1_Init(); MX_TIM1_Init(); HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); LCD_Init_Custom(); LCD_Clear(); LCD_SetCursor(0,0); LCD_Print("SISTEM READY"); Servo_Open(); HAL_Delay(2000); while (1) { levelAir = ReadADC(); uint8_t tilt = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_2); if(HAL_GetTick() - lastFlow >= 1000) { debit = pulseCount; pulseCount = 0; lastFlow = HAL_GetTick(); } /* BAHAYA */ if(levelAir > 3000 || debit > 50 || tilt == GPIO_PIN_SET) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,GPIO_PIN_SET); Servo_Close(); LCD_Clear(); LCD_SetCursor(0,0); LCD_Print("STATUS"); LCD_SetCursor(1,0); LCD_Print("BAHAYA"); } /* WARNING */ else if(levelAir > 1500 || debit > 20) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,GPIO_PIN_SET); HAL_Delay(100); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,GPIO_PIN_RESET); Servo_Open(); LCD_Clear(); LCD_SetCursor(0,0); LCD_Print("STATUS"); LCD_SetCursor(1,0); LCD_Print("WARNING"); } /* AMAN */ else { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,GPIO_PIN_RESET); Servo_Open(); LCD_Clear(); LCD_SetCursor(0,0); LCD_Print("STATUS"); LCD_SetCursor(1,0); LCD_Print("AMAN"); } HAL_Delay(500); } } void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin == GPIO_PIN_0) { pulseCount++; } }
main. h
5. Rangkaian Simulasi [kembali]
Pada rangkaian ini, STM32F103C8T6 (Bluepill) berfungsi sebagai pusat pengendali sistem yang menerima seluruh data dari sensor, mengolah informasi tersebut, kemudian mengendalikan perangkat output berupa LED indikator, buzzer, servo motor, dan LCD. Sistem ini dirancang untuk memantau kondisi sungai dan kestabilan jembatan secara real-time sehingga dapat memberikan peringatan dini kepada pengguna jembatan ketika terjadi kondisi yang berpotensi membahayakan.
Prinsip kerja sistem dimulai dari proses pembacaan data oleh sensor. Water Flow Sensor YF-S201 digunakan untuk mengukur kecepatan atau debit aliran air sungai. Sensor ini menghasilkan sinyal pulsa yang frekuensinya sebanding dengan laju aliran air. Semakin besar debit air yang melewati sensor, semakin tinggi frekuensi pulsa yang diterima oleh STM32. Data tersebut kemudian dihitung oleh mikrokontroler untuk mengetahui kondisi arus sungai apakah masih normal atau sudah mengalami peningkatan yang berpotensi menimbulkan banjir.
Selain itu, sistem juga menggunakan Laser Distance Sensor VL53L0X untuk mengukur jarak antara sensor dengan permukaan air sungai. Sensor bekerja menggunakan metode Time of Flight (ToF), yaitu memancarkan sinar laser inframerah ke permukaan air kemudian mengukur waktu pantulan cahaya yang kembali ke sensor. Dari hasil pengukuran tersebut diperoleh nilai jarak permukaan air. Apabila jarak yang terukur semakin kecil, maka menandakan bahwa permukaan air semakin naik dan mendekati jembatan. Data ini menjadi indikator utama dalam menentukan tingkat bahaya banjir.
Untuk memantau kondisi fisik jembatan, digunakan Tilt Sensor SW-520D yang berfungsi mendeteksi kemiringan atau perubahan posisi jembatan. Sensor ini menghasilkan sinyal digital berupa logika HIGH atau LOW tergantung posisi bola logam di dalam sensor. Ketika jembatan berada pada posisi normal, sensor memberikan kondisi logika tertentu yang dianggap aman. Namun apabila jembatan mengalami kemiringan akibat beban berlebih atau derasnya arus sungai, kondisi logika sensor akan berubah dan dibaca oleh STM32 sebagai indikasi ketidakstabilan struktur jembatan.
Seluruh data dari ketiga sensor tersebut kemudian diproses oleh STM32 menggunakan algoritma pengambilan keputusan yang telah ditentukan. Mikrokontroler akan membandingkan nilai debit air, ketinggian permukaan air, dan kondisi kemiringan jembatan terhadap batas-batas aman (threshold) yang telah diprogram. Berdasarkan hasil analisis tersebut, sistem akan mengelompokkan kondisi menjadi tiga status utama, yaitu Aman, Waspada, dan Bahaya.
Pada kondisi Aman, nilai debit air masih berada pada batas normal, permukaan air sungai masih jauh dari batas kritis, dan jembatan dalam keadaan stabil. Dalam kondisi ini, STM32 akan mengaktifkan LED hijau sebagai indikator visual bahwa jembatan aman dilalui kendaraan. Selain itu, servo motor akan berada pada posisi membuka portal sehingga kendaraan dapat melintas. Informasi kondisi aman juga ditampilkan pada LCD 16×2 dengan pesan seperti “STATUS: AMAN”.
Ketika salah satu parameter mulai mendekati batas kritis, misalnya debit air meningkat, ketinggian air mulai naik, atau jembatan menunjukkan gejala kemiringan ringan, maka sistem masuk ke kondisi Waspada. Pada kondisi ini STM32 akan menyalakan LED kuning, mengaktifkan buzzer secara berkala sebagai peringatan awal, dan menampilkan pesan “STATUS: WARNING” pada LCD. Pada tahap ini kendaraan masih dapat melintas, namun pengguna diingatkan agar lebih berhati-hati terhadap kemungkinan perubahan kondisi yang lebih berbahaya.
Apabila sensor mendeteksi kondisi yang telah melewati batas aman, seperti debit sungai sangat tinggi, permukaan air telah mencapai level kritis, atau jembatan mengalami kemiringan yang membahayakan, maka sistem akan berpindah ke kondisi Bahaya. Dalam keadaan ini STM32 akan menyalakan LED merah, mengaktifkan buzzer secara terus-menerus sebagai alarm darurat, dan menggerakkan servo motor SG90 untuk menutup portal kendaraan sehingga akses menuju jembatan dihentikan. Pada saat yang sama LCD akan menampilkan informasi seperti “AIR: TINGGI” dan “STATUS: BAHAYA” agar pengguna mengetahui penyebab penutupan akses tersebut.
6. Rangkaian Prototype [kembali]
7. Video Penjelasan Prinsip Kerja [kembali]
8. Kesimpulan dan Saran [kembali]
8.1 Kesimpulan
Berdasarkan perancangan dan implementasi yang telah dilakukan, sistem Early Warning System (EWS) Keamanan Kendaraan pada Jembatan Gantung Darurat Saat Debit Sungai Tinggi Berbasis STM32F103C8T6 berhasil dirancang sebagai sistem pemantauan dan peringatan dini yang mampu mendeteksi kondisi berbahaya pada jembatan secara otomatis. Sistem memanfaatkan sensor VL53L0X untuk mengukur ketinggian permukaan air, sensor YF-S201 untuk memantau debit aliran sungai, serta sensor SW-520D untuk mendeteksi kemiringan jembatan. Data dari ketiga sensor tersebut diproses oleh mikrokontroler STM32F103C8T6 untuk menentukan status kondisi jembatan, yaitu aman, waspada, atau bahaya.
Hasil pemantauan ditampilkan melalui LCD 16×2, indikator LED hijau, kuning, dan merah, serta buzzer sebagai alarm peringatan. Selain itu, sistem dilengkapi dengan servo motor yang berfungsi sebagai portal otomatis untuk membatasi akses kendaraan ketika kondisi jembatan dinyatakan berbahaya. Dengan adanya sistem ini, informasi mengenai kondisi jembatan dapat diperoleh secara real-time sehingga membantu meningkatkan keselamatan pengguna jembatan dan mengurangi risiko kecelakaan akibat banjir atau ketidakstabilan struktur jembatan.
Secara keseluruhan, sistem yang dirancang telah memenuhi tujuan utama yaitu memberikan peringatan dini dan pengendalian akses kendaraan secara otomatis berdasarkan kondisi lingkungan dan jembatan yang terdeteksi oleh sensor.
Untuk pengembangan lebih lanjut, terdapat beberapa saran yang dapat dilakukan agar sistem menjadi lebih optimal dan memiliki tingkat keandalan yang lebih tinggi, antara lain:
- Menambahkan modul komunikasi nirkabel, seperti GSM, LoRa, atau Wi-Fi, sehingga informasi kondisi jembatan dapat dikirim secara otomatis kepada petugas atau pengguna melalui SMS, aplikasi, maupun internet.
- Menambahkan sumber daya cadangan (backup power) berupa baterai atau panel surya agar sistem tetap dapat beroperasi saat terjadi pemadaman listrik, terutama pada kondisi darurat.
- Melakukan kalibrasi dan pengujian lapangan secara berkala untuk memastikan akurasi pembacaan sensor sesuai dengan kondisi sungai dan jembatan yang sebenarnya.
- Menambahkan sensor pendukung lainnya, seperti sensor curah hujan atau sensor getaran, agar sistem mampu memberikan analisis kondisi yang lebih komprehensif dan meningkatkan akurasi peringatan dini.
7. Download File [kembali]
- Download File Proteus Rangakaian disini
- Download File STM32 CUBE IDE disini
- Download Video Demo disini
- Download Datasheet Mikrokontroler STM32 disini
- Download Datasheet Laser Distance Sensor disini
- Download Datasheet Water Flow Sensor disini
- Download Datasheet Tilt Sensor disini
- Download Datasheet Resistor disini
- Download Datasheet LED disini
- Download Datasheet Buzzer disini
- Download Datasheet LCD I2C 16X2 disini
- Download Datasheet Motor Servo SG90 disini

.jpg)
.jpg)
Komentar
Posting Komentar