PROJECT MODUL 4 MIKRO



Prototype Sistem Peringatan Dini Tanah Longsor dan Kebakaran Berbasis STM32 Blue Pill sebagai Media Edukasi Mitigasi Bencana di Kawasan Batu Busuak

1. Pendahuluan[kembali]

Indonesia merupakan negara yang memiliki tingkat kerawanan bencana alam yang cukup tinggi karena letaknya berada pada pertemuan tiga lempeng tektonik dunia serta memiliki kondisi geografis yang didominasi oleh daerah perbukitan dan pegunungan. Salah satu bencana yang sering terjadi adalah tanah longsor dan kebakaran. Bencana tanah longsor umumnya disebabkan oleh tingginya curah hujan yang mengakibatkan meningkatnya kadar air dalam tanah sehingga menurunkan kestabilan lereng. Sementara itu, kebakaran dapat terjadi akibat faktor alam maupun aktivitas manusia yang menimbulkan kerugian material, kerusakan lingkungan, bahkan korban jiwa.

Kawasan Batu Busuak yang berada di Kecamatan Pauh, Kota Padang, merupakan salah satu daerah yang memiliki topografi berbukit dan berpotensi mengalami bencana tanah longsor, terutama pada musim hujan. Selain itu, aktivitas masyarakat dan kondisi lingkungan juga dapat meningkatkan risiko terjadinya kebakaran. Oleh karena itu, diperlukan suatu upaya mitigasi yang mampu memberikan informasi dan peringatan secara dini kepada masyarakat sehingga dampak bencana dapat diminimalkan.

Perkembangan teknologi mikrokontroler dan sensor saat ini memungkinkan pengembangan sistem peringatan dini yang lebih efektif, murah, dan mudah diterapkan. Salah satu mikrokontroler yang banyak digunakan adalah STM32 Blue Pill yang memiliki kemampuan pemrosesan data yang baik serta kompatibel dengan berbagai jenis sensor. Dengan memanfaatkan sensor getaran SW-420, sensor kemiringan SW-520D, sensor kelembaban tanah kapasitif, sensor api (flame sensor), dan sensor gas MQ-2, kondisi lingkungan yang berpotensi menyebabkan tanah longsor maupun kebakaran dapat dipantau secara real-time.

Sistem peringatan dini yang dirancang bekerja dengan cara mendeteksi perubahan parameter lingkungan yang menjadi indikator terjadinya bencana. Sensor kelembaban tanah digunakan untuk mengetahui tingkat kejenuhan air pada tanah, sensor getaran dan kemiringan digunakan untuk mendeteksi pergerakan lereng, sedangkan sensor api dan sensor gas digunakan untuk mendeteksi adanya indikasi kebakaran. Data yang diperoleh dari sensor akan diproses oleh STM32 Blue Pill untuk menentukan status kondisi lingkungan. Apabila terdeteksi kondisi yang berpotensi menimbulkan bencana, sistem akan memberikan peringatan melalui buzzer dan menampilkan informasi pada LCD sehingga pengguna dapat segera mengambil tindakan yang diperlukan.

Selain berfungsi sebagai alat pemantauan, sistem ini juga dirancang sebagai media edukasi mitigasi bencana. Melalui prototype yang dikembangkan, masyarakat, pelajar, maupun mahasiswa dapat memahami prinsip kerja sistem peringatan dini serta pentingnya kesiapsiagaan dalam menghadapi bencana alam. Media edukasi yang bersifat interaktif diharapkan mampu meningkatkan kesadaran masyarakat terhadap risiko tanah longsor dan kebakaran serta langkah-langkah mitigasi yang harus dilakukan.

Berdasarkan permasalahan tersebut, maka dirancang sebuah "Prototype Sistem Peringatan Dini Tanah Longsor dan Kebakaran Berbasis STM32 Blue Pill sebagai Media Edukasi Mitigasi Bencana di Kawasan Batu Busuak" yang mampu mendeteksi potensi terjadinya tanah longsor dan kebakaran secara dini melalui integrasi berbagai sensor. Prototype ini diharapkan dapat menjadi sarana pembelajaran sekaligus memberikan gambaran penerapan teknologi Internet of Things (IoT) dan sistem embedded dalam bidang mitigasi bencana guna meningkatkan kesiapsiagaan masyarakat terhadap ancaman bencana di lingkungan sekitar.


