/GreenhouseProject

Умная теплица на Arduino Mega. Smart greenhouse.

Primary LanguageC++

Контроллер теплицы на Arduino Mega

Проект полностью переведён на open source, доступны исходники конфигуратора. За неимением свободного времени дальнейшее развитие проекта будет происходить эпизодически.

Когда возник вопрос - здесь уже может быть половина ответа. Вторая половина ответа, как правило, расположена тут.

ВНИМАНИЕ!

Перед закачиванием прошивки в контроллер её необходимо настроить, все настройки в файле `Globals.h`! Я тестирую и выкладываю прошивку практически в максимальной конфигурации, следовательно, вы должны исключить из прошивки те модули, которым нет соответствия в виде подключённых железных "ответок". Скажем, если у вас нет модуля SD-карты, то совершенно недопустимо включать в прошивку модуль логгирования информации (`USE_LOG_MODULE`) и модуль Wi-Fi (`USE_WIFI_MODULE`). Также хочу обратить внимание на то, что некоторые модули для своей нормальной работы требуют подключённого железного соратника DS3231, т.к. без модуля реального времени их штатная работа невозможна. При любых затруднениях в работе (прошивка не работает как надо, почему-то ничего не получается, что-то не выводится на экран) - прежде всего смотрите настройки прошивки и схему подключения. Подчёркиваю - предложенная прошивка не готовое решение, а конструктор, который вы можете настроить под свои нужды. И, как любое модульное изделие, требует вдумчивого подхода перед началом использования.

Лицензия

Проект свободен для некоммерческого использования и исключительно в личных целях. Любое другое использование, например, встраивание любой части кода в коммерческий продукт, распространение любой части исходных кодов на сторонних ресурсах без разрешения автора проекта - не допускается. Все права интеллектуальной собственности на любую программную часть продукта принадлежат их авторам, использование программного кода в сторонних проектах без согласия авторов и упоминания об исходном авторстве - не допускается.

Автор проекта оставляет за собой право в любой момент пересмотреть лицензию распространения продукта.

Структура архива

  • В папке Main - исходники прошивки для Меги;
  • В папке SOFT - текущая версия конфигуратора, коннектится к Меге по COM-порту;
  • В папке Libraries - сторонние библиотеки, искользуемые в проекте (их количество неуклонно приближается к нулю, но пока - как есть);
  • В папке SD - файлы, которые надо закачать на SD-карту;
  • arduino-1.6.7-windows.exe - версия Arduino IDE, используемая в проекте;
  • В папке CHANGED_IDE_FILES - файлы, которые надо заменить, переписав стандартные, из поставки Arduino IDE;
  • Файл NewPlan.spl7 - файл схемы для программы SPlan 7.0;
  • В папке Nextion - файл прошивки для дисплея Nextion 320x240, и проект прошивки;
  • В папке Nextion1WireModule - прошивка универсального исполнительного модуля с дисплеем Nextion, работающего по шине 1-Wire;
  • В папке UniversalSensorsModule - прошивка универсального модуля с поддержкой до трёх датчиков разных типов, работающего по шине 1-Wire, по шине RS-485, и по радиоканалу, через nRF24L01+;
  • В папке UniversalExecutionModule - прошивка универсального исполнительного модуля на 8 слотов настраиваемых привязок, работающего по шине 1-Wire, по шине RS-485, и по радиоканалу, через nRF24L01+;
  • В папке FrequencySoilMoistureSensor - прошивка для опроса частотного датчика влажности почвы;
  • В папке WEB - текущая версия вебморды, ставится под любой веб-сервер с поддержкой PHP и sqlite3.

Настройки прошивки по умолчанию

Выкладываемая прошивка - это слепок того, что я делаю на текущий момент. Поэтому её настройки по умолчанию могут сильно разниться с теми, которые нужны вам. Примерная конфигурация, которая собрана у меня на макетке на текущий момент:

