Ультразвуковой контроль уровня воды на микроконтроллере 8051

Ультразвуковой контроль уровня воды на микроконтроллере 8051

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

Ультразвуковой модуль HC-SR04

HC-SR04 представляет собой ультразвуковой дальномерный модуль. HC-SR04 состоит из ультразвукового передатчика, приемника и необходимых электронных компонентов для создания автономной системы. Принцип работы устройства очень простой. Устройство посылает 8 импульсов звуковых волн с частотой 40 кГц и принимает отраженную волну. Далее измеряется временная задержка между отправленным и принятым сигналом, и происходит вычисление расстояния по формуле D=TS/2, где D – это расстояние, Т – временная задержка и S – скорость звукового сигнала. На выходе модуля HC-SR04 появляется импульс с шириной, пропорциональной расстоянию. Из даташита ясно, что ширина выходного сигнала составляет около 58 мкс для расстояния 1 см. Все, что нам нужно сделать, так это отправить сигнал срабатывания длительностью 10 мкс на вывод срабатывания модуля (trigger) и ожидать появление выходного сигнала на эхо выходе (echo) модуля. Временная диаграмма и сигналы на выходах модуля показаны ниже.

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

Электрическая схема

Вывод Trigger ультразвукового модуля подключается к выводу P3.0 микроконтроллера. Вывод Echo к выводу P3.1 микроконтроллера. Линии данных LCD модуля подключаются к портам Port0 микроконтроллера. Линии управления «RS», «RW» и «E» LCD модуля подключаются к выводам P2.7, P2.6 и P2.5 соответственно. Работа насоса контролируется с помощью вывода Port 2.0 микроконтроллера. В проекте используется насос напряжением 12 В от омывателя лобового стекла автомобиля. В проекте может использоваться насос, работающий от стандартной электрической сети, однако при его использовании нужно соблюдать особую осторожность, чтобы избежать опасности электрического удара.

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

Подобную проблему можно решить путем измерения уровня от верхней метки до нижней метки. При этом устройство активирует насос, когда уровень воды падает ниже 20 см от верхней метки и отключает насос, когда уровень поднимается на 5 см от верхней метки. Уровень воды отображается на LCD дисплее и показывает фактическое значение глубины от поверхности воды до верхней метки. В данном проекте наиболее целесообразно использовать резервуары глубиной 1,5 метра.

Описание программы

Вывод микроконтроллера P3.0 используется для активации ультразвукового модуля HC-SR04, а вывод P3.1 для получения ответного сигнала (echo). В проекте задействованы оба таймера микроконтроллера 8051. Timer1 работает в режиме MODE2 (автоперезагрузка 8 бит) и Timer0 (16 бит) работает в режиме MODE1. Сигнал длительностью 10мкс представлен на выводе trigger ультразвукового датчика, и микроконтроллер ожидает на эхо сигнал с вывода echo модуля. Вывод Echo и P3.1 микроконтроллера соединены вместе. Состояние данного вывода контролируется с использованием инструкции JNB. Когда будет получен действительный сигнал на данном выводе, то таймер Timer1 активируется. Таймер просчитывает с 200D до 255D (55 отсчетов) и далее перебрасывает свое состояние. После каждого перебрасывания состояния происходит повторная проверка вывода echo и таймер перезапускается, если присутствует любой сигнал echo. При каждом перебрасывании состояния аккумулятор инкрементируется, и данный цикл повторяется, пока сигнал echo не пропадет.

Из даташита модуля HC-SR04 известно, что эхо импульс шириной 58 мкс обозначает 1 см. Поэтому мы фактически считаем блоки шириной 58 мкс в эхо сигнале и подсчитанный сигнал будет означать найденное расстояние в сантиметрах. Поскольку микроконтроллер тактируется кварцевым генератором частотой 12 МГц, то 55 отсчетов будет означать 55 мкс. Другие инструкции выполняются во время каждого цикла таймера, что занимает 3 мкс и в итоге мы получаем, что при каждом цикле таймера проходит 58 мкс. Результат счета в аккумуляторе указывает расстояние в сантиметрах.

Далее необходимые операции выполняются над значением аккумулятора, и оно отображается на LCD дисплее. При выполнении программного кода происходит включение насоса, когда уровень воды падает на 20 см (низкий уровень) ниже верхней метки и отключение насоса, когда уровень поднимает на 5 см от верхней метки (высокий уровень). Условия включение идентифицируется путем вычитания значения 20D от значения аккумулятора. Если флаг переноса не установлен, тогда это означает, что уровень воды ниже 20 см от верхней метки и двигатель насоса включается.

