История создания проекта.

TinyOneWireNet

Этой публикацией я начинаю цикл статей о моем новом крупном проекте в области систем сбора информации, автоматизации технологических процессов, выращивания растений и т.п.

Навигация по рубрике    Следующая статья

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

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

Разработка первого сетевого устройства с интерфейсом TinyOneWireNet.

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

контроллер гроубокс

контроллер выращивания растений

В качестве датчика влажности почвы в нем использовался популярный сенсор такого типа.

датчик влажности почвы

Практически, это единственный доступный емкостной датчик на Али Экспресс. Контактные измерители влажности почвы серьезные потребители даже не рассматривают.

Недостатков у этого датчика много.

  • Радиальный интерфейс с 3мя проводами. Т.е. 3 отдельных провода к каждому датчику.
  • Ограниченная длина связи (несколько см).
  • Необходимость в центральном контроллере иметь отдельный канал АЦП для каждого датчика.
  • Низкая разрешающая способность и точность. Значительная температурная погрешность.
  • Параметры калибровки должны храниться и обрабатываться в центральном контроллере. При замене датчиков их необходимо корректировать.

Практически использовать несколько таких датчиков в моем контроллере не представлялось возможности или вело к значительному усложнению устройства. Необходимо много аналоговых входов контроллера, много разъемов подключения датчиков.К каждому датчику, т.е. к контейнеру с грунтом, должны быть проложены по 3 провода.

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

Я решил бросить вызов миру и создать идеальный датчик влажности почвы. А заодно и поставить коммерческий эксперимент.

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

До серийного выпуска и продажи дело пока не дошло, но все остальное получилось.

Вот как выглядит принципиальная схема моего датчика влажности почвы. Это полная схема!

схема датчика TinyOneWireNet

Микросхема PIC12F1822 стоит 50 руб. Если покупать штучно. Стоимость остальных 2 компонентов  меньше 1 рубля.

Со временем к схеме добавился один диод, хотя замечательно работает и без него.

В Китае заказал печатные платы для датчика в том же форм-факторе, как у устройств с Али Экспресс.

емкостные датчики влажности почвы TinyOneWireNet

И еще вариант с крышкой, закрывающей электронные компоненты.

емкостные датчики влажности почвы TinyOneWireNet

Параметры и функциональные возможности датчика, пока в общих чертах.

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

подключение датчиков в сеть TinyOneWireNet

Устройство создавалось, как емкостной датчик влажности почвы, но получилось нечто более универсальное.

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

При своей простоте измеритель емкости имеет высокие параметры:

  • широкий диапазон преобразования ( 0,6 … 38000 пкФ );
  • высокую точность и разрешающую способность ( 0,6 пкФ );
  • используется цифровая фильтрация для измеряемого кода, а также вычисление из него относительного значения параметра.

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

Длительность импульса измеряется с точностью 0,0625 мкс. В качестве источника заряда измеряемой емкости используется напряжение питания, а порог срабатывания компаратора формируется из того же напряжения резисторным делителем. Таким образом, изменение напряжения питания не влияет на точность измерения емкости.

Диапазон измерения емкости (0,6 – 3800 пкФ) определяется сопротивлением заряжающего резистора (100 кОм) и может быть изменен выбором резистора с другим сопротивлением.

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

Устройство выводит результат измерений в виде:

  • кода;
  • длительности импульса;
  • емкости;
  • относительной влажности с откалиброванными нижним (0%) и верхним (100%) значениями.

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

Устройство также измеряет температуру через внутренний датчик PIC-контроллера. Датчик температуры неточный, показывает температуру ориентировочно.

В режиме ожидания устройство потребляет ток 0,5 мА. При измерении он увеличивается до 0,6 мА. Таким образом, датчики могут быть подключены непосредственно к выводу микроконтроллера и получать питание от него. Вот пример организации сети для Ардуино.

подключение датчиков TinyOneWireNet к Ардуино

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

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

  • Логическая адресация сети позволяет использовать на одной линии связи до 64х датчиков.
  • Адрес контроллера содержится во внутреннемEEPROMи загружается специальной командой после снятия блокировки записи адреса через идентификатор, уникальный для каждого устройства. Своеобразный MAC-адрес.
  • Целостность данных запросов и ответов защищена циклическим кодом.

Разработал библиотеку Ардуино (TinyNet_SoilMoistureSensor) , которая поддерживает все функции устройства.

Вот методы библиотеки.

