Modul 4


1. Pendahuluan [Kembali]

Kebutuhan akan sistem keamanan yang andal pada lingkungan agen maupun gudang penyimpanan gas LPG menjadi semakin krusial seiring dengan meningkatnya penggunaan gas tersebut sebagai sumber energi utama di berbagai sektor masyarakat. Agen dan pangkalan LPG, yang seringkali berlokasi di tengah pemukiman padat atau area komersial, memiliki risiko kerentanan yang sangat tinggi terhadap insiden kebocoran gas. Apabila kebocoran ini tidak terdeteksi secara dini, akumulasi gas di udara berpotensi besar memicu terjadinya kebakaran berskala besar hingga ledakan fatal. Permasalahan utama yang sering dijumpai di lapangan, khususnya pada skala Usaha Mikro, Kecil, dan Menengah (UMKM) agen LPG, adalah minimnya ketersediaan sistem pemantauan otomatis yang terintegrasi. Proses deteksi kebocoran gas maupun kemunculan titik api masih sangat bergantung pada pengamatan visual dan penciuman manusia. Keterbatasan indera manusia dan ketiadaan pengawasan selama 24 jam penuh menyebabkan keterlambatan respons dalam penanganan awal, yang secara otomatis meningkatkan potensi kerugian masif, baik dari segi kerusakan material aset usaha maupun ancaman nyata terhadap keselamatan jiwa pekerja dan masyarakat sekitar.

Berangkat dari permasalahan nyata di lapangan tersebut, kegiatan pengabdian kepada masyarakat ini merancang dan mengimplementasikan sebuah sistem Early Warning System (EWS) atau peringatan dini berbasis mikrokontroler STM32 (Bluepill) yang akan diaplikasikan langsung pada mitra agen LPG. Sistem ini dirancang sebagai solusi aplikatif dan tepat guna untuk melakukan deteksi dini terhadap kebocoran gas dan potensi kebakaran menggunakan pendekatan multi-sensor. Melalui integrasi sensor gas MQ-6, sensor asap MQ-135, flame sensor, dan sensor suhu DHT22, data lingkungan gudang dapat dipantau secara real-time dan akurat. Data dari seluruh sensor akan diproses seketika oleh mikrokontroler STM32F103C8T6 untuk menghasilkan respons otomatis berjenjang. Respons tersebut tidak hanya berupa peringatan suara via buzzer dan indikator visual melalui LED serta LCD, tetapi juga mengaktifkan tindakan mitigasi fisik secara langsung berupa menyalanya kipas (exhaust fan) untuk segera membuang dan mengurangi konsentrasi gas berbahaya di udara. Penerapan teknologi tepat guna melalui program pengabdian ini diharapkan dapat meningkatkan standar keselamatan kerja (K3) pada mitra, memberikan rasa aman bagi pekerja dan masyarakat sekitar, serta menjadi model percontohan sistem keamanan proaktif bagi agen LPG lainnya.

2. Tujuan[Kembali]

·                         Merancang Sistem Deteksi Dini yang Terintegrasi: Membangun sebuah Early Warning System (EWS) menggunakan mikrokontroler STM32F103C8T6 yang mampu membaca dan memproses data dari berbagai sensor secara bersamaan (MQ-6, MQ-135, DHT22, dan Flame Sensor) untuk memantau kondisi lingkungan gudang LPG secara komprehensif.

·                         Mendeteksi Kebocoran Gas Secara Akurat: Memanfaatkan sensor MQ-6 untuk secara spesifik mendeteksi keberadaan dan tingkat konsentrasi gas LPG (butane dan propane) di udara, guna memberikan peringatan awal sebelum mencapai batas kritis ledakan.

·                         Melakukan Validasi Potensi Kebakaran: Menggunakan sensor asap MQ-135 dan sensor suhu DHT22 untuk mengidentifikasi anomali panas dan asap, serta menggunakan Flame Sensor untuk mengonfirmasi keberadaan titik api secara langsung, sehingga meminimalkan risiko alarm palsu (false alarm).

·                         Membangun Sistem Peringatan Multi-Level: Mengklasifikasikan kondisi lingkungan ke dalam tiga status (Aman, Waspada, Bahaya) dan memberikan respons yang sesuai melalui antarmuka visual (LED Merah/Kuning/Hijau dan layar LCD 16x2) serta auditori (buzzer), agar operator dapat mengambil tindakan yang tepat dan cepat.

·                         Menerapkan Tindakan Mitigasi Fisik Otomatis: Mengendalikan aktuator berupa exhaust fan (kipas) menggunakan rangkaian driver transistor yang akan menyala secara otomatis saat terdeteksi kebocoran gas, dengan tujuan mengurangi konsentrasi gas berbahaya di udara dan mencegah akumulasi fatal.

3. Alat dan Komponen[Kembali]

  • STM32F103C8T6 (Bluepill): 1 buah. Berfungsi sebagai unit pemroses utama yang menerima data dari seluruh sensor dan mengendalikan respon aktuator berdasarkan logika program.

  • Sensor Gas MQ-6: Berfungsi untuk mendeteksi keberadaan dan konsentrasi gas LPG di lingkungan.

  • Sensor Asap MQ-135: Berfungsi untuk mendeteksi keberadaan asap dan gas sisa hasil pembakaran.

  • Flame Sensor (Sensor Api): Berfungsi untuk mendeteksi radiasi inframerah dari nyala api secara langsung.

  • Sensor Suhu dan Kelembapan DHT22: Berfungsi untuk memantau suhu ruangan sebagai indikator awal adanya potensi kebakaran (suhu ekstrem).
  • LCD 16x2: Berfungsi sebagai layar penampil (HMI) untuk menunjukkan status sistem (Aman/Waspada/Bahaya) dan data pembacaan sensor secara real-time.

  • Exhaust Fan (Kipas): Berfungsi sebagai aktuator mitigasi untuk membuang akumulasi gas LPG yang bocor ke luar ruangan.
  • Buzzer: Berfungsi sebagai alarm peringatan bahaya dalam bentuk suara yang nyaring.
  • LED 5mm: 3 buah (Merah, Kuning, Hijau). Berfungsi sebagai indikator visual untuk merepresentasikan status keadaan gudang.
  • Transistor: Digunakan sebagai sakelar elektronik (driver) untuk menghubungkan mikrokontroler dengan arus kerja exhaust fan.
  • Resistor 220 Ohm: Digunakan sebagai pembatas arus listrik (current limiter) untuk ketiga LED agar tidak putus/rusak.
  • Resistor 1000 Ohm (1k Ohm): Digunakan sebagai tahanan pada kaki base transistor pelindung arus dari pin mikrokontroler.
  • Resistor 4700 Ohm (4.7k Ohm): Digunakan sebagai resistor pull-up pada jalur data (pin data) sensor DHT22.
  • Potensiometer 10k Ohm: Digunakan untuk mengatur tingkat kontras kecerahan layar LCD 16x2 dan keperluan kalibrasi/simulasi sensor.
  • Potensiometer 1k Ohm: Digunakan untuk keperluan pembagi tegangan tambahan atau pengaturan kalibrasi pada rangkaian.
  • Adaptor 5V: Berfungsi sebagai sumber catu daya (power supply) utama untuk menyuplai tegangan listrik ke mikrokontroler dan seluruh sensor.
  • Kabel Jumper: Digunakan sebagai kabel penghubung antar komponen, sensor, dan mikrokontroler.
  • Breadboard: Berfungsi sebagai papan sirkuit prototipe untuk merakit semua jalur kelistrikan komponen tanpa harus melakukan proses penyolderan.

