- Потрібні компоненти
- Датчик витрати води YFS201
- Кругова діаграма
- Код датчика витрати води Arduino
- Датчик потоку води Arduino працює
Якщо ви коли-небудь відвідували великі виробничі компанії, перше, що ви помітите, це те, що всі вони автоматизовані. Промислові безалкогольні напої та хімічна промисловість повинні постійно вимірювати та вимірювати кількість рідин, з якими вони працюють під час цього процесу автоматизації, а найпоширенішим датчиком, що використовується для вимірювання потоку рідини, є датчик витрати. Використовуючи датчик витрати з мікроконтролером, таким як Arduino, ми можемо розрахувати швидкість потоку, перевірити об’єм рідини, що пройшов через трубу, і контролювати її, якщо потрібно. Окрім обробної промисловості, датчики потоку також можна знайти у сільському господарстві, харчовій промисловості, управлінні водою, гірничодобувній промисловості, переробці води, кавових машинах тощо. Далі, датчик витрати води буде гарним доповненням до таких проектів, як автоматичний дозатор води та розумні зрошувальні системи, де нам потрібно контролювати та контролювати потік рідин.
У цьому проекті ми збираємося створити датчик витрати води за допомогою Arduino. Ми з'єднаємо датчик витрати води з Arduino та LCD, і запрограмуємо його на відображення об'єму води, яка пройшла через клапан. Для цього конкретного проекту ми збираємось використовувати датчик витрати води YF-S201, який використовує ефект Холла для визначення швидкості потоку рідини.
Потрібні компоненти
- Датчик витрати води
- Arduino UNO
- РК-дисплей (16x2)
- З'єднувач із внутрішньою різьбою
- Підключення проводів
- Труба
Датчик витрати води YFS201
Датчик має 3 дроти ЧЕРВОНИЙ, ЖОВТИЙ і ЧОРНИЙ, як показано на малюнку нижче. Червоний провід використовується для напруги живлення в діапазоні від 5 В до 18 В, а чорний провід підключений до GND. Жовтий провід використовується для виведення (імпульсів), який може зчитувати MCU. Датчик витрати води складається з датчика вертушки, який вимірює кількість рідини, яка пройшла через нього.
Робота датчика витрати води YFS201 проста для розуміння. Датчик витрати води працює за принципом ефекту Холла. Ефект Холла - це створення різниці потенціалів в електричному провіднику, коли магнітне поле подається в напрямку, перпендикулярному напрямку потоку струму. Датчик витрати води інтегрований з магнітним датчиком ефекту Холла, який генерує електричний імпульс при кожному оберті. Його конструкція виконана таким чином, що датчик ефекту Холла є закритим від води, і дозволяє датчику залишатися в безпеці та сухості.
Зображення лише модуля датчика YFS201 показано нижче.
Для підключення до труби та датчика витрати води я використав два роз'єми із внутрішньою різьбою, як показано нижче.
Відповідно до специфікацій YFS201, максимальний струм, який він витрачає при 5 В, становить 15 мА, а робочий витрата - від 1 до 30 літрів / хвилину. Коли рідина протікає через датчик, він контактує з ребрами турбінного колеса, яке розміщується на шляху потоку рідини. Вал турбінного колеса з'єднаний з датчиком ефекту Холла. Завдяки цьому, коли вода протікає через клапан, вона генерує імпульси. Тепер нам залишається лише виміряти час плюсів або підрахувати кількість імпульсів за 1 секунду, а потім розрахувати швидкість потоку в літрах на годину (л / год), а потім використати просту формулу перерахунку, щоб знайти об’єм води, що пройшла через нього. Для вимірювання імпульсів ми будемо використовувати Arduino UNO. На малюнку нижче показано розпилювач датчика витрати води.
Кругова діаграма
Схема, ланцюг датчика витрати води, показаний нижче для інтерфейсу датчика витрати води і ЖК (16x2) з Arduino. Якщо ви новачок у Arduino та РК-дисплеях, ви можете прочитати цю статтю про взаємодію Arduino та LCD.
З'єднання датчика витрати води та РК-дисплея (16x2) з Arduino наведено нижче в табличному форматі. Зверніть увагу, що горщик підключений між 5В та GND, а штифт 2 горщика з'єднаний з виводом V0 РК-дисплея.
С.НІ |
Штифт датчика витрати води |
Шпильки Arduino |
1 |
Червоний дріт |
5 В |
2 |
Чорний |
GND |
3 |
Жовтий |
A0 |
С.Ні |
РК-дисплей |
Ардуїно |
1 |
Vss |
GND (рейка макету) |
2 |
VDD |
5 В (позитивна рейка макету) |
3 |
Для зв’язку з V0 перевірте наведену вище примітку |
|
4 |
RS |
12 |
5 |
RW |
GND |
6 |
Е |
11 |
7 |
D7 |
9 |
8 |
D6 - D3 |
Від 3 до 5 |
Я використовував макет, і як тільки підключення було здійснено згідно схеми, показаної вище, моя установка тестування виглядала приблизно так.
Код датчика витрати води Arduino
Повний код датчика витрати води Arduino наведено внизу сторінки. Пояснення коду таке.
Ми використовуємо заголовочний файл РК-дисплея, що полегшує нашу взаємодію РК-дисплея з Arduino, а шпильки 12,11,5,4,3,9 призначені для передачі даних між РК-дисплеєм та Arduino. Вихідний штифт датчика підключений до виводу 2 Arduino UNO.
нестабільна int поточна_частота; // Вимірює імпульси датчика витрати // Розрахований об'єм поплавка літрів / годину = 0,0, l_minute; непідписаний датчик потоку символів = 2; // Вхід датчика unsigned long currentTime; unsigned long cloopTime; #включати
Ця функція є процедурою обслуговування переривань, і вона буде викликатися, коли на піні 2 Arduino UNO буде сигнал переривання. Для кожного сигналу переривання кількість змінної flow_frequency буде збільшена на 1. Щоб отримати докладнішу інформацію про переривання та їх роботу, ви можете прочитати цю статтю про переривання Arduino.
void flow () // Функція переривання { flow_frequency ++; }
У налаштуваннях порожнечі ми повідомляємо MCU, що штифт 2 Arduino UNO використовується як INPUT, даючи команду pinMode (pin, OUTPUT). За допомогою команди attachInterrupt, коли виникає підйом сигналу на виводі 2, викликається функція потоку. Це збільшує кількість змінних flow_frequency на 1. Поточний час і cloopTime використовуються для запуску коду кожні 1 секунду.
void setup () { pinMode (датчик потоку, INPUT); digitalWrite (датчик потоку, HIGH); Serial.begin (9600); lcd.begin (16, 2); attachInterrupt (digitalPinToInterrupt (датчик потоку), flow, RISING); // Налаштування переривання lcd.clear (); lcd.setCursor (0,0); lcd.print ("Витратомір води"); lcd.setCursor (0,1); lcd.print ("Circuit Digest"); currentTime = міліс (); cloopTime = currentTime; }
Функція if гарантує, що кожну секунду код всередині неї працює. Таким чином, ми можемо підрахувати кількість частот, які виробляє датчик витрати води в секунду. Характеристики імпульсу швидкості потоку з таблиці дають, що частота 7,5 помножується на швидкість потоку. Тож швидкість потоку дорівнює частоті / 7,5. Знайшовши швидкість потоку в літрах / хвилину, розділіть її на 60, щоб перетворити в літр / сек. Це значення додається до змінної vol протягом кожної секунди.
недійсний цикл () { currentTime = міліс (); // Щосекунди обчислюємо та друкуємо літри / годину if (currentTime> = (cloopTime + 1000)) { cloopTime = currentTime; // Оновляє cloopTime, якщо (частота_потоку! = 0) { // Частота імпульсів (Гц) = 7,5Q, Q - швидкість потоку в л / хв. l_minute = (частота_потоку / 7,5); // (Частота імпульсів х 60 хв) / 7,5Q = витрата в л / год lcd.clear (); lcd.setCursor (0,0); lcd.print ("Оцінити:"); lcd.print (l_minute); lcd.print ("L / M"); l_minute = l_minute / 60; lcd.setCursor (0,1); vol = vol + l_minute; lcd.print ("Vol:"); lcd.print (vol); lcd.print ("L"); частота_потоку = 0; // Скидання лічильника Serial.print (l_minute, DEC); // Друк літрів / годину Serial.println ("L / Sec"); }
Функція else працює, коли датчик витрати води не виводиться протягом заданого проміжку часу.
else { lcd.clear (); lcd.setCursor (0,0); lcd.print ("Оцінити:"); lcd.print (частота_потоку); lcd.print ("L / M"); lcd.setCursor (0,1); lcd.print ("Vol:"); lcd.print (vol); lcd.print ("L"); }
Датчик потоку води Arduino працює
У нашому проекті ми підключили датчик витрати води до труби. Якщо вихідний клапан труби закритий, вихід датчика витрати води дорівнює нулю (відсутність імпульсів). На піні 2 Arduino не буде сигналу переривання, і кількість потоків_частоти буде нульовим. У цій умові працюватиме код, який записаний всередині циклу else.
Якщо вихідний клапан труби відкритий. Вода тече через датчик, який, у свою чергу, обертає колесо всередині датчика. У цьому стані ми можемо спостерігати імпульси, які генеруються від датчика. Ці імпульси будуть діяти як сигнал переривання для Arduino UNO. Для кожного сигналу переривання (висхідного фронту) кількість змінної flow_frequency буде збільшена на одиницю. Поточний час та змінна cloopTIme гарантують, що для кожної секунди для розрахунку швидкості та обсягу приймається значення частоти_потоку. Після завершення обчислення змінна flow_frequency встановлюється на нуль і вся процедура починається з самого початку.
Повну роботу також можна знайти у відео, на яке посилається внизу цієї сторінки. Сподіваємось, вам сподобався підручник і сподобалось щось корисне. Якщо у вас виникнуть проблеми, залиште їх у розділі коментарів або використовуйте наші форуми для інших технічних питань.