Langsung ke konten utama

MODUL 4



1. Pendahuluan [Kembali]

Program Makan Bergizi Gratis (MBG) merupakan program pemerintah yang bertujuan untuk meningkatkan gizi masyarakat, khususnya anak sekolah, melalui penyediaan makanan secara rutin dan dalam skala besar. Untuk memenuhi kebutuhan tersebut, dapur-dapur MBG, termasuk yang berada di Kecamatan Pauh, dituntut untuk beroperasi setiap hari dengan intensitas tinggi, mulai dari proses memasak dalam jumlah besar hingga penggunaan peralatan dapur seperti kompor gas, tungku, dan peralatan listrik secara terus-menerus.

Tingginya intensitas penggunaan peralatan tersebut menimbulkan risiko bahaya yang cukup signifikan, terutama risiko kebakaran dan kebocoran gas LPG. Penggunaan kompor gas dalam jumlah banyak dengan waktu pengoperasian yang lama dapat meningkatkan potensi kebocoran pada sambungan regulator atau selang gas. Selain itu, ruang dapur yang padat aktivitas sering membuat petugas kurang menyadari adanya kebocoran gas atau awal mula kebakaran karena fokus pada pekerjaan memasak. Di sisi lain, minimnya sistem peringatan dini (early warning system) pada dapur skala menengah seperti dapur MBG menyebabkan deteksi bahaya masih mengandalkan kewaspadaan manual petugas, yang tentunya memiliki keterbatasan.

Apabila terjadi insiden kebakaran atau kebocoran gas, dampak yang ditimbulkan dapat sangat besar, baik berupa kerugian materi seperti peralatan dapur, bahan baku, dan bangunan, terganggunya distribusi makanan bergizi kepada penerima manfaat, maupun risiko cedera hingga korban jiwa bagi petugas dapur. Mengingat dapur MBG melibatkan banyak orang dan beroperasi secara rutin dalam jangka panjang, maka diperlukan sebuah sistem yang mampu mendeteksi secara dini adanya potensi kebakaran melalui sensor asap atau api, serta kebocoran gas melalui sensor gas, dan memberikan peringatan secepat mungkin kepada petugas. Dengan adanya sistem deteksi ini, potensi bahaya dapat diketahui sejak awal sebelum berkembang menjadi insiden yang lebih besar, sehingga keselamatan petugas, kelangsungan operasional dapur, dan keberlanjutan program MBG di Kecamatan Pauh dapat lebih terjamin.

Berdasarkan latar belakang tersebut, penulis tertarik untuk merancang dan mengimplementasikan Sistem Deteksi Kebakaran dan Kebocoran Gas di Dapur MBG pada daerah Kecamatan Pauh sebagai upaya preventif dalam meningkatkan keselamatan kerja dan mendukung kelancaran operasional dapur penyedia Makan Bergizi Gratis.