4. Landasan Teori[Kembali]

4.1 General Input Output

Input adalah semua data dan perintah yang dimasukkan ke dalam memori untuk diproses lebih lanjut oleh mikroprosesor. Sebuah perangkat input adalah komponen piranti keras yang memungkinkan user atau pengguna memasukkan data ke dalam mikroprosesor. Output adalah data hasil yang telah diproses. Perangkat output adalah semua komponen piranti keras yang menyampaikan informasi kepada orang-orang yang menggunakannya.

 Pada STM32F103C8T6 dan STM32 NUCLEO G474RE pin input/output terdiri dari digital dan analog yang jumlah pin-nya tergantung jenis mikrokontroller yang digunakan. Input digital digunakan untuk mendeteksi perubahan logika biner pada pin tertentu. Adanya input digital memungkinkan mikrokontroler untuk dapat menerjemahkan 0V menjadi logika LOW dan 5V menjadi logika HIGH. Membaca sinyal digital pada mikrokontroller dapat menggunakan sintaks digitalRead(pin);

Output digital terdiri dari dua buah logika, yaitu kondisi logika HIGH dan kondisi logika LOW. Untuk menghasilkan output kita dapat menggunakan sintaks digitalWrite(pin,nilai); yang sebelumnya pin sudah diset ke mode OUTPUT, lalu parameter kedua adalah set nilai HIGH atau LOW. Apabila pin diset dengan nilai HIGH, maka voltase pin tersebut akan diset ke 5V atau 3.3V dan bila pin diset ke LOW, maka voltase pin tersebut akan diset ke 0V.

 

4.2 STM32F103C8

STM32F103C8 adalah mikrokontroler berbasis ARM Cortex-M3 yang dikembangkan oleh STMicroelectronics. Mikrokontroler ini sering digunakan dalam pengembangan sistem tertanam karena kinerjanya yang baik, konsumsi daya yang rendah, dan kompatibilitas dengan berbagai protokol komunikasi. Pada praktikum ini, kita menggunakan STM32F103C8 yang dapat diprogram menggunakan berbagai metode, termasuk komunikasi serial (USART), SWD (Serial Wire Debug), atau JTAG untuk berhubungan dengan komputer maupun perangkat lain. Adapun spesifikasi dari STM32F4 yang digunakan dalam praktikum ini adalah sebagai berikut:

Gambar 1 STM32F103C8

Gambar 2 Pinout Stm32 F103C8T6

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

 

BAGIAN-BAGIAN PENDUKUNG :

1. RAM (Random Access Memory)

STM32F103C8 dilengkapi dengan 20KB SRAM on-chip. Kapasitas RAM ini memungkinkan mikrokontroler menjalankan berbagai aplikasi serta menyimpan data sementara selama eksekusi program.

2. Memori Flash Internal

STM32F103C8 memiliki memori flash internal sebesar 64KB atau 128KB, yang digunakan untuk menyimpan firmware dan program pengguna. Memori ini memungkinkan penyimpanan kode program secara permanen tanpa memerlukan media penyimpanan eksternal.

3. Crystal Oscillator

STM32F103C8 menggunakan crystal oscillator eksternal (biasanya 8MHz) yang bekerja dengan PLL untuk meningkatkan frekuensi clock hingga 72MHz. Sinyal clock yang stabil ini penting untuk mengatur kecepatan operasi mikrokontroler dan komponen lainnya.

4. Regulator Tegangan

STM32F103C8 memiliki sistem pengaturan tegangan internal yang memastikan pasokan daya stabil ke mikrokontroler. Tegangan operasi yang didukung berkisar antara 2.0V hingga 3.6V.

5. Pin GPIO (General Purpose Input/Output)

STM32F103C8 memiliki hingga 37 pin GPIO yang dapat digunakan untuk menghubungkan berbagai perangkat eksternal seperti sensor, motor, LED, serta komunikasi dengan antarmuka seperti UART, SPI, dan I²C.

 

4.3 ADC

ADC atau Analog to Digital Converter merupakan salah satu perangkat elektronika yang digunakan sebagai penghubung dalam pemrosesan sinyal analog oleh sistem digital. Fungsi utama dari fitur ini adalah mengubah sinyal masukan yang masih dalam bentuk sinyal analog menjadi sinyal digital dengan bentuk kode-kode digital.

Pada mikrokontroler STM32, terdapat dua ADC (Analog-to-Digital Converter) 12-bit yang masing-masing memiliki hingga 16 kanal eksternal. ADC ini dapat beroperasi dalam mode single-shot atau scan mode. Pada scan mode, konversi dilakukan secara otomatis pada sekelompok input analog yang dipilih. Selain itu, ADC ini memiliki fitur tambahan seperti simultaneous sample and hold, interleaved sample and hold, serta single shunt. ADC juga dapat dihubungkan dengan DMA untuk meningkatkan efisiensi transfer data. Mikrokontroler ini dilengkapi dengan fitur analog watchdog yang memungkinkan pemantauan tegangan hasil konversi dengan akurasi tinggi, serta dapat menghasilkan interupsi jika tegangan berada di luar ambang batas yang telah diprogram. Selain itu, ADC dapat disinkronkan dengan timer internal (TIMx dan TIM1) untuk memulai konversi, pemicu injeksi, serta pemicu DMA, sehingga memungkinkan aplikasi untuk melakukan konversi ADC secara terkoordinasi dengan timer.