2. Tujuan [kembali]

Tujuan dari pembuatan Prototype Sistem Peringatan Dini Tanah Longsor dan Kebakaran Berbasis STM32 Blue Pill sebagai Media Edukasi Mitigasi Bencana di Kawasan Batu Busuak adalah sebagai berikut:

Tujuan Umum

Merancang dan membangun sebuah prototype sistem peringatan dini yang mampu mendeteksi potensi terjadinya tanah longsor dan kebakaran serta memberikan informasi peringatan kepada pengguna sebagai upaya mitigasi bencana di kawasan Batu Busuak.

Tujuan Khusus

  1. Merancang sistem peringatan dini berbasis mikrokontroler STM32 Blue Pill yang terintegrasi dengan sensor getaran, sensor kemiringan, sensor kelembaban tanah, sensor api, dan sensor gas.
  2. Mengimplementasikan sensor SW-420, SW-520D, Capacitive Soil Moisture Sensor, Flame Sensor, dan MQ-2 untuk mendeteksi parameter lingkungan yang berpotensi menyebabkan tanah longsor dan kebakaran.
  3. Mengembangkan sistem yang mampu memberikan peringatan secara dini melalui tampilan LCD dan alarm buzzer ketika terdeteksi kondisi yang berbahaya.
  4. Menganalisis kinerja sistem dalam mendeteksi kondisi normal, potensi tanah longsor, potensi kebakaran, maupun kondisi gabungan berdasarkan data yang diperoleh dari sensor.
  5. Menjadikan prototype sebagai media edukasi mitigasi bencana yang dapat membantu meningkatkan pemahaman masyarakat, pelajar, dan mahasiswa mengenai pentingnya sistem peringatan dini dalam mengurangi risiko bencana.
  6. Memberikan gambaran penerapan teknologi embedded system dan sensor cerdas dalam mendukung upaya mitigasi bencana berbasis teknologi.

3. Alat dan Komponen [kembali]

ALAT :

                                              

                                                                   STM32F103C8

Microcontroller

ARM Cortex-M3

Operating Voltage

3.3 V

Input Voltage (recommended)

5 V

Input Voltage (limit)

2 3.6 V

Digital I/O Pins

32

PWM Digital I/O Pins

15

Analog Input Pins

10 (dengan resolusi 12-bit ADC)

DC Current per I/O Pin

25 mA

DC Current for 3.3V Pin

150 mA

Flash Memory

64 KB

SRAM

20 KB

EEPROM

Emulasi dalam Flash

Clock Speed

72 MHz


INPUT :

1. Sensor SW-420 (Sensor Getar)

Gambar 3.1 Sensor SW-420

Kegunaan:

  • Mendeteksi getaran atau pergerakan tanah. 
  • Digunakan sebagai indikator awal terjadinya tanah longsor. 
  • Jika lereng mulai bergerak atau bergetar, sensor akan mengirim sinyal ke STM32 Blue Pill.


2. Capacitive Soil Moisture Sensor

Gambar 3.2 Sensor Soil Moisture


Kegunaan:

  • Mengukur kelembaban tanah. 
  • Tanah yang terlalu basah memiliki risiko longsor lebih tinggi.
Grafik sensor :
Gambar 3.3 Grafik Sensor Soil Moisture

Grafik menunjukkan bahwa semakin tinggi tegangan keluaran sensor, semakin tinggi pula kadar air dalam tanah. Hasil kalibrasi sangat sesuai dengan karakteristik pabrikan (R² = 0,993), sehingga sensor dapat digunakan untuk mengukur kelembapan tanah dengan akurasi yang baik. Hubungan antara tegangan output dan kelembapan tanah bersifat non-linear, terutama pada kondisi tanah yang sangat basah


3. Flame Sensor

Gambar 3.4 Sensor Flame