2. Tujuan[Kembali]

  • Merancang dan membangun sistem deteksi dini kebakaran dan kebocoran gas pada dapur Makan Bergizi Gratis (MBG) di Kecamatan Pauh untuk meningkatkan keselamatan operasional dapur.
  • Mendeteksi keberadaan asap/api serta kebocoran gas LPG secara real-time menggunakan sensor (misalnya sensor api/flame, sensor asap, dan sensor gas MQ-2/MQ-6).
  • Memberikan peringatan dini (alarm/notifikasi) kepada petugas dapur saat terdeteksi potensi bahaya kebakaran atau kebocoran gas, sehingga tindakan pencegahan dapat dilakukan secepat mungkin.
  • Mengurangi risiko kerugian materi, cedera, maupun korban jiwa akibat kebakaran atau kebocoran gas di dapur MBG.
  • Mendukung penerapan standar keamanan dan kesehatan kerja (K3) pada dapur penyedia Makan Bergizi Gratis di lingkungan Kecamatan Pauh.

  • 3. Alat dan komponen[Kembali]

    1.STM32F103C8T6




    2.Flame module 5 sensor 




    3.MQ-2 Sensor

    4.NTC Sensor


    5.LCD 16x2 dengan Modul I2C



    6.LED Indicator





    7.Buzzer 5V

    8. Resistor


    9. Relay 1 channel

    10. Dioda


    11. Jumper


    12. Motor 5V


    13 .Software Pendukung(STM32CubeIDE)



    4. Landasan Teori[Kembali]

    1. STM32F103C8T6

    STM32F103xx adalah mikrokontroler 32-bit dari STMicroelectronics yang berbasis inti prosesor ARM Cortex-M3. Mikrokontroler ini termasuk dalam kategori performance line yang dirancang untuk aplikasi yang membutuhkan performa komputasi tinggi dengan konsumsi daya rendah. Keluarga ini beroperasi pada tegangan suplai 2,0–3,6V dengan rentang suhu −40°C hingga +105°C, menjadikannya cocok untuk berbagai aplikasi industri maupun konsumer.

    Arsitektur Inti (ARM Cortex-M3)

    Inti ARM Cortex-M3 merupakan prosesor RISC 32-bit generasi terkini untuk sistem embedded. Beberapa karakteristik utamanya:

    • Frekuensi operasi hingga 72 MHz dengan performa 90 DMIPS (1,25 DMIPS/MHz)
    • Instruksi perkalian single-cycle dan pembagian berbasis hardware
    • Nested Vectored Interrupt Controller (NVIC) dengan 43 saluran interrupt yang dapat dimasking dan 16 level prioritas
    • Latensi pemrosesan interrupt serendah 6 siklus CPU dengan dukungan tail chaining

    Arsitektur Harvard yang digunakan memisahkan bus instruksi (Ibus) dan bus data (Dbus), sehingga pengambilan instruksi dan akses data dapat berlangsung secara paralel melalui BusMatrix 64-bit, meningkatkan efisiensi eksekusi program secara keseluruhan.

    Memori

    STM32F103xx dilengkapi dua jenis memori internal:

    Flash Memory berfungsi sebagai penyimpanan program permanen dengan kapasitas 32–128 KB. Waktu pemrograman per word mencapai 20–40 µs, waktu erase per halaman (1 KB) 20–40 ms, dan data retention terjamin hingga 30 tahun pada suhu 85°C dengan endurance minimal 10.000 siklus tulis/hapus.

    SRAM berkapasitas 6–20 KB, dapat diakses pada kecepatan penuh CPU clock (72 MHz) tanpa wait state, sehingga eksekusi kode dari RAM memberikan konsumsi daya yang jauh lebih rendah dibanding eksekusi dari Flash.

    STM32F103xx memiliki sistem manajemen clock yang fleksibel dengan beberapa sumber clock:

    • HSE (High Speed External): kristal/resonator 4–16 MHz untuk akurasi tinggi
    • HSI (High Speed Internal): RC internal 8 MHz dengan akurasi ±1% pada 25°C dan startup time 1–2 µs
    • LSE (Low Speed External): kristal 32,768 kHz untuk RTC
    • LSI (Low Speed Internal): RC internal 30–60 kHz untuk watchdog
    • PLL: mengalikan frekuensi input hingga menghasilkan clock CPU maksimum 72 MHz (VCO 32–144 MHz, lock time ~200 µs)

    Prescaler bertingkat memungkinkan konfigurasi frekuensi bus AHB (maks. 72 MHz), APB2 (maks. 72 MHz), dan APB1 (maks. 36 MHz) secara independen.

    2. Flame Sensor


    Sensor api adalah fototransistor NPN silicon berkecepatan tinggi dalam kemasan standar 5mm. Prinsip kerjanya memanfaatkan sensitivitas komponen terhadap radiasi inframerah lapisan epoksi hitam pada badan sensor menjadi filter alami yang hanya meloloskan cahaya inframerah (panjang gelombang puncak 940 nm, rentang 760–1100 nm).

    Ketika api atau sumber cahaya inframerah terdeteksi, radiasi yang diterima menyebabkan arus kolektor meningkat secara proporsional. Semakin kuat irradiance yang diterima, semakin besar arus kolektor (Ic). Tegangan kerja maksimum kolektor-emiter (VCEO) adalah 30V dengan arus kolektor maksimum 20 mA, dan disipasi daya maksimum 75 mW pada suhu ruang 25°C. Sensor ini beroperasi pada rentang suhu −25°C hingga +85°C.

    Spesifikasi


    Grafik Respon Sensor


    3. MQ-2 Sensor


    MQ-2 adalah sensor semikonduktor berbahan SnO₂ (tin dioxide) yang konduktivitasnya rendah di udara bersih, namun meningkat seiring naiknya konsentrasi gas yang mudah terbakar di sekitarnya. Prinsip ini memungkinkan konversi perubahan konduktivitas menjadi sinyal tegangan output melalui rangkaian pembagi tegangan sederhana.
    Sensor ini sensitif terhadap propana, asap, metana, alkohol, dan gas mudah terbakar lainnya pada rentang deteksi 300–10.000 ppm. Memerlukan dua tegangan masukan: tegangan pemanas (VH = 5V ±0,1V) untuk menstabilkan suhu kerja elemen sensing, dan tegangan sirkuit (VC ≤ 24V DC). Output tegangan pada 2.000 ppm propana adalah 2,5V–4,0V dengan resistansi beban RL yang dapat disesuaikan.

    Waktu pemanasan awal (preheat) minimal 48 jam diperlukan agar sensor mencapai kestabilan. Sensor ini memiliki umur pakai hingga 10 tahun dalam kondisi normal.

    Catatan penting: Sensor MQ-2 wajib dihindarkan dari paparan uap silikon organik, gas korosif tinggi (H₂S, SOâ‚“, Cl₂, HCl), garam alkali, halogen, dan air karena semua zat tersebut dapat menurunkan sensitivitas secara permanen atau irreversible.

    Spesifikasi :


     Grafik Respon Sensor :


    4. NTC Sensor

    NTC (Negative Temperature Coefficient) adalah termistor semikonduktor yang resistansinya menurun secara eksponensial seiring kenaikan suhu. Sensor Danfoss NTC 100K memiliki resistansi nominal 100.000 Ω (100 kΩ) pada suhu 25°C dan konstanta B (0/100) sebesar 4.036 K.

    Hubungan resistansi–suhu mengikuti persamaan Steinhart-Hart atau pendekatan β-equation:

    R(T) = R₀ · e^(B · (1/T − 1/T₀))

    di mana T adalah suhu dalam Kelvin dan R₀ adalah resistansi pada suhu referensi T₀ (25°C = 298,15 K). Sebagai contoh praktis: pada 0°C resistansinya 334.000 Ω, pada 50°C turun menjadi 35.270 Ω, dan pada 100°C menjadi hanya 6.369 Ω.

    Sensor ini dikemas dalam tabung tembaga C105 berdiameter 8 mm, berperingkat IP68 (kedap air penuh), dengan rentang suhu operasi −40°C hingga +200°C. Toleransi akurasi pengukuran adalah ±1°C untuk suhu −40°C hingga 90°C, ±2,5°C hingga 150°C, dan ±3,5°C hingga 200°C.

    Spesifikasi

    Grafik Respon Sensor :

    6. LED Indikator




    Light Emitting Diode atau sering disingkat dengan LED adalah komponen elektronika yang dapat memancarkan  cahaya monokromatik ketika diberikan tegangan maju.  Cara kerjanya pun hampir sama dengan Dioda yang memiliki dua kutub yaitu kutub Positif (P) dan Kutub Negatif (N). LED hanya akan memancarkan cahaya apabila dialiri tegangan maju (bias forward) dari Anoda menuju ke Katoda.

    LED terdiri dari sebuah chip semikonduktor yang di doping sehingga menciptakan junction P dan N. 


    7. Buzzer 5V

    Buzzer adalah sebuah komponen elektronika yang berfungsi untuk mengubah getaran listrik menjadi getaran suara. Buzzer biasa digunakan sebagai indikator bahwa proses telah selesai atau terjadi suatu kesalahan pada sebuah alat (alarm).


    8. Resistor
    Resistor adalah komponen Elektronika Pasif yang memiliki nilai resistansi atau hambatan tertentu yang berfungsi untuk membatasi dan mengatur arus listrik dalam suatu rangkaian Elektronika (V=I R). 
    Jenis Resistor yang digunakan disini adalah Fixed Resistor, dimana merupakan resistor dengan nilai tetap terdiri dari film tipis karbon yang diendapkan subtrat isolator kemudian dipotong berbentuk spiral. Keuntungan jenis fixed resistor ini dapat menghasilkan resistor dengan toleransi yang lebih rendah.
    Cara menghitung nilai resistor:
    Tabel warna

    Contoh :
    Gelang ke 1 : Coklat = 1
    Gelang ke 2 : Hitam = 0
    Gelang ke 3 : Hijau   = 5 nol dibelakang angka gelang ke-2; atau kalikan 105
    Gelang ke 4 : Perak  = Toleransi 10%
    Maka nilai resistor tersebut adalah 10 * 105 = 1.000.000 Ohm atau 1 MOhm dengan toleransi 10%.

    Spesifikasi


    9. Relay 



    Relay merupakan komponen elektronika berupa saklar atau swirch elektrik yang dioperasikan secara listrik dan terdiri dari 2 bagian utama yaitu Elektromagnet (coil) dan mekanikal (seperangkat kontak Saklar/Switch). Komponen elektronika ini menggunakan prinsip elektromagnetik untuk menggerakan saklar sehingga dengan arus listrik yang kecil (low power) dapat menghantarkan listrik yang bertegangan lebih tinggi. Berikut adalah simbol dari komponen relay.

    Pada dasarnya, Relay terdiri dari 4 komponen dasar  yaitu :

    1. Electromagnet (Coil)
    2. Armature
    3. Switch Contact Point (Saklar)
    4. Spring
     Gambar dari bagian-bagian relay 

    Kontak Poin (Contact Point) Relay terdiri dari 2 jenis yaitu :

    • Normally Close (NC) yaitu kondisi awal sebelum diaktifkan akan selalu berada di posisi CLOSE (tertutup)

    • Normally Open (NO) yaitu kondisi awal sebelum diaktifkan akan selalu berada di posisi OPEN (terbuka)

    Konfigurasi: 


    10. Dioda



    Untuk menghantarkan arus listrik ke satu arah tetapi menghambat arus listrik dari arah sebaliknya. Oleh karena itu, Dioda sering dipergunakan sebagai penyearah dalam Rangkaian Elektronika. Dioda pada umumnya mempunyai 2 Elektroda (terminal) yaitu Anoda (+) dan Katoda (-) dan memiliki prinsip kerja yang berdasarkan teknologi pertemuan p-n semikonduktor yaitu dapat mengalirkan arus dari sisi tipe-p (Anoda) menuju ke sisi tipe-n (Katoda) tetapi tidak dapat mengalirkan arus ke arah sebaliknya.

    11. Jumper

    12. Motor DC

           
         Motor listrik adalah alat untuk mengubah energi listrik menjadi energi mekanik. Alat yang berfungsi sebaliknya, mengubah energi mekanik menjadi energi listrik disebut generator atau dinamo. Motor listrik dapat ditemukan pada peralatan rumah tangga seperti kipas angin, mesin cuci, pompa air dan penyedot debu

    Spesifikasi

    Pinout

    13. Transisitor NPN 

    Pinout: 



    Transistor merupakan salah satu Komponen Elektronika Aktif yang paling sering digunakan dalam rangkaian Elektronika, baik rangkaian Elektronika yang paling sederhana maupun rangkaian Elektronika yang rumit dan kompleks. Transistor pada umumnya terbuat dari bahan semikonduktor seperti Germanium, Silikon, dan Gallium Arsenide.

    Transistor adalah sebuah komponen di dalam elektronika yang diciptakan dari bahan-bahan semikonduktor dan memiliki tiga buah kaki. Masing-masing kaki disebut sebagai basis, kolektor, dan emitor.

    • Emitor (E) memiliki fungsi untuk menghasilkan elektron atau muatan negatif.
    • Kolektor (C) berperan sebagai saluran bagi muatan negatif untuk keluar dari dalam transistor.
    • Basis (B) berguna untuk mengatur arah gerak muatan negatif yang keluar dari transistor melalui kolekto

    Berfungsi sebagai penguat, sebagai sirkuit pemutus dan penyambung arus (switching), stabilisasi tegangan, dan modulasi sinyal. Selain itu, transistor biasanya juga dapat digunakan sebagai saklar dalam rangkaian elektronika. Jika ada arus yang cukup besar di kaki basis, transistor akan mencapai titik jenuh. Pada titik jenuh ini transistor mengalirkan arus secara maksimum dari kolektor ke emitor sehingga transistor seolah-olah short pada hubungan kolektor-emitor. Jika arus base sangat kecil maka kolektor dan emitor bagaikan saklar yang terbuka. Pada kondisi ini transistor dalam keadaan cut off sehingga tidak ada arus dari kolektor ke emitor. 




    Rumus-rumus transistor:

    Konfigurasi Transistor:


    Konfigurasi Common Base adalah konfigurasi yang kaki Basis-nya di-ground-kan dan digunakan bersama untuk INPUT maupun OUTPUT.  Pada Konfigurasi Common Base, sinyal INPUT dimasukan ke Emitor  dan sinyal OUTPUT-nya diambil dari Kolektor, sedangkan kaki Basis-nya di-ground-kan. Oleh karena itu, Common Base juga sering disebut dengan istilah “Grounded Base”. Konfigurasi Common Base ini menghasilkan Penguatan Tegangan antara sinyal INPUT dan sinyal OUTPUT namun tidak menghasilkan penguatan pada arus.

    Konfigurasi Common Collector (CC) atau Kolektor Bersama memiliki sifat dan fungsi yang berlawan dengan Common Base (Basis Bersama). Kalau pada Common Base menghasilkan penguatan Tegangan tanpa memperkuat Arus, maka Common Collector ini memiliki fungsi yang dapat menghasilkan Penguatan  Arus namun tidak menghasilkan penguatan Tegangan. Pada Konfigurasi Common Collector, Input diumpankan ke Basis Transistor sedangkan Outputnya diperoleh dari Emitor Transistor sedangkan Kolektor-nya di-ground-kan dan digunakan bersama untuk INPUT maupun OUTPUT. Konfigurasi Kolektor bersama (Common Collector) ini sering disebut juga dengan Pengikut Emitor (Emitter Follower) karena tegangan sinyal Output pada Emitor hampir sama dengan tegangan Input Basis.

    Konfigurasi Common Emitter (CE) atau Emitor Bersama merupakan Konfigurasi Transistor yang paling sering digunakan, terutama pada penguat yang membutuhkan penguatan Tegangan dan Arus secara bersamaan. Hal ini dikarenakan Konfigurasi Transistor dengan Common Emitter ini menghasilkan penguatan Tegangan dan Arus antara sinyal Input dan sinyal Output. Common Emitter adalah konfigurasi Transistor dimana kaki Emitor Transistor di-ground-kan dan dipergunakan bersama untuk INPUT dan OUTPUT. Pada Konfigurasi Common Emitter ini, sinyal INPUT dimasukan ke Basis dan sinyal OUTPUT-nya diperoleh dari kaki Kolektor.

     Karakteristik Input

    Transistor adalah komponen aktif yang menggunakan aliran electron sebagai prinsip kerjanya didalam bahan. Sebuah transistor memiliki tiga daerah doped yaitu daerah emitter, daerah basis dan daerah disebut kolektor. Transistor ada dua jenis yaitu NPN dan PNP. Transistor memiliki dua sambungan: satu antara emitter dan basis, dan yang lain antara kolektor dan basis. Karena itu, sebuah transistor seperti dua buah dioda yang saling bertolak belakang yaitu dioda emitter-basis, atau disingkat dengan emitter dioda dan dioda kolektor-basis, atau disingkat dengan dioda kolektor.

    Bagian emitter-basis dari transistor merupakan dioda, maka apabila dioda emitter-basis dibias maju maka kita mengharapkan akan melihat grafik arus terhadap tegangan dioda biasa. Saat tegangan dioda emitter-basis lebih kecil dari potensial barriernya, maka arus basis (Ib) akan kecil. Ketika tegangan dioda melebihi potensial barriernya, arus basis (Ib) akan naik secara cepat.

     Pemberian bias 
            Ada beberapa macam rangkaian pemberian bias, yaitu: 





    Sebuah transistor memiliki empat daerah operasi yang berbeda yaitu daerah aktif, daerah saturasi, daerah cutoff, dan daerah breakdown. Jika transistor digunakan sebagai penguat, transistor bekerja pada daerah aktif. Jika transistor digunakan pada rangkaian digital, transistor biasanya beroperasi pada daerah saturasi dan cutoff. Daerah breakdown biasanya dihindari karena resiko transistor menjadi hancur terlalu besar.


    5. Flowchart dan Listing Program[Kembali]


    /* USER CODE BEGIN Header */

    /**

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

      * @file           : main.c

      * @brief          : Main program body untuk Sistem Keamanan Kebakaran & Gas

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

      */

    /* USER CODE END Header */

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

    #include "main.h"


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

    /* USER CODE BEGIN Includes */

    #include <stdio.h>


    // Buka komentar (hapus tanda //) pada baris di bawah ini jika sudah ada library LCD

    // #include "liquidcrystal_i2c.h"


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

    uint16_t nilai_gas = 0;

    uint16_t nilai_suhu_adc = 0;

    char lcd_buffer[16]; // Buffer untuk teks LCD

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

    // Prototipe fungsi bantuan untuk membaca ADC multi-channel

    uint16_t Read_ADC_Channel(uint32_t channel);

    /* USER CODE END PFP */


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

    /* USER CODE BEGIN 0 */

    // Fungsi untuk membaca channel ADC secara bergantian (Gas & Suhu)

    uint16_t Read_ADC_Channel(uint32_t channel) {

        ADC_ChannelConfTypeDef sConfig = {0};

        sConfig.Channel = channel;

        sConfig.Rank = ADC_REGULAR_RANK_1;

        sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5; // Waktu sampling agar pembacaan stabil


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

            Error_Handler();

        }


        HAL_ADC_Start(&hadc1);

        HAL_ADC_PollForConversion(&hadc1, 10);

        uint16_t adc_value = HAL_ADC_GetValue(&hadc1);

        HAL_ADC_Stop(&hadc1);


        return adc_value;

    }

    /* USER CODE END 0 */


    /**

      * @brief  The application entry point.

      * @retval int

      */

    int main(void)

    {

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


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

      HAL_Init();


      /* Configure the system clock */

      SystemClock_Config();


      /* Initialize all configured peripherals */

      MX_GPIO_Init();

      MX_ADC1_Init();

      MX_I2C1_Init();


      /* USER CODE BEGIN 2 */


      // Inisialisasi LCD (buka komentar jika library sudah ada)

      // lcd_init();

      // lcd_clear();


      // Memastikan semua aktuator OFF saat sistem pertama kali menyala

      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // Pompa OFF

      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET); // LED OFF

      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET); // Buzzer OFF


      /* USER CODE END 2 */


      /* Infinite loop */

      /* USER CODE BEGIN WHILE */

      while (1)

      {

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

           1. BACA DATA SENSOR

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


        // a. Baca Sensor Suhu NTC (PA1 -> ADC1_IN1)

        nilai_suhu_adc = Read_ADC_Channel(ADC_CHANNEL_1);


        // b. Baca Sensor Gas MQ-2 (PA0 -> ADC1_IN0)

        nilai_gas = Read_ADC_Channel(ADC_CHANNEL_0);


        // c. Baca Sensor Api 5 Channel (Digital Input: PB0, PB1, PB9, PB10, PB11)

        // Sensor ini aktif LOW (bernilai 0 saat mendeteksi api)

        uint8_t api_1 = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0);

        uint8_t api_2 = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1);

        uint8_t api_3 = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_9);

        uint8_t api_4 = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10);

        uint8_t api_5 = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11);


        // Jika salah satu channel mendeteksi api (0), status_kebakaran = 1 (TRUE)

        uint8_t status_kebakaran = (api_1 == 0 || api_2 == 0 || api_3 == 0 || api_4 == 0 || api_5 == 0);



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

           2. PROSES LOGIKA (SESUAI FLOWCHART)

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


        if (status_kebakaran)

        {

            // KONDISI 1: ADA API (Prioritas Tertinggi)

            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET); // Buzzer ON (Alarm Kebakaran)

            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET); // LED Indikator ON

            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); // Pompa Air ON (Pemadaman Awal)


            // lcd_clear();

            // lcd_set_cursor(0, 0);

            // lcd_print("BAHAYA API!");

        }

        else if (nilai_gas > 2000)

        {

            // KONDISI 2: GAS BOCOR / ASAP (Tidak ada api, tapi ada gas)

            // Nilai 2000 adalah contoh, sesuaikan dengan hasil pengujian fisik nanti

            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET); // Buzzer ON (Alarm Kebocoran)


            // Pastikan aktuator pemadam mati

            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET); // LED OFF

            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // Pompa OFF


            // lcd_clear();

            // lcd_set_cursor(0, 0);

            // lcd_print("AWAS GAS BOCOR!");

        }

        else

        {

            // KONDISI 3: AMAN NORMAL (Tidak ada api, tidak ada gas bocor)

            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET); // Buzzer OFF

            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET); // LED OFF

            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // Pompa OFF


            // lcd_clear();

            // lcd_set_cursor(0, 0);

            // sprintf(lcd_buffer, "ADC Suhu: %d", nilai_suhu_adc);

            // lcd_print(lcd_buffer);

            // lcd_set_cursor(0, 1);

            // lcd_print("Sistem Aman");

        }


        HAL_Delay(500); // Jeda 500ms

        /* USER CODE END WHILE */


        /* USER CODE BEGIN 3 */

      }

      /* USER CODE END 3 */

    }


    /**

      * @brief System Clock Configuration

      */

    void SystemClock_Config(void)

    {

      RCC_OscInitTypeDef RCC_OscInitStruct = {0};

      RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

      RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};


      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();

      }


      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

      */

    static void MX_ADC1_Init(void)

    {

      ADC_ChannelConfTypeDef sConfig = {0};


      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();

      }

    }


    /**

      * @brief I2C1 Initialization Function

      */

    static void MX_I2C1_Init(void)

    {

      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();

      }

    }


    /**

      * @brief GPIO Initialization Function

      */

    static void MX_GPIO_Init(void)

    {

      GPIO_InitTypeDef GPIO_InitStruct = {0};


      /* GPIO Ports Clock Enable */

      __HAL_RCC_GPIOD_CLK_ENABLE();

      __HAL_RCC_GPIOA_CLK_ENABLE();

      __HAL_RCC_GPIOB_CLK_ENABLE();


      /*Configure GPIO pin Output Level untuk Aktuator (Pompa, LED, Buzzer) */

      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_RESET);


      /*Configure GPIO pins : PA4 (Relay), PA6 (LED), PA7 (Buzzer) */

      GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_7;

      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

      GPIO_InitStruct.Pull = GPIO_NOPULL;

      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

      HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


      /*Configure GPIO pins : PB0 PB1 PB9 PB10 PB11 (Input dari Sensor Api 5 Channel) */

      GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11;

      GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

      GPIO_InitStruct.Pull = GPIO_NOPULL;

      HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    }


    void Error_Handler(void)

    {

      __disable_irq();

      while (1)

      {

      }

    }


    #ifdef  USE_FULL_ASSERT

    void assert_failed(uint8_t *file, uint32_t line)

    {

    }

    #endif /* USE_FULL_ASSERT */


    6. Rangkaian Simulasi dan Prinsip Kerja[Kembali]



    Prinsip Kerja :


    Sistem keamanan Dapur MBG berbasis STM32 ini bekerja secara sekuensial dan terus-menerus mendeteksi parameter lingkungan menggunakan struktur keputusan bertingkat berdasarkan skala prioritas bahaya. Dalam kalang perulangan utama dengan jeda sampling 500 milidetik, mikrokontroler mendeteksi suhu ruangan melalui sensor analog NTC, konsentrasi kebocoran gas LPG di atas tabung menggunakan sensor analog MQ-2, dan indikasi percikan api di area kompor lewat Flame Sensor 5 Channel berkondisi Active LOW. Jika bahaya kebakaran terdeteksi (prioritas tertinggi), sistem langsung mengabaikan sensor lain untuk menyalakan buzzer, LED merah, dan mengaktifkan relay pompa air DC sebagai pemadaman awal sembari menampilkan peringatan api di LCD. Namun, jika tidak ada api melainkan kadar gas MQ-2 melebihi ambang batas (prioritas kedua), hanya buzzer dan LCD peringatan gas yang aktif, sementara pompa air dan LED dimatikan demi menghindari percikan listrik di area sensitif gas. Terakhir, saat seluruh sensor mendeteksi kondisi aman (prioritas ketiga), semua aktuator penyelamat dinonaktifkan, lalu STM32 mengonversi data sensor NTC untuk menampilkan nilai suhu aktual dan teks "Sistem Aman" pada LCD sebelum siklus pemantauan otomatis berputar kembali ke awal.


    7. Video Simulasi[Kembali]



    8. Download File[Kembali] 

    1. Datasheet STM 32F103C8T6 [klik disini]
    2. Datasheet Rain Sensor YL-83 [klik disini]
    3. Datasheet Ultrasonic Sensor HC-SR04 [klik disini]
    4. Datasheet LCD 16x2 dengan Modul I2C [klik disini]
    5. Datasheet LED  [klik disini]
    6. Datasheet Buzzer [klik disini]







    Komentar

    Postingan populer dari blog ini