Pada STM32 Nucleo G474RE, terdapat blok ADC (Analog-to-Digital Converter) yang digunakan untuk mengubah sinyal analog menjadi data digital. STM32 G474RE memiliki beberapa unit ADC (seperti ADC1, ADC2, ADC3, dan ADC4) yang memungkinkan proses konversi dilakukan secara paralel untuk meningkatkan kecepatan akuisisi data. Setiap ADC mendukung resolusi hingga 12-bit, dengan fitur tambahan seperti oversampling untuk meningkatkan akurasi dan mengurangi noise pada sinyal.

Setiap unit ADC dapat mengakses banyak channel input yang terhubung ke berbagai pin GPIO, sehingga memungkinkan pembacaan berbagai sensor secara fleksibel. ADC pada STM32 G474RE juga dilengkapi dengan fitur scan mode untuk membaca beberapa channel secara berurutan, serta mode continuous conversion yang memungkinkan pembacaan data secara terus-menerus tanpa intervensi CPU. Selain itu, terdapat injected channel yang berfungsi sebagai channel prioritas untuk kebutuhan real-time.

ADC ini juga mendukung berbagai sumber trigger, seperti timer (TIM) atau sinyal eksternal, sehingga dapat disinkronkan dengan modul lain seperti PWM untuk aplikasi kontrol tertutup (closed-loop). Proses konversi dilakukan melalui tahap sampling dan quantization, dengan hasil akhir disimpan pada register data ADC. Dengan fitur-fitur tersebut, ADC pada STM32 G474RE sangat cocok digunakan dalam aplikasi seperti pembacaan sensor, monitoring tegangan, serta sistem kendali berbasis sinyal analog yang membutuhkan kecepatan dan presisi tinggi.

 

4.4 I2C (Inter-Intergrated Circuit)

Inter Integrated Circuit atau sering disebut I2C adalah standar komunikasi serial dua arah menggunakan dua saluran yang didisain khusus untuk mengirim maupun menerima data. Sistem I2C terdiri dari saluran SCL (Serial Clock) dan SDA (Serial Data) yang membawa informasi data antara I2C dengan pengontrolnya.

Cara Kerja Komunikasi I2C

Gambar 3 Cara Kerja Komunikasi I2C

Pada I2C, data ditransfer dalam bentuk message yang terdiri dari kondisi start, Address Frame, R/W bit, ACK/NACK bit, Data Frame 1, Data Frame 2, dan kondisi Stop. Kondisi start dimana saat pada SDA beralih dari logika high ke low sebelum SCL. Kondisi stop dimana saat pada SDA beralih dari logika low ke high sebelum SCL.

R/W bit berfungsi untuk menentukan apakah master mengirim data ke slave atau meminta data dari slave. (logika 0 = mengirim data ke slave, logika 1 = meminta data dari slave) ACK/NACK bit berfungsi sebagai pemberi kabar jika data frame ataupun address frame telah diterima receiver.


4.5 Flame Sensor

Flame Sensor merupakan sensor pendeteksi nyala api yang bekerja berdasarkan deteksi radiasi ultraviolet (UV) yang dipancarkan oleh api. Sensor ini menggunakan prinsip efek fotolistrik serta fenomena pelepasan muatan listrik (gas discharge) untuk menghasilkan sinyal keluaran. Sensor memiliki sensitivitas spektral yang sangat sempit pada rentang panjang gelombang 185–260 nm sehingga hanya merespons sinar ultraviolet dan tidak sensitif terhadap cahaya tampak maupun inframerah (solar blind characteristic). Kondisi ini memungkinkan sensor mendeteksi nyala api dengan tingkat akurasi tinggi tanpa terganggu oleh cahaya lampu atau sinar matahari.


Gambar 4 Flame Sensor


Gambar 5 Pinout Flame Sensor

Rentang sensitivitas UV

185–260 nm

Sensitivitas minimum

1 pW

Waktu respons tipikal

1 ms

Tegangan operasi

575 VDC

Arus pelepasan rata-rata

0,3 mA

Umur operasi

10.000 jam

 

Prinsip kerja flame sensor dimulai ketika radiasi ultraviolet dari nyala api mengenai elektroda di dalam tabung sensor. Energi UV tersebut menyebabkan terjadinya emisi elektron melalui efek fotolistrik. Elektron yang terbentuk kemudian dipercepat oleh tegangan tinggi yang diberikan pada sensor sehingga memicu ionisasi gas di dalam tabung dan menghasilkan pelepasan muatan listrik (discharge). Setiap kejadian pelepasan muatan akan menghasilkan pulsa listrik pada keluaran sensor yang dapat dihitung oleh rangkaian mikrokontroler atau sistem pengolah data. Semakin kuat intensitas ultraviolet yang diterima, semakin tinggi frekuensi pulsa yang dihasilkan.

Flame Sensor memiliki kemampuan mendeteksi radiasi ultraviolet yang sangat lemah hingga sekitar 1 pW. Sensor ini juga memiliki waktu respons yang sangat cepat, yaitu sekitar 1 ms, sehingga cocok digunakan untuk sistem deteksi kebakaran dan pemantauan proses pembakaran secara real-time. Selain itu, sensor memiliki umur operasi yang panjang hingga 10.000 jam pada kondisi kerja yang direkomendasikan.

Flame Sensor bekerja dengan tegangan suplai sekitar 575 VDC, tegangan mulai pelepasan (discharge starting voltage) sebesar 500 ± 50 V, dan tegangan pelepasan berkelanjutan (discharge sustaining voltage) sekitar 330 V. Sensor menghasilkan keluaran berupa pulsa digital yang diperoleh melalui rangkaian driver eksternal yang berfungsi sebagai pembatas arus dan rangkaian pemadam pelepasan (quenching circuit). Berikut merupakan grafik respon sistem Flame Sensor


Gambar 6 Grafik Respon Sistem Flame Sensor

Karena karakteristiknya yang hanya peka terhadap sinar ultraviolet dari api, Flame Sensor banyak digunakan pada sistem pemantauan pembakaran burner gas dan minyak, sistem alarm kebakaran, pemantauan kebakaran akibat pembakaran liar (arson watch), pendeteksi kebocoran sinar ultraviolet, serta deteksi fenomena pelepasan listrik seperti korona pada saluran tegangan tinggi. Sensitivitas tinggi, respons cepat, serta ketahanan terhadap gangguan cahaya lingkungan menjadikan sensor ini sangat andal untuk aplikasi keselamatan dan monitoring industri.

