# Итоговая работа
# Выполнил: Михалёв Е.С.
# Система мониторинга помещения с аварийной кнопкой
from machine import Pin, PWM
import dht
import utime
# --- НАСТРОЙКА ОБОРУДОВАНИЯ ---
# Датчик температуры и влажности
sensor = dht.DHT22(Pin(8))
# Датчик движения
pir = Pin(10, Pin.IN)
# Кнопка аварийной остановки
emergency_btn = Pin(14, Pin.IN, Pin.PULL_UP)
# Светодиод
led = Pin(15, Pin.OUT)
# Пьезоэлемент
buzzer = PWM(Pin(9))
buzzer.freq(1000)
# --- ПЕРЕМЕННЫЕ ---
emergency_mode = False
last_pir_state = 0
# --- ФУНКЦИИ ---
def beep(duration=0.1):
"""Короткий звуковой сигнал"""
buzzer.duty_u16(32768)
utime.sleep(duration)
buzzer.duty_u16(0)
def alarm_beep():
"""Непрерывный сигнал тревоги"""
buzzer.duty_u16(32768)
def alarm_off():
"""Выключить сигнал"""
buzzer.duty_u16(0)
def led_on():
led.value(1)
def led_off():
led.value(0)
def led_blink(times=3, delay=0.2):
"""Мигание светодиода"""
for _ in range(times):
led_on()
utime.sleep(delay)
led_off()
utime.sleep(delay)
# --- ОСНОВНОЙ ЦИКЛ ---
print("Система мониторинга запущена")
print("Кнопка аварийной остановки: GP14")
print("-" * 40)
while True:
# Проверка кнопки аварийной остановки
if emergency_btn.value() == 0: # Кнопка нажата (GND)
if not emergency_mode:
emergency_mode = True
print("!!! АВАРИЙНАЯ ОСТАНОВКА !!!")
alarm_beep()
led_blink(1, 0.1)
utime.sleep(0.1)
continue
else:
if emergency_mode:
emergency_mode = False
alarm_off()
led_off()
print("Система восстановлена")
# Если аварийный режим - ничего не делаем
if emergency_mode:
continue
# --- НОРМАЛЬНЫЙ РЕЖИМ ---
# 1. Проверка датчика движения
pir_state = pir.value()
if pir_state == 1 and last_pir_state == 0:
print("Движение обнаружено!")
beep(0.1)
led_on()
utime.sleep(1)
led_off()
last_pir_state = pir_state
# 2. Проверка температуры
try:
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
print(f"Темп: {temp:.1f}°C | Влаж: {hum:.1f}%")
if temp > 30:
print(" -> Внимание! Высокая температура!")
beep(0.3)
led_blink(2, 0.2)
else:
led_on()
utime.sleep(0.5)
led_off()
except Exception as e:
print("Ошибка датчика DHT22:", e)
utime.sleep(2)