TinyNet_SoilMoistureSensor(uint8_t pin) конструктор
voidonLine() включение линии связи
voidoffLine() выключение линии связи
void sendByte(uint8_t bt) послать байт в сеть
uint8_t receiveByte() получить байт из сети
uint8_t crc8(const uint8_t *addr, uint8_t len) вычисление контрольного кода
uint8_t dataTest(uint8_t adr, uint8_t bt) тест данных контроллера
void addressProg(uint8_t adr) программирование адреса
uint8_t startMeasurement(uint8_t adr, uint8_t averaging) запуск измерения влажности
uint8_t readMeasurement(uint8_t adr, uint16_t * code) чтение результата измерений влажности (код)
uint8_t readHumidity(uint8_t adr, float * hum) чтение результата измерений влажности (%)
void loadCoeffHum0(uint8_t adr, uint16_t cf) загрузка коэффициента влажности 0%
void loadCoeffHum100(uint8_t adr, uint16_t cf) загрузка коэффициента влажности 100%
uint8_t readCoeffHum0(uint8_t adr, uint16_t * cf) чтение коэффициента влажности 0%
uint8_t readCoeffHum100(uint8_t adr, uint16_t * cf) чтение коэффициента влажности 100%
uint8_t startMeasurementTempFvr(uint8_t adr, uint8_t mode) Запуск измерения температуры и FVR
uint8_t readCodeTemp(uint8_t adr, uint16_t * res) чтение результата измерений температуры (код)
uint8_t readCodeFvr(uint8_t adr, uint16_t * res) чтение результата измерений FVR (код)
void calculateTempAndV(uint8_t mode, uint16_t tempCode, uint16_t fvrCode, float * temp, float * voltage ) пересчет кодов температуры и FVR в температуру и напряжение питания
void loadOffsetFvr(uint8_t adr, int8_t offset) загрузка OFFST для FVR
void loadOffsetTemp(uint8_t adr, int8_t offset) загрузка OFFST для температуры
uint8_t readOffsetFvr(uint8_t adr, int8_t * offset) чтение OFFST для FVR
uint8_t readOffsetTemp(uint8_t adr, int8_t * offset) чтение OFFST для температуры
uint8_t readDeviceType(uint8_t adr, uint8_t * dev, uint8_t * soft) чтение типа устройства и версии ПО
uint8_t readUniqueIdent(uint8_t adr, uint32_t * ident) чтение уникального идентификатора устройства
uint8_t addressLoadPermission(uint8_t adr, uint32_t ident) разрешение загрузки адреса по уникальному идентификатору

С помощью библиотеки на одном микроконтроллере Ардуино может быть создано несколько линий для подключения датчиков.

Для испытаний разработал программы мониторинга для компьютера и платы Ардуино.

испытание датчиков TinyOneWireNet

Провел испытания на даче.

испытание датчиков TinyOneWireNet

В качестве линии связи использовал провод от триммера длиной 40 м. Подключил 3 датчика, задал режим диагностики обмена. За пол дня ни единой ошибки.

Конструкция механической части датчика простая и, как следствие, он имеет невысокую выходную емкость. Тем не менее, диапазон выходного кода для сухого и мокрого датчика получился 9 … 870 единиц кода. Разрешающая способность примерно 8,6 единиц кода на один процент или 0,12 %.

Стабильность измерения емкости я проверял на стабильном конденсаторе. Подключил старый слюдяной конденсатор емкостью 1000 пкФ. Уже неделю показания 1664-1665.

С использование измерителя могут быть созданы датчики различных форм-факторов для измерения влажности и уровня жидкости.

Устройство повторил мой друг из Латвии. Он использовал его для измерения влажности ковриков, от которых растения питаются влагой.  Он подключал 5 датчиков на расстояние 50 м.

Дальнейшее развитие проекта.

Как я писал выше, датчики влажности почвы подключаются к микроконтроллеру по 2х проводной линии, от которой они получают питание. Т.е. организуется миниатюрная локальная сеть. Но эта сеть может объединять до 64х устройств, имеет защиту целостности данных циклическим кодом, MAC-адреса и т.п.

Для нее я разработал собственный протокол, который назвал TinyOneWireNet (крошечная сеть с одним сигналом).

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

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

общий узел TinyOneWireNet

Осталось добавлять к нему минимальное количество компонентов, чтобы получать другие сетевые устройства. Конечно, необходимы дополнительные  узлы, формирующие сети TinyOneWireNet из других интерфейсов и протоколов ModBusRTU, ModBusTCP, MQTT и т.п.

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

В следующей статье расскажу о концептуальных принципах системы и текущем состоянии проекта.

Навигация по рубрике    Следующая статья

0

Автор публикации

не в сети 1 день

Эдуард

280
Комментарии: 1936Публикации: 197Регистрация: 13-12-2015

2 комментария на «История создания проекта.»

    • Здравствуйте!
      Именно в Латвии сейчас организуется производство для Европы. Сообщу вам о текущем состоянии. В ближайшее время выложу конвертер WiFi с формированием регистров ModBus TCP.

      0

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".