4.6 Mq-135 Sensor

Sensor gas MQ-6 adalah sensor semikonduktor yang digunakan untuk mendeteksi keberadaan gas LPG (Liquefied Petroleum Gas), isobutana, propana, dan LNG (Liquefied Natural Gas). Sensor ini memiliki sensitivitas tinggi terhadap gas-gas tersebut serta sensitivitas yang rendah terhadap alkohol, asap, dan uap hasil memasak, sehingga sangat cocok digunakan pada sistem pendeteksi kebocoran gas rumah tangga maupun industri. Sensor MQ-6 memiliki respons yang cepat, stabil, umur pakai yang panjang, serta hanya memerlukan rangkaian penggerak yang sederhana.


Gambar 7 Mq-6 Sensor


Gambar 8 Pinout Mq-6 Sensor

Rentang deteksi gas

200–10.000 ppm

Tegangan kerja

5 V

Tegangan pemanas

5 V

Resistansi pemanas

33 Ω ± 5%

Konsumsi daya pemanas

< 750 mW

Waktu pemanasan awal

> 24 jam

 

Prinsip kerja sensor MQ-6 didasarkan pada perubahan resistansi lapisan semikonduktor timah dioksida (SnO₂) ketika terkena gas yang mudah terbakar. Pada kondisi udara bersih, resistansi sensor relatif tinggi. Ketika gas LPG atau gas target lainnya terdeteksi, molekul gas akan bereaksi dengan permukaan lapisan SnO₂ sehingga konduktivitas material meningkat dan resistansi sensor menurun. Perubahan resistansi ini kemudian diubah menjadi perubahan tegangan keluaran melalui rangkaian pembagi tegangan sehingga dapat dibaca oleh mikrokontroler atau sistem monitoring.

Struktur sensor MQ-6 terdiri dari tabung keramik aluminium oksida (Al₂O₃) yang dilapisi material sensitif berupa timah dioksida (SnO₂), elektroda emas (Au), kawat elektroda platina (Pt), serta elemen pemanas berbahan paduan nikel-kromium (Ni-Cr). Elemen pemanas berfungsi menjaga suhu kerja sensor agar reaksi kimia pada permukaan SnO₂ dapat berlangsung secara optimal. Sensor dilindungi oleh jaring baja tahan karat yang berfungsi sebagai pelindung sekaligus pengaman terhadap ledakan.

MQ-6 bekerja dengan tegangan operasi sebesar 5 V untuk rangkaian sensor maupun elemen pemanas. Resistansi pemanasnya sekitar 33 Ω dengan konsumsi daya pemanas kurang dari 750 mW. Sebelum digunakan, sensor memerlukan waktu pemanasan awal (preheat) lebih dari 24 jam agar karakteristik sensitivitasnya stabil. Rentang konsentrasi gas yang dapat dideteksi berada pada kisaran 200–10.000 ppm untuk LPG, isobutana, propana, dan LNG.


Gambar 9 Grafik Respon Sistem Mq-6 Sensor

Karakteristik sensitivitas sensor dinyatakan melalui perbandingan Rs/Ro, di mana Rs adalah resistansi sensor pada konsentrasi gas tertentu dan Ro adalah resistansi sensor pada kondisi referensi, yaitu 1000 ppm LPG di udara bersih. Nilai Rs akan semakin kecil seiring meningkatnya konsentrasi gas, sehingga nilai Rs/Ro juga menurun. Oleh karena itu, konsentrasi gas dapat diperkirakan berdasarkan perubahan rasio tersebut menggunakan kurva karakteristik yang disediakan pada datasheet.

Kinerja sensor MQ-6 dipengaruhi oleh suhu dan kelembapan lingkungan. Perubahan suhu dan kelembapan dapat menyebabkan perubahan nilai resistansi sensor sehingga memengaruhi hasil pengukuran. Oleh karena itu, pada aplikasi yang membutuhkan tingkat akurasi tinggi, diperlukan proses kalibrasi dan kompensasi terhadap pengaruh lingkungan. Datasheet merekomendasikan penggunaan resistor beban (RL) sekitar 20 kΩ dan kalibrasi pada konsentrasi 1000 ppm LPG untuk memperoleh hasil pengukuran yang optimal.

 

4.7 Mq-135 Sensor

Sensor gas MQ-135 merupakan sensor semikonduktor yang digunakan untuk memantau kualitas udara dengan mendeteksi berbagai gas berbahaya seperti amonia (NH₃), hidrogen sulfida (H₂S), uap senyawa benzena (benzene series vapor), asap, serta beberapa gas beracun lainnya. Sensor ini banyak digunakan pada sistem alarm gas rumah tangga, alarm gas industri, dan alat pendeteksi gas portabel karena memiliki sensitivitas yang baik, harga yang relatif murah, umur pakai yang panjang, serta rangkaian antarmuka yang sederhana.


Gambar 10 Mq-135 Sensor


Gambar 11 Pinout Mq-135 Sensor

Rentang deteksi gas

10–1000 ppm

Tegangan pemanas

5 V ± 0,1 V

Resistansi pemanas

29 Ω ± 3 Ω

Konsumsi daya pemanas

≤ 950 mW

Waktu pemanasan awal

> 48 jam

 

Prinsip kerja MQ-135 didasarkan pada perubahan konduktivitas lapisan semikonduktor timah dioksida (SnO₂) akibat keberadaan gas target. Pada kondisi udara bersih, material SnO₂ memiliki konduktivitas yang rendah atau resistansi yang tinggi. Ketika gas pencemar terdeteksi, molekul gas berinteraksi dengan permukaan sensor sehingga meningkatkan konduktivitas material dan menurunkan nilai resistansinya. Perubahan resistansi tersebut kemudian diubah menjadi perubahan tegangan keluaran menggunakan rangkaian pembagi tegangan sehingga konsentrasi gas dapat diukur oleh mikrokontroler atau sistem pemantauan.

Secara konstruksi, MQ-135 terdiri dari lapisan sensitif SnO₂, elektroda pengukur, elemen pemanas, tabung keramik, dan pelindung logam. Elemen pemanas berfungsi menjaga suhu kerja sensor agar reaksi kimia pada permukaan SnO₂ berlangsung secara optimal. Sensor dikemas dalam rumah berbahan bakelit dan tutup logam sehingga cukup kuat untuk digunakan pada berbagai aplikasi pemantauan kualitas udara.