Если флаг переноса не установлен, тогда происходит вызов подпрограммы OFF (ОТКЛЮЧЕНИЕ). В данной подпрограмме значение 5D вычитается из сохраненного значения в аккумуляторе, и состояние флага переноса проверяется с использованием инструкции JNC. Если флаг переноса не установлен, то это означает, что уровень ниже от верхней метки на 5 см и насос остается включенным. Если флаг переноса установлен, то это означает, что уровень выше на 5 см от верхней метки и насос отключается.

Работа насоса контролируется через вывод P2.0 микроконтроллера. Состояние данного вывода проверяется с помощью инструкции JB. Если на выводе P2.0 присутствует высокий потенциал, то это означает, что насос включен и на дисплее отображается сообщение «Motor ON» (Двигатель включен). Если на выводе P2.0 присутствует низкий потенциал, то это означает, что насос выключен и на дисплее отображается сообщение «Motor OFF» (Двигатель выключен).

Устройство для контроля уровня воды – уровнемер, бакомер: ультразвуковой датчик + микроконтроллер

Я большой любитель русской бани. Летом прошлого года, принимая банные процедуры, я остался без холодной воды. Почему так получилось? Дело в том, что бак для холодной воды установлен на чердаке бани.
Воду, в бак закачиваем насосом, а сливается она самотеком по трубам. Контролировать количество воды, как при наполнении, так и при использовании задача непростая – бак скрыт под крышей бани. По струе воды тоже сложно определить, сколько воды осталось – я не определил .
Нужно устройство для контроля уровня воды – уровнемер.

Содержание / Contents

  • 1 Метод измерения
  • 2 Датчик
  • 3 Схема
  • 4 Конструктив
  • 5 Передняя панель
  • 6 Монтаж датчика
  • 7 Описание работы
  • 8 Калибровка
  • 9 Описание работы и видео в действии
  • 10 Файлы (обновлено 05-04-2014):
  • 11 Заключение

↑ Метод измерения

↑ Датчик

Датчик представляет из себя печатную плату. На которой установлены передающий и приёмные пьезоэлементы. На плате собрана схема формирования зондирующей пачки импульсов с частотой 40кГц, которая подается на драйвер, выполненный на преобразователе уровня TTL в RS232.
Да-да, вот такое необычное применение. Не совсем правильное, но дешевое и работоспособное решение позволяющее обойтись без дополнительного высокого напряжения для раскачки излучающего пьезоэелемента. Также плата содержит усилитель для приемного пьезоэлемента и небольшой управляющий микроконтроллер. У датчика четыре ножки управления: питание +5 Вольт (VCC), вход запуска (Trig), выход (Echo), и земля (GND).

Читайте также  Детектор проводки под напряжением

На вход Trig мы подаем импульс 10 мкС, на выходе Echo, при получении датчиком эхо-сигнала (отражения), будет сформирован импульс длительностью пропорциональной времени прохождения звука от датчика до отражателя и обратно. Это время мы делим на два и умножаем на скорость звука в воздухе, среднее значение 340 м/с – получаем расстояние до отражателя (объекта). Ниже диаграмма работы датчика.

↑ Схема

↑ Конструктив



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

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


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

↑ Передняя панель


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

↑ Монтаж датчика


Корпус закрепил на крышке бака.

Просверлил отверстия для установки датчика.


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

↑ Описание работы

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

↑ Калибровка

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

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

После калибровки уровней переходим к вводу объема бака. Кнопкой «Наполнить» меняем значение разряда, а кнопкой «Слить» меняем разряд и так все четыре разряда по очереди. В калибровке предусмотрены две блокировки. Не критическая – если объем не введен, то устанавливается объем 100, соответственно отображение будет в процентах или в литрах, если бак при этом на сто литров. Вторая — критическая блокировка, поскольку расположение датчика у нас верхнее, то значение верхнего уровня не может быть больше нижнего.
В этом случае прибор калибровку не проходит, а просто отображает дистанцию.

↑ Описание работы и видео в действии

После успешной калибровки прибор отображает объем воды в литрах и уровень в десятках процентов на линейке светодиодов. Также становятся доступными функции наполнения и слива бака. В приборе предусмотрено автоматическое наполнение, которое неактивно после подачи питания. Для активации автоматического наполнения необходимо нажать кнопку «Наполнить» после чего бак наполнится на 90%.

