- Необходими компоненти
- YFS201 Сензор за воден поток
- Електрическа схема
- Код на сензора за воден поток Arduino
- Сензорът за воден поток Arduino работи
Ако някога сте посещавали големи мащабни производствени компании, първото нещо, което ще забележите, е, че всички те са автоматизирани. Индустриите за безалкохолни напитки и химическата промишленост трябва постоянно да измерват и количествено определят течностите, с които работят по време на този процес на автоматизация, а най-често срещаният сензор, използван за измерване на потока на течността, е датчик за потока. Използвайки датчик за поток с микроконтролер като Arduino, можем да изчислим скоростта на потока и да проверим обема на течността, преминала през тръба, и да я контролираме, както е необходимо. Освен в преработващата промишленост, сензори за дебит могат да бъдат намерени и в селскостопанския сектор, хранителната промишленост, управлението на водите, минната промишленост, рециклирането на вода, кафе машините и др. Освен това сензорът за воден поток ще бъде добро допълнение към проекти като Автоматичен диспенсер за вода и интелигентни напоителни системи, където трябва да наблюдаваме и контролираме потока на течности.
В този проект ще изградим сензор за воден поток, използвайки Arduino. Ще свържем сензора за воден поток с Arduino и LCD и ще го програмираме да показва обема на водата, преминала през клапана. За този конкретен проект ще използваме сензора за воден поток YF-S201, който използва ефект на Хол, за да усети дебита на течността.
Необходими компоненти
- Сензор за воден поток
- Arduino UNO
- LCD (16x2)
- Конектор с вътрешна резба
- Свързващи проводници
- Тръба
YFS201 Сензор за воден поток
Сензорът има 3 проводника ЧЕРВЕН, ЖЪЛТ И ЧЕРЕН, както е показано на фигурата по-долу. Червеният проводник се използва за захранващо напрежение, което варира от 5V до 18V, а черният проводник е свързан към GND. Жълтата жица се използва за изход (импулси), които могат да бъдат разчетени от MCU. Сензорът за водния поток се състои от сензор за въртене, който измерва количеството течност, преминало през него.
Работата на сензора за воден поток YFS201 е лесна за разбиране. Сензорът за водния поток работи на принципа на ефекта на Хол. Ефектът на Хол е създаването на потенциална разлика в електрически проводник, когато се прилага магнитно поле в посока, перпендикулярна на посоката на потока на тока. Сензорът за водния поток е интегриран с магнитен сензор за ефект на Хол, който генерира електрически импулс при всеки оборот. Дизайнът му е по такъв начин, че сензорът на ефекта на Hall да е затворен от водата и позволява на сензора да остане в безопасност и суха.
Картината само на сензорния модул YFS201 е показана по-долу.
За да се свържа с тръбата и сензора за воден поток, използвах два съединителя с вътрешна резба, както е показано по-долу.
Според спецификациите на YFS201, максималният ток, който тегли при 5V, е 15mA, а работният дебит е от 1 до 30 литра / минута. Когато течността тече през сензора, той осъществява контакт с ребрата на турбинното колело, което е поставено по пътя на течащата течност. Валът на турбинното колело е свързан със сензор за ефект на Хол. Поради това, когато водата тече през клапана, тя генерира импулси. Всичко, което трябва да направим, е да измерим времето за плюсовете или да преброим броя на импулсите за 1 секунда и след това да изчислим скоростта на потока в литър на час (L / Hr) и след това да използваме проста формула за преобразуване, за да намерим обема на водата, преминала през него. За измерване на импулсите ще използваме Arduino UNO. Снимката по-долу ви показва щифта на сензора за водния поток.
Електрическа схема
Схемата на схемата на датчика за воден поток е показана по-долу, за да свърже датчик за воден поток и LCD (16x2) с Arduino. Ако не сте запознати с Arduino и LCD, можете да помислите да прочетете тази статия за Arduino и LCD.
Връзката на сензора за водния поток и LCD (16x2) с Arduino е дадена по-долу в табличен формат. Имайте предвид, че гърнето е свързано между 5V и GND, а щифтът на гърнето 2 е свързан с щифта V0 на LCD.
S.NO |
ПИН на сензора за воден поток |
Arduino Pins |
1 |
Червена жица |
5V |
2 |
Черен |
GND |
3 |
Жълто |
A0 |
S.No |
LCD |
Arduino |
1 |
Vss |
GND (земна шина на макет) |
2 |
VDD |
5V (положителна шина на борда) |
3 |
За връзка с V0 проверете горната бележка |
|
4 |
RS |
12 |
5 |
RW |
GND |
6 |
Е. |
11. |
7 |
D7 |
9 |
8 |
D6 до D3 |
3 до 5 |
Използвах макет и след като свързването беше извършено съгласно схемата, показана по-горе, моята тестова настройка изглеждаше по следния начин.
Код на сензора за воден поток Arduino
Пълният код на Arduino за датчика на водния поток е даден в долната част на страницата. Обяснението на кода е както следва.
Използваме заглавния файл на LCD дисплея, който улеснява нашето свързване на LCD дисплея с Arduino, а щифтовете 12,11,5,4,3,9 са отредени за трансфер на данни между LCD и Arduino. Изходният щифт на сензора е свързан с щифт 2 на Arduino UNO.
изменчива int поточна_честота; // Измерва импулсите на датчика за дебит // Изчислени литри / час поплавък vol = 0.0, l_minute; неподписан сензор за поток = 2; // Вход на сензора unsigned long currentTime; неподписано дълго cloopTime; #include
Тази функция е рутинна услуга за прекъсване и тя ще се извиква всеки път, когато има сигнал за прекъсване на pin2 на 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 (датчик за потока), поток, 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 за всяка секунда.
цикъл void () { currentTime = милис (); // Всяка секунда изчислявайте и отпечатвайте литри / час if (currentTime> = (cloopTime + 1000)) { cloopTime = currentTime; // Актуализира cloopTime, ако (честота_поток! = 0) { // Честота на импулсите (Hz) = 7.5Q, Q е дебит в L / min l_minute = (честота_честота / 7.5); // (Честота на импулсите x 60 минути) / 7.5Q = дебит в L / час 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 (обем); 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 (обем); lcd.print ("L"); }
Сензорът за воден поток Arduino работи
В нашия проект ние свързахме датчика за водния поток към тръба. Ако изходният клапан на тръбата е затворен, изходът на датчика за водния поток е нула (без импулси). Няма да има сигнал за прекъсване, който се вижда на извода 2 на Arduino, и броят на потока_честота ще бъде нула. В това състояние кодът, който е написан в цикъла else, ще работи.
Ако изходният клапан на тръбата е отворен. Водата тече през сензора, който от своя страна завърта колелото вътре в сензора. В това състояние можем да наблюдаваме импулси, които се генерират от сензора. Тези импулси ще действат като сигнал за прекъсване към Arduino UNO. За всеки сигнал за прекъсване (нарастващ ръб) броят на променливата flow_frequency ще се увеличи с един. Текущото време и променливата cloopTIme гарантират, че за всяка секунда стойността на flow_frequency се взема за изчисляване на дебита и обема. След като изчислението приключи, променливата flow_frequency се задава на нула и цялата процедура се стартира от самото начало.
Пълната работа може да се намери и във видеото, свързано в долната част на тази страница. Надявам се, че ви е харесал урокът и сте се радвали на нещо полезно, ако имате някакви проблеми, моля, оставете ги в раздела за коментари или използвайте форумите ни за други технически въпроси.