В данном проекте описывается простое устройство контроля уровня воды на базе ультразвукового модуля и микроконтроллера 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» (Двигатель выключен).
Прикрепленные файлы:
- water_level.asm (10 Кб)