При наполнении бака, уровень на светодиодной линейке будет отображаться как при зарядке аккумулятора в телефоне. Повторное наполнение включиться автоматически при отпускании уровня ниже 10%. Наполнение бака можно запускать в любой момент. Для остановки наполнения нужно нажать кнопку «Слить» во время наполнения. Функция слива предусмотрена для вывода бака из эксплуатации на зимний период. Может быть, и не очень нужная функция, прибор опытный трудно вот так все сразу продумать, пускай пока будет.

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

Вот собственно и все, смотрим демо-видео.


↑ Файлы (обновлено 05-04-2014):

Схема, плата, даташиты: ▼ Shema-plata-datashity.7z 467,61 Kb ⇣ 255
Файл прошивки для варианта на led-индикаторах: ▼ TankControl-led-hex-05042014.7z 4,28 Kb ⇣ 208

↑ Заключение

Хотя на дворе уже весна, но дачный сезон еще не наступил, поэтому придется подождать, пока можно будет начать пользоваться баком. Более того, мне еще долго не придется использовать прибор в полном объеме, так как в старой бане нет постоянно подключенного водоснабжения, а новую я еще не достроил.
Но смотреть уровень уже можно.
:yahoo:

Камрад, рассмотри датагорские рекомендации

Полезные и проверенные железяки, можно брать

Куплено и опробовано читателями или в лаборатории редакции.

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

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

Контроллер уровня воды

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

9-уровневый индикатор верхнего водяного бака

9-уровневый индикатор верхнего резервуара для воды, проект www.edgefxkits.com

9-уровневый индикатор верхнего резервуара для воды используется для отображения уровня воды в верхнем резервуаре с помощью 7-сегментный дисплей . Блок-схема проекта показана на рисунке ниже, который состоит из различных блоков, таких как блок питания, резервуар для воды, кодер приоритета, транзистор, декодер BCD на 7 сегментов, 7-сегментный дисплей и т. Д.

Блок-схема 9-уровневого индикатора верхнего резервуара для воды, разработанная www.edgefxkits.com

Датчик размещается таким образом, чтобы клемма заземления датчика находилась на дне резервуара, и на основе сигналов датчика, отправленных на кодировщик приоритета . Кодер будет генерировать выходные данные BCD, которые подаются в BCD на 7-сегментный декодер. Таким образом, 7-сегментный дисплей используется для отображения количества воды или уровня воды в резервуаре с использованием шкалы от 0 до 9. Этот проект может быть дополнительно расширен с помощью автоматического включения или выключения двигателя для поддержания необходимого уровня воды в верхнем резервуаре. .

Хотите самостоятельно сконструировать регулятор уровня воды в домашних условиях?

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

Индикатор уровня верхнего водяного бака

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

Три NPN транзисторы и резисторы используются в этом проекте вместе с датчиками уровня воды для анализа уровня воды путем включения светодиодов в порядке возрастания. Этот проект может быть дополнительно расширен для управления моторным насосом, который используется для перекачивания воды в верхний водяной бак, который можно назвать автоматическим контроллером уровня воды с использованием микроконтроллера 8051.

Читайте также  Остронаправленный высокочувствительный микрофон

Контроллер уровня воды на основе ультразвукового датчика с использованием микроконтроллера 8051

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

Блок-схема проекта регулятора уровня воды от www.edgefxkits.com

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

В блок питания состоит из трансформатора, используемого для понижения напряжения с 230 В до 12 В переменного тока, выпрямительного моста, используемого для выпрямления напряжения (преобразования переменного напряжения в постоянное), регулятора напряжения IC 7805, используемого для поддержания постоянного выходного напряжения для схемы. Эта проектная схема состоит из микроконтроллера и компонентов, для которых требуется постоянное напряжение около 5 В, следовательно, блок питания используется для получения необходимого питания в цепи.

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

Проект контроллера уровня воды от www.edgefxkits.com

“как преобразовать цифру в аналоговую ”

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

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

Сообщества › Электронные Поделки › Блог › Индикатор уровня воды

