from machine import Pin, PWM, ADC
from utime import sleep
# 1st WAY
# --- Setup Pins ---
servo = PWM(Pin(22), freq=50) # Servo motor on Pin 22
ldr = ADC(Pin(26)) # Light sensor on Pin 26
led = Pin(0, Pin.OUT) # LED indicator on Pin 0
# --- Move Servo ---
def set_angle(angle):
# Convert angle (0-180) to duty cycle for MicroPython
duty = int(1638 + (angle / 180) * 6554)
servo.duty_u16(duty)
# --- Main Loop ---
while True:
light = ldr.read_u16() # Read light level (0 to 65535)
if light > 30000: # If light is bright -> Open
set_angle(0)
led.value(0) # Turn LED OFF during the day
print("☀️ Bright! Opening blinds...")
else: # If light is dark -> Close
set_angle(90)
led.value(1) # Turn LED ON at night
print("🌙 Dark! Closing blinds...")
sleep(1) # Wait 1 second before checking again
#======================================================================================
# 2nd WAY
# #----- Hardware Setup------
# ldr = ADC(Pin(26)) # LDR on ADC0 (GP26)
# led = Pin(0, Pin.OUT)
# servo =PWM(Pin(22))
# servo.freq(50) # SG90 servo runs at 50Hz
# # --- Configuration Thresholds (Tune these based on your room's lighting) ---
# LIGHT_OPEN = 35000 # Above this = open blinds (bright)
# LIGHT_CLOSE = 25000 # Below this = close blinds (dark)
# ANGLE_OPEN = 0 # Servo angle when blinds OPEN
# ANGLE_CLOSE = 90 # Servo angle when blinds CLOSED
# # --- Helper: Set servo angle ---
# def set_angle(angle):
# # SG90: 0.5ms to 2.5ms pulse width
# pulse = 0.5 + (angle / 180.0) * 2.0
# duty = int((pulse / 20.0) * 65535)
# servo.duty_u16(duty)
# # --- Helper: Read light level (0-65535) ---
# def read_light():
# return ldr.read_u16()
# # --- Main loop with hysteresis ---
# state = None # 'open' or 'close'
# # Start Closed
# set_angle(ANGLE_CLOSE)
# state = 'closed'
# while True:
# light = read_light()
# print("Light Level: ", light)
# # Bright -> Open blinds
# if light > LIGHT_OPEN and state != 'open':
# print("☀️ Bright! Opening blinds...")
# set_angle(ANGLE_OPEN)
# state = 'open'
# led.value(0)
# # Dark -> Close blinds
# elif light < LIGHT_CLOSE and state != 'closed':
# print("🌙 Dark! Closing blinds...")
# set_angle(ANGLE_CLOSE)
# state = 'closed'
# led.value(1)
# sleep(0.3)
# #=============================================================================