Kegunaan:

  • Mendeteksi adanya api atau nyala kebakaran. 
  • Sensor bekerja dengan mendeteksi cahaya inframerah dari api.

4. Sensor Gas MQ-2

Gambar 3.5 Sensor Gas MQ-2

Kegunaan:

  • Mendeteksi asap, gas LPG, dan gas mudah terbakar. 
  • Digunakan untuk mengetahui adanya kebocoran gas atau asap kebakaran.

Grafik Sensor:

Gambar 3.6 Grafik Sensor Gas MQ-2

Grafik sensitivitas MQ-2 menunjukkan hubungan antara konsentrasi gas dan rasio resistansi sensor (Rs/Ro). Semakin tinggi konsentrasi gas, nilai Rs/Ro semakin kecil karena resistansi sensor menurun. Sensor MQ-2 paling sensitif terhadap LPG, propana, dan hidrogen, sehingga sangat cocok digunakan untuk sistem deteksi kebocoran gas dan peringatan dini kebakaran. Kurva ini juga digunakan sebagai acuan kalibrasi untuk mengubah pembacaan sensor menjadi nilai konsentrasi gas dalam satuan ppm.

Gambar 3.7 Grafik respon sensor gas terhadap ppm

Grafik ini menunjukkan respon sensor gas MQ-2 terhadap gas LPG dengan hubungan antara konsentrasi gas (ppm) di sumbu X dan tegangan keluaran sensor (V) di sumbu Y, dengan Vref = 5VSemakin besar konsentrasi LPG (ppm), maka tegangan output sensor semakin naik. Hubungannya tidak linier, tetapi melengkung (non-linear) karena karakteristik sensor gas MQ-2 bersifat logaritmik.

OUTPUT :

1. Buzzer

Gambar 3.7 Buzzer

Fungsi:

  • Mengeluarkan alarm suara saat kondisi bahaya terdeteksi.

2. Relay + Exhaust Fan

Gambar 3.8 Fan

Gambar 3.8 Relay

Fungsi:

  • Mengaktifkan kipas otomatis saat terdeteksi asap/gas.

3. Relay + Mini Water Pump

Gambar 3.9 Relay

Gambar 3.10 Pompa Air

Fungsi:

  • Menyalakan pompa air otomatis saat flame sensor mendeteksi api.

4. LCD 16x2 I2C

Gambar 3.11 LCD I2C

Fungsi:

  • Menampilkan informasi kondisi sistem: 

              Aman 

             Waspada 

             Bahaya Longsor 

             Kebakaran Terdeteksi

4. Landasan Teori [kembali]

Mitigasi bencana merupakan serangkaian upaya yang dilakukan untuk mengurangi risiko dan dampak yang ditimbulkan oleh suatu bencana, baik melalui pembangunan fisik maupun peningkatan kesadaran dan kemampuan masyarakat dalam menghadapi ancaman bencana. Menurut Undang-Undang Republik Indonesia Nomor 24 Tahun 2007 tentang Penanggulangan Bencana, mitigasi adalah upaya yang dilakukan untuk mengurangi risiko bencana melalui pembangunan fisik, penyadaran, dan peningkatan kemampuan menghadapi ancaman bencana.

Penerapan sistem peringatan dini merupakan salah satu bentuk mitigasi struktural yang bertujuan memberikan informasi kepada masyarakat sebelum bencana terjadi sehingga tindakan pencegahan dan evakuasi dapat dilakukan lebih cepat. Dalam penelitian ini, sistem peringatan dini digunakan sebagai media edukasi mitigasi bencana tanah longsor dan kebakaran di kawasan Batu Busuak.

Sistem Peringatan Dini atau Early Warning System (EWS) adalah suatu sistem yang dirancang untuk mendeteksi gejala awal terjadinya suatu bencana dan memberikan informasi peringatan kepada masyarakat sebelum bencana tersebut terjadi. Sistem ini berfungsi untuk meningkatkan kesiapsiagaan masyarakat sehingga dapat meminimalkan korban jiwa maupun kerugian material.

