from machine import Pin, PWM, ADC
import utime
import dht
# НАСТРОЙКА ПИНОВ
dht_sensor = dht.DHT22(Pin(8))
TRIG = Pin(7, Pin.OUT)
ECHO = Pin(5, Pin.IN)
pot = ADC(Pin(26))
red = PWM(Pin(12))
green = PWM(Pin(13))
blue = PWM(Pin(14))
red.freq(1000)
green.freq(1000)
blue.freq(1000)
emergency_btn = Pin(2, Pin.IN, Pin.PULL_UP)
buzzer = PWM(Pin(15))
buzzer.freq(1000)
# ПАРАМЕТРЫ
TEMP_MAX = 30 # Максимальная температура
DISTANCE_MIN = 15 # Минимальное расстояние (см)
POT_MIN = 20000 # Минимальное значение потенциометра
emergency_mode = False
# ФУНКЦИИ
def get_distance():
TRIG.low()
utime.sleep_us(2)
TRIG.high()
utime.sleep_us(10)
TRIG.low()
try:
duration = utime.time_pulse_us(ECHO, 1, 30000)
return duration * 0.034 / 2
except:
return 100
def set_color(r, g, b):
# Значения от 0 до 100 (проценты)
red.duty_u16(int(r * 65535 / 100))
green.duty_u16(int(g * 65535 / 100))
blue.duty_u16(int(b * 65535 / 100))
def alarm():
set_color(100, 0, 0)
buzzer.duty_u16(30000)
utime.sleep(0.3)
buzzer.duty_u16(0)
def safe_mode():
set_color(0, 100, 0)
buzzer.duty_u16(0)
# ОСНОВНОЙ ЦИКЛ
print("🚀 СИСТЕМА ЗАПУЩЕНА!")
print("Кнопка GP2 - аварийная остановка")
print("=" * 40)
while True:
# Проверка кнопки
if emergency_btn.value() == 0:
emergency_mode = not emergency_mode
utime.sleep(0.3) # Простой антидребезг
if emergency_mode:
print("АВАРИЙНЫЙ РЕЖИМ!")
alarm()
utime.sleep(1)
else:
# Чтение датчиков
try:
dht_sensor.measure()
temp = dht_sensor.temperature()
except:
temp = 25
distance = get_distance()
pot_value = pot.read_u16()
# Вывод в консоль
print(f"Temp: {temp}°C | Dist: {distance:.1f}cm | Pot: {pot_value}")
if temp > TEMP_MAX:
print(" ⚠️ Горячо!")
set_color(100, 50, 0)
elif distance < DISTANCE_MIN:
print(" ⚠️ Близко!")
set_color(100, 0, 0)
elif pot_value < POT_MIN:
print(" ⚠️ Низкий сигнал!")
set_color(0, 0, 100)
else:
print(" ✅ Норма")
safe_mode()
utime.sleep(2)