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

Современное животноводство — очень специфический бизнес. Главная его особенность заключается в том, что он связан с непрерывными биологическими циклами животных. Цена любой ошибки здесь чрезвычайно высока.

Сбалансированный и вовремя предложенный рацион — один из основных факторов, влияющих на увеличение надоев и прирост поголовья, а значит, и на рентабельность всего производства. От грамотного управления кормовым столом напрямую зависит эффективность кормления и здоровье животных. Это сложный технологический процесс, который подчиняется жестким нормативам. Так, крупный рогатый скот кормят 2-3 раза в сутки в зависимости от типа кормления и возраста животных. Раздача кормов поголовью, которое находится в одном помещении, не может продолжаться больше 20–30 минут. Нужно точно соблюдать дозировку: погрешность для стебельчатых кормов допускается в пределах ±15%, для концентратов — ±5%. Потери кормов, которые можно собрать после раздачи, не могут превышать 1% от их общего количества. Невозвратимые потери не допускаются.

Вот только на практике четко следовать нормативам не так просто: человеческий фактор ставит стабильную раздачу корма под большой вопрос. Рационы на кормовом столе зачастую не соответствуют рецептуре, составленной зоотехником. Бывает и так, что составленный, приготовленный и полученный животными — это три абсолютно разных рациона. График подачи корма также нарушается: человек не успел, где-то задержался, заболел, его некому было заменить и т.д. Это приводит к нарушению биологического ритма у животных и, как следствие, к снижению их продуктивности.

На процесс приготовления и раздачи корма приходится до 70% общих затрат труда: это один из самых трудоемких технологических процессов в животноводстве. Можно ли освободить человека от рутинной работы, гарантируя при этом, что животные будут обеспечены кормами точно по заданной рецептуре и строго в определенное время? Да, если доверить процесс кормления автоматике.

Рис. 1. Молочное скотоводство занимает лидирующие позиции по внедрению робототехники



Эволюция процесса кормления


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

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

Сегодня более 50% всех скотоводческих хозяйств в РФ используют мобильные смесители-кормораздатчики. Большинством предприятий предпочтение отдается прицепным моделям, которые на порядок дешевле самоходных: если прицепной кормораздатчик обходится в среднем в €20 тысяч, то за самоходный надо будет выложить около €250 тысяч.

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

Подвесные кормовагоны


К последнему поколению систем кормления относятся, например, системы подвесных кормовагонов. Лидирующие позиции в их разработке, производстве и внедрении занимают фирмы Pellon (Финляндия), DeLaval (Швеция) и Mullerup (Дания). В России такое оборудование впервые было установлено в 2012 году в молочном хозяйстве «Дашенька» в поселке Ротово Псковской области.

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

Единственное, что требуется здесь от человека — это обеспечить кормами складские помещения, откуда их будет отгружать автоматика. А еще человек нужен для того, чтобы запрограммировать систему: ввести в нее набор ингредиентов, состав, нормы, дозировку и т.д. Иначе говоря, ей нужно один раз подробно «объяснить», что от нее требуется, а далее весь процесс осуществлять и контролировать будет уже она сама.

Для того, чтобы раздавать в коровнике корма наземным транспортом — кормораздатчиком или трактором — нужен проход шириной 5-6 м. Подвесному кормовагону хватит 2,5 м. Таким образом экономится около 15% площади. Соответственно снижаются затраты при строительстве коровника. Кроме того, использование подвесных кормовагонов исключает попадание на кормовой стол грязи с колес техники.

Кормовагон может быть запрограммирован на раздачу как грубых кормов, так и концентратов, а также их смеси — полносмешанного монокорма. Он может раздавать корм индивидуально каждому животному или группам животных. Отдать на откуп автоматике можно даже стоимость порции, чтобы контролировать кормление в рамках бюджета: для этого нужно всего лишь заранее вбить в программу цену ингредиентов.

Рис. 2. Автоматическая система для раздачи корма DeLaval

image

Автоматическая выпойка телят


