import dht
from machine import Pin, ADC, PWM
import time
# Pins
dht_pin = Pin(15)
ldr = ADC(26)
led = Pin(16, Pin.OUT)
servo = PWM(Pin(17))
servo.freq(50)
# Thresholds
TEMP_LIMIT = 30
LDR_THRESHOLD = 30000
# servo helper
def set_angle(angle):
min_u16 = int(0.025 * 65535)
max_u16 = int(0.125 * 65535)
duty = int(min_u16 + (angle / 180.0) * (max_u16 - min_u16))
servo.duty_u16(duty)
sensor = dht.DHT11(dht_pin)
last_print = time.ticks_ms()
while True:
# Read sensors (DHT slow; measure each loop but it's fine)
try:
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
except Exception:
temp = None
hum = None
light_value = ldr.read_u16()
# Light indicator
led.value(1 if light_value < LDR_THRESHOLD else 0)
# Vent control
if temp is not None and temp > TEMP_LIMIT:
set_angle(90) # open vent: choose angle that matches "open"
else:
set_angle(0) # closed
# Periodic console output every 5 seconds
if time.ticks_diff(time.ticks_ms(), last_print) > 5000:
print("Temp:", temp, "Humidity:", hum, "Light:", light_value)
last_print = time.ticks_ms()
time.sleep(0.2)