Komponen utama dalam sistem peringatan dini meliputi:

  1. Sensor sebagai alat pendeteksi kondisi lingkungan.
  2. Pengolah data (mikrokontroler).
  3. Sistem komunikasi atau penyampaian informasi.
  4. Perangkat alarm atau indikator peringatan.

Pada penelitian ini, sensor berfungsi untuk mendeteksi perubahan kondisi lingkungan, STM32 Blue Pill bertindak sebagai pengolah data, sedangkan LCD dan buzzer digunakan sebagai media penyampaian informasi dan peringatan.

Tanah longsor merupakan peristiwa perpindahan massa tanah atau batuan dari tempat yang lebih tinggi ke tempat yang lebih rendah akibat gangguan kestabilan lereng. Longsor sering terjadi pada daerah perbukitan yang memiliki kemiringan lereng tinggi dan curah hujan yang besar.

Beberapa faktor yang dapat menyebabkan tanah longsor antara lain:

  1. Curah hujan yang tinggi.
  2. Kemiringan lereng yang curam.
  3. Getaran akibat gempa atau aktivitas manusia.
  4. Erosi tanah.
  5. Berkurangnya vegetasi penahan tanah.

Pada penelitian ini, potensi longsor dideteksi berdasarkan tiga parameter utama yaitu getaran tanah, perubahan kemiringan lereng, dan tingkat kelembaban tanah.

Kebakaran adalah suatu peristiwa terjadinya nyala api yang tidak terkendali sehingga dapat menimbulkan kerugian baik terhadap manusia, lingkungan maupun infrastruktur. Kebakaran terjadi karena adanya tiga unsur utama yang dikenal sebagai Segitiga Api (Fire Triangle), yaitu:

  1. Bahan bakar (Fuel)
  2. Oksigen (Oxygen)
  3. Sumber panas (Heat)

Apabila ketiga unsur tersebut bertemu maka akan terjadi proses pembakaran.

Pada penelitian ini, kebakaran dideteksi menggunakan Flame Sensor untuk mendeteksi nyala api dan Sensor MQ-2 untuk mendeteksi asap atau gas hasil pembakaran.


5. Flowchart dan Listing Program [kembali]


Gambar 5.1 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 ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */

#include "liquidcrystal_i2c.h" // Driver LCD I2C

#include <stdio.h> // Diperlukan untuk fungsi sprintf

/* USER CODE END Includes */


/* Private typedef -----------------------------------------------------------*/

/* USER CODE BEGIN PTD */


/* USER CODE END PTD */


/* Private define ------------------------------------------------------------*/

/* USER CODE BEGIN PD */


/* USER CODE END PD */


/* Private macro -------------------------------------------------------------*/

/* USER CODE BEGIN PM */


/* USER CODE END PM */


/* Private variables ---------------------------------------------------------*/

ADC_HandleTypeDef hadc1;


I2C_HandleTypeDef hi2c1;


/* USER CODE BEGIN PV */

uint8_t status_terakhir = 99; // Variabel penanda agar LCD tidak berkedip (flicker)


/* Variabel Sensor Gas (PA0) */

uint32_t adc_gas_raw = 0;

uint8_t gas_persen = 0;


/* Variabel Sensor Soil (PA1) */

uint32_t adc_soil_raw = 0;

uint8_t soil_persen = 0;


char lcd_buffer[20]; // Buffer string untuk LCD (aman dari format-overflow)

/* USER CODE END PV */


/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_ADC1_Init(void);

static void MX_I2C1_Init(void);

/* USER CODE BEGIN PFP */

uint32_t ADC_Read_Channel(uint32_t channel); // Fungsi kustom untuk ganti channel ADC secara manual

/* USER CODE END PFP */


/* Private user code ---------------------------------------------------------*/

/* USER CODE BEGIN 0 */

/**

* @brief Fungsi untuk membaca spesifik channel ADC secara bergantian

* @param channel: ADC_CHANNEL_0, ADC_CHANNEL_1, dll.

* @retval Nilai mentah ADC (0 - 4095)

*/

