Sistem Pemantauan dan Pengendali Kualitas Udara
serta Keamanan Kebakaran Otomatis
pada Gudang Penyimpanan Bahan Kimia Industri
Dalam lingkungan industri, terutama di area seperti gudang penyimpanan bahan kimia, pabrik kimia, atau ruangan yang memiliki risiko kebakaran tinggi, pengendalian kualitas udara dan sistem keamanan menjadi aspek yang sangat krusial. Suhu yang tidak terkontrol, kelembaban yang tinggi, atau keberadaan gas berbahaya dalam konsentrasi tertentu dapat memicu reaksi kimia berbahaya, merusak peralatan, hingga menyebabkan ancaman serius terhadap keselamatan pekerja. Sayangnya, sistem pemantauan dan pengendalian yang masih bersifat manual atau pasif sering kali terlambat dalam merespons perubahan kondisi lingkungan yang cepat dan dinamis.
Untuk menjawab tantangan tersebut, diperlukan sebuah sistem otomatis yang mampu memantau kondisi lingkungan secara real-time serta merespons dengan cepat dan tepat terhadap perubahan parameter kritis. Sistem ini harus dapat mendeteksi suhu, kelembaban, serta keberadaan gas berbahaya, lalu mengendalikan perangkat seperti kipas, ventilasi, dan sistem pendingin secara otomatis. Selain itu, penyampaian informasi kepada operator juga penting, sehingga sistem ini idealnya dilengkapi dengan antarmuka seperti LCD untuk menampilkan status lingkungan serta memberikan peringatan dini apabila kondisi tidak aman terdeteksi.
Tugas besar ini mengusung judul "Sistem Pemantauan dan Pengendali Kualitas Udara serta Keamanan Kebakaran Otomatis pada Gudang Penyimpanan Bahan Kimia Industri" yang bertujuan merancang dan mengimplementasikan solusi berbasis mikrokontroler untuk menciptakan lingkungan penyimpanan yang aman dan terkendali. Dengan pendekatan otomatisasi ini, diharapkan dapat meningkatkan efektivitas pengawasan lingkungan, memperkecil risiko kecelakaan kerja, serta mendukung sistem keselamatan industri secara menyeluruh.
- Merancang sistem pemantauan otomatis yang mampu mendeteksi suhu, kelembaban, dan konsentrasi gas berbahaya secara real-time di lingkungan gudang penyimpanan bahan kimia industri.
- Mengembangkan sistem pengendali otomatis untuk mengaktifkan kipas, ventilasi, dan sistem pendingin berdasarkan parameter lingkungan yang terdeteksi.
- Menyediakan antarmuka informasi visual melalui LCD untuk menampilkan status lingkungan serta memberikan peringatan dini terhadap potensi bahaya kebakaran atau gangguan kualitas udara.
a. PWM (Pulse Width
Modulation)
PWM atau kepanjangan Pulse Width
Modulation, dalam bahasa Indonesia biasa disebut Modulasi Lebar Pulsa. Pada
prinsipnya, PWM adalah salah satu teknik modulasi yang mengubah lebar pulsa
(pulse width) dengan nilai frekuensi dan amplitudo (tinggi pulsa) yang tetap.
PWM Signal ini digunakan menghasilkan sinyal analog dari perangkat Digital yang
salah satu contohnya adalah dari Mikrokontroler.
Pembagian Pin PWM:
Setiap Board Arduino memiliki pin PWM dan
nilai frekuensi yang berbeda-beda. Karena pada percobaan nanti kita akan
menggunakan board arduino nano, maka gunakan salah satu dari pin berikut 3, 5,
6, 9, 10, 11.
PWM pada arduino bekerja pada frekuensi
500Hz, artinya 500 siklus/ketukan dalam satu detik. Untuk setiap siklus, kita
bisa memberi nilai dari 0 hingga 255. Ketika kita memberikan angka 0, berarti
pada pin tersebut tidak akan pernah bernilai 5 volt (pin selalu bernilai 0
volt). Sedangkan jika kita memberikan nilai 255, maka sepanjang siklus akan
bernilai 5 volt (tidak pernah 0 volt). Jika kita memberikan nilai 127 (kita
anggap setengah
dari 0 hingga 255, atau 50% dari 255),
maka setengah siklus akan bernilai 5 volt, dan setengah siklus lagi akan
bernilai 0 volt. Sedangkan jika jika memberikan 25% dari 255 (1/4 * 255 atau
64), maka 1/4 siklus akan bernilai 5 volt, dan 3/4 sisanya akan bernilai 0
volt, dan ini akan terjadi 500 kali dalam 1 detik.
b. ADC (Analog to
Digital Converter)
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. Ada 2 faktor yang perlu
diperhatikan pada proses kerja ADC yaitu kecepatan sampling dan resolusi.
Kecepatan sampling menyatakan seberapa sering perangkat mampu mengkonversi
sinyal analog ke dalam bentuk sinyal digital dalam selang waktu yang tertentu.
Biasa dinyatakan dalam sample per second (SPS). Sementara Resolusi menyatakan
tingkat ketelitian yang dimilliki. Pada Arduino, resolusi yang dimiliki adalah
10 bit atau rentang nilai digital antara 0 - 1023. Dan pada Arduino tegangan
referensi yang digunakan adalah 5 volt, hal ini berarti ADC pada Arduino mampu
menangani sinyal analog dengan tegangan 0 - 5 volt. Pada Arduino, menggunakan
pin analog input yang diawali dengan kode A( A0- A5 padaArduino Uno). Fungsi
untuk mengambil data sinyal input analog menggunakan analogRead(pin);
c. Mikrokontroler
Mikrokontroler adalah suatu chip berupa IC
(Integrated Circuit) yang dapat menerima sinyal input, mengolahnya dan
memberikan sinyal output sesuai dengan program yang diisikan ke dalamnya.
Sinyal input mikrokontroler berasal dari sensor yang merupakan informasi dari
lingkungan sedangkan sinyal output ditujukan kepada aktuator yang dapat
memberikan efek ke lingkungan. Jadi secara sederhana mikrokontroler dapat
diibaratkan sebagai otak dari suatu perangkat/produk yang mempu berinteraksi
dengan lingkungan sekitarnya. Mikrokontroler pada dasarnya adalah komputer
dalam satu chip, yang di dalamnya terdapat mikroprosesor, memori, jalur
Input/Output (I/O) dan perangkat pelengkap lainnya. Kecepatan pengolahan data
pada mikrokontroler lebih rendah jika dibandingkan dengan PC. Pada PC kecepatan
mikroprosesor yang digunakan saat ini telah mencapai orde GHz, sedangkan
kecepatan operasi mikrokontroler pada umumnya berkisar antara 1 – 16 MHz.
Begitu juga kapasitas RAM dan ROM pada PC yang bisa mencapai orde Gbyte, dibandingkan
dengan mikrokontroler yang hanya berkisar pada orde byte/Kbyte.
Meskipun kecepatan pengolahan data dan
kapasitas memori pada mikrokontroler jauh lebih kecil jika dibandingkan dengan
komputer personal, namun kemampuan mikrokontroler sudah cukup untuk dapat
digunakan pada banyak aplikasi terutama karena ukurannya yang kompak.
Mikrokontroler sering digunakan pada sistem yang tidak terlalu kompleks dan
tidak memerlukan kemampuan komputasi yang tinggi.
d. Komunikasi
Kegunaan dasar dari sistem komunikasi
adalah menjalankan pertukaran data antara dua pihak. Pada gambar dibawah ini
merupakan suatu model komunikasi yang sederhana yaitu komunikasi dua arah. Pada
mikrokontroler ada beberapa komunikasi yaitu:
• UART (Universal Asynchronous
Receiver-Transmitter) adalah bagian perangkat keras komputer yang menerjemahkan
antara bit-bit paralel data dan bit-bit serial. UART biasanya berupa sirkuit
terintegrasi yang digunakan untuk komunikasi serial pada komputer atau port
serial perangkat peripheral.
Cara kerja komunikasi UART:
Data dikirimkan secara paralel dari data
bus ke UART1. Pada UART1 ditambahkan start bit, parity bit, dan stop bit
kemudian dimuat dalam satu paket data. Paket data ditransmisikan secara serial
dari Tx UART1 ke Rx UART2. UART2 mengkonversikan data dan menghapus bit
tambahan, kemudia di transfer secara parallel ke data bus penerima
• Serial Peripheral Interface (SPI)
merupakan salah satu mode komunikasi serial synchrounous kecepatan tinggi yang
dimiliki oleh ATmega 328. Komunikasi SPI membutuhkan 3 jalur yaituMOSI, MISO,
dan SCK. Melalui komunikasi ini data dapat saling dikirimkan baik antara
mikrokontroller maupun antara mikrokontroller dengan peripheral lain di luar
mikrokontroler. MOSI: Master Output Slave Input Artinya jika dikonfigurasi
sebagai master maka pin MOSI sebagai output tetapi jika dikonfigurasi sebagai
slave maka pin MOSI sebagai input. MISO: Master Input Slave Output Artinya jika
dikonfigurasi sebagai master maka pin MISO sebagai input tetapi jika
dikonfigurasi sebagai slave maka pin MISO sebagai output. SCLK: Clock Jika
dikonfigurasi sebagai master maka pin CLK berlaku sebagai output tetapi jika
dikonfigurasi sebagai slave maka pin CLK
berlaku sebagai input. SS/CS: Slave Select/ Chip Select adalah jalur master
memilih slave mana yang akan dikirimkan data.
Sinyal clock dialirkan dari master ke slave yang
berfungsi untuk sinkronisasi. Master dapat memilih slave mana yang akan
dikirimkan data melalui slave select, kemudian data dikirimkan dari master ke
slave melalui MOSI. Jika master butuh respon data maka slave akan mentransfer
data ke master melalui MISO.
• Inter Integrated Circuit atau
sering disebut I2C adalah standar komunikasi serial dua arahmenggunakan 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.
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 telahditerima receiver.
e. Resistor
Simbol :
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%.
f. Raspberry Pi Pico
Raspberry Pi adalah sebuah komputer mini berukuran kecil yang dikembangkan oleh Raspberry Pi Foundation dengan tujuan utama untuk mendukung pembelajaran komputer dan pemrograman. Meskipun ukurannya hanya sebesar kartu kredit, Raspberry Pi memiliki kemampuan yang cukup untuk menjalankan sistem operasi ringan seperti Raspberry Pi OS dan dapat digunakan untuk berbagai proyek seperti otomasi rumah (smart home), sistem monitoring, robotika, hingga Internet of Things (IoT). Perangkat ini dilengkapi dengan berbagai komponen penting seperti prosesor ARM, RAM, slot microSD untuk penyimpanan, serta antarmuka koneksi seperti USB, HDMI, dan GPIO (General Purpose Input/Output) yang memungkinkan Raspberry Pi terhubung dengan berbagai sensor dan aktuator.
Adapun spesifikasi dari Rapsberry Pi Pico ini adalah sebagai berikut:
Gambar Raspberry Pi Pico
Spesifikasi Raspberry Pi Pico
Raspberry Pi Pico sudah dilengkapi dengan rangkaian regulator daya didalamnya, sehingga dapat dicatu dengan sumber daya dengan tegangan yang bervariasi mulai dari 1.8 V hingga 5.5 V. Sehingga dua baterai ukuran AA yang disusun seri, sudah cukup untuk menjalankan board ini. Raspberry Pi Pico memiliki fitur dan fungsionalitas yang kuat dan lebih banyak. Dilihat dari segi programming atau SDK, Raspberry Pi Pico cukup mudah apabila menggunakan bahasa MycroPython untuk setupnya dan untuk contoh program sudah terdapat dokumentasi pada website resmi Raspberry Pi. Sedangkan untuk setup SDK C/C++ Pico masih sulit, karena belum ada IDE dedicated. Selain itu, Raspberry Pi juga tidak memiliki internal Bluethooth dan WiFi yang sangat dibutuhkan untuk project-project Internet of Things.
g. Flame Sensor
- VCC (Voltage Common Collector) atau VCC: Ini adalah pin daya yang digunakan untuk menyediakan tegangan kerja untuk sensor. Biasanya terhubung ke sumber daya positif.
GND (Ground):
Pin tanah, yang terhubung ke sumber daya negatif atau ground, untuk menciptakan sirkuit lengkap.OUT (Output):
Pin output menghasilkan sinyal yang menunjukkan apakah sensor mendeteksi keberadaan nyala api atau tidak. Sinyal ini dapat digunakan sebagai input untuk sistem kontrol atau mikrokontroler yang mengatur respons sistem terhadap deteksi api.NC (No Connection):
Beberapa sensor mungkin memiliki pin yang tidak terhubung untuk meningkatkan fleksibilitas desain atau memiliki opsi tambahan di masa mendatang.
Prinsip kerja
Flame sensor bekerja berdasarkan prinsip deteksi radiasi inframerah atau ultraviolet yang dihasilkan oleh nyala api. Sensor ini dilengkapi dengan fotodetektor sensitif terhadap panjang gelombang khusus yang dihasilkan oleh api. Ketika nyala api hadir, sensor mendeteksi radiasi ini dan menghasilkan sinyal keluaran. Sinyal tersebut kemudian dapat digunakan untuk mengontrol sistem, seperti mematikan peralatan jika nyala api tiba-tiba padam, yang secara signifikan berkontribusi pada keamanan dan stabilitas operasional di berbagai aplikasi, termasuk sistem pembakaran industri, peralatan pemanas, dan perangkat gas.
Grafik respon sensor
h. MQ 135
- VCC (Voltage Common Collector): Ini adalah pin daya yang digunakan untuk menyediakan tegangan kerja untuk sensor. Biasanya terhubung ke sumber daya positif.
- GND (Ground): Pin tanah, yang terhubung ke sumber daya negatif atau ground, untuk menciptakan sirkuit lengkap
- OUT (Output): Pin output menghasilkan sinyal analog atau digital yang berkaitan dengan konsentrasi gas yang terdeteksi. Sinyal ini dapat dihubungkan ke mikrokontroler atau sistem pemantauan untuk analisis lebih lanjut atau tindakan respons.
- A0 (Analog Output): Beberapa versi sensor MQ-135 memiliki pin tambahan untuk output analog, yang memberikan informasi lebih rinci tentang tingkat konsentrasi gas.
- D0 (Digital Output): Jika sensor mendukung output digital, pin ini menghasilkan sinyal logika yang menunjukkan apakah konsentrasi gas telah melebihi ambang batas tertentu.
Sensor gas MQ-135 bekerja berdasarkan perubahan resistansi gas dalam respons terhadap gas tertentu yang terkandung dalam lingkungan. Sensor ini menggunakan lapisan film logam oksida semikonduktor, seperti SnO2 (timah dioksida), yang memiliki resistansi listrik yang bervariasi tergantung pada jenis dan konsentrasi gas yang bersentuhan dengannya. Ketika sensor terpapar gas tertentu, seperti amonia, karbon monoksida, metana, atau propana, reaksi kimia dengan lapisan semikonduktor menyebabkan perubahan resistansi. Variasi ini kemudian diukur dan diinterpretasikan sebagai sinyal output, yang dapat berupa sinyal analog atau digital. Dengan memonitor perubahan resistansi, sensor MQ-135 dapat memberikan informasi tentang tingkat konsentrasi gas dalam lingkungan, memungkinkan pengguna untuk mendeteksi dan mengukur adanya gas berbahaya.
Grafik Respon sensor
i. DHT22
1. Spesifikasi dari sensor DHT22:
2. Tegangan operasi: 3.3V hingga 6V
3. Arus: 1.5mA (mengukur) 60uA (siaga)
4. Keluaran: data serial
5. Kisaran suhu: -40°C hingga 80°C
6. Kisaran kelembaban: 0% hingga 100%
7. Resolusi: suhu dan kelembaban keduanya 16-bit
8. Akurasi: ±0.5°C dan ±2%
Grafik Respon
j. LCD
Liquid
Crystal Display (LCD) adalah sebuah peralatan elektronik yang berfungsi untuk menampilkan output sebuah
sistem dengan cara membentuk suatu citra atau gambaran pada sebuah layar.
Secara garis besar komponen penyusun LCD terdiri dari kristal cair (liquid
crystal) yang diapit oleh 2 buah elektroda transparan dan 2 buah filter polarisasi
(polarizing filter).
Gambar
Penampang komponen penyusun LCD
Keterangan:
1.
Film dengan polarizing filter
vertical untuk memolarisasi cahaya yang masuk
2.
Glass substrate yang berisi
kolom-kolom elektroda Indium tin oxide (ITO)
3.
Twisted nematic liquid crystal
(kristal cair dengan susunan terpilin)
4.
Glass substrate yang berisi
baris-baris elektroda Indium tin oxide (ITO)
5.
Film dengan polarizing filter
horizontal untuk memolarisasi cahaya yang masuk
6.
Reflektor cahaya untuk memantulkan
cahaya yang masuk LCD kembali ke mata pengamat
Sebuah
citra dibentuk dengan mengombinasikan kondisi nyala dan mati dari pixel-pixel
yang menyusun layar sebuah LCD. Pada umumnya LCD yang dijual di pasaran sudah
memiliki integrated circuit tersendiri sehingga para pemakai dapat mengontrol
tampilan LCD dengan mudah dengan menggunakan mikrokontroler untuk mengirimkan
data melalui pin-pin input yang sudah tersedia.
Kaki-kaki yang terdapat pada LCD
k. Buzzer
Buzzer adalah sebuah komponen elektronika yang dapat menghasilkan getaran suara berupa gelombang bunyi. Buzzer akan menghasilkan getaran suara ketika diberikan sejumlah tegangan listrik dengan taraf tertentu sesuai dengan spesifikasi bentuk dan ukuran buzzer itu sendiri. Pada umumnya, buzzer ini sering digunakan sebagai alarm karena penggunaannya yang cukup mudah yaitu dengan memberikan tegangan input maka buzzer akan menghasilkan getaran suara berupa gelombang bunyi yang dapat didengar.
Spesifikasi :
• Nilai tegangan : 6V DC
• Tegangan pengoperasian : 4 hingga 8V DC
• Arus : ≤30mA
• Keluaran suara pada 10cm : ≥85dB
• Frekuensi resonansi : 2300 ±300Hz
• Nada : Berkelanjutan
• Suhu operasional : -25°C hingga +80°C
• Suhu penyimpanan : -30°C hingga +85°C
• Berat : 2g
l. Pompa DC 5V
Motor pump / pompa air adalah alat untuk menggerakan air dari tempat bertekanan rendah ke tempat bertekanan yang lebih tinggi. Pada dasarnya motor pump sama dengan motor DC pada umumnya, hanya saja sudah di-packing sedemikian rupa sehingga dapat digunakan di dalam air.
Spesifikasi :
- Panjang kabel USB: 1 Meter
- Jenis Pompa: Submersible DC
- Tegangan Kerja: 3 - 5V
- Batas Tegangan: 2.5 - 6V DC
- Konsumsi Arus: 120 - 330 mA
- Konsumsi Daya: 0.4 - 1.5W
- Kapasitas Pompa: 80 - 120L/H
- Dimensi Luar: 7.5mm / 0.3"
- Dimensi Dalam: 4.7mm / 0.18"
- Diameter Pompa: Kurang lebih 24 mm / 0.95"
- Panjang Pompa: Kurang lebih 45 mm / 1.8"
- Tinggi Pompa: Kurang lebih 33 mm / 1.30"
- Material: Engineering plastic
- Aktuator: Brushless DC
- Masa Kerja: 500 jam
m. Relay 5V
Relay adalah komponen elektronik berupa saklar elektronik yang digerakkan oleh arus listrik. Secara prinsip, relay merupakan tuas saklar dengan lilitan kawat pada batang besi (solenoid) di dekatnya, ketika solenoid dialiri arus listrik, tuas akan tertarik karena adanya gaya magnet yang terjadi pada solenoid sehingga kontak saklar akan menutup. Pada saat arus dihentikan, gaya magnet akan hilang, tuas akan kembali keposisi semula dan kontak saklar kembali terbuka. Relay biasanya digunakan untuk menggerakkan arus/tegangan yang besar (misalnya peralatan listrik 4 A/AC 220V) dengan memakai arus/tegangan yang kecil (misalnya 0.1 A/12 volt DC).
Relay adalah komponen listrik yang bekerja berdasarkan prinsip induksi medan elektromagnetis. Jika sebuah penghantar sialiri oleh arus listrik, maka disekitar penghantar tersebut timbul medan magnet. Medan magnet yang dihasilkan oleh arus listrik tersebut selanjutnya diinduksikan ke logam ferromagnetis. Penemu relay pertama kali adalah Joseph Henry pada tahun 1835 (Elangsakti,2013)
- Sediakan alat dan bahan yang diperlukan untuk merangkai project demo
- Rangkaian alat dan bahan seperti gambar rangkaian di bawah
- Hubungkan sumber semua alat bahan ke salah satu sumber arduino dan ground semua bahan ke ground salah satu arduino
- Jalankan simulasi rangkaian
- Jika rangkaian berjalan sesuai dengan kondisi yang diinginkan, maka lanjutkan dengan membuat protype dari project demo
- Pahami datasheet masing masing komponen dengan mempertimbangkan tegangan yang digunakan, arus yang diperlukan, terutama spesifikasi masing masing komponen.
- Rangkai semua alat dan bahan sesuai dengan gambar yang telah dilampirkan.
- Pasang dan hubungkan semua alat dan bahan sehingga membentuk rangkaian jadi.
c. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Rangkaian Simulasi Wokwi :
Raspberry Pi Pico 1 (sebagai Master) secara terus-menerus membaca data dari sensor suhu (DHT22), sensor gas (MQ-135), dan flame sensor. Jika suhu atau konsentrasi gas melebihi ambang batas aman, sistem secara otomatis mengaktifkan kipas ventilasi dan modul filter karbon aktif untuk menyaring dan menyejukkan udara dalam gudang. Jika flame sensor mendeteksi api, sistem akan mematikan kipas, membunyikan buzzer sebagai alarm bahaya, dan langsung mengaktifkan pompa atau solenoid valve untuk menyemprotkan air melalui shower pemadam. Semua informasi lingkungan dan status sistem dikirimkan via komunikasi UART ke Raspberry Pi Pico 2, yang bertugas menampilkan informasi tersebut pada LCD . Seluruh sistem dirancang bekerja secara otomatis dan real-time tanpa intervensi manusia, guna menjaga keselamatan dan kualitas udara di gudang bahan kimia industri.
d. Flowchart dan Listing Program[Kembali]
a) RX
b) TX
Listing Program :
a) RX
import time
import dht
# UART0 on TX=GP0, RX=GP1, baudrate=9600
uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
flame_sensor = Pin(14, Pin.IN)
mq135 = ADC(Pin(26))
dht_sensor = dht.DHT22(Pin(15))
def adc_to_voltage(adc_value):
return (adc_value / 65535) * 3.3
while True:
flame_detected = flame_sensor.value()
gas_adc = mq135.read_u16()
gas_voltage = adc_to_voltage(gas_adc)
try:
dht_sensor.measure()
temperature = dht_sensor.temperature() # °C
humidity = dht_sensor.humidity() # %
except OSError as e:
temperature = None
humidity = None
print("Failed to read DHT22:", e)
if flame_detected == 0:
print("Flame detected!")
else:
print("Cleared")
print("MQ-135 Voltage: {:.2f} V".format(gas_voltage))
if temperature is not None and humidity is not None:
print("Temp: {:.1f} °C, Humidity: {:.1f} %".format(temperature, humidity))
uart.write("T:{:.1f} H:{:.1f}\n".format(temperature, humidity))
else:
pass
print("")
uart.write("G:{:.3f}\n".format(gas_voltage))
uart.write("F:{}\n".format(flame_detected))
time.sleep(1)
import time
from machine import I2C
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd
I2C_ADDR = 0x27
I2C_NUM_ROWS = 4
I2C_NUM_COLS = 20
# UART0: RX = GP1, TX = GP0
uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
# LED or buzzer output (e.g., GP16)
relay1 = Pin(16, Pin.OUT)
relay2 = Pin(17, Pin.OUT)
buzzer = Pin(15, Pin.OUT)
# For optional display/debug/logging
temperature = None
humidity = None
flame_value = None
print("Running test_main")
i2c = I2C(1, sda=machine.Pin(18), scl=machine.Pin(19), freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
relay1.on()
relay2.on()
gas_voltage = 0
while True:
if uart.any():
data = uart.readline()
if data:
line = data.decode().strip()
try:
if line.startswith("T:") and "H:" in line:
# Parse temperature and humidity
parts = line.split()
temperature = float(parts[0].split(":")[1])
humidity = float(parts[1].split(":")[1])
print("🌡 Temp: {:.1f} °C | 💧 Humidity: {:.1f} %".format(temperature, humidity))
# Tampilkan ke LCD
lcd.clear()
lcd.putstr("T:{:.1f}C H:{:.1f}%".format(temperature, humidity))
elif line.startswith("G:"):
gas_voltage = float(line.split(":")[1])
lcd.move_to(0, 1)
lcd.putstr("G:{:.1f}V".format(gas_voltage))
elif line.startswith("F:"):
# Parse flame status
flame_value = int(line.split(":")[1])
else:
print("⚠️ Unknown message")
except Exception as e:
print("⚠️ Error parsing:", line, "|", e)
else:
pass
if flame_value == 0:
print("🔥 Flame DETECTED from sender!")
relay1.off()
buzzer.on()
lcd.move_to(8, 1)
lcd.putstr("Fire!")
else:
print("Cleared")
relay1.on()
buzzer.off()
if temperature is not None and gas_voltage is not None and humidity is not None:
if temperature > 30 or gas_voltage > 0.8 or humidity > 99:
relay2.off()
else:
relay2.on()
time.sleep(0.1)