Sensor MQ-135 bekerja dengan tegangan pemanas sebesar 5 V dan memiliki resistansi pemanas sekitar 29 Ω ± 3 Ω. Konsumsi daya pemanas maksimum mencapai 950 mW. Sebelum digunakan, sensor memerlukan waktu pemanasan awal (preheat) lebih dari 48 jam untuk mencapai kondisi kerja yang stabil. Rentang deteksi sensor berada pada kisaran 10–1000 ppm untuk gas amonia, toluena, hidrogen, dan asap.


Gambar 12 Grafik Respon Sistem Mq-6 Sensor

Karakteristik sensor dinyatakan melalui rasio resistansi Rs/R₀, di mana Rs adalah resistansi sensor pada konsentrasi gas tertentu dan R₀ adalah resistansi sensor pada udara bersih. Nilai Rs akan berubah sesuai dengan jenis dan konsentrasi gas yang terdeteksi. Semakin tinggi konsentrasi gas pencemar, semakin besar konduktivitas sensor sehingga nilai resistansi menurun. Hubungan antara konsentrasi gas dan rasio Rs/R₀ ditunjukkan melalui kurva sensitivitas yang tersedia pada datasheet dan digunakan sebagai dasar dalam proses kalibrasi sensor.

Kinerja MQ-135 dipengaruhi oleh suhu dan kelembapan lingkungan. Perubahan kedua parameter tersebut dapat menyebabkan perubahan karakteristik resistansi sensor sehingga memengaruhi hasil pengukuran. Oleh karena itu, pada aplikasi yang membutuhkan tingkat akurasi tinggi diperlukan proses kalibrasi dan kompensasi suhu maupun kelembapan agar hasil pengukuran kualitas udara lebih akurat.

 

4.8 DHT22 Sensor

Sensor DHT22 (juga dikenal sebagai AM2302) merupakan sensor digital yang digunakan untuk mengukur suhu dan kelembapan relatif udara (relative humidity/RH) dalam satu perangkat. Sensor ini menggunakan elemen pengindera kelembapan bertipe kapasitor polimer serta sensor suhu yang telah dikalibrasi secara digital. DHT22 dirancang untuk memberikan hasil pengukuran yang akurat, stabil, dan memiliki ketahanan jangka panjang, sehingga banyak digunakan pada sistem pemantauan lingkungan, stasiun cuaca, sistem kendali suhu dan kelembapan, serta aplikasi Internet of Things (IoT).





Gambar 13 DHT22 Sensor


Gambar 14 Pinout DHT22 Sensor

Tegangan kerja

3,3–6 V DC

entang pengukuran kelembapan

0–100% RH

Rentang pengukuran suhu

-40°C hingga 80°C

Akurasi kelembapan

±2% RH (maksimum ±5% RH)

Akurasi suhu

±0,5°C

Resolusi pengukuran

0,1% RH dan 0,1°C

Periode pembacaan data

2 detik

 

Prinsip kerja DHT22 didasarkan pada pengukuran perubahan kapasitansi pada sensor kelembapan polimer dan perubahan karakteristik sensor suhu internal. Data hasil pengukuran kemudian diproses oleh mikrokontroler 8-bit yang terintegrasi di dalam sensor. Setiap sensor telah dikalibrasi di pabrik menggunakan ruang kalibrasi khusus, dan koefisien kalibrasi tersebut disimpan pada memori OTP (One-Time Programmable). Saat sensor bekerja, data pengukuran akan dikoreksi menggunakan koefisien tersebut sehingga menghasilkan keluaran digital yang lebih akurat dan stabil.

DHT22 menggunakan komunikasi digital single-bus sehingga hanya memerlukan satu jalur data untuk berkomunikasi dengan mikrokontroler. Sensor mengirimkan data dalam format 40-bit yang terdiri dari data kelembapan, data suhu, dan checksum untuk verifikasi kesalahan transmisi. Sistem komunikasi digital ini membuat DHT22 lebih tahan terhadap gangguan dibandingkan sensor analog serta tidak memerlukan rangkaian pengolah sinyal tambahan.

Sensor DHT22 dapat bekerja pada tegangan suplai 3,3–6 V DC dengan konsumsi arus sekitar 1–1,5 mA saat pengukuran dan sekitar 40–50 µA pada mode siaga. Sensor mampu mengukur kelembapan pada rentang 0–100% RH dan suhu pada rentang -40°C hingga 80°C. Akurasi pengukuran kelembapan mencapai ±2% RH (maksimum ±5% RH), sedangkan akurasi suhu mencapai ±0,5°C. Resolusi pengukuran untuk suhu dan kelembapan masing-masing sebesar 0,1°C dan 0,1% RH.

Gambar 15 Grafik Respon Sistem DHT22 Sensor

 

DHT22 memiliki periode pengambilan data rata-rata setiap 2 detik. Oleh karena itu, pembacaan sensor tidak disarankan dilakukan lebih cepat dari interval tersebut agar data yang diperoleh tetap valid dan akurat. Selain itu, sensor memiliki fitur kompensasi suhu otomatis (temperature compensation) yang membantu meningkatkan akurasi pengukuran kelembapan karena nilai kelembapan relatif sangat dipengaruhi oleh suhu lingkungan.

Karena memiliki ukuran yang kecil, konsumsi daya rendah, serta kemampuan transmisi data hingga sekitar 20 meter, DHT22 banyak digunakan pada sistem monitoring lingkungan, rumah pintar (smart home), pertanian cerdas, inkubator, sistem HVAC (Heating, Ventilation, and Air Conditioning), serta berbagai aplikasi berbasis mikrokontroler seperti Arduino, ESP32, dan STM32. 

5. Flowchart dan Listing Program[Kembali]


Listing program :

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

 

void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);

 

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

void Error_Handler(void);

 

/* USER CODE BEGIN EFP */

 

/* USER CODE END EFP */

 

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

#define Mq_6_Pin GPIO_PIN_0

#define Mq_6_GPIO_Port GPIOA

#define Mq_135_Pin GPIO_PIN_1

#define Mq_135_GPIO_Port GPIOA

#define Flame_Sensor_Pin GPIO_PIN_2

#define Flame_Sensor_GPIO_Port GPIOA

#define LED_Green_Pin GPIO_PIN_0

#define LED_Green_GPIO_Port GPIOB

#define LED_Red_Pin GPIO_PIN_1

#define LED_Red_GPIO_Port GPIOB

#define LED_Yellow_Pin GPIO_PIN_2

#define LED_Yellow_GPIO_Port GPIOB