Автоматические системы выпойки телят — еще один пример того, как с помощью высоких технологий решаются задачи оптимизации кормления сельскохозяйственных животных. Такое оборудование выпускается целым рядом производителей: в их числе Urban, Delaval, Milkline и многие другие. Голландская фирма Lely считается одним из первопроходцев в этой области, а самой передовой ее разработкой признана система Lely Calm.

Главное преимущество такой системы заключается в том, что она максимально приспособлена к естественному поведению телят и позволяет им пить молоко в любое время в течение всего дня — что называется, «по требованию». Молоко (или его заменитель) в системе сохраняет оптимальную температуру на протяжении 24-х часов в сутки: оно не остывает, как при выпойке вручную.

На каждого теленка надевается ошейник с транспондером. Система следит за тем, сколько раз он подходит к соске и сколько молока выпивает. Можно настроить автоматику так, чтобы она выдавала каждому животному определенный объем при каждом подходе. Теленок, который уже употребил свою норму, молока не получит. Если животное пропускает кормление, система сообщает об этом, чтобы оператор мог выяснить, в чем дело.

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

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

Кстати, сама же автоматика и помогает и «отлучить» от нее теленка. По достижению 2-х месячного возраста она перестает его кормить, давая вместо корма обычную воду. Сделав несколько попыток, теленок перестает подходить к соске, после чего быстро переходит на грубые и концентрированные корма.

Рис. 3. Система автоматической выпойки телят Urban

image

Автоматическая система выпаса


Выпас коров на обычном пастбище часто ведет к низкой эффективности использования кормовых ресурсов из-за вытаптывания угодий и загрязнения их фекалиями. Намного целесообразнее показывают себя так называемые «фронтальные» пастбища, на которых участок со свежей порцией растительного корма под скармливание его животным ограничивается электроизгородями. Это, с одной стороны, позволяет значительно повысить эффективность использования кормовых ресурсов пастбища. С другой — существенно увеличивает трудозатраты, так как переставлять электроизгородь на новый участок пастбища приходится вручную.

Для того, чтобы минимизировать затраты ручного труда при выпасе скота на «фронтальном» пастбище, фирмой Lely разработана автоматическая система выпаса Voyager. Это два мобильных робота, которые соединены между собой токопроводящей проволокой, ограничивающей участок для выпаса животных.

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

Рис. 4. Автоматическая система выпаса Voyager

image

Обратная сторона автоматизации


По прогнозам экспертов, объем рынка сельскохозяйственных роботов к 2024 году достигнет $74,1 млрд. Их производство вырастет почти в 20 раз: до 600 тысяч единиц техники. Ожидается, что в ближайшее время станут доступными ряд инноваций в автоматизации кормления, которые сегодня находятся на этапе испытаний или на стадии разработки прототипов.

Рис. 5. Процесс перехода сельского хозяйства на робототехнику будет стремительным



Однако, как и любые высокотехнологичные решения, роботизированные системы кормления имеют свои недостатки. Самый главный из них — это высокая цена: так, для фермы на 200 коров инвестиции в автоматизацию процесса кормления составят не менее €450–500 тыс. А ведь нужна еще техника для кормозаготовки, склад для кормов, силосные ямы, подъездные пути и коммуникации.

Автоматика нуждается в контроле со стороны человека, который будет наблюдать за ее работой, корректировать рационы и вовремя проводить техническое обслуживание. Использование роботизированных систем в хозяйстве со слабым менеджментом — напрасная трата денег. Ни одно чудо техники не дает результатов, если на установившей его ферме отсутствует грамотный персонал, способный управлять сложными технологическими процессами. К сожалению, статистика по нехватке квалифицированных специалистов для «цифрового» животноводства выглядит удручающе.

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

Еще одна проблема связана с необходимостью перепланировки старых коровников под работу новых автоматических систем. Причем даже после реконструкции многие фермы не могут на 100% соответствовать современным технологическим требованиям.

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