uint32_t ADC_Read_Channel(uint32_t channel)

{

ADC_ChannelConfTypeDef sConfig = {0};

uint32_t adc_val = 0;


sConfig.Channel = channel;

sConfig.Rank = ADC_REGULAR_RANK_1;

sConfig.SamplingTime = ADC_SAMPLETIME_7CYCLES_5;


if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)

{

Error_Handler();

}


HAL_ADC_Start(&hadc1);

if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK)

{

adc_val = HAL_ADC_GetValue(&hadc1);

}

HAL_ADC_Stop(&hadc1);


return adc_val;

}

/* USER CODE END 0 */


/**

* @brief The application entry point.

* @retval int

*/

int main(void)

{


/* USER CODE BEGIN 1 */


/* USER CODE END 1 */


/* MCU Configuration--------------------------------------------------------*/


/* Reset of all peripherals, Initializes the Flash interface and the Systick. */

HAL_Init();


/* USER CODE BEGIN Init */


/* USER CODE END Init */


/* Configure the system clock */

SystemClock_Config();


/* USER CODE BEGIN SysInit */


/* USER CODE END SysInit */


/* Initialize all configured peripherals */

MX_GPIO_Init();

MX_ADC1_Init();

MX_I2C1_Init();

/* USER CODE BEGIN 2 */


/* Inisialisasi awal LCD I2C */

HD44780_Init(2);

HD44780_Clear();

HD44780_Backlight();


/* USER CODE END 2 */


/* Infinite loop */

/* USER CODE BEGIN WHILE */

while (1)

{

/* =======================================================

PROSES MEMBACA MULTI-CHANNEL ADC SENSOR (GAS & SOIL)

======================================================= */

// 1. Baca Sensor Gas di PA0 (Channel 0)

adc_gas_raw = ADC_Read_Channel(ADC_CHANNEL_0);

gas_persen = (uint8_t)((adc_gas_raw * 100) / 4095);


// 2. Baca Sensor Soil di PA1 (Channel 1)

adc_soil_raw = ADC_Read_Channel(ADC_CHANNEL_1);

soil_persen = (uint8_t)(((4095 - adc_soil_raw) * 100) / 4095);


/* --- Membaca Logika Digital Sensor Bencana --- */

uint8_t flame_terdeteksi = (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2) == GPIO_PIN_RESET); // PA2 Aktif LOW

uint8_t getaran_terdeteksi = (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_3) == GPIO_PIN_SET); // PA3 Aktif HIGH


/* =======================================================

LOGIKA KONTROL PIN OUTPUT BERDASARKAN KONDISI SENSOR

======================================================= */


// 1. Kontrol Pin PB11 (Buzzer) -> Aktif jika Kebakaran OR Longsor OR Gas >= 70% OR Soil > 50%

if (flame_terdeteksi || getaran_terdeteksi || (gas_persen >= 70) || (soil_persen > 50)) {

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_SET);

} else {

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET);

}


// 2. Kontrol Pin PB1 -> Aktif HANYA jika terdeteksi Kebakaran

if (flame_terdeteksi) {

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);

} else {

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

}


// 3. Kontrol Pin PB10 -> MATI jika PA3 Aktif, sebaliknya aktif jika Gas >= 70%

if (getaran_terdeteksi) {

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET); // Jika PA3 aktif (Longsor), matikan PB10

} else if (gas_persen >= 70) {

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET); // Jika PA3 aman, PB10 menyala jika gas pekat

} else {

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET); // Jika semua aman, matikan PB10

}



/* =======================================================

LOGIKA MANAJEMEN TAMPILAN LCD (PRIORITAS BENCANA)

======================================================= */


// JIKA TERDETEKSI KEBAKARAN (Prioritas Utama)

if (flame_terdeteksi)

{

if (status_terakhir != 1)

{

HD44780_Clear();

HD44780_SetCursor(0, 0);

HD44780_PrintStr("EWS BENCANA");

HD44780_SetCursor(0, 1);

HD44780_PrintStr("!!! KEBAKARAN !!!");

status_terakhir = 1;

}

}


