[Из песочницы] Разработка и эксплуатация ультразвукового сенсора наполнения бака

Предисловие

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

Постановка задачи


Задача была поставлена ранней весной — вместе с приобретением в питомнике 120 кустов малины. Как известно, малина очень отзывчива к поливу, но одновременно не любит и избытка воды. Поэтому было решено из подручных материалов собрать систему, которая бы решала следующие вопросы:

1. Управление погружным вибрационным насосом.
2. Измерение уровня воды в 220 литровой бочке.
3. Включение электромагнитного клапана по запросу — начало полива. Отключение производится по сигналу от измерителя уровня воды.
4. По завершению цикла полива запуск цикла заполнения бочки. Отключение производится по сигналу от измерителя уровня воды.

Состав оборудования


 — US-100 — ультразвуковой измеритель расстояния. Старший брат знаменитого HC-SR04. Главное отличие — наличие температурной компенсации и возможность работы в режиме передачи данных по UART. По точности сравнить мне их не удалось ввиду отсутствия HC-SR04.
 — Плата, оборудованная микропроцессором STM8S003F3P6.
 — LCD 2×16, совместимый с HD44780.
 — HLK-PM01 — блочный малогабаритный источник питания типа AC-DC. Входное напряжение 220В переменного тока, выходное 5В 600 мА постоянного тока.
 — Электромагнитный клапан с установочным диаметром 3\4 на напряжение 24В постоянного тока. Потребляемый ток достигает 2 А.
 — Корпус для основного прибора.
 — Корпус для ультразвукового сенсора. Исполнение этого корпуса IP67, и как показала практика, такое исполнение было выбрано не напрасно.

Средства разработки


Хочу сразу сказать, что я являюсь счастливым владельцем двух замечательных плат Arduino Mini. Но увы — ардуинизация сознания для меня закончилась тогда, когда оказалось, что даже с использованием операционной системы реального времени данная плата ну никак не желает работать в качестве Modbus RTU slave с тайм-аутами меньше 100 мсек на скорости 57,6 кБит при запросе всего 64 регистров и при этом делать хоть какую-то полезную работу. Именно поэтому была выбрана плата на платформе STM8 с гораздо меньшим количеством ресурсов. В качестве среды программирования и отладки был выбран IAR Embedded Workbench for STM8. Данная среда прекрасно работает с программатором — отладчиком ST-LINK V2. Программатор имеет интерфейс USB и подключается к отлаживаемому изделию всего 4-мя проводами. При этом зачастую тока от отладчика достаточно для питания отлаживаемой платы. Я немного старомоден, и поэтому мне нравится иметь возможность онлайн — отладки. Я просто хочу видеть, что делает мой код в режиме исполнения. Этот подход не раз экономил время и деньги.

Операционная система


Интересный факт: известный российский зодиакальный производитель выпускает ПЛК без операционной системы реального времени.

В самом начале пути я встал перед выбором — использовать или нет операционную систему реального времени для микропроцессора, обладающими такими ресурсами. И выбор был сделан весьма неожиданный — ChibiOS RT v2.6.9. Не буду в этой публикации рассматривать все особенности этой системы — только отмечу, что создание двух потоков с одинаковыми приоритетами заняло 2547 байт флеш — памяти и 461 байт оперативной. Собственно, немало —, но результатом этой потери стало то, что теперь я имею 8 — разрядный недорогой микроконтроллер, который управляется операционной системой реального времени. И следовательно, я могу управлять исполнением моих задач так, как мне необходимо.

Ход работ: сборка прототипа и написание программы


Сборка прототипа прошла достаточно быстро, особых проблем не возникало. Что получилось в результате, показано на картинке ниже:
image

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

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

image

Ход работ: монтаж и запуск системы


Для монтажа было выбрано строение, расположенное в непосредственной близости от объекта управления. Как я говорил выше, никакой защиты от атмосферных осадков не было предусмотрено. В конце концов, затяжной ливень сделал своё дело —, но об этом немного позже. Ниже на картинке показана установка ультразвукового датчика.
image

