print("WELCOME TO SMART ENERGY MANAGEMENT ROOM SYSTEM")
print("BY SYAHRUL AZMIN BIN SHAHRIMAN")
print("17/4/2026")
from machine import Pin, ADC, SoftI2C, PWM
import dht
import time
import ssd1306
#SENSOR USED
ldr = ADC(Pin(34))
pir = Pin(13, Pin.IN)
dht_sensor = dht.DHT22(Pin(14))
#BUTTON CONTROL
btn_lamp = Pin(12, Pin.IN, Pin.PULL_UP)
btn_fan = Pin(27, Pin.IN, Pin.PULL_UP)
btn_ac = Pin(33, Pin.IN, Pin.PULL_UP)
#OUTPUT
lamp = Pin(18, Pin.OUT)
fan = Pin(4, Pin.OUT)
ac = Pin(2, Pin.OUT)
exhaustfan = Pin(23, Pin.OUT)
buzzer = PWM(Pin(5))
#OLEDI2C
i2c = SoftI2C(scl=Pin(22), sda=Pin(21))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
#STATE
lamp_state = 0
fan_state = 0
ac_state = 0
exhaustfan_state = 0
last_lamp = 1
last_fan = 1
last_ac = 1
last_exhaustfan = 1
ac_started = 0
while True:
light = ldr.read()
motion = pir.value()
dht_sensor.measure()
temp = dht_sensor.temperature()
#BUTTON MANUAL(LAMP,FAN.AC)
if btn_lamp.value() == 0 and last_lamp == 1:
lamp_state = 1 - lamp_state
time.sleep(0.2)
last_lamp = btn_lamp.value()
if btn_fan.value() == 0 and last_fan == 1:
fan_state = 1 - fan_state
time.sleep(0.2)
last_fan = btn_fan.value()
if btn_ac.value() == 0 and last_ac == 1:
ac_state = 1 - ac_state
time.sleep(0.2)
last_ac = btn_ac.value()
#MANUAL MODE
if lamp_state or fan_state or ac_state:
lamp.value(lamp_state)
fan.value(fan_state)
ac.value(ac_state)
buzzer.duty(0)
lamp_status = "MAN"
fan_status = "MAN"
ac_status = "MAN"
exhaustfan_status = "MAN"
#MANUAL MODE(ALL OFF)
else:
#LAMP AUTO
if light > 2531 or motion == 1:
lamp.value(1)
lamp_status = "ON"
else:
lamp.value(0)
lamp_status = "OFF"
#TEMP CONTROL
if temp < 30:
fan.value(0)
ac.value(0)
exhaustfan.value(0)
buzzer.duty(0)
ac_started = 0
exhaustfan_status = "OFF"
fan_status = "OFF"
ac_status = "OFF"
elif temp <= 35:
fan.value(1)
ac.value(0)
exhaustfan.value(0)
buzzer.duty(0)
ac_started = 0
exhaustfan_status = "OFF"
fan_status = "ON"
ac_status = "OFF"
elif temp <= 40:
ac.value(1)
buzzer.duty(0)
if ac_started == 0:
fan.value(1)
time.sleep(5)
fan.value(0)
ac_started = 1
else:
fan.value(0)
fan_status = "OFF"
ac_status = "ON"
else:
ac.value(0)
fan.value(0)
exhaustfan.value(1)
buzzer.freq(1000)
buzzer.duty(512)
time.sleep(0.2)
buzzer.duty(0)
time.sleep(0.2)
fan_status = "OFF"
ac_status = "OFF"
exhaustfan_status = "ON"
# OLED
oled.fill(0)
oled.text("SMART ROOM", 0, 0)
oled.text("L:" + lamp_status, 0, 15)
oled.text("F:" + fan_status, 0, 30)
oled.text("A:" + ac_status, 0, 45)
oled.text("X:" + exhaustfan_status, 50, 30)
oled.show()
time.sleep(0.1)