1 2 3 4 5 6 7 8 9 10 10/10 10,00оценок: 12

Arduino Mega. Контроллер теплицы. Хроники - 4.0

Тема в разделе "Теплицы и парники", создана пользователем Анкор Плюс, 19.05.18.

Статус темы:
Закрыта.
  1. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Пока все спали - припилил сценарии. На гитхабе обновился конфигуратор, прошивка, вебморда. В конфигураторе и вебморде - новые вкладки "Сценарии", пока можно только запустить/остановить выбранный сценарий.

    Что надо сделать, чтобы пощупать: понятное дело, перезалить прошивку, см. настройку USE_SCENE_MODULE. Затем - на SD-карточку закачать папку SCENES (эта папка внутри папки SD на гитхабе валяется). Затем уже - можно смотреть и щупать. Внимание! Тестовые сцены используют пины 7,8,9, на которых на моей отладочной плате повешены светодиоды сигнальные. Если что - я предупредил ;)

    Теперь вкратце о том, как это устроено:

    1. В папке SCENES есть подпапки с номерами 0, 1 и т. п. - это сценарии;
    2. Внутри папки сценария лежат несколько файлов, а также подпапка STEPS - там шаги сценария;
    3. Все файлы - в кодировке UTF-8, это ВАЖНО!
    4. Файл SCENE. TXT - содержит две строки: первая - имя сценария, вторая - чиселка: если 1 - то сценарий зацикленный, если 0 - то выполняется однократно;
    5. Файл INIT. TXT - этот файл выполняется при запуске сцены на выполнение. Содержит сколько угодно строк, каждая строка - команда к контроллеру. Здесь можно инициализировать пины, например;
    6. Файл STOP. TXT - выполняется по окончании сцены или при выключении её принудительно. Также содержит любое кол-во строк, одна строка - одна команда к контроллеру. Здесь можно возвращать всё на исходную, например, выключить пины, которые задействованы сценарием;

    Про шаги:

    1. Лежат в папке STEPS. Имя файла - номер шага, например, 0. TXT - первый шаг, и т. п.;
    2. Шагов может быть до 65535;
    3. Внутри файла шага - две строки: первая - продолжительность в секундах ДО выполнения СЛЕДУЮЩЕГО шага; вторая - текстовая команда к контроллеру.

    Можно просто посмотреть два тестовых сценария - там всё понятно, как гвоздь. Один сценарий - незацикленный, второй - зацикленный.

    Короче: всё работает, и даёт охренительные возможности по полуавтоматическому управлению чем угодно: возьмём тот же полив :)]:aga: - можно в INIT. TXT сценария попросить полив выключиться (он перейдёт в ручной режим автоматом):

    CTSET=WATER|OFF

    Потом в шагах сделать, что надо (рулить теми же пинами, что и модуль полива), а в STOP. TXT - попросить полив выключиться, и перейти в автоматический режим работы:

    CTSET=WATER|OFF
    CTSET=WATER|MODE|AUTO

    И получим - ПОЛНЫЙ фарш управления поливом. Да чем угодно, собственно - скоро мы уже ракету построим, для освоения Марса, такими-то темпами :)]:aga:

    Что осталось? Сделать кнопки сценариев на TFT-экране (про LCD - пока думаю). Ну и - сделать простенький редактор сценариев, чтобы он создавал эти файлы, и потом их можно было скопом закачать на SD-карточку. Но пока - ручками сценарии можно вполне себе создавать, если не знаете интересующей текстовой команды - спрашивайте, я подскажу ;)

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

    И будет для Александра @promavto - полуавтоматическое переключение каналов полива, по нажатию одной кнопки. Только сценарии надо будет создать - и всё.

    Годно?
     
  2. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Вот это дело, а то нет нет. Были клиенты, которые хотели припилить управление воротами, охраной.
    Фактически можно добавить "Умный дом". Все, приступаю к разработке новой версии "Умный дом" + "Теплица". Возможно в теплицу вынесу только модуль исполнительных устройств. Подумаю как организовать. Будем пробовать применить STM32.
     
  3. olegmak3
    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442

    olegmak3

    Живу здесь

    olegmak3

    Живу здесь

    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442
    Адрес:
    Санкт-Петербург
    Да с этим все понятно.
    Но я то еще и перегружал контроллер. А вот здесь уже д. б. отрабатывать нормально.
    А вчера почистил память и залил последнюю прошивку.
    Поведение контроллера кардинально изменилось.
    При смене уставок все отрабатывает мгновенно(перегрузом пользоваться ни разу не пришлось). И на условия "не выполнять, если сработало правило Х" реагирует правильно.
    Проверил работу и по изменению текущих показаний датчика влажности. Все О. К.
    (один глюк за время длительных экспериментов не считается). Понаблюдаю в работе и отпишусь.
    На радостях в прошивке активизировал защитника полива и карту пинов.
    Вот здесь чуть не затопил теплицу-насос,заполняющий емкость для полива не выключился.
    Вернулся в прямому чтению пинов. Все нормализовалось.
    Дима!
    По конфигуратору, по карте пинов.
    Было бы информативнее пометить как либо используемые пины в прошивке. Служебные отделить (типа RX, TX, дисплей) и сделать не активными. И как то выделить пользовательские. Скажем, использую я пин 37 для управления насосом. Зеленым он выделяется в высоком состоянии, прекрасно виден пользователю. В низком состоянии он серый и сливается визуально со всеми остальными, и не понятно, твой это пин или нет. Чуть оттенок цвета изменить и все.
    В идеале конечно, чтобы пользователь сам смог прокомментировать назначение пина.
    И еще момент.
    Для защитника создал 2 правила, сохранил в контроллер.
    При попытке изменить любое правило конфигуратор выдал сообщение, что превышен лимит в 20 правил, хотя последнее в моем списке было 30-м.
    Памяти свободной чуть больше 1300 осталось.
    Дима!
    Еще спрошу про защитника полива.
    Полив установлен на 9 часов. Условие для защитника сработает в 12. Полив включится?
    Время-то просрочено?
     
    Последнее редактирование: 19.08.18
  4. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Внимательно смотрим настройки прошивки - там есть лимит правил, его надо указать ;) Конфигуратор подцепляет именно этот лимит.
    Очень много возни, как-нибудь потом займусь, сделаю возможность помечать пин в конфигураторе, как пользовательский.
    Модуль полива просто опрашивает пины, которые указаны в настройках защитника полива. Если на одном из них нужный уровень - полив тут же выключится. Т. е. это действует, когда полив включён, на остальное - не влияет.
    Вот тут не понял немного. Единственное, почему такое может быть - это на пине устанавливается уровень в обход кода контроллера - тогда, естественно, его состояние не попадает в карту пинов. Специфика, так сказать. В карту пинов состояние пина попадает только при записи в него средствами контроллера. Настройка, откуда читать состояние пинов в правилах - для этого и создана, чтобы разрулить такую тонкость: надо читать напрямую из пинов - читаем напрямую. Если отключить настройку ALERT_DONT_READ_PIN_DIRECT и номер пина меньше виртуального - то будет прямой digitalRead. С включенной настройкой - возьмётся из карты пинов состояние. При этом для виртуальных пинов, очевидно - в любом случае состояние берётся из карты пинов.
     
  5. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Обновил прошивку - для TFT-экрана появился экран "Сценарии" (по клику на кнопку "Сценарии" в экране ожидания).

    На экране сценариев - до 8 кнопок сценариев, две в ряду, 4 ряда. Как и говорил - клик на кнопку - сценарий запущен, ещё клик - остановлен. При этом по окончании сценария, если он не цикличный - статус кнопки автоматом меняется.

    Для Александра @promavto - в аттаче к посту - архив с двумя сценариями для моей отладочной платы на Due (внутри архива папка SCENES, её надо в корень SD-карточки запулить): там рулится информационными диодами через MCP23S17 - всё моргает, как прописано в сценарии, можешь проверять. Теперь ты можешь сделать супруге отдельную кнопочку, которая будет переключать каналы полива последовательно, с нужной длительностью перед переключением ;) Кстати сказать - SD-карта по прежнему иногда не инициализируется, надеюсь, что это просто недоработка отладочной платы.

    По поводу LCD-экрана: а так ли нам нужно там ещё один экранчик для сценариев? Там, собсно, места уже не осталось почти для иконок :( Но не спросить - я не могу, поэтому отвечайте - надо ли для LCD-экрана делать закладку "Сценарии"?
     

    Вложения:

  6. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Может я несколько "зажрался", но применять LCD экран в этой системе с АРМ отдает анахронизмом.
    Есть недорогие цветные экраны практически по этой же цене. Мне кажется нужно решительно рубить применение при последующих обновлениях. Понимаю, возможен шквал негодования, но может так подвинуть пользователей к "прекрасному и цветному".:flag:
     
  7. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Значит, пока можно не расширять возможности LCD экрана, вот и всё. Однако, цветной экран у нас только под Due, а с ней, как известно (с китайской платой) - проблем-с у многих. Под Mega2560 заводить TFT - не стоит, меедленно. С этой стороны вопроса LCD - вполне себе норм. Хотя есть и Nextion, если что. Но там ещё не припилена поддержка сценариев - надо, чтобы новый функционал чуть вылежался, тогда допилю ещё один экран в Nextion.
     
  8. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Обновил прошивки контроллера и выносного модуля с Nextion - добавил поддержку страницы сценариев на Nextion. Соответственно, прошивки проектов под Nextion - тоже обновились. Заодно поправил небольшой косячок - когда быстро вкл/выкл сценарий - не удалялись ждущие события наступления следующего шага из очереди, поэтому при таких условиях шаги накладывались друг на друга. Моё упущение, в общем; поправил, дописал очистку очереди сигналов при остановке сценария, так что всё сейчас норм.

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

    Сейчас получается, что с дисплеями у нас - уже вполне себе норм: многое из самого необходимого видно на них, и управляется с них. Но - как обычно, хочется большего, посему - читаем следующий абзац ;)

    Предложение на стотыщ: давайте скидываться на семидюймовый Nextion - очень хочу адаптировать проект под него, чтобы потом вообще красиво всё сделать, с картинками и плюшками. И будет у нас не хуже TFT семидюймового, и - под Мегой ;) Будет даже лучше, зуб даю ;)

    Один я пока такую покупку не потяну, а вместе - сможем, думаю. Нашёл вот такие предложения:

    7 дюймов: https://ru.aliexpress.com/item/English-Version-Nextion-7-0-HMI-Intelligent-LCD-Tough-Screen-Module-Display-for-Arduino-LCD-TFT/32695418613.html?spm=a2g0v.10010108.1000016/B.1.5a541d7bPIr8xd&isOrigTitle=true

    5 дюймов: https://ru.aliexpress.com/item/Nextion-5-0-HMI-Nextion/32759202301.html?spm=a2g0v.10010108.1000023.2.66422d6a8A1YKw

    Необязательно брать семидюймовый, можем и на 5 дюймов всё красиво сделать, тут главное - что размер дисплея больше тех, что у меня уже есть в наличии. В любом случае, считаю, что расширять список дисплеев - надо ;)

    Предлагаю заход с такого козырного туза: собираем по несколько сотен рублей, я покупаю Nextion максимально большого размера, влезающего в бюджет, делаю под него проект, тестирую, а по прошествии какого-то времени (например, пару месяцев, когда будет понятно, что с проектами под Nextion устаканилось всё более-менее) - мы можем его просто разыграть в лотерею, среди активных участников темы. Таким образом - не будет ситуации "это мне, это опять мне, это - снова мне" (с) "Свадьба в Малиновке".

    Я не настаиваю ни в коем разе - просто предложил, что называется. Если не надо - значит, не надо, не вопрос. Но я бы не хотел ограничиваться из больших экранов только TFT, отсюда и вырос данный наброс мыслей ;)

    Что скажете? Как обычно - можно плюсиками/минусиками к посту: потом подсчитаем тренд, и примерно прикинем, выйдет ли из этой затеи чего-нибудь. Предварительная величина взноса (из расчёта 10 человек участвующих) - 400 рублей, за этот взнос можно выиграть прибор стоимостью в 10 раз дороже, причём шансы - вполне себе ого-го. Ну и проекту на пользу это дело пойдёт, считаю.

    Мнения, оценки поста - жду (с) А. С. Шпак.
     
  9. olegmak3
    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442

    olegmak3

    Живу здесь

    olegmak3

    Живу здесь

    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442
    Адрес:
    Санкт-Петербург
    В прошивке стоит 30.
    Я имел ввиду вебморду.
    Как вариант будет достаточно следующего: когда кликаешь на номер пина у тебя открывается окно подтверждения. Вот в нем сделать строку, куда пользователь сможет написать свой комент. Думаю, этого хватит.
    И по самой карте пинов в вебморде.
    Сделать возможность самому просто удалить не нужные номера.

    Т. е. полив будет пропущен.
    Понятно. У меня это пин работает как вход от датчика.
     
  10. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Эмм, ещё раз: что мне надо сделать, чтобы воспроизвести сие поведение? Что открыть, куда кликнуть? Возможно, я где-то чего-то пропустил, например, в вебморде той же. Всё поправимо, просто надо знать все вводные: ты писал абстрактно, типа "хотел поменять, и не тут то было" - а мне нужна конкретика, как минимум - откуда пытался поменять ;) Потому как
    ;) Далее:
    С вебмордой вот прям быстро - не получится: любое телодвижение по настройкам - это, как минимум, изменение структуры БД и написание нескольких скриптов, короче - морока, блин. Но я услышал.
    С чего бы это? Ещё раз: если у полива стоит начало в 10 утра, а контроллер включили в 3 часа дня - полив включится, по-любому, т. к. время старта - уже пропущено. Если при включении полива сработает защитник полива - полив выключится тут же. Время, которое поливалось - учитывается корректно, как только защитник полива разрешит поливать - полив продолжится.
    Ага, я так и понял. Просто оставь настройку - читать с пинов напрямую, и всё - тогда правила будут вычитывать состояние пина напрямую, и им будет пофиг на карту пинов (из карты пинов будут браться только виртуальные пины).
     
  11. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    @olegmak3, посмотрел в вебморде, как с кол-вом правил работается. Вот пруф того, что получается верхняя граница правил из контроллера:
    Код:
        controller.queryCommand(true,'0|LIMITS',function(obj,answer){
             
        if(answer.IsOK)
        {
          MAX_RULES = parseInt(answer.Params[1]);
          MAX_DELTAS = parseInt(answer.Params[2]);
        }
     
      });
    Видно, что в MAX_RULES - максимальное кол-во правил. Далее, при добавлении правила:
    Код:
    // создаёт новое правило
    function newRule(editedRule, editedRow)
    {
    
      if(rulesList.Rules.length >= MAX_RULES)
      {
        showMessage('Достигнуто максимальное количество правил!');
        return;
      }
    Т. е. всё работает на основании того, что прописано в контроллере. В контроллере команда 0|LIMITS обрабатывается так:
    Код:
     else if(t == F("LIMITS"))
            {
              // получить настойки ограничений
                PublishSingleton.Flags.Status = true;
                PublishSingleton.Flags.AddModuleIDToAnswer = false;
                PublishSingleton = t;
                PublishSingleton << PARAM_DELIMITER;
                PublishSingleton << MAX_ALERT_RULES;
                PublishSingleton << PARAM_DELIMITER;
                PublishSingleton << MAX_DELTAS;
            }
    где MAX_ALERT_RULES - настройка из конфигурационного файла. Т. е., на первый взгляд - не вижу ошибок, но это, конечно, не значит, что их нет - всё может быть ;)
     
  12. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Это в конфигураторе, точно? Сейчас гляну код.
     
  13. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    @olegmak3, запустил конфигуратор в режиме отладки, проверил - установки лимитов приходят с контроллера нормально, как и должно быть.
     
  14. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    @olegmak3 - начал работу над картой пинов в контроллере, пока делаю исключение пинов из карты. Надо делать так, чтобы структуру БД это не затрагивало, т. к. есть данные накопленные. Поэтому делаю автосоздание таблиц при запуске новых скриптов. Надеюсь, чего-нибудь скоро выкачу ;)
     
  15. olegmak3
    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442

    olegmak3

    Живу здесь

    olegmak3

    Живу здесь

    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442
    Адрес:
    Санкт-Петербург
    Дима!
    В прошивке стоит мах 30 правил.
    Как только в конфигураторе добавляю 30 -е правило, все прописывается в контроллер. Но далее при попытке изменить любое выдает сообщение о превышении лимита в 20 правил.
    Вебморда пишет о превышении 30.
    Поясню.
    Контроллер работает постоянно.
    Полив в 8 утра, на 30 минут. Защитник полива настроен на влажность меньше 50%.
    В 8 утра влажность, скажем, 80%.Полив не включился, как и настроено.
    В 12 часов влажность упала меньше 50%.Что будет с поливом? Включится или нет?
    Вот о чем разговор.
     
Статус темы:
Закрыта.