#define D5_LCD_Pin GPIO_PIN_12

#define D5_LCD_GPIO_Port GPIOB

#define D4_LCD_Pin GPIO_PIN_13

#define D4_LCD_GPIO_Port GPIOB

#define E_LCD_Pin GPIO_PIN_14

#define E_LCD_GPIO_Port GPIOB

#define RS_LCD_Pin GPIO_PIN_15

#define RS_LCD_GPIO_Port GPIOB

#define Exhaust_Fan_Pin GPIO_PIN_4

#define Exhaust_Fan_GPIO_Port GPIOB

#define DHT22_Pin GPIO_PIN_6

#define DHT22_GPIO_Port GPIOB

#define D7_LCD_Pin GPIO_PIN_8

#define D7_LCD_GPIO_Port GPIOB

#define D6_LCD_Pin GPIO_PIN_9

#define D6_LCD_GPIO_Port GPIOB

#define Buzzer_Pin         GPIO_PIN_3

#define Buzzer_GPIO_Port   GPIOB

 

/* USER CODE BEGIN Private defines */

 

/* USER CODE END Private defines */

 

#ifdef __cplusplus

}

#endif

 

#endif /* __MAIN_H */


Main.c :

/* USER CODE BEGIN Header */

/**

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

  * @file           : main.c

  * @brief          : Main program body (Buzzer Sound Level & Speed Control)

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

  * @attention

  * Copyright (c) 2026 STMicroelectronics. All rights reserved.

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

  */

/* USER CODE END Header */

 

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

#include "main.h"

 

/* USER CODE BEGIN Includes */

#include "lcd.h"

#include "dht22.h"

#include <stdio.h>

/* USER CODE END Includes */

 

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

/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

 

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

/* USER CODE BEGIN PD */

#define THRESHOLD_MQ6_WASPADA     2000

#define THRESHOLD_MQ6_BAHAYA      3000

#define THRESHOLD_MQ135_WASPADA   2000

#define THRESHOLD_MQ135_BAHAYA    3000

#define THRESHOLD_SUHU_BAHAYA     35.0

/* USER CODE END PD */

 

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

/* USER CODE BEGIN PM */

/* USER CODE END PM */

 

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

ADC_HandleTypeDef hadc1;

 

/* USER CODE BEGIN PV */

uint32_t adc_mq6    = 0;

uint32_t adc_mq135  = 0;

uint8_t  flame      = 0; // 1 = Api, 0 = Aman (Sesuai hardware Anda)

float    suhu       = 0.0;

float    kelembaban = 0.0;

 

// Variabel penanda status sebelumnya untuk mencegah LCD berkedip (Flicker)

uint8_t status_sebelumnya = 0;

/* USER CODE END PV */

 

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

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_ADC1_Init(void);

 

/* USER CODE BEGIN PFP */

void Baca_Semua_Sensor(void);

void Proses_Logika_Sistem(void);

/* USER CODE END PFP */

 

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

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

 

/**

  * @brief  The application entry point.

  * @retval int

  */

int main(void)

{

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

  HAL_Init();

 

  /* Configure the system clock */

  SystemClock_Config();

 

  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  MX_ADC1_Init();

 

  /* USER CODE BEGIN 2 */

  // Inisialisasi Awal Layar LCD

  LCD_Init();

  LCD_Clear();

  LCD_SetCursor(0, 0);

  LCD_WriteString("SISTEM STARTING");

  HAL_Delay(1000);

  LCD_Clear();

  /* USER CODE END 2 */

 

  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

    /* USER CODE END WHILE */

 

    /* USER CODE BEGIN 3 */

    Baca_Semua_Sensor();      // Mengambil data terupdate dari seluruh sensor

    Proses_Logika_Sistem();   // Mengontrol aktuator berdasarkan kondisi sensor

 

    // Catatan: Jeda delay utama dihilangkan/diperkecil agar Soft-PWM di Waspada berjalan mulus

    HAL_Delay(10);

  }

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

 

  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

  * @param None

  * @retval None

  */

static void MX_ADC1_Init(void)

