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

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

Тема в разделе "Теплицы и парники", создана пользователем DIYMan, 14.10.19.

Статус темы:
Закрыта.
  1. Ден65
    Регистрация:
    15.07.19
    Сообщения:
    162
    Благодарности:
    53

    Ден65

    Живу здесь

    Ден65

    Живу здесь

    Регистрация:
    15.07.19
    Сообщения:
    162
    Благодарности:
    53
    Всем привет! Обратил внимание на поведение датчика влажности Si7021. При продолжительном уровне влажности (в ночное время) 100%, показания то падают в 0% то выбросы больше 100%. За DHT-22 такого поведения не наблюдается. У всех так или это проблема в датчике? upload_2020-10-7_10-40-25.png
     
  2. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888
    Адрес:
    80 км от Краснодара
    Так бывает, когда используешь сторонние библиотеки (это я про себя ;)). Вот код чтения с датчика, адафрутовский:

    Код:
      uint16_t hum = Wire.read();
      hum <<= 8;
      hum |= Wire.read();
      uint8_t chxsum = Wire.read();
    
      float humidity = hum;
      humidity *= 125;
      humidity /= 65536;
      humidity -= 6;
    Видно, что читается чексумма и влажность. При этом чексумма - не участвует в проверках вовсе, а влажность - тупо не проверяется на выхождение за границу 100%. Молодцы, чо.

    Что касается поставленного вопроса - видимо, проблемы с датчиком у вас. Попробуйте заменить датчик, для начала ;)

    З. Ы. Как-нибудь прочитаю даташит на этот датчик, и поправлю код, чтоб хоть чексумма проверялась.
     
  3. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888
    Адрес:
    80 км от Краснодара
    Ночь прошла ударно :) Перешерстил прошивку, привёл в порядок размерность адресов при работе с EEPROM: везде поставил uint32_t как адрес чтения, а то местами было uint16_t, что давало адресацию только на 65 килобайт, что есть не очень, сами понимаете.

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

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

    Как видите, расписания тупо группируются по папкам на SD. Для одной команды (например, "Уставки секции №1 окон") будет своя папка, с именем типа "WSECT1". Внутри папки - файлы с именем формата mmdd. TXT, где mm - номер месяца (нумерация с 1), dd - номер дня месяца (нумерация - с 1). Например, файл 1007. TXT содержит данные расписания на дату 7 октября.

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

    Внутри файла расписания - тупо текстовая команда без префикса CTSET=. Например, если внутри файла расписания будет текст LIGHT|ON, то при выполнении этого расписания - включится досветка. Короче, всё просто, как блин: гораздо сложнее сделать интерфейс для этого добра.

    Если кто желает потестировать ручками, то всё просто: закачиваем прошивку, открываем монитор порта на скорости 57600 (конец строки должен быть настроен на NL & CR), и вводим туда команду

    На SD-карте в папке SCHEDULE появится подпапка test, в ней будет файл с именем 1007. TXT, внутри файла будет строка LIGHT|ON. При этом, если эта команда послана контроллеру 7 октября - то досветка сразу включится. Даты - сами можете менять, как хотите

    Качайте, пробуйте ;) Как будет интерфейс под Android - отпишусь. И сразу скажу - расписания пока будут доступны только с приложения, сознательно иду на этот шаг, надо подсаживать людей на такое взаимодействие с контроллером, бо оно удобней стократ, чем другие междумордия ;) Чего вот точно делать не буду - это расписания с TFT-экрана, это просто нереальный объём работы :(

    Такие дела ;) Ушёл отсыпаться.
     
  4. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888
    Адрес:
    80 км от Краснодара
    Да, чой-то захотелось похвастаться (в стопицотый раз) архитектурой. Смотрите, как просто и изящно выполняется расписание на текущую дату (в функцию передаётся имя найденного на текущую дату файла, поиск - тоже тривиальный). Как видите - модуль расписаний ничо не знает о том, что там в файле - он тупо просит публичный интерфейс - а выполни-ка мне текстовую команду, которую я вычитал из файла, а?
    Код:
    void ScheduleModule::processSchedule(const String& fileName)
    {
      if(!MainController->HasSDCard())
      {
        return;
      }
    
      SdFile file;
      if(!file.open(fileName.c_str(),O_READ))
      {
        return;
      }   
    
      String command;
      while(file.available())
      {
        command += (char) file.read();
      }   
      file.close();
    
      if(command.length())
      {
        ModuleInterop.QueryCommand(ctSET,command,false);
      }
    }
    
    Десяток строчек. Включая проверку - есть ли SD-карта вообще. Ну не красота-ли? Ну вот, похвалился тривиальщиной, и теперь точно - ушёл отсыпаться :)
     
  5. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.957
    Благодарности:
    1.957

    promavto

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

    promavto

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

    Регистрация:
    27.02.16
    Сообщения:
    1.957
    Благодарности:
    1.957
    Адрес:
    г. Москва, Зеленоград.
    Загрузил, протестировал - работает. Файл на SD карте сформировал. Время летит ох как быстро. :aga: Поэтому предлагаю в имени файла еще добавить год (две цифры) в начале имени.

    Согласен, работы много да и не удобно работать с таким объемом информации с дисплея. А вот в конфигураторе ПК (и еще бы на локальном сайте, что бы не бегать с ноутбуком по теплице) желательно иметь такую опцию. Экран смартфона все таки небольшой, есть подслеповатые пользователи. :aga: По поводу локального сайта - вопрос неоднозначный. У себя я установил, но что то не заметил его частое использование (кроме меня). От клиентов так же не слышал вопросов по его установке. Ну думаю что изучили (или просто читали) инструкцию по его установке. :hndshk:
     
  6. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888
    Адрес:
    80 км от Краснодара
    Зачем? Расписание не привязано к году, оно привязано к датам ЛЮБОГО года. В этом и смысл ;)
     
  7. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.957
    Благодарности:
    1.957

    promavto

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

    promavto

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

    Регистрация:
    27.02.16
    Сообщения:
    1.957
    Благодарности:
    1.957
    Адрес:
    г. Москва, Зеленоград.
    Может ты и прав. Это я привык в файлах год указывать. :um:
     
  8. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888
    Адрес:
    80 км от Краснодара
    Саш, вся фишка в расписании - это создание цикличного техпроцесса, скажем так. Год тут - не при чём, совершенно. Вот смотри: нам надо раз в месяц менять уставки температур, просто как пример. То есть надо КАЖДЫЙ месяц это делать, в ЛЮБОЙ год. Следовательно, расписание не должно привязываться к году, иначе нам придётся иметь геморрой с составлением расписания на КАЖДЫЙ год. А так - расписание общее, если надо - просто подредактировал какую-то запись, и всё.

    Естественно, весь этот механизм ещё надо будет обкатывать.
     
  9. Berendey-70
    Регистрация:
    27.10.17
    Сообщения:
    149
    Благодарности:
    139

    Berendey-70

    Живу здесь

    Berendey-70

    Живу здесь

    Регистрация:
    27.10.17
    Сообщения:
    149
    Благодарности:
    139
    https://umnica.pro/lite.html
    Пример неплохо задокументированной системы управления теплицей (с точки зрения установки). По началу у них был сдвиг в сторону гигантомании. Для успеха нужно простое дешевое решение, и такое у них буквально недавно появилось. Для меня интересно, что управление форточками запараллелено.
     
  10. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888
    Адрес:
    80 км от Краснодара
    Ммм. Подключаем выходы контроллера к двум парам реле - две фрамуги работают параллельно. Ничего сложного и интересного :)
     
  11. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888
    Адрес:
    80 км от Краснодара
    Последние новости

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

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

    Вот что получается (картинки кликабельны):

    schedule_screen.png schedule_activity_list.png schedule_activity_item.png schedule_window_section.png schedule_co2_ppm.png

    Сами расписания доступны по клику на "Устройства", далее в самом низу кнопка "Расписания". Как видно на первом скрине, кнопки - это доступ к группам расписаний. По клику на кнопке - идёт переход на список расписаний определённой группы. При этом расписания автоматически подгружаются с контроллера и кешируются в приложении.

    Остальные скрины - это различные формы редактирования того или иного расписания. Как видно, из расписания можно даже управлять активностью программных модулей.

    Теперь ВАЖНОЕ. Если кто уже баловался с модулем расписаний - пожалуйста, перед закачкой новой прошивку удалите папку SCHEDULE с SD-карты! Дело в том, что я изменил формат команд, поэтому, во избежание различных непоняток - лучше начать с чистого листа, что называется.

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

    Теперь контроллер умеет в смену настроек, когда это нужно пользователю. Эээх, не хватает времени на создание понятной документации, да и не писатель чукча-то ;)

    Вот скажите - разве не здоровская возможность, менять настройки контроллера по заранее запрограммированным спискам?

    Значит, не видать мне успеха, не получается у меня просто, сами забросали меня хотелками в своё время :)]:aga:
     
  12. Berendey-70
    Регистрация:
    27.10.17
    Сообщения:
    149
    Благодарности:
    139

    Berendey-70

    Живу здесь

    Berendey-70

    Живу здесь

    Регистрация:
    27.10.17
    Сообщения:
    149
    Благодарности:
    139
    Не надо себя недооценивать. Надо только наступить себе на горло и отсечь лишнее :) .
     
  13. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888
    Адрес:
    80 км от Краснодара
    Потихоньку отсекаем :) Невостребованные модули уже по умолчанию выключены из прошивки ;) Но тут дело ещё в том, что концепция на настраиваемость железа - оно, конечно, хорошо, но только в том случае, когда уже настроены все привязки под конкретную плату.

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

    В другое всё упирается - в деньги. Дорого. И всё тут ;)
     
  14. Berendey-70
    Регистрация:
    27.10.17
    Сообщения:
    149
    Благодарности:
    139

    Berendey-70

    Живу здесь

    Berendey-70

    Живу здесь

    Регистрация:
    27.10.17
    Сообщения:
    149
    Благодарности:
    139
    В примере такая же история. Первая система стоит 27тр, а lite - 10тр. Недешево конечно, но в 2,7 раза ниже чем было.
     
  15. Berendey-70
    Регистрация:
    27.10.17
    Сообщения:
    149
    Благодарности:
    139

    Berendey-70

    Живу здесь

    Berendey-70

    Живу здесь

    Регистрация:
    27.10.17
    Сообщения:
    149
    Благодарности:
    139
    "Лучше быть богатым и здоровым, чем бедным и больным" Б. Шоу.
    А вообще - конечно круто, без шуток.
    Но получается аналог спортивного автомобиля. Можно легко подстроиться под любые изменения и выиграть гонку, но дорого для повседневного использования.
     
Статус темы:
Закрыта.