import machine
import dht
import time
from machine import Pin, ADC
# Define pin and variables for DHT22
DHTPIN = 4
dht_sensor = dht.DHT22(Pin(DHTPIN))
# Define pins for HC-SR04 ultrasonic sensor
TRIG_PIN = 18
ECHO_PIN = 19
# Define pin for photoresistor module
PHOTO_PIN = 34
# Define pins for LED and Buzzer
LED_PIN = 2
BUZZER_PIN = 13
# Fixed resistance value in voltage divider circuit (ohms)
R_fixed = 10000.0 # 10k ohms
# Initial light value (lux) from photoresistor datasheet
initialLux = 500.0
# Initialize ADC for photoresistor
photoresistor = ADC(Pin(PHOTO_PIN))
photoresistor.atten(ADC.ATTN_11DB) # Set ADC sensitivity
# Initialize pins
led = Pin(LED_PIN, Pin.OUT)
buzzer = Pin(BUZZER_PIN, Pin.OUT)
trigger = Pin(TRIG_PIN, Pin.OUT)
echo = Pin(ECHO_PIN, Pin.IN)
# Function to read DHT22 sensor
def read_dht22():
dht_sensor.measure()
humidity = dht_sensor.humidity()
temperature = dht_sensor.temperature()
return humidity, temperature
# Function to read photoresistor value
def read_photoresistor():
light_level = photoresistor.read()
return light_level
# Function to calculate lux from photoresistor value
def calculate_lux(light_level):
V_in = light_level * (3.3 / 4095.0) # ESP32 uses 3.3V reference voltage
R_photo = (3.3 * R_fixed / V_in) - R_fixed
lux = initialLux * (R_photo / R_fixed)
return lux
# Function to control LED based on lux value
def control_led(lux_value):
ILLUMINATION = 500
if lux_value <= ILLUMINATION:
print("Turning LED ON")
led.value(1)
else:
print("Turning LED OFF")
led.value(0)
# Function to measure distance using HC-SR04 sensor
def measure_distance():
trigger.value(0)
time.sleep_us(2)
trigger.value(1)
time.sleep_us(10)
trigger.value(0)
duration = machine.time_pulse_us(echo, 1) # Measure high pulse duration
if duration > 0:
distance = (duration * 0.034) / 2 # Convert to cm
else:
distance = 0
return distance
# Function to control buzzer based on distance and humidity
def control_buzzer(distance, humidity):
if distance < 20: # Activate buzzer if object detected within threshold
led.value(1)
pwm = machine.PWM(buzzer, freq=1000, duty=512) # PWM buzzer at 1000Hz
time.sleep_ms(300)
pwm.deinit() # Turn off PWM
led.value(0)
time.sleep_ms(300)
elif humidity > 50: # Activate buzzer if humidity exceeds 50%
led.value(1)
pwm = machine.PWM(buzzer, freq=1000, duty=512) # PWM buzzer at 1000Hz
time.sleep_ms(300)
pwm.deinit() # Turn off PWM
led.value(0)
time.sleep_ms(300)
else:
led.value(0) # Turn off LED if no object detected
# Main loop in Micropython
while True:
humidity, temperature = read_dht22()
print("Humidity:", humidity, "%\tTemperature:", temperature, "°C")
light_level = read_photoresistor()
lux = calculate_lux(light_level)
print("Raw Light level:", light_level)
print("Lux level:", lux)
control_led(lux)
distance = measure_distance()
print("Distance:", distance, "cm")
print("Current time:", time.time())
time.sleep(1)
control_buzzer(distance, humidity)
time.sleep_ms(100)