import dht # библиотека для работы с датчиками температуры и влажности DHT22.
from machine import Pin, ADC # для работы с выводами и аналоговыми входами микроконтроллера.
from time import sleep # для создания задержек.
# Инициализация датчиков
dht_sensor = dht.DHT22(Pin(14)) # создаём объект для работы с датчиком DHT22 на пине 14
soil_sensor = ADC(Pin(36)) # создаём объект для чтения аналогового сигнала с пина 36
soil_sensor.atten(ADC.ATTN_11DB) # Настраиваем диапазон измерений
light_sensor = ADC(Pin(33)) # создаём объект для чтения аналогового сигнала освещенности с пина 33
light_sensor.atten(ADC.ATTN_11DB) # Настраиваем диапазон измерений
# Инициализация исполнительных устройств
pump = Pin(15, Pin.OUT) # создаём объект для управления насосом (на схеме реле)
light = Pin(4, Pin.OUT) # создаём объект для управления освещением (лампочка)
fan = Pin(16, Pin.OUT) # создаём объект для управления вентилятором
heater = Pin(17, Pin.OUT) # создаём объект для управления обогревателем
# Пороговые значения
moisture_threshold = 2000
light_threshold = 1000 # около 500 лк (значение 2468 - 55лк; 2500 - 52 лк)
temperature_threshold = 25.0
humidity_threshold = 60.0
while True: # Основной цикл (начинаем бесконечный цикл. Код внутри этого цикла будет выполняться непрерывно)
try:
dht_sensor.measure() # инициирует измерение температуры и влажности воздуха.
temperature = dht_sensor.temperature() # получает температуру в градусах Цельсия.
humidity = dht_sensor.humidity() # получает влажность воздуха в процентах
except OSError as e:
print("Ошибка чтения DHT22:", e)
continue
# Блок try/except — это как защитный механизм в программе. Когда мы пишем код,
# иногда может произойти ошибка, например, если программа пытается получить данные,
# но что-то пошло не так. Блок try означает "попробуй выполнить вот эту часть кода".
# Если при выполнении возникает ошибка, программа не сломается. Вместо этого она перейдет
# в блок except, который сработает как план "Б", и в нём мы можем указать, что делать при ошибке.
# Это помогает программе работать стабильно, даже если что-то идёт не по плану.
moisture = soil_sensor.read() # получает уровень влажности почвы.
light_level = light_sensor.read() # получает уровень освещённости.
print("Температура:", temperature, "Влажность воздуха:", humidity)
print("Влажность почвы:", moisture, "Освещённость:", light_level)
# Управление насосом
if moisture < moisture_threshold:
pump.value(1)
else:
pump.value(0)
# Управление освещением
# Чем меньше освещенность в люксах, тем больше тока пропускает фоторезистор
# и тем больше значение получаем на аналоговом выходе
# поэтому при значении больше порогового включаем освещение
if light_level > light_threshold:
light.value(1)
else:
light.value(0)
# Управление вентилятором и обогревателем
if temperature > temperature_threshold:
fan.value(1)
heater.value(0)
elif temperature < (temperature_threshold - 5):
fan.value(0)
heater.value(1)
else:
fan.value(0)
heater.value(0)
sleep(5)