from machine import ADC, Pin
from esp32_gpio_lcd import GpioLcd
from utime import sleep
import math
from math import log
# Inisialisasi pin untuk sensor termistor
th = ADC(Pin(15))
# Inisialisasi pin untuk sensor LDR
ldr = ADC(Pin(34))
# Konstanta koefisien beta NTC, suhu absolut, dan konstanta perubahan suhu
ntc_beta_coef = 3950
abs_zero = -273.15
k_to_c_const = 298.15 # Ubah sesuai dengan kebutuhan
# Konstanta koefisien beta LDR
GAMMA = 0.7
RL10 = 50
# Fungsi untuk mengonversi nilai analog LDR menjadi intensitas cahaya (lux)
def analog_to_lux(analog):
return (analog - 0) * (1000 - 1) / (65535 - 0) + 1
# Fungsi untuk mengonversi nilai analog sensor termistor menjadi suhu dalam derajat Celsius
def analog_to_temp(beta, absz, ktoc, analog):
c = 1/((log(1/(65535/analog-1))/beta)\
+(1/ktoc))+absz
return c
# Inisialisasi layar LCD
lcd = GpioLcd(
rs_pin=Pin(13),
enable_pin=Pin(12),
d4_pin=Pin(25),
d5_pin=Pin(26),
d6_pin=Pin(27),
d7_pin=Pin(14),
num_lines=2,
num_columns=16
)
while True:
# Baca nilai analog dari sensor termistor
analog_val = th.read_u16()
# Konversi nilai analog menjadi suhu dalam derajat Celsius
c = analog_to_temp(ntc_beta_coef,
abs_zero,
k_to_c_const,
analog_val)
# Baca nilai analog dari sensor LDR
#rubah skala ke 2^10
adcVal = ldr.read_u16()/64
v = adcVal/1024*5
r = 2000*v/(1-v/5)
# Konversi nilai analog LDR menjadi intensitas cahaya (lux)
light_intensity =(RL10*1000*(10**GAMMA)/r)**(1/GAMMA)
# Menampilkan status sesuai dengan kondisi yang telah ditentukan
if 1 <= light_intensity <= 200 and 0 <= c <= 40:
status = "AMAN"
elif 200 < light_intensity <= 600 and 41 <= c <= 79:
status = "WASPADA"
elif light_intensity > 600 or c > 79:
status = "KEBAKARAN !!"
else:
status = "Tidak Ada Data"
# Menampilkan status ke layar LCD
lcd.clear()
lcd.move_to(0, 0)
lcd.putstr("Status: " + status)
print("Lux : "+ str(light_intensity))
print("Suhu : "+str(c)+" C")
sleep(2) # Delay sebelum membaca data lagi