Продвинутая система домашнего мониторинга на Arduino Mega с IoT-датчиками
Компоненты и материалы
| Arduino Mega 2560 | ×1 |
| Ethernet-плата для Arduino | ×1 |
| LCD 4×20 с I²C интерфейсом | ×1 |
| Датчик температуры и влажности DHT22 | ×1 |
| RTC DS3231 | ×1 |
| Ультразвуковой дальномер HC-SR04 | ×1 |
| Печатная плата OSH Park (интерфейсная и аннунциаторная) | ×1 |
О проекте
Начал с установки умного термостата Ecobee в доме дочери. Их прекратили выпускать, поэтому нужен был альтернативный вариант для мониторинга уровня воды в дренажной яме, сигнализации о затоплении, пропадания питания и других параметров. Многое почерпнул из проектов на разных ресурсах, особенно по коду Arduino и веб-интерфейса. Использование PushingBox для уведомлений стало ключевым элементом для удалённых оповещений. Благодарю open-source сообщество за публикуемые знания и проекты.

Начал с Arduino Mega 2560, добавил Ethernet-модуль. В Eagle CAD спроектировал пару плат для входов и визуального индикатора, изготовил их в OSH Park. Интерфейсная плата подключает семь сухих контактов, датчик температуры/влажности, RTC и ультразвуковой датчик уровня воды к Arduino.

Для локального отображения использован LCD 4×20. Также 8 светодиодов показывают статус тревог: янтарный — активна, зелёный — была, но сброшена, выключен — сброшена. Кнопка Reset гасит зелёные светодиоды, кнопка Message Enable включает/выключает уведомления через PushingBox.
Веб-интерфейс доступен только в локальной сети — не хотел пробрасывать порты роутера из соображений безопасности. Использовал несколько примеров для Arduino и библиотеку jqPlot для графиков.


На скриншоте: уровень воды менее 10 дюймов — активна тревога (янтарный светодиод). Зелёный показывает, что тревога была, но датчик сработал в обратную сторону. Нажатие Reset гасит зелёный, но янтарный останется, пока уровень не поднимется выше 10 дюймов.
Код
Arduino-скетч (C/C++)
Основные библиотеки: SPI, Ethernet, SD, Wire, LiquidCrystal_I2C, dht, NewPing, RTClib, RTC_DS3231.
Ключевые моменты:
- Веб-сервер на порту 1000, отдаёт JSONP для AJAX-запросов
- Опрос датчиков: ультразвук (медиана 5 измерений), DHT22 (каждые 2 сек), RTC DS3231
- 8 входов тревог + сброс + управление уведомлениями
- Индикация на 8 двухцветных светодиодах (янтарный/зелёный)
- Отправка уведомлений через PushingBox (не чаще раза в 5 минут)
- Веб-страница с графиками jqPlot и датчиками Canvas Gauge
// Пример отправки данных на веб-страницу (JSONP)
client.print("datas({ sensor1 : ");
client.print(sensor1); // уровень воды в дюймах
client.print(", sensor2 : ");
client.print(sensor2); // затопление
// ... sensor3..sensor10, msgtimer, msgonoff
client.print("})");
Веб-интерфейс (JavaScript)
Использует jQuery, jqPlot, Canvas Gauge. Обновление каждые 3 секунды через JSONP. Отображает: уровень воды, температуру, влажность, статус 8 входов, время последнего уведомления. Графики хранят до 100 точек.
Схемы
Файлы схем интерфейсной и аннунциаторной плат (Eagle) доступны в разделе Schematics.
Производственный процесс
- Тонометр: дизайн, производство и будущие тенденции
- Построение доступной беспроводной сети датчиков для дома
- Мониторинг домашней температуры с панелью управления на Raspberry Pi
- Создайте систему домашней автоматизации на Raspberry Pi для удаленного управления
- Сборка домашней машины для написания домашних заданий (плоттер-писатель)
- Создание потрясающей системы Ambilight для монитора на Arduino
- IoT-монитор пульса в реальном времени на Arduino и MAX30100
- Мониторинг термопары газового водонагревателя: SMS/Email алерт при погасании горелки
- Автономный домашний помощник-робот: полный список деталей и руководство по настройке (ROS, Alexa, MoveIt)
- Arduino Home Controller с Alexa: умный дом голосовым управлением