Комментарии (49)


  1. pyur
    07.12.2019 20:23

    я ещё только собираюсь брать быка за рога, но тоже смутила перспектива программировать ESP32 из Arduino IDE, как самая рекомендуемая. искал варианты. ещё советуют VS Code, но к поделкам на Electron'е у меня тоже мало доверия, несмотря на то, что VS Code очень хвалят.
    хотелось что-то вроде привычных Atmel Studio, Visual Studio.
    спасибо вам за содержательную и полезную во многих смыслах статью.


    1. Fox_exe
      07.12.2019 21:19

      Arduino в Visual Studio? Да легко: есть плагин Visual micro.


    1. Gritsuk
      08.12.2019 01:19

      Я в процессе, как раз пытаюсь приручить платку TTGO на основе ESP32. В том материале, которым руководствуюсь, используется Эклипс и соответствующий плагин. Говорят, работает, но у меня пока не вышло:)


      1. romanetz_omsk
        08.12.2019 15:29

        На сайте espressif исчерпывающий мануал. Рекомендую под линуксом пробовать.


    1. Peter1010
      08.12.2019 09:52

      Для vs code есть PlatformIO, очень удобно.


      1. Gritsuk
        08.12.2019 19:04

        Спасибо за совет, удалось прошить плату из VS Code с PlatformIO каким-то тестовым проектом. Проблемы остались — собирается 5 минут, кодировка в терминале не та, но вектор, похоже, верный


        1. Peter1010
          08.12.2019 20:02

          >собирается 5 минут
          Собирается или собирается + заливается? У меня только первая сборка только долгая. А дальше у меня собирается секунд за 30.
          Ещё стоит посмотреть в сторону конфигурации сборки. Я для себя остановился на
          ;Build options
          build_flags = -std=c++14 -Wno-unknown-pragmas


    1. kypluk
      08.12.2019 21:40
      +1

      Посмотрите platformio. Она позволяет генерировать все необходимые настройки для разных ide и редакторов (например clion, vscode начинают просто работать без каких либо расширений), и полезной фичей будет взрослая работа с пакетами ( как pip или npm)


  1. Fox_exe
    07.12.2019 21:24
    +1

    Вместо кучи if/else можно заюзать весьма полезную функцию «map» и менять температуру плавно (если это возможно и целесообразно):

    void calculate_water_temp(void *pvParameters)
    {
    	while (true)
    	{
    		if (heating_mode != 3)
    		{
    			max_water_temp = map(temp_outside, -30, -10, 85, 50);
    		}
    		vTaskDelay(1000 / portTICK_RATE_MS);
    	}
    }


    1. Dimulya
      08.12.2019 14:07

      Спасибо за предложение! Да, вы правы, оно и возможно и целесообразно. И функцию map знакома почти любому ардуинщику по преобразованию AnalogRead в напряжение. Я думал об этом, но потом стало лень вычислять диапазоны для мапинга. Когда ни будь я так и сделаю.


      1. bronskiy
        09.12.2019 08:54
        +1

        т.е. никогда?))


  1. Serge78rus
    07.12.2019 22:31

    Зачем заводить отдельную задачу для сторожевого таймера — если Вам достаточно контролировать только то, что живет RTOS, что у Вас и реализовано, то сторожевой таймер вполне можно сбрасывать и в idle задаче.


    1. Dimulya
      08.12.2019 14:08

      А как к ней обратится? Есть какой то отдельный метод? У нас ведь нет хэндла для idle задачи.


      1. Serge78rus
        08.12.2019 14:37

        В файле настройки опций RTOS — FreeRTOSConfig.h есть макро #define configUSE_IDLE_HOOK, его надо установить в 1. При этом, когда все задачи находятся в состоянии ожидания, RTOS будет вызывать функцию vApplicationIdleHook(), которая обявлена как weak (__attribute__((weak)) для компиляторов gcc и g++, для других может быть как то по другому) и может быть переопределена на пользовательскую.


        1. Dimulya
          09.12.2019 08:55

          Спасибо! Интересная возможность, надо попробовать.


    1. VT100
      08.12.2019 22:55

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


      1. Serge78rus
        09.12.2019 10:18

        Для умеренно критичных к сбоям применений достаточно контролировать именно Idle: если какая-либо задача зависнет, то она не будет попадать в состояние ожидания и, соответственно, Idle задача не будет вызываться, что приведет к срабатыванию ватчдога. Если же задача застрянет в бесконечном состоянии ожидания, то это уже не сбой, а ошибка в логике программы, а бороться с ошибками программиста с помощью сторожевого таймера — порочный путь. Хочу напомнить, что в оригинале у автора сброс ватчдога осуществляется отдельной задачей и никак не контролирует корректность работы других задач, а лишь работу самой ОС.

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


  1. Anrikigai
    08.12.2019 10:05

    Вот это все за неделю? Включая разобраться со средой, отладкой на железе???
    В любом случае очень здорово.
    Пожалуй, только вопросы:
    1) Увидев «FreeRTOS» и «Blynk» в одном флаконе, я сначла подумал, что Blynk будет использоваться не как «черный ящик», а через API. Не было нужды, все и так прекрасно работает?
    Просто сталкиваюсь с проблемами при пропадании Интернета — реконнекты Блинка блокируют все чуть ли не на пол минуты. Не будет ли глюков, если шедулер будет многократно аварийно завершать такие попытки (при гудках и т.п.)?
    Я для отладки просто на роутере блокировал данному хосту Интернет, и через несколько раз наичналась нестабильность.
    2) Насколько отладчик экономит время при написании таких не слишком больших задач по сравнению с обычной отладочной печатью в serial?
    На бесплатном PlatformIO под VScode, насколько я понял, аппаратная отладка становится доступной только при оформлении платной подписки.


    1. Dimulya
      08.12.2019 21:53

      На самом деле неделя рабочего времени это ни мало, ни много, 7*8=56 часов. Занимался я этим по вечерам и выходным, так что месяц то провозился.
      По вопросам:
      1) Проблем нет, всё просто работает. К API Blynk я обращался из кода, для пробы, там ничего сложного, но зачем? :) Что могу сказать по отсутствию инета и реконнектам Blynk, бывает что я забываю заплатить за инет и плата работает без инета, вроде всё в порядке, но я не проверял в это время сработку сигнализации, что бы таски с гудками и морганием работали. На днях попробую поставить дом на охрану и выключить роутер.
      2) Если честно, то не очень то и экономит, может процентов на 10 побыстрее. :) Но сам процесс с использованием отладчика мне нравится больше. Тут дело в том, что в отладке ESP32 средствами VisualGDB не поддерживаются так называемые «живые переменные», это когда можно смотреть значения переменных не останавливая контроллер. Т.е. нужно поставить точку останова, что бы посмотреть, если бы эта фича поддерживалась, было бы прям удобно и быстрее.


      1. safari2012
        09.12.2019 18:06

        Я так делаю, код из обычного настенного выключателя, если blynk или wifi зависает, всё реконнектится автоматически периодичность проверки настраивается (для удобства настройки/отладки вынесено в глобальные переменные), локальная работа выключателя не блокируется. RTOS не использую, есть много удобных механизмов типа диспетчеризации задач типа TimeAlarms. Аптайм несколько лет.

        Заголовок спойлера
        unsigned long                 //  счетчики таймеров для:
              WifiLoopTime = millis(), // проверки wifi 
              BlynkLoopTime = 0;       // проверки коннекта к серверу blynk
        
        setup()
          WiFi.mode(WIFI_STA);
          WiFi.begin();
          WiFi.setAutoReconnect(true);
          Blynk.config("***************", IPAddress(***********), 8442);
          Blynk.connect(1666); // 5sec
        
        loop()
          if (WiFi.status() == WL_CONNECTED)
            {
            if (Blynk.connected())
              Blynk.run();
            else 
              if (millis()> BlynkLoopTime+20000)
              {
               BlynkLoopTime=millis();
               Blynk.connect(1666);
              }
            httpServer.handleClient();
            }
          else
              {
              if (millis()> WifiLoopTime+20000)
                {
                Serial.println("WI-FI Not connected");
                WiFi.mode(WIFI_OFF);
                Serial.println("WI-FI disconnecting");
                WiFi.begin();
                Serial.println("WI-FI connecting.");
                WifiLoopTime=millis();
                }
               else 
                if (millis()> Seconds+1000)
                {
                 Seconds=millis();
                 Serial.print(".");
                }
              }


  1. Anrikigai
    08.12.2019 11:50

    Прошу прощения, я с FreeRTOS пока дела не имел. И, поизучав внимательнее код, удивился, что в smart_home_2019.ino не вижу, к примеру, #include «freertos/FreeRTOS.h». На вид самые обычные инклуды.
    Также не нашел, как в smart_home_2019.ino подцепляются таски (tasks_functions.ino).
    Или на гитхабе только кусочки проекта? Можете пояснить?


    1. Serge78rus
      08.12.2019 12:13

      Также не нашел, как в smart_home_2019.ino подцепляются таски (tasks_functions.ino).
      В конце функции setup() ряд вызовов функций xTaskCreate()


      1. Anrikigai
        08.12.2019 12:22

        Да, вызовы вижу. Я не понимаю, как система без #include знает, что они находятся в tasks_functions.ino
        Вряд ли это зарезериврованное имя файла.
        Ну да ладно, у вас среда разработки другая. У меня ж вообще не .ino, а main.c главный файл…
        Все равно много интересного увидел.


        1. Serge78rus
          08.12.2019 12:47
          +1

          Ну да ладно, у вас среда разработки другая.
          Это не у меня, а у автора. Я ардуиновскими и околоардуиновскими софтверными инструментами не пользуюсь. Полагаю, что часть «магии» просто скрыта от пользователя, ведь подключить заголовочники можно и через опции командной строки компилятора (для gcc и g++ это -include).


          1. Anrikigai
            08.12.2019 12:53

            Да, точно. Зависимости же можно и явно в настроечных файлах указывать…


        1. Dimulya
          08.12.2019 21:57

          А, вы про это. Скорее всего среда разработки считает, что файлы с разрешением ino в одной папке находятся как бы в одном пространстве имён. Такое же поведение и Arduino IDE.
          Но, ссылку на метод для рестарта, который был изначально в из tasks_functions.ino, в smart_home_2019.ino не было видно, пришлось перенести этот метод в smart_home_2019.ino.


    1. Dimulya
      08.12.2019 21:55

      На гитхабе весь код, который написал я. В visual GDB это всё как то компилируется без #include «freertos/FreeRTOS.h» и прочего. Какая то чёрная магия, но всё вроде работает :) Таски подцепляются в конце setup().


      1. kotyara12
        09.12.2019 19:23

        Для ESP32 в ArduinoIDE FreeRTOS подключена «по умолчанию», #include «freertos/FreeRTOS.h» уже не нужен. Пользовательский скетч для ESP32 — это просто задача FreeRTOS, которая запускается на ядре процессора CORE1, на CORE0 выполняется сама RTOS. Для VisualGDB не знаю, но вероятно, реализовано похожим образом.


  1. vortupin
    08.12.2019 14:37

    Практически каждая статья жителя России об «умном доме» (sic!) по своей сути описывает «наколенное изобретательство велосипеда», то-бишь программируемого термостата. Я понимаю, что

    … хотелось поприседать мозгами, пописать что то для души...
    — это основополагающее (а не отсутствие знаний о том, что такие дивайсы уже «сто лет в обед» изобретены и продаются буквально за «копейки» (дешевые варианты, без Alexa и WiFi), но не «стрёмно»-ли писать свой говнокод для подобной, достаточно важной функции? Пусть код и простенький, но без тестирования про-QA я бы, лично, не рискнул.
    Еще вот этот момент удивил:
    управление температурой теплоносителя в зависимости от температуры на улице или вручную
    — а при чем тут улица-то? Вы, часом, не улицу ли греете? :D


    1. Ndochp
      08.12.2019 17:37

      Ну так есть модель дома и его теплоотдачи. Обогреватель в стабильном режиме должен вкачивать столько же джоулей, сколько уходит сквозь стены. А это зависит от уличной температуры. Через температуру в доме это можно мерить, но кажется с большими волнами — чтобы получить управляющий сигнал нужно получить изменение температуры в доме. То есть снизить комфорт жителей.


    1. Anrikigai
      08.12.2019 18:30

      Могу предположить, что если сделать все время низкую температуру теплоносителя, в холод ее будет не хватать. Скажем, если мощность котла недостаточна.
      Но зачем такая точность, почему все время зимой не держать 85 градусов (а летом 70) — тоже не очень понимаю.

      Еще можно аналогию провести с «почему инверторный кндиционер лучше обычного».
      Одно дело большой гистерезис (разница температур между включением и выключением), а другое — плавное регулирование мощности.
      Возможно здесь изменение температуры — такой аналог управления мощностью?
      Но котел все равно ведь вкл/выкл сам делает…

      Ну т.е. разве что избежать слишком частых включений/выключений, что имеет некоторый смысл.


      1. Dimulya
        08.12.2019 22:25

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


    1. Dimulya
      08.12.2019 22:06

      Странный комментарий. Если вам так удобно, считайте что я грею улицу.


      1. vortupin
        09.12.2019 22:50

        Чем он «странный»? Не «страннее», чем очередное «изобретение велосипеда из говна и палок». А вы вообще когда-нибудь дело с обыкновенными, производящимися десятки лет, программируемыми термостатами, имели? (правда, понятное дело, функций «включения сирены» и «управления фонарем» в них нет :)


        1. vsergoog
          10.12.2019 11:29

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


          1. vortupin
            11.12.2019 05:03

            «Какие руки, какие ноги?!» Удав из мультика Какие ссылки? Тут, все-таки, хабр, а не форум для блондинок — запросить google/yandex «программируемый термостат купить» должно уметь 100% посетителей, не говоря уж о «разработчиках микроконтроллерных приложений».

            То, что автору было интересно — я и не сомневался (подобно авторам 99% постов с подобным содержимым — их тут на хабре, как...), что и сразу написал. Удивление вызвало то, что автор данной наколенной поделки меряет… температуру «за бортом». Все, что нужно — это расположить термостат в доме, по возможности, подальше от радиаторов (чтобы измерял, так сказать, «амбиентную температуру» — вот и все, и весь секрет Полишинеля).

            Уже более 15 лет я пользуюсь простенькими программируемыми термостатами от Honeywell. Работают, лучше чем часы (там чаще нужно смазывать — это о grandfather clock, или менять батарейки), раз в три года сменил батареечку — и все. Работают вне зависимости от наличия интернета или электричества. А вот обеспечить аварийное питания для oil boiler-а — это задача, реально заслуживающая внимания (но отнюдь не кустарных поделок на ардуине).

            Про «инфографику» отопления я, с вашего позволения, промолчу, чтобы грязно не ругаться. Вся «инфографика» — это счета за oil (три бака в год уходит примерно); копеечные колебания плюс/минус не в счет, но вот после weatherization (это утепление дома, «халявное», в моем случае) разница была заметна и без «инфографики» — лучший «инфограф» это свой собственный кошелек :)


  1. ser-mk
    08.12.2019 17:57

    При подключении отладчика Windows устанавливает на него неподходящие драйвера, которые необходимо поменять с помощью программы Zadig, там всё просто, не буду описывать.

    Странно у меня все из коробки заработало с этой платой. Вам пришлось переустанавливать драйвера?


    1. Dimulya
      08.12.2019 22:01

      Да, пришлось, Win10.


  1. SimSonic
    08.12.2019 19:30

    Спасибо за статью. Очень вовремя!
    Не более как неделю запустил в ещё пока строящемся доме отопление от котла. Котел умеет как eBUS, так и простой вход З/Р.
    Установщики предлагали систему EktoControl (11к), но я в ней не увидел необходимости.
    Имеется в наличии пара wemos d1 mini pro (v1.1), один ds18b20, решил как раз на этих выходных попробовать сделать управление для котла.
    На си писал давно, но тулинг меня начал убивать :) может я просто зря решил не хватать Ардуино, а попытаться использовать NonOS / RTOS SDK.
    Попробовал по их инструкциям, надо сделать в Windows кучу софта, ок. Не завелось. Попробовал CLion + esp8266 plugin. Ну вроде что-то работало, но подсказки кода нет.
    Сейчас рабочий вариант нашел только VSCode + PlatformIO на основе NonOS. Но расстраивает свежее сообщение в гитхабе, что NonOS всё.


    1. Anrikigai
      08.12.2019 21:18

      VSCode + PlatformIO на основе NonOS

      А почему не VSCode + PlatformIO на основе Ардуино?
      [env:ttgo-t1]
      platform = espressif32
      board = ttgo-t1
      framework = arduino
      Удобного шедулера в NonOS все равно нет. В чем ее прелесть? А так — куча ардуионовских библиотек подходит…


      1. SimSonic
        09.12.2019 05:26

        Оправдаюсь тем, что не знаю в полной мере, что такое Ардуино и вся это железячство. А так как на Си писал, решил, что этот путь может оказаться прямее.

        Сейчас вижу, что, скорее всего, был неправ.

        А с ограничением на таски пока не столкнулся. В целом хочу сделать достаточно простую вещь — временами опрашивать 18b20, по формуле считать когда вкл/выкл котёл, дёргать реле, а заодно отправлять всё измеренное и произошедшее по mqtt.

        Так как в доме не живу, а зимой даже планирую некоторое время его не посещать, хотелось бы знать, что там всё ОКъ — скорее всего куплю самый-самый дешёвый 3g-модем (покрытие норм) с раздачей Wi-Fi.


        1. Dimulya
          09.12.2019 09:02

          Можно ещё датчик движения повесить или концевик на дверь, что бы знать что никто не залез внутрь. Ну и дальше как время/желание позволит — датчик дыма, датчик протечки :) код на все эти вещи несложный. Главное что бы датчики работали норм, иначе долгий дебаг и всё такое.


  1. Redwid
    08.12.2019 22:02

    Самодельный Nest получился.
    А зачем днём поддерживать +20 если дома никого нет?
    ИМХО +16 достаточно, и повышать к желаемой температуре ко времени прихода домой.


    1. Dimulya
      08.12.2019 22:05

      Это можно поменять, в тёплую погоду обычно ставлю меньше. Но вообще, на 3 градуса дом разогревается, почти в любой мороз, за пару часов. Если выставить меньше, то бывает холодновато по приезду.


  1. alievRU
    08.12.2019 22:05
    +1

    Тоже присматриваюсь freertos на esp32. Сейчас работает похожий проект (для гаража сделал), связка: дома — esp32+LoRa и srm32+lora Переодически вылазят какие-то фантомы в данных (раз в сутки или в 2-e), все сделано через loop. Спасибо за реальный пример rtos — сяду перелопачивать!


  1. vsergoog
    10.12.2019 10:44

    Как то однажды мне тоже надоело разглядывать лапшу из arduino кода при добавлении очередного датчика. По этому, вспомнив, что я все-таки программист, написал событийную систему, где каждое устройство, это некий объект, способный передавать сигналы другим объектам. В итоге, получилась довольно легко расширяемая система, в которой отдельно пишутся объекты (датчики или устройства), а отдельно задаются связи между ними. В моем проекте, это делалось при старте, но можно было и на лету.
    Freertos у меня не было, потому как в загашнике валялись только платы arduino uno.
    Реализовал на этом проект поливалки с парой датчиков влажности, дисплеем, кнопками для задания уровней срабатывания датчиков. Потом добавил часы реального времени и управление досветкой растений в зависимости от длинны суток, включалась она утром и вечером. Хотел даже написать статью, но писать статьи для меня сложнее чем писать код. Если вдруг кому то интересно, то проект лежит здесь.
    И да, писать в arduino ide — сущий ад, проще один раз прикрутить qt creator.