Конструкция выходного дня ставшая неожиданно востребованной. Несмотря на обилие подобных схемотехнических решений в данном устройстве микроконтроллер используется намеренно – стоит копейки и есть у каждого радиолюбителя и в каждом магазине радиодеталей. Чего не скажешь о теряющей популярность КМОП “логике” и пр. “рассыпухе”. Дело в том, что авторы подобных схем зачастую просто “выкручиваются из ситуации”, когда нужно во что бы то ни стало сделать индикатор уровня из того, что под рукой. Таким образом, интернет завален схемами подобных устройств на различных “диковинных” микросхемах и специализированных транзисторах, которые имеются только у того, кто их (схемы) придумал. Именно с такой ситуацией в свое время столкнулся я сам, когда не нашел нужные микросхемы для повторения схемы с интересующим меня функционалом. Поэтому пришлось самостоятельно разработать схему на самом “народном” микроконтроллере.

Особенности устройства и краткие характеристики:

Дешевый и доступный микроконтроллер ATtiny13A в DIP-корпусе;
Индикация 3-уровней воды 2-мя светодиодами;
Измерение 3-уровней воды 2-мя электродами;
Звуковое сопровождение индикации “высокого” уровня;
Низкий уровень (внимание) – мигает красный светодиод:
Средний уровень (норма) – горит зеленый светодиод;
Высокий уровень (авария) мигает красный светодиод и сопровождается звуковым сигналом;
Высокая чувствительность устройства позволяет использовать его для контроля даже грязной воды, влажности почвы и пара;
Потребляемый ток не более тока потребляемого примененным светодиодом (т.е. около 20мА);
Напряжение питания 3-30В;
Текущий уровень воды индицируется соответствующим светодиодом (другие не горят);
Защита от переполюсовки.

Схема. Классическая для подключения такого типа МК. Защита от переполюсовки сделана на диоде включенном последовательно с “питанием”. Помимо основного входа “питания” (через стабилизатор напряжения) имеется вход 5V для питания устройства от 5-вольтового блока питания, например “зарядника” от сот. телефона. Пищалка-зуммер 5-вольтовая, включается транзистором, поэтому может быть любой.
Настройка схемы не требуется, устройство начинает работать сразу после прошивки МК.

При необходимости уменьшить (“загрубить”) чувствительность входов нужно уменьшить сопротивление подтягивающих резисторов входов электродов HI и MID. В одном случае, из-за обильного парообразования в расширительном баке, мне пришлось уменьшить сопротивление этих резисторов до 4.7кОм.

Низкий уровень индицируется когда ни один электрод не касается воды. Подразумевается, что рашир. бак металлический и “общий” провод прикручивается непосредственно к баку. Иначе (как на фото ниже) потребуется 3 электрода. Когда электрод MID касается воды индикация переключается в реж. “норма”. Так будет до тех пор пока электрод MID в воде или пока воды не коснется еще и электрод HI – тогда индицируется высокий уровень.

Плата. Односторонняя, разведена в DipTrace 3.0. Все компоненты для поверхностного монтажа. Светодиоды и зуммер припаиваются с торца платы – для удобства вывода индикации из корпуса готового устройства. Платы готовых устройств покрыты тонированным цапон-лаком. Шелкография на верхней стороне платы выполнена ЛУТ, как, впрочем, и вся плата.

В последнее время на Драйве стало «модно» выкладывать свои ваяния без схемы или без прошивки. Модератор сообщества упорно это поощряет. Но, нужно отдать должное, поощряет он и возможность заработать на том, что сделано своими руками. За что — спасибо. Скачать исходники к статье можно здесь. Всем спасибо, нападайте — я готов к критике. Заранее прошу не умничать «диванных экспертов» — я с вами разговаривать не буду. Конструктивная критика «по делу» приветствуется.

Контроль уровня жидкости ультразвуковым дальномером

Дешёвые ультразвуковые дальномеры (HC-SR04 и им подобные) можно использовать для измерения уровня жидкостей в сосудах. Зачастую это получается проще и надёжнее, чем использование поплавковых, резистивных, ёмкостных и других традиционных датчиков уровня.

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

Я разработал блок измерения и поддержания уровня жидкости в баке на базе ультразвукового измерителя дальности HC-SR04, принцип работы которого подробно изложен в [1]. Этот блок применён на дачном участке для поддержания уровня воды в баке умывальника и бочке для полива растений. На одном из предприятий он поддерживает необходимый уровень дизельного топлива в расходной ёмкости и нормально работает более года. К сожалению, блок не сертифицирован, поскольку процедура сертификации занимает очень много времени, а затраты на неё гораздо больше, чем на приобретение любого зарубежного аналога.

Рис. 1. Схема блока

