print("Lets play with smart fan")
print("Date: 12/4/2026")
#import libraries/modules
import oled_library
from machine import Pin, PWM, I2C
import dht
import time
#Pin Declaration
dht_pin = Pin(15)
servo_pin = Pin(18)
scl_pin = Pin(22)
sda_pin = Pin(21)
oled_pin = I2C(0, scl=scl_pin, sda=sda_pin)
current_angle = 0
#Object Declaration
skrin = oled_library.SSD1306_I2C( width = 128, height = 64, i2c = oled_pin)
dht_sensor = dht.DHT22(dht_pin)
servo = PWM(servo_pin, freq=50)
def set_angle(angle):
min_duty = 1638 # 0°
max_duty = 8192 # 180°
duty = int(min_duty + (angle / 180) * (max_duty - min_duty))
servo.duty_u16(duty)
def smooth_move(target):
global current_angle
step = 2 if target > current_angle else -2
for angle in range(current_angle, target, step):
set_angle(angle)
time.sleep(0.02)
current_angle = target
#Main Program
while True:
dht_sensor.measure()
temp = dht_sensor.temperature()
if temp < 25:
angle = 0
status = "LOW"
elif temp < 30:
angle = 90
status = "MED"
else:
angle = 170
status = "HIGH"
smooth_move(angle)
# OLED
skrin.fill(0)
skrin.text("SMART FAN", 0, 0)
skrin.text("Temp: {}C".format(temp), 0, 20)
skrin.text("Fan: {}".format(status), 0, 40)
skrin.show()
time.sleep(0.5)