HydroMazing: умная система гидропоники с IoT-мониторингом
Компоненты и материалы
| Компонент | Количество | Примечание |
|---|---|---|
| Raspberry Pi 3 Model B | 1 | Опционально — для IoT (SMS, веб-интерфейс) |
| Arduino Nano R3 | 2 | |
| Arduino Nano Expansion Shield | 2 | |
| Датчик температуры/влажности DHT21/22 | 1 | Может потребоваться резистор 10 кОм между Vcc/Data |
| Модуль фоторезистора (освещённость) | 1 | |
| Радиомодуль nRF24L01 2.4 ГГц | 1 | С SMA-антенной или без |
| Датчик температуры Dallas (для питательного раствора) | 1 | Требуется разъём |
| 433 МГц RF передатчик + приёмник | 1 комплект | |
| Набор беспроводных розеток с пультом (3–5 шт.) | 1 | |
| DFRobot LCD Shield с кнопками для Arduino Uno | 1 |
Инструменты
- Паяльник
Программное обеспечение
- Arduino IDE
- Microsoft Visual Studio 2015 (для части ПО на Raspberry Pi)
О проекте
Изначально целью не был продукт, а решение проблемы: как создать оптимальные условия для выращивания растений дома из доступных компонентов. HydroMazing — автономная система сбора данных и веб-интерфейс на вашем устройстве, а не в облаке.
Домашняя автоматизация: путь к беспроводным розеткам
Первая попытка — хак расширителя с реле — дала глючный набор проводов. Идея: использовать пульты от беспроводных розеток 433 МГц. Arduino эмулирует сигналы пульта. Библиотека RCSwitch позволила считать коды пульта и воспроизводить их. Надёжность оказалась высокой.
Программирование: «TheDecider»
Разработан набор алгоритмов «TheDecider» — на основе показаний датчиков и заданных порогов решает, включать/выключать приборы (вентиляторы, обогреватели, увлажнители, насосы, фонари) через беспроводные розетки. Код вырос до пределов памяти Arduino Uno — пришлось оптимизировать, вынести части на второй Arduino Nano и использовать nRF24L01 для связи между контроллерами.
Беспроводной мониторинг без интернета
Второй Arduino Nano с nRF24L01 и LCD-шилдом показывает текущие показания датчиков, состояния приборов и алерты. Система полностью автономна, открытая и расширяемая.
Интернет-мониторинг через Raspberry Pi
Raspberry Pi с nRF24L01 принимает данные, пишет в логи, текущее состояние сенсоров/приборов в файлы, алерты — в отдельные файлы. PHP-скрипт на Apache отображает дашборд в реальном времени. Python-скрипт проверяет папку алертов и отправляет Email/SMS. Данные накапливаются в БД для аналитики. Веб-мастер «HydroMazing Garden Wizard» ведёт через весь цикл выращивания: hydroMazing.com.
Мониторинг питательного раствора
Контроллер питательного раствора отслеживает уровень (пополнение воды — «topping off»), pH и EC, управляет дозирующими насосами и уведомляет о необходимости вмешательства.
Хотите больше?
- Existential Crisis — Arduino RPG-симулятор
- Почему DIY, а не покупка?
- Что такое «умный» сад?
- Запуск умного домашнего сада
- Глубже в домашнее садоводство
- Что может пойти не так?
- Управление системами питательного раствора
- Зачем Arduino, если есть Pi?
Код: CoreSettings.h (ключевые настройки)
/* CoreSettings.h - настройки сети nRF, коды пультов, таймеры, приборы, сенсоры */
#ifndef __CORESETTINGS_H__
#define __CORESETTINGS_H__
// nRF24L01 адреса
const uint64_t nRFbaseAddress = 1034834473100;
uint64_t tx_pipes[3] = { 0xF0F0F0F0F8LL, 0xF0F0F0F0F7LL, 0xF0F0F0F0F6LL };
uint64_t rx_pipes[3] = { 0xF0F0F0F0F1LL, 0xF0F0F0F0F2LL, 0xF0F0F0F0F3LL };
// Коды беспроводных розеток (пример для ETEKCITY #0319)
uint8_t totalSwitches = 5;
unsigned long mySwitchOn[] = {24,333107,333251,333571,335107,341251};
unsigned long mySwitchOff[] = {24,333116,333260,333580,335116,341260};
// Приборы (appliances)
Appliance Appliance_Light_1 = {101, 1, APPLIANCE_LIGHT, DEFAULT_TIME, true, false, OFF, NULL};
Appliance Appliance_IntakeFan = {104, 1, APPLIANCE_INTAKE_FAN, DEFAULT_TIME, true, false, OFF, &Appliance_Light_1};
Appliance Appliance_ExhaustFan = {103, 1, APPLIANCE_EXHAUST_FAN, DEFAULT_TIME, true, false, OFF, &Appliance_IntakeFan};
Appliance Appliance_Humidifier = {102, 0, APPLIANCE_HUMIDIFIER, DEFAULT_TIME, true, false, OFF, &Appliance_ExhaustFan};
Appliance Appliance_Heater = {101, 0, APPLIANCE_HEATER, DEFAULT_TIME, true, false, OFF, &Appliance_Humidifier};
Appliance Appliance_FeedPump = {105, 1, APPLIANCE_PUMP, DEFAULT_TIME, true, false, OFF, &Appliance_Heater};
uint8_t totalAppliances = 6;
// Датчики (sensors)
Sensor Sensor_Photocell = {PIN_A0, 1, SENSOR_PHOTO, 100, 50, 100, 0, 25, NULL};
Sensor Sensor_Temp = {PIN7, 1, SENSOR_TEMPF, 50, 70, 80, 0, 75, &Sensor_Photocell};
Sensor Sensor_Humidity = {PIN7, 1, SENSOR_HUMIDITY, 50, 40, 70, 0, 50, &Sensor_Temp};
Sensor Sensor_WaterTemp = {PIN3_INT1,1,SENSOR_WATER_TEMPF,100,50, 70, 0, 65, &Sensor_Humidity};
Sensor Sensor_Flow = {PIN2_INT0,2, SENSOR_FLOW, 100, 50, 50, 0, 75, &Sensor_WaterTemp};
Sensor Sensor_Float = {PIN_A2, 1, SENSOR_FLOAT, 100, 0, 1, 0, 1, &Sensor_Flow};
Sensor Sensor_Voltage = {PIN1_TX,1, SENSOR_VOLTAGE, 100, 0,100, 0, 50, &Sensor_Float};
uint8_t totalSensors = 7;
#endif
Схемы и фото
Схемы подключения вентиляторов, фонарей, нагревателей, насосов через беспроводные розетки; фото прототипа и веб-интерфейса доступны в разделе Schematics.
Производственный процесс
- Профессиональный мониторинг температуры на Raspberry Pi с датчиком DS18B20
- Система управления температурой на базе LM35 с микроконтроллером AT89S52
- Использование АЦП MCP3008 для чтения аналоговых датчиков с Raspberry Pi
- Преодоление разрыва навыков умного дома: почему Британия отстает от Европы
- Будущее городской жизни: ключевые черты эмерджинг Smart Cities — Часть 1
- Повышение эффективности напиточного производства с IoT-мониторингом уровня жидкости
- Принцип работы ABS: полное руководство по антиблокировочной системе
- Принцип работы электронной системы зажигания: полное руководство
- Принцип работы магнитной системы зажигания: ключевые принципы и применение
- Американская система производства: история, техники и влияние