Схема блока изображена на рис. 1. В каждом рабочем цикле, повторяющемся каждую секунду, микроконтроллер DD1 трижды запускает измеритель дальности B1, генерируя импульсы Trig длительностью 15 мкс, и получает импульсы Echo с задержкой, пропорциональной длительности распространения ультразвукового импульса от передатчика до поверхности жидкости в баке и обратно к приёмнику. Программа измеряет задержку с помощью таймера TMR1, настроенного так, что по окончании счёта число в его регистрах TMR1H и TMR1L равно длительности задержки отражённого импульса в микросекундах. Зная его, можно определить заполненность бака Q в процентах по формуле

где NTMR1 — результат счёта (число в регистрахTMR1H и TMR1L); Ht — глубина бака(расстояние от места установки измерителя до дна), мм; k -коэффициент, пропорциональный скорости звука в воздухе, при скорости 331,8 м/с он равен 16,59. Но контрольные измерения показали, что более точные результаты получаются при k=17.

Программа рассчитывает коэффициент заполнения бака после каждого из трёх измерений, выполняемых с интервалами 200 мс. Их результаты она присваивает переменным Q1, Q2 и Q3. Затем проводит их мажоритарный отбор для выявления ошибочного результата. Такая обработка показала свою надёжность при контроле заполнения открытой бочки, когда влияние на результаты оказывают насекомые, падающие листья и механические воздействия на бочку. Для измерений в закрытых баках этот алгоритм избыточен.

Читайте также  Твердотельное реле своими руками

Полученное в каждом цикле значение Q при работе в автоматическом режиме сравнивается с нижним порогом Qmin (при Q Qmax блок выключает насос). Управляет насосом реле K1, именно от возможностей его контактов зависит допустимая мощность насоса.

Блок питается постоянным напряжением 12 В и потребляет ток не более 95 мА. Микроконтроллер DD1 управляет ЖКИ HG1 (одна строка из 16 символов) через сдвиговый регистр DD2. Это дало возможность занять управлением ЖКИ минимальное число выводов микроконтроллера.

Программа написана на языке ассемблера и отлажена в среде MPLABX4.15. В ней использованы вычисления с плавающей запятой (формат чисел с плавающей запятой — один байт порядок и два байта мантисса). Нажатия на кнопки SB1 и SB2 обрабатываются по прерываниям.

Поскольку в знакогенераторе ЖКИ PC1601BC нет символов кириллицы, сообщения выводятся на английском языке. Общение с оператором происходит через систему меню ME_0- ME_5. Их перебирают нажатиями на

кнопку SB1, выбирая нужное меню нажатием на кнопку SB2, при этом на экране ЖКИ появляется курсор. Выходят из меню МЕ_0 и МЕ_1 нажатием на кнопку SB2, из МЕ_2-МЕ_4 — одновременным нажатием на кнопки SB1 и SB2. Из МЕ_5 программа выходит автоматически по окончании записи в EEPROM.

В меню МЕ_2-МЕ_4 значение параметра увеличивается при нажатии на кнопку SB1 (с ускорением после восьмого шага), а при нажатии на кнопку SB2 оно уменьшается (также с ускорением после восьмого шага).

Меню имеют следующие функции и вид:

МЕ_0 — ручное управление насосом. На экран ЖКИ выводится сообщение «Pump OFF Qw=XX%» (насос выключен) или «Pump ON Qw=XX%» (насос включён), где XX — измеренный коэффициент заполнения бака. Каждое нажатие на кнопку SB1 включает или выключает насос.

МЕ_1 — автоматическое управление насосом. На экран выводится сообщение «AutoQwYQw=XX%». Буква «Y» означает, что насос включён. В противном случае она отсутствует.

МЕ_2 — установка порога включения насоса. На экран ЖКИ выводится сообщение «Set min Qw=XX%», где XX — значение коэффициента заполнения при уровне жидкости, меньше которого насос будет включён.

МЕ_3 — установка порога выключения насоса. На экран выводится сообщение «Set max Qw=XX%» , где XX — значение коэффициента заполнения при уровне жидкости, больше которого насос будет выключен.

МЕ_4 — установка глубины бака. На экран выводится сообщение «Set Ht = ZZZmm «, где ZZZ — глубина бака, мм.

МЕ_5 — запись параметров в EEPROM микроконтроллера. На экран ЖКИ выводится сообщение «EEPROM Set OFF». По окончании записи вместо OFF будет выведено YYY

