from machine import Pin, ADC, I2C, PWM
from time import sleep
import dht
from lcd_api import LcdApi
from i2c_lcd import I2cLcd
from utime import localtime
# --- Konfigurasi I2C LCD ---
i2c_lcd = I2C(0, scl=Pin(17), sda=Pin(16), freq=400000)
lcd_addr = i2c_lcd.scan()[0]
lcd = I2cLcd(i2c_lcd, lcd_addr, 2, 16)
# --- Sensor ---
ldr = ADC(2) # GPIO28
dht22 = dht.DHT22(Pin(19))
# --- LED ---
leds = [Pin(6, Pin.OUT), Pin(7, Pin.OUT), Pin(11, Pin.OUT), Pin(12, Pin.OUT)]
# --- Servo ---
servo = PWM(Pin(18))
servo.freq(50)
def servo_angle(angle):
duty = int(1638 + (angle / 180) * 819)
servo.duty_u16(duty)
# --- Ambil waktu dari sistem lokal ---
def get_hour():
t = localtime()
return t[3], t[4], t[5] # hour, minute, second
# --- Konversi nilai ADC LDR ke µmol m⁻²s⁻¹ (simulasi) ---
def ldr_to_umol(adc_val):
return int((65535 - adc_val) / 65535 * 400)
# --- Program utama ---
while True:
try:
hour, minute, second = get_hour()
# Program aktif hanya antara jam 07:00 - 15:00
if 7 <= hour < 15:
ldr_value = ldr.read_u16()
intensitas = ldr_to_umol(ldr_value)
# Kontrol LED berdasarkan intensitas
if intensitas > 350:
for led in leds:
led.off()
elif 300 <= intensitas <= 350:
leds[0].on()
for i in range(1, 4):
leds[i].off()
elif 200 <= intensitas <= 299:
for i in range(3):
leds[i].on()
leds[3].off()
elif 100 <= intensitas <= 199:
for led in leds:
led.on()
else:
for led in leds:
led.on() # Terlalu gelap, semua nyala
# Baca sensor suhu dan kelembaban
dht22.measure()
temp = dht22.temperature()
hum = dht22.humidity()
# Kontrol servo jika kondisi suhu/kelembaban tidak ideal
if 33 <= temp <= 36 and 50 <= hum <= 60:
servo_angle(0) # Servo tertutup
else:
servo_angle(90) # Servo terbuka
# Tampilkan informasi di LCD
lcd.clear()
lcd.putstr("T:{}C H:{}%\n".format(temp, hum))
lcd.putstr("{:02d}:{:02d}:{:02d}".format(hour, minute, second))
else:
# Di luar jam kerja
for led in leds:
led.off()
servo_angle(0) # Servo ditutup
lcd.clear()
lcd.putstr("OFF - Luar jam\naktif")
sleep(2)
except Exception as e:
lcd.clear()
lcd.putstr("Error:\n{}".format(str(e)))
sleep(3)