Устройство управляет включением системы капельного полива, причём управляется от программируемого логического контроллера. Контроллер имеет встроенную шину 1-wire с возможностью подключения до 128 устройств на один коммуникационный порт. Датчик влажности комбинированный, емкостный, работает на частоте 80 МГц и имеет как раз интерфейс 1-wire. Вместе с влажностью передаёт величину освещённости на уровне установки сенсора. Данные устройства в этой публикации не рассматриваются.

Ход работ: эксплуатация


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

Ход работ: проблемы и решения


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

Несмотря на то, что вода прозрачная, она оказалась достаточно агрессивной для стенок железной бочки. Бочка начала ржаветь, и результат вы видите ниже. Решение оказалось простым — берём и красим бочку изнутри в два слоя прочной эмалью.
image

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

image
Решение тоже простое — как известно, для развития водорослей необходим солнечный свет. Просто накрываем бочку непрозрачным материалом. Мне не удалось полностью прекратить доступ света, и поэтому раз в месяц необходима профилактическая промывка емкости.

Но решение одной проблемы вызывает появление другой — на накрывающем покрытии стал собираться конденсат. И если бы не исполнение IP67 сенсора, то очень быстро блок пришёл бы в негодность. К слову сказать, несмотря на кажущуюся нежность конструкции, ультразвуковой датчик показал себя весьма положительно. Но пришлось его доработать- поставить кольцевой отражатель для того, чтобы компенсировать ложные эхо — сигналы на некоторых дистанциях. По видимому, эхо-сигналы появляются в результате отражения пачки звуковых импульсов от стенок бочки. В моём случае эта дистанция составила 230–250 мм.

Заключение: дальнейший путь


Как я упомянул выше, ливень поздней осенью прекратил тестирование — резкий хлопок ознаменовал собой выход из строя терминального соединителя питания 220 В. Да и наступило то время года, когда отпала необходимость в самом устройстве.

Анализируя полученный материал, я пришёл к неожиданному выводу — нет необходимости в приборе в таком виде. Если доработать сам сенсор, и дать ему доступ к стандартным протоколам обмена типа modbus rtu — то можно будет управлять прямо из программы контроллера, не используя никаких промежуточных звеньев. Я также рассматривал вариант использования шины 1-wire —, но передачу 4-х 16 разрядных величин лучше делать на более скоростном варианте протокола обмена.

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

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

  • 28 октября 2016 в 12:24

    0

    Не совсем понял заключение, в следующей версии вы планируете отказаться от промежуточного контроллера (STM8) и подключить к вибрационному насосу непосредственно сенсор US-100? Планируете написать для него новую прошивку (нашёл фото сенсора, но не понял, какой там стоит контроллер) для поддержки нужного протокола?
    • 28 октября 2016 в 12:34

      0

      Немного сумбурное получилось заключение…
      Следующая версия — это датчик уровня воды, который будет использовать всё тот же ультразвуковой сенсор US-100.
      На плате сенсора имеется МК, но я просто добавлю к нему ещё один- дополнительный.
      В качестве дополнительного я применю уже STM32 — просто STM8 с 2-мя UART стоит едва ли не больше. А согласитесь, 32 разрядный CPU это намного приятнее в использовании. Тем более, что для STM32 у меня уже для новой версии ОС (ChibiOS/RT 16.1.1) имеются отлаженные и проверенные библиотеки для modbus rtu slave, как раз с поддержкой работы через драйвера операционной системы.
      И опять же, использую ОСРВ и обязательно гальваническую развязку для шины RS-485.
  • 28 октября 2016 в 12:24

    0

    Ультразвуковой датчик избыточен. Достаточно и поплавка с магнитом и герконом. Причём геркон будет надёжнее.
    • 28 октября 2016 в 12:25

      0

      Совершенно верно — для просто наполнения бочки избыточен. А вот для обеспечения хитрых режимов полива, когда я по уровню рассчитываю дозу воды — как раз то, что надо. Ведь при наличии обратной связи по влажности и правильно настроенном алгоритме полив включается примерно через 30 минут, и при этом работает всего 2–4 минуты.

© Habrahabr.ru