Ультразвуковий контроль рівня води на мікроконтролері 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» (Двигун вимкнений).

Оригінал статті

Прикріплені файли:

Top