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

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

Тема в разделе "Умный дом", создана пользователем Анкор Плюс, 27.04.17.

Статус темы:
Закрыта.
  1. Scorp78
    Регистрация:
    09.06.12
    Сообщения:
    28
    Благодарности:
    6

    Scorp78

    Участник

    Scorp78

    Участник

    Регистрация:
    09.06.12
    Сообщения:
    28
    Благодарности:
    6
    Адрес:
    Омск
    Т. е. датчик температуры подключается к nRF тот в свою очередь связывается с датчиком который стоит на ардуино я правильно понимаю? и если я температуру хочу замерить в дальнем углу теплицы туда провод тянуть не надо?
     
  2. АлкН1
    Регистрация:
    14.04.16
    Сообщения:
    468
    Благодарности:
    1.171

    АлкН1

    Живу здесь

    АлкН1

    Живу здесь

    Регистрация:
    14.04.16
    Сообщения:
    468
    Благодарности:
    1.171
    на универсальные модули ставятся датчики и nRF, на Мегу - nRF и на Меге отображаются данные с датчиков универсальных модулей через радио
     
  3. necrjd
    Регистрация:
    05.11.14
    Сообщения:
    146
    Благодарности:
    98

    necrjd

    Живу здесь

    necrjd

    Живу здесь

    Регистрация:
    05.11.14
    Сообщения:
    146
    Благодарности:
    98
    Дмитрий, как-то писал, что в моей конфигурации бессистемно появляются неверные значения. На графиках Thingspeak видны как выбросы. Профилактика линий питания ситуацию не изменила.
    Скачал файл с данными, сделал табличку, построил графики. Увидел, что "неверные" значения точно попадают в данные другого датчика. Стало понятно, что глюк программный - иногда данные смещаются на 2 ячейки влево. Это видно на лист2 в строках 42, 231, 683, 725 в приложенном ексельном файле (картинка размещена для иллюстрации эффекта и не соответствует по времени файлу).
    Блоха не срочная, с ней жить можно, но мешает автоматизации процессов. Да и лето у нас уже, похоже, кончилось. Безымянный.png
     

    Вложения:

    Последнее редактирование: 11.08.17
  4. Scorp78
    Регистрация:
    09.06.12
    Сообщения:
    28
    Благодарности:
    6

    Scorp78

    Участник

    Scorp78

    Участник

    Регистрация:
    09.06.12
    Сообщения:
    28
    Благодарности:
    6
    Адрес:
    Омск
    дайте ссылку что такое универсальный модуль
     
  5. HANTER333
    Регистрация:
    21.12.15
    Сообщения:
    1.617
    Благодарности:
    1.156

    HANTER333

    Живу здесь

    HANTER333

    Живу здесь

    Регистрация:
    21.12.15
    Сообщения:
    1.617
    Благодарности:
    1.156
    Универсальный модуль делается на 328 меге (16мГц), подойдут UNO, MINI:)
     
  6. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Спасибо, будем посмотреть. Возможно, оно и не глюк даже, вернее, глюк отправки на ThingSpeak. Вопрос, кстати - в лог-файлах на SD-карточке тоже присутствуют такие выбросы? В графиках вебморды?
     
  7. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Инуверсальный модуль - это, грубо говоря, ардуина, прошитая прошивкой универсального модуля (на гитхабе лежат две прошивки - для модуля с датчиками и исполнительного модуля). Модуль с датчиками - содержит до трёх датчиков на борту, регистрируется на главной контроллере через линию регистрации 1-Wire, далее может работать либо через линию данных 1-Wire, либо по RS-485, либо - по nRF.

    Исполнительный модуль - содержит настройки привязок 8 каналов, регистрируется через конфигуратор, работает по тем же протоколам, что и модуль с датчиками. К каждому каналу можно привязать или состояние пина главного контроллера, или состояние канала полива/досветки, или состояние полуканала фрамуги (т.е. одним универсальным исполнительным модулем можно рулить 4-мя фрамугами, вынеся этот модуль за сотню метров по RS-485, например).
     
  8. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

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

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    @necrjd, да, логика работы такая (файл IoTModule. cpp):
    Код:
    void IoTModule::CollectDataForThingSpeak()
    {
    #ifdef IOT_DEBUG
    Serial.println(F("IOT - collect data for ThingSpeak..."));
    #endif
    // тут собираем данные для ThingSpeak, в понятном ему формате
    byte iter = 1;
    delete dataToSend;
    dataToSend = new String();
    IoTSettings iotSettings = MainController->GetSettings()->GetIoTSettings();
    for(byte i=0;i<8;i++) // максимум 8 датчиков на канал
    {
    AbstractModule* mod = FindModule(iotSettings.Sensors[i].ModuleID);
    if(!mod) // не нашли связанный модуль
    continue;
    OneState* os = mod->State.GetState((ModuleStates)iotSettings.Sensors[i].Type,iotSettings.Sensors[i].SensorIndex);
    if(!os) // не нашли датчик с переданным индексом и нужного типа
    continue;
    if(os->HasData())
    {
    // с датчика есть показания, можно формировать данные
    if(dataToSend->length())
    *dataToSend += F("&");
    *dataToSend += F("field");
    *dataToSend += String(iter++);
    *dataToSend += F("=");
    String sensorData = *os;
    // ThingSpeak просит float с точкой, поэтому заменяем запятую на точку
    sensorData.replace(',','.');
    *dataToSend += sensorData;
    }
    } // for
    
    
    Перевожу: индекс поля запроса увеличивается только тогда, когда данные с датчика есть, что в КОРНЕ неверно. Осталось подумать, что передавать на ThingSpeak, если данных с датчика нет, предлагайте.

    Пофиксить можно, не дожидаясь меня: в строке
    Код:
    *dataToSend += String(iter++);
    убрать два плюса в конце, т. е. она должна быть вида
    Код:
    *dataToSend += String(iter);
    а перед строчкой
    Код:
    } // for
    вставить строчку
    Код:
    iter++;
    Итого, готовая конструкция будет выглядеть так (привожу только тело цикла):
    Код:
    for(byte i=0;i<8;i++) // максимум 8 датчиков на канал
      {
          AbstractModule* mod = FindModule(iotSettings.Sensors[i].ModuleID);
          if(!mod) // не нашли связанный модуль
            continue;
    
         OneState* os = mod->State.GetState((ModuleStates)iotSettings.Sensors[i].Type,iotSettings.Sensors[i].SensorIndex);
         if(!os) // не нашли датчик с переданным индексом и нужного типа
          continue;
    
          if(os->HasData())
          {
            // с датчика есть показания, можно формировать данные
            if(dataToSend->length())
              *dataToSend += F("&");
            
            *dataToSend += F("field");
            *dataToSend += String(iter);
            *dataToSend += F("=");
    
             String  sensorData = *os;
    
            // ThingSpeak просит float с точкой, поэтому заменяем запятую на точку
            sensorData.replace(',','.');
          
            *dataToSend += sensorData;
          } 
        iter++; 
      } // for
    Это пока мягкий фикс, который не будет сдвигать поля для ThingSpeak, если с какого-то датчика нет данных на момент опроса. При этом для такого датчика данных на ThingSpeak не попадёт в этот цикл опроса вовсе.

    А я пока подготовлю нормальный фикс, сегодня постараюсь выложить.
     
  10. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Обновил прошивку, поправил отсыл данных на ThingSpeak - теперь ВСЕГДА соблюдается привязка датчика к полю канала, т. е. имя поля канала при формировании запроса теперь должно быть правильное, т. е. никакого сдвига влево быть не должно. При этом датчики, с которых нет данных на момент опроса - в формируемый запрос просто не попадают, как и раньше.

    @necrjd, большое вам спасибо за багрепорт! И у меня махонькая просьба: посмотрите, как оно сейчас будет работать, заранее благодарен :hello:
     
  11. necrjd
    Регистрация:
    05.11.14
    Сообщения:
    146
    Благодарности:
    98

    necrjd

    Живу здесь

    necrjd

    Живу здесь

    Регистрация:
    05.11.14
    Сообщения:
    146
    Благодарности:
    98
    @DIYMan, спасибо! попробую отпишусь.
     
  12. diabor_20160109
    Регистрация:
    20.02.16
    Сообщения:
    47
    Благодарности:
    17

    diabor_20160109

    Участник

    diabor_20160109

    Участник

    Регистрация:
    20.02.16
    Сообщения:
    47
    Благодарности:
    17
    Доброй ночи уважаемый @DIYMan, немного отдохнув, я снова начал мучить модем. к сожалению снова ничего не получилось.
    пример лога в дебаг режиме:
    READY, Thu 17.08.2017 - 23:16:57
    Request for modem hardware...
    => Send the "AT+CGMM" command to modem...
    <= Receive "SIMCOM_SIM800L" answer from modem...
    <= Receive "OK" answer from modem...
    [OK] => Modem hardware detected: SIM800 series
    Check for modem READY...
    => Send the "AT+CPAS" command to modem...
    <= Receive "+CPAS: 0" answer from modem...
    [OK] => Modem ready.
    <= Receive "OK" answer from modem...
    Disable echo...
    => Send the "ATE0" command to modem...
    <= Receive "OK" answer from modem...
    [OK] => ECHO OFF processed.
    Disable cell broadcast SMS...
    => Send the "AT+CSCB=1" command to modem...
    <= Receive "OK" answer from modem...
    [OK] => Broadcast SMS disabled.
    Turn AON ON...
    => Send the "AT+CLIP=1" command to modem...
    <= Receive "OK" answer from modem...
    [OK] => AON is ON.
    Set PDU format...
    => Send the "AT+CMGF=0" command to modem...
    <= Receive "OK" answer from modem...
    [OK] => PDU format is set.
    Set UCS2 format...
    => Send the "AT+CSCS="UCS2" command to modem...
    <= Receive "OK" answer from modem...
    [OK] => UCS2 encoding is set.
    Set SMS output mode...
    => Send the "AT+CNMI=2,2" command to modem...
    <= Receive "OK" answer from modem...
    [OK] => SMS settings is set.
    Check registration status...
    => Send the "AT+CREG?" command to modem...
    <= Receive "+CREG: 0,1" answer from modem...
    [OK] => Modem registered in GSM!
    <= Receive "OK" answer from modem...
    Check if modem available...
    => Send the "AT" command to modem...
    <= Receive "OK" answer from modem...
    [OK] => Modem answered and available.
    <= Receive "RING" answer from modem...
    <= Receive "+CLIP: "+79601845866",145,",0,",0" answer from modem...
    RING DETECTED: +79601845866
    UNKNOWN NUMBER: +79601845866!
    Hang up...
    => Send the "ATH" command to modem...
    <= Receive "OK" answer from modem...
    [OK] => Hang up DONE.
    <= Receive "+CMT: ",143" answer from modem...
    <= Receive "07919730071111F1040B919706815468F60008718071328183217C042D0442043E0442002004300431043E043D0435043D0442002004370432043E043D0438043B002000310020044004300437002C0020043F043E0441043B04350434043D043804390020002D0020044104350433043E0434043D044F002000320033003A00310038002E0020002204110438043B04300439043D0022" answer from modem...
    SMS RECEIVED: 07919730071111F1040B919706815468F60008718071328183217C042D0442043E0442002004300431043E043D0435043D0442002004370432043E043D0438043B002000310020044004300437002C0020043F043E0441043B04350434043D043804390020002D0020044104350433043E0434043D044F002000320033003A00310038002E0020002204110438043B04300439043D0022
    Message decoding error or message received from unknown number!
    <= Receive "+CMT: ",155" answer from modem...
    <= Receive "07919730071111F1040B919706815468F600087180713291002188042D0442043E0442002004300431043E043D0435043D04420020043E04410442043004320438043B002004120430043C00200441043E043E043104490435043D04380435002E0020041F0440043E0441043B0443044804300442044C00200434043E002000310038002E00300038002E003100370020043F043E0020003000360034003600300033" answer from modem...
    SMS RECEIVED: 07919730071111F1040B919706815468F600087180713291002188042D0442043E0442002004300431043E043D0435043D04420020043E04410442043004320438043B002004120430043C00200441043E043E043104490435043D04380435002E0020041F0440043E0441043B0443044804300442044C00200434043E002000310038002E00300038002E003100370020043F043E0020003000360034003600300033
    Message decoding error or message received from unknown number!
    Check if modem available...
    => Send the "AT" command to modem...
    <= Receive "OK" answer from modem...
    [OK] => Modem answered and available.

    Подскажите пожалуйста что не так? Заранее в конфигураторе прописал номер с которого буду звонить. выставил оператора связи сим-карты что в контроллере.
    При попытки позвонить говорит абонент занят.
     
  13. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

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

    Всё правильно - прошивка сбрасывает звонок, так и должно быть.
     
  14. diabor_20160109
    Регистрация:
    20.02.16
    Сообщения:
    47
    Благодарности:
    17

    diabor_20160109

    Участник

    diabor_20160109

    Участник

    Регистрация:
    20.02.16
    Сообщения:
    47
    Благодарности:
    17
    Доброе утро, проверил, ошибок формата ввода номера в конфигураторе не нашел, на всякий случай нажал еще раз "сохранить данные". Принтскрин во вложении на всякий случай. Однако ничего не изменилось(
     

    Вложения:

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

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Правка: посмотрел код, поправлю, вроде как ошибка просматривается.
     
    Последнее редактирование: 18.08.17
Статус темы:
Закрыта.