- Необходимые компоненты
- Датчик расхода воды YFS201
- Принципиальная электрическая схема
- Код датчика расхода воды Arduino
- Датчик расхода воды Arduino работает
Если вы когда-либо посещали крупные производственные компании, первое, что вы заметите, это то, что все они автоматизированы. Производство безалкогольных напитков и химическая промышленность должны постоянно измерять и определять количество жидкостей, с которыми они работают во время этого процесса автоматизации, и наиболее распространенным датчиком, используемым для измерения потока жидкости, является датчик потока.. Используя датчик потока с микроконтроллером, таким как Arduino, мы можем рассчитать скорость потока, проверить объем жидкости, прошедшей через трубу, и при необходимости контролировать его. Помимо обрабатывающей промышленности, датчики расхода также можно найти в сельском хозяйстве, пищевой промышленности, управлении водными ресурсами, горнодобывающей промышленности, оборотном водоснабжении, кофеварках и т. Д. Кроме того, датчик расхода воды станет хорошим дополнением к таким проектам, как автоматический дозатор воды. и интеллектуальные системы орошения, где нам нужно отслеживать и контролировать поток жидкостей.
В этом проекте мы собираемся построить датчик расхода воды на Arduino. Мы подключим датчик расхода воды к Arduino и ЖК-дисплею и запрограммируем его на отображение объема воды, прошедшей через клапан. Для этого конкретного проекта мы собираемся использовать датчик расхода воды YF-S201, который использует эффект Холла для измерения расхода жидкости.
Необходимые компоненты
- Датчик расхода воды
- Arduino UNO
- ЖК-дисплей (16x2)
- Соединитель с внутренней резьбой
- Соединительные провода
- Труба
Датчик расхода воды YFS201
Датчик имеет 3 провода: КРАСНЫЙ, ЖЕЛТЫЙ и ЧЕРНЫЙ, как показано на рисунке ниже. Красный провод используется для подачи напряжения от 5 до 18 В, а черный провод подключается к земле. Желтый провод используется для вывода (импульсов), который может быть прочитан MCU. Датчик расхода воды состоит из вертушечного датчика, который измеряет количество жидкости, прошедшей через него.
Принцип работы датчика расхода воды YFS201 прост для понимания. Датчик расхода воды работает по принципу эффекта Холла. Эффект Холла - это создание разности потенциалов в электрическом проводнике при приложении магнитного поля в направлении, перпендикулярном направлению потока тока. Датчик расхода воды интегрирован с датчиком на магнитном эффекте Холла, который генерирует электрический импульс при каждом обороте. Его конструкция такова, что датчик на эффекте Холла изолирован от воды и позволяет датчику оставаться сухим и безопасным.
Изображение только сенсорного модуля YFS201 показано ниже.
Для соединения с трубкой и датчиком расхода воды я использовал два соединителя с внутренней резьбой, как показано ниже.
Согласно спецификациям YFS201, максимальный ток, который он потребляет при 5 В, составляет 15 мА, а рабочий расход от 1 до 30 литров / минуту. Когда жидкость проходит через датчик, она контактирует с ребрами турбинного колеса, которое находится на пути протекающей жидкости. Вал турбинного колеса соединен с датчиком Холла. Из-за этого всякий раз, когда вода проходит через клапан, он генерирует импульсы. Теперь все, что нам нужно сделать, это измерить время для плюсов или подсчитать количество импульсов за 1 секунду, а затем рассчитать скорость потока в литрах в час (л / час), а затем использовать простую формулу преобразования, чтобы найти объем воды, прошедшей через него. Для измерения импульсов мы будем использовать Arduino UNO. На рисунке ниже показана распиновка датчика расхода воды.
Принципиальная электрическая схема
Схема, цепь датчика расхода воды, показан ниже для интерфейса датчика расхода воды и ЖК (16x2) с Arduino. Если вы новичок в Arduino и ЖК-дисплеях, вы можете прочитать эту статью о взаимодействии Arduino и ЖК-дисплеев.
Подключение датчика расхода воды и ЖК-дисплея (16x2) к Arduino приведено ниже в виде таблицы. Обратите внимание, что потенциометр подключен между 5 В и GND, а контакт 2 потенциометра соединен с контактом V0 ЖК-дисплея.
S.NO |
Штифт датчика расхода воды |
Контакты Arduino |
1 |
Красный провод |
5В |
2 |
Черный |
GND |
3 |
Желтый |
A0 |
S.No |
ЖК-дисплей |
Ардуино |
1 |
Vss |
GND (шина заземления макета) |
2 |
VDD |
5 В (положительная шина макета) |
3 |
Для связи с V0 проверьте примечание выше. |
|
4 |
RS |
12 |
5 |
RW |
GND |
6 |
E |
11 |
7 |
D7 |
9 |
8 |
D6 в D3 |
От 3 до 5 |
Я использовал макетную плату, и после того, как соединение было выполнено в соответствии с принципиальной схемой, показанной выше, моя тестовая установка выглядела примерно так.
Код датчика расхода воды Arduino
Полный код датчика расхода воды Arduino приведен внизу страницы. Пояснение к коду следующее.
Мы используем файл заголовка ЖК-дисплея, который упрощает взаимодействие ЖК-дисплея с Arduino, а контакты 12,11,5,4,3,9 предназначены для передачи данных между ЖК-дисплеем и Arduino. Выходной контакт датчика подключен к контакту 2 Arduino UNO.
volatile int flow_frequency; // Измеряет импульсы датчика расхода // Рассчитанные литры / час float vol = 0.0, l_minute; unsigned char flowsensor = 2; // Ввод датчика без знака long currentTime; unsigned long cloopTime; #включают
Эта функция представляет собой процедуру обслуживания прерывания, и она будет вызываться всякий раз, когда есть сигнал прерывания на выводе 2 Arduino UNO. Для каждого сигнала прерывания счетчик переменной flow_frequency будет увеличиваться на 1. Подробнее о прерываниях и их работе вы можете прочитать в этой статье о прерываниях Arduino.
void flow () // Функция прерывания { flow_frequency ++; }
В настройке void мы сообщаем MCU, что контакт 2 Arduino UNO используется как INPUT, давая команду pinMode (pin, OUTPUT). Используя команду attachInterrupt, всякий раз, когда сигнал на выводе 2 возрастает, вызывается функция потока. Это увеличивает счетчик в переменной flow_frequency на 1. Текущее время и cloopTime используются для запуска кода каждую 1 секунду.
void setup () { pinMode (датчик потока, ВХОД); digitalWrite (датчик потока, ВЫСОКИЙ); Serial.begin (9600); lcd.begin (16, 2); attachInterrupt (digitalPinToInterrupt (датчик потока), поток, Восход); // Настраиваем прерывание lcd.clear (); lcd.setCursor (0,0); lcd.print («Расходомер воды»); lcd.setCursor (0,1); lcd.print («Электронный дайджест»); currentTime = миллис (); cloopTime = currentTime; }
Функция if гарантирует, что код внутри нее запускается каждую секунду. Таким образом, мы можем подсчитать количество частот, генерируемых датчиком расхода воды в секунду. Характеристики импульса расхода из таблицы даны, что частота равна 7,5, умноженная на расход. Таким образом, расход составляет частота / 7,5. Найдя расход в литрах в минуту, разделите его на 60, чтобы перевести в литры в секунду. Это значение добавляется к переменной vol каждую секунду.
недействительный цикл () { currentTime = миллис (); // Каждую секунду вычисление и печать литров в час if (currentTime> = (cloopTime + 1000)) { cloopTime = currentTime; // Обновляет cloopTime if (flow_frequency! = 0) { // Частота импульсов (Гц) = 7,5Q, Q - расход в л / мин. l_minute = (частота_потока / 7,5); // (Частота импульсов x 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); объем = объем + л_минут; lcd.print ("Vol:"); lcd.print (vol); lcd.print ("L"); flow_frequency = 0; // Сброс счетчика Serial.print (l_minute, DEC); // Распечатать литры / час Serial.println ("L / Sec"); }
Функция else работает, когда в течение заданного промежутка времени нет выходного сигнала от датчика расхода воды.
еще { lcd.clear (); lcd.setCursor (0,0); lcd.print ("Оценить:"); lcd.print (flow_frequency); lcd.print ("L / M"); lcd.setCursor (0,1); lcd.print ("Vol:"); lcd.print (vol); lcd.print ("L"); }
Датчик расхода воды Arduino работает
В нашем проекте мы подключили датчик расхода воды к трубе. Если выходной клапан трубы закрыт, выходной сигнал датчика расхода воды равен нулю (нет импульсов). На выводе 2 Arduino не будет сигнала прерывания, и счетчик flow_frequency будет равен нулю. В этом состоянии код, который написан внутри цикла else, будет работать.
Если выходной клапан трубы открыт. Вода проходит через датчик, который, в свою очередь, вращает колесо внутри датчика. В этом состоянии мы можем наблюдать импульсы, которые генерируются датчиком. Эти импульсы будут действовать как сигнал прерывания для Arduino UNO. Для каждого сигнала прерывания (нарастающий фронт) счет переменной flow_frequency будет увеличиваться на единицу. Текущее время и переменная cloopTIme гарантируют, что каждую секунду значение flow_frequency будет использоваться для вычисления расхода и объема. После завершения расчета переменная flow_frequency устанавливается в ноль, и вся процедура запускается с начала.
Полную работу также можно найти в видео, ссылка на которое находится внизу этой страницы. Надеюсь, вам понравилось это руководство, и вам понравилось что-то полезное. Если у вас возникнут проблемы, оставьте их в разделе комментариев или используйте наш форум, чтобы задать другие технические вопросы.