// JIKA TERDETEKSI TANAH LONGSOR (Prioritas Kedua)

else if (getaran_terdeteksi)

{

if (status_terakhir != 2)

{

HD44780_Clear();

HD44780_SetCursor(0, 0);

HD44780_PrintStr("EWS BENCANA");

HD44780_SetCursor(0, 1);

HD44780_PrintStr("!TANAH LONGSOR!");

status_terakhir = 2;

}

}


// KONDISI AMAN (Tampilkan Persentase Gas dan Soil secara berdampingan)

else

{

if (status_terakhir != 0)

{

HD44780_Clear();

HD44780_SetCursor(0, 0);

HD44780_PrintStr("EWS BENCANA");

status_terakhir = 0;

}


/* Tampilkan nilai G:XX% dan S:XX% di baris kedua secara real-time */

HD44780_SetCursor(0, 1);

sprintf(lcd_buffer, "G:%3d%% S:%3d%% ", gas_persen, soil_persen);

HD44780_PrintStr(lcd_buffer);

}


HAL_Delay(250); // Jeda refresh rate


/* USER CODE END WHILE */


/* USER CODE BEGIN 3 */

}

/* USER CODE END 3 */

}


/**

* @brief System Clock Configuration

* @retval None

*/

void SystemClock_Config(void)

{

RCC_OscInitTypeDef RCC_OscInitStruct = {0};

RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};


/** Initializes the RCC Oscillators according to the specified parameters

* in the RCC_OscInitTypeDef structure.

*/

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;

RCC_OscInitStruct.HSIState = RCC_HSI_ON;

RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

{

Error_Handler();

}


/** Initializes the CPU, AHB and APB buses clocks

*/

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;


if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)

{

Error_Handler();

}

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;

PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;

if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)

{

Error_Handler();

}

}


/**

* @brief ADC1 Initialization Function

* @param None

* @retval None

*/

static void MX_ADC1_Init(void)

{


/* USER CODE BEGIN ADC1_Init 0 */


/* USER CODE END ADC1_Init 0 */


ADC_ChannelConfTypeDef sConfig = {0};


/* USER CODE BEGIN ADC1_Init 1 */


/* USER CODE END ADC1_Init 1 */


/** Common config

*/

hadc1.Instance = ADC1;

hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;

hadc1.Init.ContinuousConvMode = DISABLE;

hadc1.Init.DiscontinuousConvMode = DISABLE;

hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;

hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;

hadc1.Init.NbrOfConversion = 1;

if (HAL_ADC_Init(&hadc1) != HAL_OK)

{

Error_Handler();

}


/** Configure Regular Channel

*/

sConfig.Channel = ADC_CHANNEL_0;

sConfig.Rank = ADC_REGULAR_RANK_1;

sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;

if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)

{

Error_Handler();

}

/* USER CODE BEGIN ADC1_Init 2 */


/* USER CODE END ADC1_Init 2 */


}


/**

* @brief I2C1 Initialization Function

* @param None

* @retval None

*/

static void MX_I2C1_Init(void)

{


/* USER CODE BEGIN I2C1_Init 0 */


/* USER CODE END I2C1_Init 0 */


/* USER CODE BEGIN I2C1_Init 1 */


/* USER CODE END I2C1_Init 1 */

hi2c1.Instance = I2C1;

hi2c1.Init.ClockSpeed = 100000;

hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;

hi2c1.Init.OwnAddress1 = 0;

hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;

hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;

hi2c1.Init.OwnAddress2 = 0;

hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;

hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;

if (HAL_I2C_Init(&hi2c1) != HAL_OK)

{

Error_Handler();

}

/* USER CODE BEGIN I2C1_Init 2 */


/* USER CODE END I2C1_Init 2 */


}


/**

* @brief GPIO Initialization Function

* @param None

* @retval None

*/

static void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};

/* USER CODE BEGIN MX_GPIO_Init_1 */


/* USER CODE END MX_GPIO_Init_1 */


/* GPIO Ports Clock Enable */

__HAL_RCC_GPIOD_CLK_ENABLE();

