"Sistem Deteksi Kebakaran dan Kebocoran Gas di Dapur MBG pada daerah kecamatan pauh"
1. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Sistem keamanan Dapur MBG berbasis mikrokontroler STM32 dirancang sebagai sistem pemantauan lingkungan yang bekerja secara kontinu, real-time, dan terstruktur dengan menerapkan mekanisme pengambilan keputusan bertingkat (priority-based decision system) untuk meminimalkan risiko kebakaran dan kecelakaan akibat kebocoran gas LPG. Seluruh proses pengawasan dijalankan di dalam main loop program dengan interval waktu sampling sebesar 500 milidetik, sehingga sistem mampu merespons perubahan kondisi lingkungan secara cepat namun tetap stabil.
Pada setiap siklus pemantauan, STM32 terlebih dahulu membaca nilai analog dari sensor NTC untuk mengetahui suhu aktual ruangan dapur. Nilai tegangan keluaran sensor ini dikonversi oleh ADC 12-bit STM32 menjadi data digital, kemudian diolah menggunakan persamaan karakteristik NTC untuk memperoleh nilai suhu dalam satuan derajat Celcius yang selanjutnya ditampilkan pada LCD. Secara bersamaan, sistem juga membaca tegangan analog dari sensor gas MQ-2 yang ditempatkan di area sekitar tabung LPG. Sensor ini bekerja berdasarkan perubahan resistansi material semikonduktor akibat paparan gas mudah terbakar, di mana peningkatan konsentrasi gas akan menyebabkan kenaikan tegangan keluaran yang dibaca oleh ADC sebagai indikasi kebocoran gas.
Selain sensor analog, sistem dilengkapi dengan Flame Sensor 5 Channel yang berfungsi mendeteksi keberadaan api melalui radiasi cahaya inframerah dengan konfigurasi Active LOW. Pada kondisi normal (tidak ada api), keluaran sensor berada pada logika HIGH, sedangkan ketika api terdeteksi, keluaran sensor akan turun ke logika LOW dan langsung dibaca oleh pin GPIO STM32 sebagai sinyal bahaya kebakaran. Untuk menjaga kestabilan logika pembacaan, pin input flame sensor dikonfigurasikan menggunakan pull-up internal, sehingga terhindar dari kondisi floating yang dapat memicu kesalahan pembacaan.
Setelah seluruh data sensor diperoleh, STM32 melakukan proses evaluasi berdasarkan tingkatan prioritas bahaya. Prioritas tertinggi diberikan pada deteksi api, karena kondisi ini berpotensi langsung menyebabkan kebakaran besar. Ketika flame sensor mendeteksi api, sistem segera menghentikan evaluasi sensor lainnya dan langsung mengaktifkan buzzer sebagai alarm audio serta LED merah sebagai indikator visual bahaya. Bersamaan dengan itu, LCD menampilkan pesan peringatan kebakaran secara jelas untuk memberikan informasi cepat kepada penghuni dapur agar segera melakukan tindakan penyelamatan.
Apabila tidak terdeteksi api, sistem melanjutkan ke prioritas kedua, yaitu pemeriksaan kebocoran gas LPG berdasarkan nilai ambang batas sensor MQ-2 yang telah ditentukan melalui proses kalibrasi. Ketika nilai pembacaan sensor melebihi ambang batas tersebut, sistem mengidentifikasi kondisi sebagai kebocoran gas berbahaya. Dalam keadaan ini, buzzer diaktifkan sebagai peringatan suara dan LCD menampilkan pesan kebocoran gas, sementara LED merah tetap dalam kondisi mati untuk mengurangi potensi percikan listrik di lingkungan dengan konsentrasi gas mudah terbakar.
Pada kondisi prioritas terendah, yaitu saat sensor flame tidak mendeteksi api dan sensor MQ-2 menunjukkan konsentrasi gas di bawah ambang batas aman, sistem menganggap lingkungan dapur berada dalam keadaan normal. Seluruh aktuator peringatan seperti buzzer dan LED dinonaktifkan, kemudian STM32 menampilkan informasi suhu ruangan hasil pembacaan sensor NTC beserta pesan “Sistem Aman” pada LCD. Setelah itu, sistem kembali mengulang siklus pemantauan secara otomatis tanpa intervensi pengguna, sehingga pengawasan dapur dapat berlangsung secara berkelanjutan.
2. Flowchart dan Listing Program[Kembali]
2.1 Flowchart
Listing Program
#include "main.h"
#include <stdio.h>
#include "i2c_lcd.h"
/* ===================== KONFIGURASI ===================== */
#define GAS_THRESHOLD 30
#define ON GPIO_PIN_SET
#define OFF GPIO_PIN_RESET
/* ===================== OUTPUT ===================== */
#define LED_PORT GPIOA
#define LED_PIN GPIO_PIN_7
#define BUZZER_PORT GPIOA
#define BUZZER_PIN GPIO_PIN_6
/* ===================== FLAME SENSOR ===================== */
#define API1_PORT GPIOB
#define API1_PIN GPIO_PIN_0
#define API2_PORT GPIOB
#define API2_PIN GPIO_PIN_1
#define API3_PORT GPIOA
#define API3_PIN GPIO_PIN_9
#define API4_PORT GPIOB
#define API4_PIN GPIO_PIN_10
#define API5_PORT GPIOB
#define API5_PIN GPIO_PIN_11
ADC_HandleTypeDef hadc1;
I2C_HandleTypeDef hi2c1;
I2C_LCD_HandleTypeDef hlcd;
uint16_t adc_suhu, adc_gas;
int suhu, gas;
char lcd_buffer[21];
/* ===================== PROTOTYPE ===================== */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
static void MX_I2C1_Init(void);
uint16_t Read_ADC(uint32_t channel);
uint8_t Deteksi_Api(void);
/* ===================== ADC ===================== */
uint16_t Read_ADC(uint32_t channel)
{
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = channel;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 50);
uint16_t value = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
return value;
}
/* ===================== DETEKSI API ===================== */
uint8_t Deteksi_Api(void)
{
if (HAL_GPIO_ReadPin(API1_PORT, API1_PIN) == ON ||
HAL_GPIO_ReadPin(API2_PORT, API2_PIN) == ON ||
HAL_GPIO_ReadPin(API3_PORT, API3_PIN) == ON ||
HAL_GPIO_ReadPin(API4_PORT, API4_PIN) == ON ||
HAL_GPIO_ReadPin(API5_PORT, API5_PIN) == ON)
return 1;
return 0;
}
/* ===================== MAIN ===================== */
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
MX_I2C1_Init();
HAL_ADCEx_Calibration_Start(&hadc1);
hlcd.hi2c = &hi2c1;
hlcd.address = 0x4E;
lcd_init(&hlcd);
HAL_GPIO_WritePin(LED_PORT, LED_PIN, OFF);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, OFF);
while (1)
{
adc_suhu = Read_ADC(ADC_CHANNEL_1);
suhu = adc_suhu / 30;
if (suhu > 99) suhu = 99;
adc_gas = Read_ADC(ADC_CHANNEL_0);
gas = (adc_gas * 100) / 4095;
if (gas > 99) gas = 99;
uint8_t status_gas = (gas >= GAS_THRESHOLD);
uint8_t status_api = Deteksi_Api();
lcd_gotoxy(&hlcd, 0, 0);
sprintf(lcd_buffer, "T:%02d%cC Gas:%02d%%", suhu, 223, gas);
lcd_puts(&hlcd, lcd_buffer);
lcd_gotoxy(&hlcd, 0, 1);
if (status_api && status_gas)
{
HAL_GPIO_WritePin(LED_PORT, LED_PIN, ON);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, ON);
lcd_puts(&hlcd, "BAHAYA API+GAS");
}
else if (status_api)
{
HAL_GPIO_WritePin(LED_PORT, LED_PIN, ON);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, ON);
lcd_puts(&hlcd, "API TERDETEKSI");
}
else if (status_gas)
{
HAL_GPIO_WritePin(LED_PORT, LED_PIN, ON);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, OFF);
lcd_puts(&hlcd, "GAS TERDETEKSI");
}
else
{
HAL_GPIO_WritePin(LED_PORT, LED_PIN, OFF);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, OFF);
lcd_puts(&hlcd, "STATUS AMAN");
}
HAL_Delay(300);
}
}
Prototype
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Final Program Sistem Keamanan (Tanpa Pompa)
* Sensor : NTC, MQ-135, Flame Sensor 5 Channel
* Output : LCD I2C, Buzzer, LED
******************************************************************************
*/
/* USER CODE END Header */
#include "main.h"
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include "i2c_lcd.h"
/* USER CODE END Includes */
/* ===================== PENGATURAN LOGIKA OUTPUT ===================== */
#define ALARM_ON GPIO_PIN_SET
#define ALARM_OFF GPIO_PIN_RESET
#define API_TERDETEKSI GPIO_PIN_SET
#define GAS_THRESHOLD 30
/* ===================== PIN OUTPUT ===================== */
#define BUZZER_PORT GPIOA
#define BUZZER_PIN GPIO_PIN_6
#define LED_PORT GPIOA
#define LED_PIN GPIO_PIN_7
/* ===================== PIN SENSOR API ===================== */
#define API1_PORT GPIOB
#define API1_PIN GPIO_PIN_0
#define API2_PORT GPIOB
#define API2_PIN GPIO_PIN_1
#define API3_PORT GPIOA
#define API3_PIN GPIO_PIN_9
#define API4_PORT GPIOB
#define API4_PIN GPIO_PIN_10
#define API5_PORT GPIOB
#define API5_PIN GPIO_PIN_11
ADC_HandleTypeDef hadc1;
I2C_HandleTypeDef hi2c1;
I2C_LCD_HandleTypeDef hlcd;
uint16_t nilai_gas_adc = 0;
uint16_t nilai_suhu_adc = 0;
int suhu_celcius = 0;
int gas_persen = 0;
char baris1[21];
/* ===================== PROTOTYPE ===================== */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
static void MX_I2C1_Init(void);
uint16_t Read_ADC_Channel(uint32_t channel);
uint8_t Baca_Status_Api(void);
void Output_Aman(void);
void Output_Gas(void);
void Output_Api(void);
void Output_Bahaya(void);
void Tampil_LCD(const char *baris2);
/* ===================== FUNGSI ADC ===================== */
uint16_t Read_ADC_Channel(uint32_t channel)
{
ADC_ChannelConfTypeDef sConfig = {0};
uint16_t adc_value = 0;
sConfig.Channel = channel;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 50);
adc_value = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
return adc_value;
}
/* ===================== SENSOR API ===================== */
uint8_t Baca_Status_Api(void)
{
if ((HAL_GPIO_ReadPin(API1_PORT, API1_PIN) == API_TERDETEKSI) ||
(HAL_GPIO_ReadPin(API2_PORT, API2_PIN) == API_TERDETEKSI) ||
(HAL_GPIO_ReadPin(API3_PORT, API3_PIN) == API_TERDETEKSI) ||
(HAL_GPIO_ReadPin(API4_PORT, API4_PIN) == API_TERDETEKSI) ||
(HAL_GPIO_ReadPin(API5_PORT, API5_PIN) == API_TERDETEKSI))
return 1;
else
return 0;
}
/* ===================== OUTPUT ===================== */
void Output_Aman(void)
{
HAL_GPIO_WritePin(LED_PORT, LED_PIN, ALARM_OFF);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, ALARM_OFF);
}
void Output_Gas(void)
{
HAL_GPIO_WritePin(LED_PORT, LED_PIN, ALARM_ON);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, ALARM_OFF);
}
void Output_Api(void)
{
HAL_GPIO_WritePin(LED_PORT, LED_PIN, ALARM_ON);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, ALARM_ON);
}
void Output_Bahaya(void)
{
HAL_GPIO_WritePin(LED_PORT, LED_PIN, ALARM_ON);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, ALARM_ON);
}
/* ===================== LCD ===================== */
void Tampil_LCD(const char *baris2)
{
lcd_gotoxy(&hlcd, 0, 0);
sprintf(baris1, "T:%02d%cC Gas:%02d%%", suhu_celcius, 223, gas_persen);
lcd_puts(&hlcd, baris1);
lcd_gotoxy(&hlcd, 0, 1);
lcd_puts(&hlcd, baris2);
}
/* ===================== MAIN ===================== */
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
MX_I2C1_Init();
HAL_ADCEx_Calibration_Start(&hadc1);
hlcd.hi2c = &hi2c1;
hlcd.address = 0x4E;
lcd_init(&hlcd);
Output_Aman();
while (1)
{
nilai_suhu_adc = Read_ADC_Channel(ADC_CHANNEL_1);
suhu_celcius = nilai_suhu_adc / 30;
if (suhu_celcius > 99) suhu_celcius = 99;
nilai_gas_adc = Read_ADC_Channel(ADC_CHANNEL_0);
gas_persen = (nilai_gas_adc * 100) / 4095;
if (gas_persen > 99) gas_persen = 99;
uint8_t status_gas = (gas_persen >= GAS_THRESHOLD);
uint8_t status_api = Baca_Status_Api();
if (status_api && status_gas)
{
Output_Bahaya();
Tampil_LCD("BAHAYA API+GAS!");
}
else if (status_api)
{
Output_Api();
Tampil_LCD("Api TERDETEKSI!");
}
else if (status_gas)
{
Output_Gas();
Tampil_LCD("Peringatan GAS!");
}
else
{
Output_Aman();
Tampil_LCD("Status: AMAN");
}
HAL_Delay(300);
}
}
4.Kesimpulan dan Saran[Kembali]
Kesimpulan
Berdasarkan hasil perancangan dan implementasi sistem keamanan pintar berbasis mikrokontroler STM32, dapat disimpulkan bahwa sistem ini mampu bekerja secara efektif dalam mendeteksi potensi bahaya kebakaran dan kebocoran gas LPG. Sistem memanfaatkan sensor NTC untuk memantau kenaikan suhu, sensor MQ-2 untuk mendeteksi keberadaan gas mudah terbakar di udara, serta flame sensor untuk mendeteksi percikan atau nyala api berbasis radiasi inframerah. Data dari masing-masing sensor diproses oleh STM32 dan ditampilkan secara real-time melalui LCD 16x2 I2C, sehingga pengguna dapat memantau kondisi lingkungan dengan mudah. Ketika terdeteksi kondisi berbahaya yang melebihi ambang batas, sistem secara otomatis mengaktifkan LED merah dan buzzer sebagai peringatan visual dan audio. Dengan demikian, sistem ini mampu memberikan peringatan dini terhadap potensi kebakaran, sehingga dapat meningkatkan tingkat keselamatan dan meminimalkan risiko kerugian akibat kebakaran di lingkungan rumah tangga maupun area dapur.
Saran
1. Sistem dapat dikembangkan lebih lanjut dengan menambahkan modul komunikasi nirkabel (seperti Wi-Fi atau GSM) agar peringatan dapat dikirim ke smartphone pengguna.
2. Diperlukan kalibrasi sensor secara berkala, khususnya sensor MQ-2 dan NTC, untuk menjaga akurasi pembacaan dalam jangka panjang.
3. Untuk mengurangi kemungkinan false alarm, sistem dapat ditingkatkan dengan metode pengolahan data tambahan seperti filtering atau logika keputusan berbasis kombinasi beberapa sensor.
4. Penambahan catu daya cadangan (battery backup) disarankan agar sistem tetap berfungsi saat terjadi pemadaman listrik.
5. Desain mekanik dan penempatan sensor perlu dioptimalkan agar sensor flame tidak terpengaruh oleh cahaya luar dan sensor gas berada pada posisi yang tepat untuk mendeteksi kebocoran LPG.
6. Sistem dapat dikembangkan menjadi lebih komprehensif dengan menambahkan aktuator otomatis, seperti katup gas atau relay pemutus listrik, untuk meningkatkan tingkat keamanan secara akti

.jpeg)