Датчик уровня воды в резервуаре своими руками: схема, компоненты, тесты, программирование на Arduino

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

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

Мы подумали, что с использованием современной электроники можно изменить эту традицию и сделать её более автоматизированной. При помощи нескольких программистских уловок, мы смогли использовать Ардуино и ультразвуковой модуль для измерения расстояния до водной поверхности (I) с достаточной надежностью и точностью до +/- нескольких миллиметров. Это значит, что мы смогли рассчитать объем (V), используя диаметр колодца (D) и его глубину (L) с точностью до +/- 1 литра.

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

  1. Модуль Ардуино в доме — это основной модуль Ардуино. Он отправляет сигнал на Arduino в колодце, получает замеры расстояния и отображает рассчитанный объём оставшейся воды на дисплее.
  2. Модуль Ардуино в колодце и ультразвуковой модуль просто получают сигнал из дома, запускают процесс измерения и отправляют обратно информацию о расстоянии от датчика до воды. Схема встроена в непроницаемую коробку с пластиковой трубкой, прикреплённой к той стороне, где находится ультразвуковой модуль. Трубка нужна для того, чтобы снизить уровень помех, сократив поле зрения датчика таким образом, чтобы ему была видна только вода.

Шаг 1: Компоненты, тесты, программирование

В этом проекте используются следующие компоненты:

  • 2 модуля Ардуино (один для измерения уровня жидкости, второй для отображения результатов на дисплее)
  • Обычная 12V батарейка
  • Ультразвуковой модуль HC-SR04
  • Модуль LED дисплея MAX7219
  • Телефонный кабель — 25 метров, 4 жилы: питание, заземление и 2 провода для данных
  • Коробка для установки электроники
  • Горячий клей
  • Паяльник

Для того, чтобы убедиться, что все работает как надо, мы все спаяли, соединили и проверили «на коленке». В интернете есть много программ, работающих с ультразвуковыми датчиками и дисплеями, так что мы просто использовали то, что нашли в интернете, чтобы проверить, что замеренное расстояние верно (картинка 1) и что мы можем поймать ультразвуковое отражение с поверхности воды (картинка 2). Также мы проверили, что ультразвуковой датчик уровня воды передаёт данные на длинные расстояния, чтобы у нас не было проблем при установке.

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

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

Финальную версию рабочего кода для обеих плат Ардуино можно найти здесь: ссылка

Шаг 2: Общественные работы

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

Шаг 3: Соединяем и устанавливаем все компоненты

Соедините всё также, как при тестировании — всё должно заработать. Помните о том, что пин TX на одном Ардуино соединяется с пином RX на втором модуле, и наоборот. Как видно на картинке 1, для питания модуля Ардуино в колодце, мы использовали обычный телефонный кабель.

На второй и третьей картинке видна пластиковая труба с передатчиком, помещенным за пределы трубки и ресивером, помещенным внутри неё.

Шаг 4: Калибровка

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

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

Заметка: В настоящее время преобразование времени-расстояния не корректируется при изменении скорости звука из-за колебаний температуры. Это будет хорошим дополнением в будущих доработках, так как температура в колодце заметно меняется.

Игорь Самоделов
Игорь Самоделов

Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.

2 комментария
  1. Игорь 2019-04-26 at 13:56

    Почему использовали 2 модуля Ардуино?
    Можно обойтись одним и по 4х-проводному кабелю (питание, trig, echo) соединить его с УЗ-модулем?

    Ответить

  2. Игорь 2019-04-26 at 14:03

    Не могли бы помочь с переделой скетча под один модуль Ардуино?

    Ответить

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

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