__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();


/*Configure GPIO pin Output Level */

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1|GPIO_PIN_10|GPIO_PIN_11, GPIO_PIN_RESET);


/*Configure GPIO pins : PA2 PA3 */

GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


/*Configure GPIO pins : PB1 PB10 PB11 */

GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_10|GPIO_PIN_11;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);


/* USER CODE BEGIN MX_GPIO_Init_2 */


/* USER CODE END MX_GPIO_Init_2 */

}


/* USER CODE BEGIN 4 */


/* USER CODE END 4 */


/**

* @brief This function is executed in case of error occurrence.

* @retval None

*/

void Error_Handler(void)

{

/* USER CODE BEGIN Error_Handler_Debug */

/* User can add his own implementation to report the HAL error return state */

__disable_irq();

while (1)

{

}

/* USER CODE END Error_Handler_Debug */

}


#ifdef USE_FULL_ASSERT

/**

* @brief Reports the name of the source file and the source line number

* where the assert_param error has occurred.

* @param file: pointer to the source file name

* @param line: assert_param error line source number

* @retval None

*/

void assert_failed(uint8_t *file, uint32_t line)

{

/* USER CODE BEGIN 6 */

/* User can add his own implementation to report the file name and line number,

ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

/* USER CODE END 6 */

}

#endif /* USE_FULL_ASSERT */

main.h

/* USER CODE BEGIN Header */

/**

******************************************************************************

* @file : main.h

* @brief : Header for main.c file.

* This file contains the common defines of the application.

******************************************************************************

* @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 */


/* Define to prevent recursive inclusion -------------------------------------*/

#ifndef __MAIN_H

#define __MAIN_H


#ifdef __cplusplus

extern "C" {

#endif


/* Includes ------------------------------------------------------------------*/

#include "stm32f1xx_hal.h"


/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */


/* USER CODE END Includes */


/* Exported types ------------------------------------------------------------*/

/* USER CODE BEGIN ET */


/* USER CODE END ET */


/* Exported constants --------------------------------------------------------*/

/* USER CODE BEGIN EC */


/* USER CODE END EC */


/* Exported macro ------------------------------------------------------------*/

/* USER CODE BEGIN EM */


/* USER CODE END EM */


/* Exported functions prototypes ---------------------------------------------*/

void Error_Handler(void);


/* USER CODE BEGIN EFP */


/* USER CODE END EFP */


/* Private defines -----------------------------------------------------------*/


/* USER CODE BEGIN Private defines */


/* USER CODE END Private defines */


#ifdef __cplusplus

}

#endif


#endif /* __MAIN_H */

6. Rangkaian Simulasi dan Prinsip Kerja[kembali]

Gambar 6.1 Rangkaian Proteus

Prinsip kerja sistem dimulai ketika STM32 Blue Pill mengaktifkan seluruh sensor. Sensor SW-420 membaca adanya getaran yang dapat mengindikasikan pergerakan tanah. Sensor Soil Moisture mengukur kadar air tanah yang menjadi salah satu indikator potensi longsor.

Apabila kelembaban tanah tinggi, dan disertai getaran,maka STM32 akan mengidentifikasi kondisi tersebut sebagai potensi tanah longsor.

Untuk deteksi kebakaran, Flame Sensor digunakan untuk mendeteksi nyala api secara langsung. Sensor MQ-2 digunakan untuk mendeteksi asap dan gas hasil pembakaran. Jika salah satu atau kedua sensor mendeteksi indikasi kebakaran, STM32 akan mengaktifkan alarm.

Selanjutnya data kondisi yang diperoleh akan ditampilkan pada LCD. Buzzer akan aktif sebagai peringatan dini apabila kondisi bahaya terdeteksi.

Output sistem terdiri dari:

  • Tampilan status pada LCD
  • Bunyi alarm buzzer
  • Informasi kondisi normal atau bahaya

7. Video Simulasi [kembali]

Video Demo Rangkaian

Video Simulasi Proteus

Video Edukasi di Huntara

8. Download File [kembali]

 

Komentar

Postingan populer dari blog ini