Умный дом на Arduino: датчики, реле, сценарии
Умный дом на Arduino — это когда плата за 500 ₽ включает свет по датчику движения, поливает цветы по расписанию и кричит сиреной при протечке, без единого облака и приложения. У меня таких платы четыре: кухня, коридор, балкон и подвал. Все они не знают, что такое WiFi — Uno и Nano работают автономно, и сценарии хранятся в скетче. Это умный дом в первоначальном смысле: ум вшит в код, а не живёт на сервере компании, которая завтра закроется.
Ниже — сборка умного дома на Arduino Uno/Nano из четырёх узлов: реле на освещение, термогигрометр DHT22, RTC DS3231 для расписания и кнопки-сценарии. Схемы, скетчи, цены деталей, грабли питания реле и почему 5V-реле от USB-порта не щёлкает. Логику реле, кнопки и датчика можно «пощупать» в симуляторе платы до пайки — компоненты relay, button, dht на стенде заводятся без единого провода.
Почему Arduino, а не ESP32 или готовый Sonoff
Sonoff и Tuya — дёшево и быстро: купил, прошил, работает. Но умный дом на них зависит от чужого облака, приложения и серверов. Если компания закроет API или поднимет тариф — ваше реле станет кнопкой. Arduino наоборот: код ваш, датчики ваши, логика хранится в скетче на самой плате. Минус — нет удалённого управления без добавления WiFi-шилда или ESP-01. Для кухонного света это нормально: сценарии «включить по датчику движения» работают локально, без роутера. Если нужно удалённо — берут ESP8266 (см. лендинг про проекты NodeMCU).
- Uno или Nano: 500-700 ₽, 14 цифровых пинов, 6 аналоговых, питание от USB или 7-12V.
- Модуль реле 1-4 канала: 70-200 ₽, активный LOW или HIGH, 5V питание с Vin.
- DHT22 (180-250 ₽) или BME280 (300-400 ₽): температура и влажность, точность ±0,5 °C.
- RTC DS3231 (150-250 ₽): часы реального времени, расписание по дням недели.
- PIR-датчик HC-SR501 (50-80 ₽): движение, доработка под 5V и дальность 3-7 м.
Узел 1: реле на освещение с кнопкой-переключателем
Модуль реле на 1 канал (70-100 ₽) подключается к Uno пятью проводами: VCC и GND на 5V и GND платы, IN на цифровой пин (например D7). Реле активное LOW — digitalWrite(LOW) включает, digitalWrite(HIGH) выключает. Кнопка-переключатель на D2 с INPUT_PULLUP: нажатие меняет состояние реле и печатает в Serial. Скетч ниже: чтение с антидребезгом 200 мс через millis, и публикация в Serial для отладки.
Антидребезг через millis с окном 200 мс — единственный честный способ: delay(200) в loop блокирует другие задачи, а millis-окно пропускает только изменения после 200 мс тишины. Полный разбор — в уроке про millis вместо delay. Если у реле активное HIGH — меняем LOW/HIGH местами в коде. Грабли с питанием: 5V-реле от USB-порта ПК (500 мА) щёлкает, но при пике тока плата может ребутнуться — отдельный блок питания решает.
Узел 2: термогигрометр DHT22 с порогом влажности
DHT22 на D5 с подтяжкой 10 кОм, питание 3V3 или 5V. Раз в 2 секунды читаем температуру и влажность; при влажности выше 70% включаем вытяжку через реле на D7. Гистерезис: включение при 70%, выключение при 60% — иначе реле стрекочет у порога. Скетч на 50 строк, точность DHT22 ±0,5 °C и ±2% RH, для бытовых сценариев хватает. Вместо DHT22 можно взять BME280 — добавит давление, но в 2 раза дороже.
Узел 3: RTC DS3231 и расписание по дням недели
DS3231 на I2C (SDA A4, SCL A5), батарейка CR2032 для хода при отключении питания. RTClib — библиотека Adafruit, ставится через Менеджер библиотек. Скетч: при weekdays Mon-Fri и времени 07:00 включаем свет в коридоре, в 23:00 выключаем. В выходные — сдвиг на 09:00 и 01:00. RTClib.now() возвращает DateTime, из него день недели (0=воскресенье) и часы/минуты. Подробно — в уроке про расписание на неделю.
Узел 4: кнопки-сценарии «Уходим» и «Спим»
Две кнопки на D3 и D4 с INPUT_PULLUP: «Уходим» выключает весь свет, закрывает шторы (сервопривод на D9), «Спим» приглушает подсветку и включает ночник. Каждая кнопка вызывает функцию-сценарий, которая проходит по реле и сервоприводам и выставляет нужные состояния. Сценарий хранится в скетче — без облака, без приложения, без зависимости от роутера. Изменить сценарий — перепрошить плату по USB. Для «умного дома на Arduino» это нормально: код стабилен, сценариев мало, правки редки.
Сборка: макетка, питание, корпус
- Макетка 830 точек: 100-150 ₽, вмещает Uno + 3 модуля. Для постоянной установки — печатная плата или perfboard.
- Питание: USB-БП 5V/2A (200-300 ₽) для Uno, отдельный блок 5V/1A для реле-модуля — так плата не проседает при щелчке.
- Корпус: пластиковая коробка 100×60×30 (50-80 ₽) с отверстиями под датчики. PIR выведен наружу через провод.
- Провода: перемычки 10-20 штук (50 ₽ набор), для постоянной установки — провод МГТФ 0,2 мм².
- Изоляция реле 220V: клеммник WAGO 222-412 (50 ₽ за 5 шт) — быстрый и безопасный способ коммутации нагрузки.
Грабли умного дома на Arduino, на которые я наступал
- 5V реле от USB-порта ПК: щёлкает, но плата ребутится при пике. Отдельный блок 5V/1A на реле-модуль — обязательно.
- 220V на реле без клеммника: изолента держит год, потом отваливается. WAGO или винтовые клеммы — надёжнее.
- DHT22 на улице: конденсат на плате даёт дикие показания зимой (-27 вместо -10). Силикагель и фольга вокруг модуля.
- PIR-датчик у батареи отопления: ловит тепло как движение. Дорабатывается снижением чувствительности потенциометром на модуле.
- RTC DS1307 вместо DS3231: дрейф 1-2 минуты в неделю. DS3231 с термокомпенсацией — 1 минута в год, разница в цене 50 ₽.