import machine
import utime
from dht import DHT22
from machine import Pin, PWM
# Initialize DHT22 sensor
dht = DHT22(Pin(0)) # Assuming DHT22 is connected to GPIO0
# Initialize Servo motor
servo_pin = Pin(1) # Assuming servo control is on GPIO1
servo = PWM(servo_pin, freq=50) # Initialize PWM frequency (50 Hz)
# Initialize PIR sensor
pir_pin = Pin(2, Pin.IN) # Assuming PIR sensor output is on GPIO2
# Variables to store initial DHT22 readings
initial_temp = 0
initial_humidity = 0
# Function to read DHT22 sensor data
def read_dht22():
dht.measure()
temp_c = dht.temperature()
humidity = dht.humidity()
return temp_c, humidity
# Function to control servo motor
def move_servo(angle):
duty = int((angle / 180) * 1023) # Convert angle to duty cycle (0-1023)
servo.duty(duty)
utime.sleep_ms(500) # Wait for servo to reach position
# Initialize initial DHT22 readings
initial_temp, initial_humidity = read_dht22()
# Main loop
while True:
# Read PIR sensor for motion detection
motion_detected = pir_pin.value()
# Read current DHT22 sensor data
current_temp, current_humidity = read_dht22()
# Check if there's a significant change in temperature or humidity
temp_diff = abs(current_temp - initial_temp)
humidity_diff = abs(current_humidity - initial_humidity)
if motion_detected and (temp_diff >= 1 or humidity_diff >= 1):
print("Motion detected and DHT22 variation detected!")
move_servo(90) # Move servo motor to 90 degrees
# Update initial DHT22 readings
initial_temp, initial_humidity = current_temp, current_humidity
utime.sleep(1) # Adjust sleep time as needed