# modules
from machine import Pin,PWM,ADC
from time import sleep
from dht import DHT22
dht = DHT22(Pin(22))
ldr = ADC(28)
pir = Pin(0, Pin.IN)
relay=Pin(11,Pin.OUT)
#SERVO
SERVO_MIN_PULSE_WIDTH = 500
SERVO_MAX_PULSE_WIDTH = 2500
servo = PWM(Pin(3))
servo.freq(50)
def angle_to_pulse_width(angle):
pulse_width = (SERVO_MAX_PULSE_WIDTH - SERVO_MIN_PULSE_WIDTH) * (angle / 180) + SERVO_MIN_PULSE_WIDTH
return int(pulse_width)
def moveServo(angle):
pulse_width = angle_to_pulse_width(angle)
servo.duty_u16(int(pulse_width / (1000000 / 50 / 65535)))
sleep(0.5)
def scaleIntensity(val, src, dist):
'''
Map the LDR analog value to a range of 0-100 (%)
Keys:
src = [lowestLDRValue, highestLDRValue]
dist = [minValue, maxValue]
'''
return int(((val - src[0]) / (src[1]-src[0])) * (dist[1]-dist[0]) + dist[0])
def buzzerFunc():
buzzer = PWM(Pin(26))
buzzer.freq(3000)
buzzer.duty_u16(1000)
sleep(0.2)
buzzer.duty_u16(0)
while True:
# getting sensor readings
dht.measure()
temp = dht.temperature()
hum = dht.humidity()
percentIntensity = scaleIntensity(ldr.read_u16(), [512, 65007], [0,100])
print(percentIntensity)
print(pir.value())
print(f"Temperature: {temp}°C Humidity: {hum}% ")
relay.value(1)
moveServo(0)
if(temp > 20 or hum > 30):
buzzerFunc()
else:
None