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

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

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

Статус темы:
Закрыта.
  1. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.959
    Благодарности:
    1.958

    promavto

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

    promavto

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

    Регистрация:
    27.02.16
    Сообщения:
    1.959
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Привет всем! При настройке радиомодуля датчика дождя метеостанции обнаружилась нестабильная регистрация наличия дождя. Оказалось что импульс обнаружения немного коротковат (40-60 мс при разной интенсивности дождя) и он не всегда стабильно определяется. Выход - подать сигнал с датчика на свободный вывод 2 (у него есть прерывание) и регистрировать сигнал по прерыванию. Нужно небольшое изменение в программе. При данной переделке сигнал дождя регистрируется стабильно. Замечание: оказывается у датчика дождя есть маленький индикатор горизонтального уровня (ватерпас). Датчик необходимо устанавливать строго горизонтально. Раньше я не обращал внимания на эту опцию. Рекомендую и вам обратить внимание на это.
     
  2. olegmak3
    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442

    olegmak3

    Живу здесь

    olegmak3

    Живу здесь

    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442
    Адрес:
    Санкт-Петербург
    Дима, привет!
    Какие-то логи с помощью terminal 1.9b снял на скорую руку. Скорее всего толку от них будет не много, т. к. надо отлавливать сутками момент сбоя с отправкой данных на гарденбосс.
    Было бы здорово, если бы ты выложил скрины с необходимыми настройками для terminal 1.9b (для чайников 63-х летних ;)). Как запустить запись логов автоматом после перегруза контроллера (мой вариант) ?
    Где и как в terminal 1.9b все это прописать?
    Появился у меня ноут, который смогу оставить на длительное время подключенным к контроллеру.
     

    Вложения:

  3. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Ок, гляну.
     
  4. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Посмотрел логи - ничего криминального, только вижу, что много раз контроллер перестартовал - это вручную делалось или его так плющит?

    Я сам не особо в нём. Просто запускаю - и настраиваю на вывод лога в файл, всё.

    Вообще не в курсе, если честно. На указанной программе свет клином не сошёлся, это просто одна из терминалок - можно использовать любую понравившуюся ;)
     
  5. olegmak3
    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442

    olegmak3

    Живу здесь

    olegmak3

    Живу здесь

    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442
    Адрес:
    Санкт-Петербург
    По всякому... Как только подключаешься к порту-идет рестарт. Из терминалки перешел в какое-нибудь другое окно (папку или прогу) ,при возврате к терминалке идет рестарт контроллера.
    Поставил сегодня на другом ноуте запись логов. Ноут девственно чистый. Система только что переустановлена. Чем только этот ноут не был залит! Поэтому винт заменил, клавиатура внешняя, и одна программка- терминалка.
    I2C оставлено только на материнке (часы и карта), датчик освещенности физически отключен.
    На днях гляну осциллографом сигналы на внешнем вотчдоге.
    Закономерности какой-либо в перегрузках уловить не могу пока. Может работать стабильно, а может и пулеметом. Наводки от сети исключаю, т. к. все нагрузки питаются через оптроны с переходом через "0".
     
  6. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

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

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Обращение к сообществу: ещё у кого-нибудь перезагружается внезапно, как у @olegmak3 ? Вот чтобы - работало, а потом бац - перезагрузка?

    Интересует именно конфигурация под Мега, т. к. я давно перешёл на отладку под Due, и кто его знает - мог что-то упустить в конфигурации под мегу.

    Заранее признателен за отзывы ;)
     
  8. necrjd
    Регистрация:
    05.11.14
    Сообщения:
    146
    Благодарности:
    98

    necrjd

    Живу здесь

    necrjd

    Живу здесь

    Регистрация:
    05.11.14
    Сообщения:
    146
    Благодарности:
    98
    Вот мой вариант. Пробовал с разными источниками питания, в т. ч. батарейным. Количество датчиков пробовал разное. Когда вывод только на гарденбосс - почему-то иногда отключалась отправка данных на сайт. Сейчас настроил отправку еще и на тингспик, чтобы понять проблема гарденбосса или моего контроллера. Поведение поменялось. Отправка и туда и туда есть, но периодически перезагружается от нескольких раз в день, до раза за несколько дней. Зависимость не могу уловить.
     

    Вложения:

  9. olegmak3
    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442

    olegmak3

    Живу здесь

    olegmak3

    Живу здесь

    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442
    Адрес:
    Санкт-Петербург
    Дима!
    Вот еще один лог.

    В 16-39 перегрузил полным отключением БП. Запустил терминалку.
    В 18-29 вроде был перегруз.
    В 19-40 посмотрел, а в терминалке данные закончились в 18-37.
    Перезапустил и уехал из деревни. Завтра гляну.
    П. С. А данные на гарденбосс шли без провалов, и до сих пор исправно идут.
     

    Вложения:

  10. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Мне бы логи ;)
     
  11. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Да, посмотрел, вижу перезагруз, но причин его - не вижу, всё работало штатно. Вижу, что ты добавил вывод текущего времени в лог из терминалки - это хорошо. Ещё что можно сделать - добавить вывод свободной памяти отсылом CTGET=STAT|FREERAM раз в 10 секунд, например. Это тоже делается в терминалке периодическим макросом ;)

    Возможно, проблема и не в отсыле данных, а в чём-то вообще другом. Возможно, оперативка фрагментируется или её не хватает - сложно сказать. Перезагрузилось после (но не обязательно вследствие ;)) получения данных в порт:
    Код:
    +RECEIVE DETECTED, CLIENT #0, LENGTH=275
    До этого много раз получало данные, и всё было норм. Тут главное помнить, что после - не значит вследствие. Самый правильный вариант, считаю - это тестировать, начиная с минимальной конфигурации: например, только один датчик температуры, никаких модулей влажности, полива, правил и пр. - короче, по-бедному.

    Мне бы только найти границу, до которой - нет проблем, а после которой - периодические проблемы. Пока я не могу понять природу такого поведения.
     
  12. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Пока могу предположить, что теоретически проблемы могут возникать вот в этом месте (начиная со строке 4609 в файле CoreTransport. cpp, это касается работы через SIM800, по ESP пока не говорим):
    Код:
            while(remainingDataLength > 0)
            {
                // читаем, пока не хватает данных для одного пакета
                while(receiveBuffer.size() < packetLength)
                {
                    #ifdef USE_WIFI_MODULE
                      ESP.readFromStream();
                    #endif
            
                    // данных не хватает, дочитываем
                    if(!workStream->available())
                      continue;
    
                    receiveBuffer.push_back((uint8_t) workStream->read());
              
                } // while
    
                // вычитали один пакет, уведомляем клиентов, при этом может пополниться буфер,
                // поэтому сохраняем пакет так, чтобы указатель на него был всегда валидным.
                uint8_t* thisBuffer = new uint8_t[packetLength];
                memcpy(thisBuffer,receiveBuffer.pData(),packetLength);
    
                receiveBuffer.remove(0,packetLength);
                if(!receiveBuffer.size())
                  receiveBuffer.clear();
    
                notifyDataAvailable(*cl, thisBuffer, packetLength, (remainingDataLength - packetLength) == 0);
                delete [] thisBuffer;
          
                remainingDataLength -= packetLength;
                packetLength = min(TRANSPORT_MAX_PACKET_LENGTH,remainingDataLength);
            } // while
    Там два цикла while, ватчдог при этом не успокаивается. В циклах ждётся, пока вычитается часть данных из порта.

    2 @olegmak3 - там можно внутри обоих циклов попробовать вставить успокоение ватчдога, на время. И посмотреть - будут ли изменения. Чисто теоретически, если смоделировать ситуацию, когда что-то проглючило и по каким-то причинам потерялся один-единственный байт в порту - то указанный кусок кода может быть проблемой. Если вставить туда успокоение ватчдога - то контроллер должен наглухо зависнуть, и если это будет так - мы локализуем проблемный кусок ;)

    Ещё в строчке 4601:
    Код:
            // теперь смотрим, сколько у нас данных ещё не послано клиентам
            size_t remainingDataLength = ipdClientDataLength;
    можно заменить size_t на int32_t - чем чёрт не шутит ;)

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

    З. Ы. Вставить успокоение ватчдога просто: в самом низу Globals. h вставляем:

    Код:
    #ifdef USE_EXTERNAL_WATCHDOG
    extern void updateExternalWatchdog();
    #endif
    А потом, где нужно вызвать - вызываем:
    Код:
    #ifdef USE_EXTERNAL_WATCHDOG
    updateExternalWatchdog();
    #endif
    Собственно, всё.
     
    Последнее редактирование: 17.06.19
  13. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Посмотрел настройки:
    Код:
    #define ALERT_UPDATE_INTERVAL 2000/500
    Поставьте либо константу, либо - в скобки круглые возьмите ;) В любом случае - 2000/500 - это 4 миллисекунды, очень часто проверяются правила, контроллер только этим и занят, по сути.

    Далее:
    Код:
     #define SECOND_PUMP_START_CHANNEL 0
    Используется второй насос (USE_SECOND_PUMP), при этом второй насос, по факту, работает как и первый, т. е. привязан начиная с первого канала полива. Возможно, так и задумано, просто странно.

    В остальном - навскидку всё норм.
     
  14. olegmak3
    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442

    olegmak3

    Живу здесь

    olegmak3

    Живу здесь

    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442
    Адрес:
    Санкт-Петербург
    Если бы где было написано пошагово, как правильно...Не нашел ни одного более-менее подробного
    мануала на терминалку.
    И это при действующей теплице, где все активно растет?
    Ты меня ставишь на один уровень с собой? ;)
    Очень лестно, но ты ошибаешься в этом плане.
     
  15. necrjd
    Регистрация:
    05.11.14
    Сообщения:
    146
    Благодарности:
    98

    necrjd

    Живу здесь

    necrjd

    Живу здесь

    Регистрация:
    05.11.14
    Сообщения:
    146
    Благодарности:
    98
    Лог. Примерно в 7.55 сработала релюха вачдога. Но потом так и не включилась. Возможно из-за особенностей подпитки через USB моей схемы. Пока не разбирался. Передернул питание, поставил на очередную порцию записи лога. По замечаниям - вечером поправлю ("В любом случае - 2000/500 - это 4 миллисекунды" - это явно ошибка - между числами надо двойной /). После перезагрузки требуется и терминалку коннектить снова
     

    Вложения:

    Последнее редактирование: 17.06.19
Статус темы:
Закрыта.