Кликните, чтобы посмотреть...

  • USE_UNIVERSAL_SENSORS - модуль поддержки универсальных модулей (в разработке, подключен эмулятор на Uno);
  • USE_UNI_NEXTION_MODULE - модуль поддержки дисплея Nextion по шине 1-Wire;
  • USE_DS3231_REALTIME_CLOCK - подключён модуль часов реального времени DS3231;
  • USE_TEMP_SENSORS - модуль хранения информации о температуре и управления фрамугами, подключены DS18B20 и восьмиканальный модуль реле;
  • USE_WINDOWS_SHIFT_REGISTER - управление фрамугами идёт через сдвиговый регистр 74HC595;
  • USE_WATERING_MODULE - модуль управления поливом, подключен железный модуль реле на два канала;
  • USE_LUMINOSITY_MODULE - модуль досветки, подключёны два датчика BH1750, требуется железный модуль реле на один канал;
  • USE_HUMIDITY_MODULE - модуль влажности, подключены DHT22 и Si7021;
  • USE_SOIL_MOISTURE_MODULE - модуль влажности почвы, пока подключён китайский влагомер;
  • USE_LOG_MODULE - модуль логгирования информации, подключен железный SD-модуль;
  • USE_TIMER_MODULE - модуль таймеров (4 таймера периодических операций);
  • USE_RESERVATION_MODULE - модуль резервирования показаний датчиков (когда датчики одной группы дублируют друг друга);
  • USE_WATERFLOW_MODULE - модуль расхода воды, подключён китайский расходомер;
  • USE_WIFI_MODULE - модуль доступа по WI-FI, подключена ESP8266, требует подключение SD-модуля;
  • USE_LCD_MODULE - модуль экрана, подключён графический LCD 128x64 на контроллере ST7920, а также тактовая кнопка и энкодер;
  • Определено ещё кучу всяких USE_*, поэтому, прошу вас - будьте внимательны с настройками прошивки, ибо перечислять их здесь все - анрил полный;
  • Конвертеры уровней, DC-DC-преобразователи - подключены там, где это требуется;
  • Neoway M590 (или SIM800L) - не подключен, директива USE_SMS_MODULE закомментирована;
  • Модули реле у меня включаются по низкому уровню;
  • К Меге у меня подключен как минимум один универсальный модуль, для тестирования работы по 1-Wire и RS-485.

Настройки прошивки по умолчанию могут меняться с обновлениями, поэтому будьте внимательны, и проверяйте, пожалуйста, соответствие настроек прошивки вашим чаяниям. Обращаю внимание, что прошивку можно настроить и на другой экран (Nextion), и на другой шлюз в локальную сеть (W5100), можно менять кол-во датчиков, номера пинов для них, можно управлять пинами реле фрамуг напрямую, а не через сдвиговый регистр - всё это шаманство вы можете совершить, чтобы подогнать прошивку под ваши требования. Я лишь даю инструмент, которым можно (и нужно) воспользоваться с умом.


Скриншоты конфигуратора

Кликните, чтобы посмотреть...

Как использовать

Установить библиотеки (в папке Libraries архива) в среду Arduino IDE!

Все настройки прошивки перед компиляцией - в файле `Globals.h`!

Распаковать архив в папку на диске, установить библиотеки из папки Libraries архива в среду Arduino IDE. Затем открыть в Arduino IDE файл Main.ino, настроить директивы условной компиляции (файл `Globals.h`), скомпилировать прошивку и закачать в Мегу. Подсоединить железки в зависимости от выбранных настроек прошивки. Если используется модуль Wi-Fi или модуль логгирования информации - подключить модуль SD-карты и закачать файлы из папки SD в корень SD-карточки!

Открыть конфигуратор и подключиться к COM-порту, на котором висит Мега, и начать общение с контроллером. Принципиальная схема подключения некоторого железного добра указана ниже:

Модуль LCD 128x64 на базе контроллера ST7920

В текущей версии используется LCD-экран 128х64 на базе контроллера ST7920, подключенный в режиме последовательного соединения. Подробности подключения - в файле Globals.h. Если вам не нужно использование этого модуля - закомментируйте USE_LCD_MODULE в файле Globals.h.

Внимание! Для того, чтобы использовать указанный экран - необходимо установить библиотеку `U8GLib` (есть в архиве проекта) в среду Arduino IDE!

Экран работает совместно с энкодером и тактовой кнопкой (подробности подключения - в `Globals.h`). Энкодером перелистываются закладки, затем кнопкой - производится переход внутрь выбранной закладки и пролистывание вариантов настроек. На экране ожидания нажатия кнопки пролистывают показания с датчиков, не дожидаясь времени их программного пролистывания. На экране ожидания можно вывести информацию со сколь угодно большого количества датчиков (настраивается в `Globals.h`).

Модуль поддержки дисплеев Nextion

В текущей версии используется модуль поддержки дисплеев Nextion (320x240). Если вам не нужно использование этого модуля - закомментируйте USE_NEXTION_MODULE в файле Globals.h. Прошивка для дисплея и её исходники - лежат в папке Nextion. Подробности по закачиванию прошивки в дисплей - в файле Nextion\320x240\Readme.txt.

Модуль датчиков расхода воды

В текущей версии используется модуль датчиков расхода воды на эффекте Холла (трёхпроводные с Али, искать по словам "water flow meter", они обычно около 300 рублей стоимостью). Если вам не нужно использование этого модуля - закомментируйте USE_WATERFLOW_MODULE в файле Globals.h. Датчиков может быть до двух, сидят они на пинах 2 и 3. Подробные настройки - в Globals.h.

