- Компоненти
- Ультразвуковий модуль датчика
- Робота автоматичного регулятора рівня води
- Принципова схема та пояснення
- Програмування
У цьому проекті автоматичного індикатора та контролера рівня води на базі Arduino ми збираємось вимірювати рівень води за допомогою ультразвукових датчиків. Основний принцип ультразвукового вимірювання відстані базується на ECHO. Коли звукові хвилі передаються в навколишнє середовище, вони повертаються назад до місця початку як ECHO після удару по будь-якій перешкоді. Отже, нам потрібно лише розрахувати час його подорожі для обох звуків, що означає вихідний час і час повернення до місця початку після нанесення на будь-яку перешкоду. І після деяких обчислень ми можемо отримати результат, який є відстанню. Ця концепція використовується в нашому проекті регулятора води, де насос водяного двигуна автоматично включається, коли рівень води в баку стає низьким. Ви також можете перевірити цю просту схему індикатора рівня води на більш просту версію цього проекту.
Компоненти
- Arduino Uno
- Модуль ультразвукового датчика
- РК-дисплей 16x2
- Реле 6 Вольт
- ULN2003
- 7806
- PVT
- Мідний дріт
- 9-вольтовий акумулятор або 12-вольтадаптор
- Підключення проводів
Ультразвуковий модуль датчика
Ультразвуковий датчик HC-SR04 використовується для вимірювання відстані від 2 см до 400 см з точністю до 3 мм. Модуль датчика складається з ультразвукового передавача, приймача та схеми управління.
Модуль ультразвукового датчика працює над природним явищем ECHO звуку. Імпульс надсилається протягом приблизно 10us для спрацьовування модуля. Після чого модуль автоматично посилає 8 циклів ультразвукового сигналу 40 кГц і перевіряє його відлуння. Сигнал після удару перешкодою повертається назад і приймається приймачем. Таким чином, відстань перешкоди від датчика просто обчислюється за формулою, поданою як
Відстань = (час х швидкість) / 2.
Тут ми поділили добуток швидкості та часу на 2, оскільки час - це загальний час, який потрібно було дістатися до перешкоди та повернутися назад. Таким чином, час досягнення перешкоди становить лише половину від усього часу, який потрібно.
Робота автоматичного регулятора рівня води
Робота з цим проектом дуже проста, ми використовували ультразвуковий модуль датчика, який надсилає звукові хвилі у резервуар для води та виявляє відображення звукових хвиль, що є ECHO. Перш за все нам потрібно запустити модуль ультразвукового датчика для передачі сигналу за допомогою Arduino, а потім дочекатися отримання ECHO. Arduino зчитує час між спрацьовуванням та отриманим ECHO. Ми знаємо, що швидкість звуку становить близько 340 м / с. так що ми можемо розрахувати відстань за наведеною формулою:
Відстань = (час у дорозі / 2) * швидкість звуку
Де швидкість звуку становить приблизно 340 м на секунду.
За допомогою цих методів ми отримуємо відстань від датчика до поверхні води. Після нього нам потрібно розрахувати рівень води.
Тепер нам потрібно розрахувати загальну довжину резервуара для води. Оскільки ми знаємо довжину резервуара для води, тоді ми можемо розрахувати рівень води, віднімаючи отриману відстань від ультразвуку від загальної довжини резервуару. І ми отримаємо відстань рівня води. Тепер ми можемо перетворити цей рівень води у відсотки води і відобразити його на РК-дисплеї. Робота повного проекту показників рівня води показана на нижченаведеній блок-схемі.
Принципова схема та пояснення
Як показано в схемі регулятора рівня води, наведеній нижче, висновки модуля ультразвукового датчика "тригер" і "ехо" безпосередньо підключені до виводів 10 і 11 arduino. РК-дисплей 16x2 підключений до arduino в 4-розрядному режимі. Керуючий штифт RS, RW та En безпосередньо підключені до pin 7, GND і 6. Arduino. А контакт D4-D7 підключений до 5, 4, 3 і 2 Arduino, а зумер підключений до контакту 12. 6 реле напруги також підключений на штифті 8 arduino через ULN2003 для ввімкнення або вимкнення водяного насоса. Регулятор напруги 7805 також використовується для подачі 5 вольт на реле та решту ланцюга.
У цій схемі ультразвуковий модуль датчика розміщений у верхній частині відра (резервуару для води) для демонстрації. Цей модуль датчика зчитує відстань між модулем датчика та водною поверхнею, а на РК-екрані відображатиме відстань із повідомленням «Водяний простір у баку:». Це означає, що ми тут показуємо порожнє місце відстані або об’єму для води замість рівня води. Через цю функціональність ми можемо використовувати цю систему в будь-якому резервуарі для води. Коли рівень порожньої води сягає відстані близько 30 см, Arduino вмикає водяний насос за допомогою реле. І зараз на РК-дисплеї відображатиметься „НИЗКИЙ рівень води” „Мотор увімкнено”, а світлодіодний індикатор стану реле почне світитися
Тепер, якщо порожній простір сягає відстані близько 12 см. Arduino вимикає реле, і на РК-дисплеї з'являється повідомлення "Бак заповнений" "Двигун вимкнено". Звуковий сигнал також деякий час подаватиме звуковий сигнал, а світлодіодний індикатор стану реле вимкнеться.
Програмування
Щоб запрограмувати Arduino для контролера рівня води, спочатку ми визначаємо всі контакти, які ми будемо використовувати в проекті для взаємодії зовнішніх пристроїв, таких як реле, РК-дисплей, зумер тощо.
#define trigger 10 #define echo 11 #define motor 8 #define зумер 12
Потім ми ініціалізуємо всі пристрої, що використовуються в проекті.
lcd.begin (16,2); pinMode (тригер, ВИХІД); pinMode (ехо, ВХІД); pinMode (двигун, ВИХІД); pinMode (зумер, ВИХІД); lcd.print ("Рівень води"); lcd.setCursor (0,1); lcd.print ("Індикатор"); затримка (2000);
Тепер ініціалізуйте модуль ультразвукового датчика та зчитуйте час надсилання та прийому часу ультразвукових хвиль або звуку за допомогою pulseIn (контакт) Потім виконайте обчислення та відображте результат на РК-дисплеї 16x2 за допомогою відповідних функцій.
digitalWrite (тригер, HIGH); delayMicroseconds (10); digitalWrite (тригер, LOW); delayMicroseconds (2); time = pulseIn (echo, HIGH); відстань = час * 340/20000; lcd.clear (); lcd.print ("Water Space In"); lcd.setCursor (0,1); lcd.print ("Танк:"); lcd.print (відстань); lcd.print ("См");
Після цього ми перевіряємо умови, заповнений резервуар для води або рівень води НИЗКИЙ, і вживаємо відповідних заходів.
if (відстань <12 && temp == 0) {digitalWrite (двигун, LOW); digitalWrite (зумер, HIGH); lcd.clear (); lcd.print ("Бак для води повний"); lcd.setCursor (0,1); lcd.print ("Двигун вимкнено"); затримка (2000); digitalWrite (зумер, LOW); затримка (3000); temp = 1; } ще if (відстань <12 && temp == 1) {digitalWrite (двигун, LOW); lcd.clear (); lcd.print ("Бак для води повний"); lcd.setCursor (0,1); lcd.print ("Двигун вимкнено"); затримка (5000); }