{

  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 GPIO Initialization Function

  * @param None

  * @retval None

  */

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

  __HAL_RCC_AFIO_CLK_ENABLE();

 

  /* USER CODE BEGIN MX_GPIO_Init_1 */

  // Membebaskan pin PB3 dari fungsi internal debugger JTAG bawaan pabrik

  __HAL_AFIO_REMAP_SWJ_NOJTAG();

  /* USER CODE END MX_GPIO_Init_1 */

 

  // Matikan semua pin output di awal demi keamanan hardware

  HAL_GPIO_WritePin(GPIOB, LED_Green_Pin|LED_Red_Pin|LED_Yellow_Pin|D5_LCD_Pin

                          |D4_LCD_Pin|E_LCD_Pin|RS_LCD_Pin|Buzzer_Pin

                          |Exhaust_Fan_Pin|DHT22_Pin|D7_LCD_Pin|D6_LCD_Pin, GPIO_PIN_RESET);

 

  // Konfigurasi Flame Sensor INPUT pada PORT A

  GPIO_InitStruct.Pin = Flame_Sensor_Pin;

  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

  GPIO_InitStruct.Pull = GPIO_PULLUP;

  HAL_GPIO_Init(Flame_Sensor_GPIO_Port, &GPIO_InitStruct);

 

  // Konfigurasi Seluruh Output pada PORT B

  GPIO_InitStruct.Pin = LED_Green_Pin|LED_Red_Pin|LED_Yellow_Pin|D5_LCD_Pin

                          |D4_LCD_Pin|E_LCD_Pin|RS_LCD_Pin|Buzzer_Pin

                          |Exhaust_Fan_Pin|DHT22_Pin|D7_LCD_Pin|D6_LCD_Pin;

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

/**

  * @brief  Fungsi penanganan pembacaan multi-channel ADC dan GPIO sensor secara sekuensial

  * @retval None

  */

void Baca_Semua_Sensor(void)

{

  ADC_ChannelConfTypeDef sConfig = {0};

 

  // 1. Ambil Nilai ADC MQ-6 (Channel 0 -> PA0)

  sConfig.Channel      = ADC_CHANNEL_0;

  sConfig.Rank         = ADC_REGULAR_RANK_1;

  sConfig.SamplingTime = ADC_SAMPLETIME_7CYCLES_5;

  HAL_ADC_ConfigChannel(&hadc1, &sConfig);

 

  HAL_ADC_Start(&hadc1);

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

  {

      adc_mq6 = HAL_ADC_GetValue(&hadc1);

  }

  HAL_ADC_Stop(&hadc1);

 

  // 2. Ambil Nilai ADC MQ-135 (Channel 1 -> PA1)

  sConfig.Channel      = ADC_CHANNEL_1;

  sConfig.Rank         = ADC_REGULAR_RANK_1;

  sConfig.SamplingTime = ADC_SAMPLETIME_7CYCLES_5;

  HAL_ADC_ConfigChannel(&hadc1, &sConfig);

 

  HAL_ADC_Start(&hadc1);

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

  {

      adc_mq135 = HAL_ADC_GetValue(&hadc1);

  }

  HAL_ADC_Stop(&hadc1);

 

  // 3. Baca Status Flame Sensor (1 = Terdeteksi Api)

  flame = HAL_GPIO_ReadPin(Flame_Sensor_GPIO_Port, Flame_Sensor_Pin);

 

  // 4. Baca Data Suhu dan Kelembaban DHT22

  DHT22_GetData(&suhu, &kelembaban);

}

 

/**

  * @brief  Fungsi pemrosesan keputusan logis sistem untuk mengontrol aktuator

  * @retval None

  */

void Proses_Logika_Sistem(void)

{

  char baris_lcd[16];

 

  // =========================================================================

  // KONDISI 3: STATUS BAHAYA (Bunyi Kencang & Konstan)

  // =========================================================================

  if ((flame == 1) ||

      ((adc_mq6 >= THRESHOLD_MQ6_BAHAYA) &&

       (adc_mq135 >= THRESHOLD_MQ135_BAHAYA) &&

       (suhu >= THRESHOLD_SUHU_BAHAYA)))

  {

      HAL_GPIO_WritePin(GPIOB, LED_Red_Pin,     GPIO_PIN_SET);

      HAL_GPIO_WritePin(GPIOB, LED_Yellow_Pin,  GPIO_PIN_RESET);

      HAL_GPIO_WritePin(GPIOB, LED_Green_Pin,   GPIO_PIN_RESET);

      HAL_GPIO_WritePin(GPIOB, Exhaust_Fan_Pin, GPIO_PIN_SET);

 

      // DI SINI: Buzzer diset HIGH murni terus menerus agar berbunyi MAKSIMAL/KENCANG

      HAL_GPIO_WritePin(GPIOB, Buzzer_Pin,      GPIO_PIN_SET);

 

      if (status_sebelumnya != 1)

      {

          LCD_Clear();

          LCD_SetCursor(0, 0);

          LCD_WriteString("STATUS: BAHAYA");

          status_sebelumnya = 1;

      }

 

      sprintf(baris_lcd, "Suhu: %.1f C", suhu);

      LCD_SetCursor(0, 1);

      LCD_WriteString(baris_lcd);

  }

 

  // =========================================================================

  // KONDISI 2: STATUS WASPADA (Bunyi Pelan & Ritme Lambat)

  // =========================================================================

  else if ((adc_mq6 >= THRESHOLD_MQ6_WASPADA) || (adc_mq135 >= THRESHOLD_MQ135_WASPADA))

  {

      HAL_GPIO_WritePin(GPIOB, LED_Yellow_Pin,  GPIO_PIN_SET);

      HAL_GPIO_WritePin(GPIOB, LED_Red_Pin,     GPIO_PIN_RESET);

      HAL_GPIO_WritePin(GPIOB, LED_Green_Pin,   GPIO_PIN_RESET);

      HAL_GPIO_WritePin(GPIOB, Exhaust_Fan_Pin, GPIO_PIN_SET);

 

      if (status_sebelumnya != 2)

      {

          LCD_Clear();

          LCD_SetCursor(0, 0);

          LCD_WriteString("STATUS: WASPADA");

          status_sebelumnya = 2;

      }

 

      sprintf(baris_lcd, "Suhu: %.1f C", suhu);

      LCD_SetCursor(0, 1);

      LCD_WriteString(baris_lcd);

 

      // DI SINI TRICKNYA: Membuat loop Soft-PWM dengan siklus tugas kecil (Duty Cycle ~15%)

      // dan durasi total yang membuat ritme bip-nya berjarak lambat.

      for(int i = 0; i < 30; i++)

      {

          HAL_GPIO_WritePin(GPIOB, Buzzer_Pin, GPIO_PIN_SET);

          HAL_Delay(2);   // Menyala sangat sebentar (membuat suara PELAN)

          HAL_GPIO_WritePin(GPIOB, Buzzer_Pin, GPIO_PIN_RESET);

          HAL_Delay(13);  // Mati lebih lama (membuat ritme LAMBAT)

      }

  }

 

  // =========================================================================

  // KONDISI 1: STATUS AMAN (Mati Total)

  // =========================================================================

  else

  {

      HAL_GPIO_WritePin(GPIOB, LED_Green_Pin,   GPIO_PIN_SET);

      HAL_GPIO_WritePin(GPIOB, LED_Yellow_Pin,  GPIO_PIN_RESET);

      HAL_GPIO_WritePin(GPIOB, LED_Red_Pin,     GPIO_PIN_RESET);

      HAL_GPIO_WritePin(GPIOB, Buzzer_Pin,      GPIO_PIN_RESET);      // Buzzer Mati

      HAL_GPIO_WritePin(GPIOB, Exhaust_Fan_Pin, GPIO_PIN_RESET);

 

      if (status_sebelumnya != 3)

      {

          LCD_Clear();

          LCD_SetCursor(0, 0);

          LCD_WriteString("STATUS: AMAN");

          status_sebelumnya = 3;

      }

 

      sprintf(baris_lcd, "Suhu: %.1f C", suhu);

      LCD_SetCursor(0, 1);

      LCD_WriteString(baris_lcd);

  }

}

/* USER CODE END 4 */

 

/**

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

  * @retval None

  */

void Error_Handler(void)

{

  __disable_irq();

  while (1)

  {

  }

}

6. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

- Rangkaian Proteus


Prinsip Kerja:
Sistem berbasis mikrokontroler STM32F103C8T6 ini dirancang sebagai pengaman ruangan pintar yang memonitor keberadaan gas, api, polusi udara, serta suhu lingkungan. Saat sistem pertama kali dinyalakan (Mulai), mikrokontroler akan melakukan Inisialisasi Sistem untuk menyiapkan pin input-output, mengaktifkan komunikasi layar LCD 16x2, serta menstabilkan pembacaan dari empat sensor utama, yaitu sensor gas MQ-6, sensor api (Flame Sensor), sensor kualitas udara MQ-135, dan sensor suhu DHT22.

Setelah inisialisasi selesai, sistem akan masuk ke dalam tahap pemindaian kondisi ruangan secara bertahap menggunakan logika percabangan conditional:

  • Kondisi Aman: Mikrokontroler pertama-tama memeriksa pembacaan dari sensor MQ-6. Jika sensor MQ-6 tidak mendeteksi adanya kebocoran gas (Kondisi 'Tidak'), maka sistem langsung dikategorikan dalam Kondisi Aman. Pada kondisi ini, mikrokontroler akan menyalakan LED Hijau, memastikan Buzzer Mati, dan Fan (Kipas) Mati. Status "Kondisi Aman" ini kemudian akan dikirim ke LCD untuk ditampilkan.

  • Kondisi Waspada: Jika sensor MQ-6 mendeteksi adanya gas (Kondisi 'Ya'), sistem tidak langsung menyimpulkan bahaya besar, melainkan memeriksa Flame Sensor. Jika Flame Sensor tidak mendeteksi adanya api, atau jika api terdeteksi namun sensor kualitas udara MQ-135 tidak mendeteksi gas/asap berbahaya lainnya, sistem akan dikategorikan ke dalam Kondisi Waspada. Pada situasi ini, mikrokontroler mengaktifkan LED Kuning, membunyikan Buzzer secara pelan sebagai peringatan dini, serta menyalakan Fan (Kipas) melalui driver transistor Q1 untuk membuang udara di dalam ruangan.

  • Kondisi Bahaya: Apabila ketiga sensor utama menunjukkan pembacaan yang kritis—di mana sensor MQ-6 mendeteksi gas, Flame Sensor mendeteksi api, dan sensor MQ-135 juga mendeteksi asap pekat secara bersamaan (seluruh percabangan bernilai 'Ya')—maka sistem langsung beralih ke Kondisi Bahaya. Mikrokontroler akan segera menyalakan LED Merah, membunyikan Buzzer secara keras sebagai alarm evakuasi, dan memutar Fan (Kipas) dengan performa penuh untuk mengurai akumulasi gas berbahaya di dalam ruangan.

Setelah status keamanan ruangan ditentukan (baik Aman, Waspada, maupun Bahaya) dan ditampilkan pada baris utama layar LCD 16x2, mikrokontroler melanjutkan proses untuk memeriksa sensor DHT22. Jika sensor DHT22 berhasil mendeteksi perubahan parameter termal (Kondisi 'Ya'), maka LCD akan menampilkan informasi suhu ruangan terkini secara real-time berdampingan dengan status keamanan tadi. Namun, jika sensor DHT22 tidak mendeteksi atau mengalami kegagalan pembacaan (Kondisi 'Tidak'), maka LCD tidak akan menampilkan suhu ruangan dan hanya berfokus pada informasi status keamanan utama. Setelah seluruh tahapan visualisasi data pada layar LCD terpenuhi, siklus kerja sistem pada interasi tersebut dinyatakan Selesai dan akan terus berulang secara dinamis.

- Rangkaian Prototype


7. Video Simulasi[Kembali]


8. Kesimpulan dan Saran[Kembali]

8.1 Kesimpulan

Berdasarkan perancangan proyek Sistem Peringatan Dini dan Mitigasi Kebakaran Akibat Kebocoran Gas LPG pada Gudang Penyimpanan Menggunakan STM32, dapat disimpulkan bahwa sistem yang dirancang mampu memberikan solusi keamanan yang lebih efektif dan proaktif dalam mendeteksi potensi bahaya kebocoran gas LPG dan kebakaran. Integrasi mikrokontroler STM32F103C8T6 dengan sensor MQ-6, MQ-135, DHT22, dan Flame Sensor memungkinkan pemantauan kondisi lingkungan gudang secara real-time melalui pendekatan multi-sensor sehingga meningkatkan akurasi deteksi dan mengurangi kemungkinan terjadinya alarm palsu. Sistem ini juga dilengkapi mekanisme peringatan berjenjang melalui LED indikator, buzzer, dan LCD 16×2 yang memudahkan operator dalam mengetahui tingkat kondisi bahaya. Selain itu, penerapan exhaust fan yang aktif secara otomatis saat terdeteksi kebocoran gas menjadi bentuk mitigasi awal yang mampu mengurangi konsentrasi gas berbahaya di udara. Dengan demikian, sistem yang dirancang tidak hanya berfungsi sebagai alat pendeteksi, tetapi juga sebagai sistem respons awal yang dapat meningkatkan keselamatan kerja, melindungi aset usaha, serta meminimalkan risiko kerugian akibat kebakaran maupun ledakan pada gudang penyimpanan LPG.

8.2 Saran

Untuk pengembangan lebih lanjut, sistem ini dapat ditingkatkan dengan menambahkan modul komunikasi berbasis Internet of Things (IoT) seperti Wi-Fi atau GSM agar informasi kondisi bahaya dapat dikirim secara otomatis kepada pemilik atau petugas keamanan melalui aplikasi maupun pesan singkat. Selain itu, diperlukan proses kalibrasi sensor secara berkala untuk menjaga akurasi pembacaan dan keandalan sistem dalam jangka panjang. Penggunaan sensor dengan tingkat sensitivitas yang lebih tinggi serta penambahan sistem pemadam otomatis (automatic fire suppression system) juga dapat menjadi pengembangan berikutnya guna meningkatkan efektivitas mitigasi kebakaran. Implementasi sistem pada lingkungan nyata perlu disertai pengujian yang lebih komprehensif terhadap berbagai kondisi operasional agar diperoleh tingkat keandalan dan keamanan yang optimal sebelum diterapkan secara luas pada agen maupun gudang penyimpanan LPG.

9. Download File[Kembali]

File Zip Rangkaian Project [Klik Disini]

File Zip Library Komponen [Klik Disini]

Datasheet STM32F103C8 [Klik Disini]

Datasheet Flame Sensor [Klik Disini]

Datasheet mq-6 [Klik Disini]

Datasheet mq-135 [Klik Disini]

Datasheet dht22 [Klik Disini]

Tidak ada komentar:

Posting Komentar

    BAHAN PRESENTASI UNTUK MATAKULIAH ELEKTRONIKA 2024 Oleh : MUHAMMAD IKHSAN DEPUTRA NIM. 2310952003   Dosen Pengampu : Dr. Darwison, S. T....