Модуль часов реального времени DS3231

В текущей версии используется модуль часов реального времени на микросхеме DS3231 (пин 20 - SDA, пин 21 - SCL). Если вам не нужно использование этого модуля - закомментируйте USE_DS3231_REALTIME_CLOCK в файле Globals.h.

GSM-модуль (Neoway M590 или SIM800L)

В текущей версии используется GSM-модуль на базе чипа NEOWAY M590 (также поддерживается SIM800L). Если вы не хотите использовать управление по SMS - закомментируйте USE_SMS_MODULE в файле Globals.h. Если у вас возникли проблемы с работой SMS-модуля - можно включить отладочный режим (не работает совместно с конфигуратором!), раскомментировав GSM_DEBUG_MODE в файле Globals.h.

Список команд для управления по SMS - смотрите в конфигураторе. Если вы посылаете команды на открытие или закрытие окон, включение/выключение полива или досветки - контроллер автоматически переходит в ручной режим работы!

Модуль Wi-Fi ESP8266

В текущей версии используется WI-FI-модуль на основе чипа ESP8266. Если вы не хотите использовать WI-FI в проекте - закомментируйте USE_WIFI_MODULE в файле Globals.h. Если у вас возникли проблемы с работой WI-FI-модуля - можно включить отладочный режим (не работает совместно с конфигуратором!), раскомментировав WIFI_DEBUG в файле Globals.h. Модуль ESP8266 соединён с Serial2 Меги (пины 16 и 17, см. схему выше).

В текущей редакции реализован мост UART-TCP/IP: соединившись с IP, которое выдал роутер модулю ESP - можно посылать команды контроллеру так же, как если бы это было посредством соединения через UART, т.е.: любая команда начинается с `CTGET=` или `CTSET=`, и заканчивается переводом строки \r\n.

Работа с ESP протестирована на версии AT-прошивки 0.40, работоспособность на других прошивках не гарантируется!

Модуль управления поливом

ВНИМАНИЕ! Реле, используемые в текущей версии прошивки, включаются по низкому уровню. Если у вас наоборот - смотрите настройки RELAY_ON и RELAY_OFF в файле Globals. h.

Для индикации ручного режима управления поливом на пин 8 выведен светодиод (см. схему), который будет мигать при переключении в ручной режим работы. Для управления каналами реле задействованы пины 22, 23, 24, с которых идёт управление тремя каналами реле. Можно рулить каким угодно количеством реле, вплоть до 8. Для изменения кол-ва реле в файле `Globals.h` установите `WATER_RELAYS_COUNT` в нужное число - от 1 до 8. Пины прописываются в `WATER_RELAYS_PINS`, каждый пин указывается через запятую, их общее количество должно быть равным количеству, указанному в настройке `WATER_RELAYS_COUNT`!

При подаче любой команды модулю управления поливом (начать/закончить полив, а также когда настройка "Автоматическое управление поливом" в положении "выключено") - контроллер переходит в ручной режим управления поливом, при этом мигает светодиод на пине 8. Номер пина для диода можно изменить с помощью настройки `DIODE_WATERING_MANUAL_MODE_PIN` в файле `Globals.h`.

Модуль освещенности BH1750

В текущей версии используется модуль освещенности на базе чипа BH1750. Если вам не нужно использование этого модуля - закомментируйте USE_LUMINOSITY_MODULE в файле Globals.h. Схема подключения модуля освещенности приведена выше.

Модуль влажности

В текущей версии используется модуль опроса датчиков влажности на базе различных чипов. Поддерживаются следующие типа: DHT - DHT11 и старше, Si7021. Для добавления датчиков смотрите примеры ADD_HUMIDITY_SENSOR в файле Globals.h. Если вам не нужно использование этого модуля - закомментируйте USE_HUMIDITY_MODULE в файле Globals.h.

Другие модули

На самом деле модулей - вагон и тележка, и расписать их все здесь - не представляется возможным, т.к. прошивка постоянно усовершенствуется. Так что, если у вас возникли какие-либо вопросы, добро пожаловать: https://www.forumhouse.ru/threads/341712 - в этой теме я бываю регулярно и готов ответить на все ваши вопросы.

Конфигуратор

Конфигуратор автоматически подцепляет прошитые в контроллер модули, и показывает вкладки управления этими модулями, после соединения с контроллером. Если вы не видите вкладку управления поливом (например) - смотрите директивы условной компиляции на предмет того, выключен ли модуль из компиляции или нет. При перезагрузке контроллера он переходит в автоматический режим работы, даже если при последнем обращении к нему был выставлен ручной режим.