Блок смонтирован на печатной плате из фольгированного с одной стороны стеклотекстолита, чертёж которой показан на рис. 2. Её помещают в пластмассовый корпус подходящего размера с вырезанным в нём окном для экрана индикатора HG1. На одной из стенок корпуса размещают кнопки SB1 и SB2. Излучатель и приёмник ультразвука модуля HC-SR04 должны выступать из корпуса. Прибор необходимо зафиксировать в верхней части бака (выше максимально возможного уровня жидкости), направив излучателем и приёмником ультразвука вниз.

Рис. 2. Чертёж печатной платы блока

Реле K1 — 4117-C-Z с обмоткой на 12 В. Предельный коммутируемый его контактами ток — 10 А, максимальное коммутируемое переменное напряжение — 380 В. У меня такое реле управляет электродвигателем насоса мощностью 1,5 кВт. При необходимости это реле можно заменить на 51.9.012.0000, но печатную плату под него придётся корректировать.

Резистор R1 и конденсатор C2 — для поверхностного монтажа типоразмеров соответственно 1206 и 0805. Оксидный конденсатор C1 — К50-6, К50-35 или импортный. Транзистор КТ315Г можно заменить другим структуры n-p-n с допустимым током коллектора не менее 0,15 А и коэффициентом передачи тока базы больше 40. Диод Шотки SS14 можно заменить любым, в том числе обычным кремниевым диодом с допустимым прямым током больше рабочего тока обмотки применённого реле и обратным напряжением не менее 15. 20 В.

Так как АЦП микроконтроллера программа не использует, микроконтроллер PIC16F676-I/P можно заменить на PIC16F630-I/P, но потребуется небольшая корректировка программы. Сдвиговый регистр 74HC164N можно заменить на К561ИР2. ЖКИ PC1601BC при необходимости может быть без изменения схемы подключения заменён одним из более распространённых символьных ЖКИ, имеющих две строки по 16 символов. Это позволит выводить на его экран более информативные сообщения. При наличии в знакогенераторе ЖКИ русских букв англоязычные сообщения можно заменить русскоязычными. Запас программной памяти для подобных усовершенствований в применённом микроконтроллере есть (используется 77 %).

Перед началом использования блока нужно установить в меню ME_2-ME_4 значения верхнего порога, нижнего порога и глубины бака. Затем записать их в EEPROM, выбрав меню ME_5.

Программа микроконтроллера имеется здесь.

1. Нечаев И. Ультразвуковой дальномер HC-SR04 без микроконтроллера. Часть 1. Сигнализаторы присутствия. — Радио, 2018, № 4, с. 59-62.

2. Кухлинг Х. Справочник по физике. — М.: МИР, 1983.

Автор: В. Баранов, г. Санкт-Петербург

Мнения читателей

Нет комментариев. Ваш комментарий будет первый.

Вы можете оставить свой комментарий, мнение или вопрос по приведенному выше материалу:

Как сделать индикатор уровня воды с помощью Arduino

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

Когда может пригодиться?

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

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

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

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

Как работает индикатор уровня воды Arduino?

Этот индикатор уровня воды Ардуино использует ультразвуковой датчик или, по-другому, Ping датчик для определения уровня воды в баке. Датчик Ping измеряет расстояние, используя гидролокатор.

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

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

Комплектующие

По традиции переходим к комплектующим, набор деталей довольно большой:

1 Микроконтроллер ATMega328P или плата Arduino
1 HC-SR04 ультразвуковой модуль (также известный как датчик PING)
1 10K резистор
1 Кристалл 16 МГц
2 22pf дисковые конденсаторы
Провода-перемычки
1 Регулятор LM7805 5V
1 9В батарея и разъем
1 Электролитический конденсатор 10uF
1 Макетная плата (или печатная плата)
1 Инструмент для зачистки проводов

Схема соединений

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

Скетч для Ардуино

Скопируйте прилагаемый ниже скетч в Arduino IDE и найдите строку «int d = 18;» и измените «18» на глубину вашего резервуара в сантиметрах.

Загрузите код для индикатора уровня воды Arduino непосредственно на плату Arduino или в микроконтроллер ATMega328P.

Ультразвуковой датчик и водный резервуар

Закрепите датчик так, чтобы он непосредственно смотрел на воду в баке. Основная плата управления со светодиодами может быть закреплена внутри дома в любом удобном положении. Любые многожильные кабели (Ethernet-кабель) могут использоваться для соединения датчика и остальной части схемы.

Теперь просто подключите аккумулятор (питание) и ваш индикатор уровня воды Ардуино готов к использованию.