цифровая электроника
вычислительная техника
встраиваемые системы

 



Arduino и датчик расхода воды

Автор: Mike(admin) от 1-02-2019, 06:55

Проект с Arduino и датчиком потока воды


Мониторинг потока жидкости очень важен в различных областях применения, таких как системы полива растений, фармацевтическое и пищевое производство. Датчики расхода воды – это простые устройства, которые могут помочь нам в измерении потока жидкости. В этом проекте мы рассмотрим то, как работает датчик расхода воды и как соединить простой датчик расхода воды с Arduino.


Arduino и датчик расхода воды

Датчик расхода воды


Датчик потока (расхода) воды, как следует из названия, представляет собой устройство для измерения расхода воды. Датчик расхода воды, используемый в этом проекте, показан на рисунке ниже.


Датчик расхода воды

Он имеет пластиковый корпус клапана с ротором и цепь датчика Холла. Датчи имеет три провода, а именно + 5 В (красный), GND (черный) и выход (желтый). Поскольку он работает от напряжения +5 В, он может быть подключен к любому микроконтроллеру, например, к Arduino. Сверху есть ярлык с важной информацией о датчике. Информация на этой этикетке выглядит следующим образом:


  • Модель: YF-S201
  • Рабочий диапазон: 1 - 30 л / мин
  • Давление воды: менее 1,75 МПа

В нижней части датчика имеется маркировка в виде стрелки, указывающая необходимое направление потока воды через датчик. Таким образом, важно при подключении этого датчика к трубе, убедитесь, что вы следуете этому направлению.


Датчик расхода воды

Датчик потока воды реализован с использованием датчика эффекта Холла. Таким образом, работу датчика потока воды можно легко понять, если вы знакомы с датчиком Холла. По сути, датчик потока воды YF-S201 состоит из вращающегося колеса (или турбинного колеса), которое вращается, когда вода проходит через датчик. В центре этого колеса закреплен магнит.


Теперь перейдем к датчику Холла. Датчик Холла, используемый в этом датчике расхода воды, представляет собой интегральную схему 460S в корпусе TO-92.


Датчик расхода воды

На основании данных, предоставленных Honeywell, работа датчика Холла 460S выглядит следующим образом: когда южный полюс магнита направлен в сторону микросхемы, выходной сигнал датчика в низком логическом уровне, а когда северный полюс магнита к микросхеме, тогда выход в высоком логическом уровне. Помня об этом, когда вода протекает через датчик потока воды YF-S201, колесо заслонки вращается под действием силы воды, и в результате магнит, прикрепленный к нему, также будет вращаться.


Датчик потока воды

В результате магнитное поле рядом с датчиком Холла меняет полярность, поскольку колесо заслонки вращается, и выходной сигнал датчика (на выходном контакте – желтый провод) будет импульсным. Отслеживая количество импульсов с выхода датчика потока воды, вы можете легко рассчитать количество воды, протекающей через датчик, и, как результат, скорость потока воды.


Схема подключения Arduino и датчика потока воды


Схема подключения Arduino и датчика потока воды

Подключите красный и черный провода датчика потока воды YF-S201 к + 5В и GND. Так как мы будем использовать функцию прерывания Arduino, к выходу датчика расхода воды можно подключить только выводы 2 и 3 цифрового порта ввода/вывода. В этом проекте мы подключили выход датчика потока воды (желтый провод) к выводу 2 цифрового порта ввода/вывода Arduino UNO.


Код программы взаимодействия Arduino и датчика расхода воды


Код для интерфейса датчика потока воды с Arduino приведен ниже. В коде есть небольшой расчет, который мы объясним далее.



const int watermeterPin = 2;

volatile int  pulse_frequency;
unsigned int  literperhour;
unsigned long currentTime, loopTime;
byte sensorInterrupt = 0;

void setup()
{ 
   pinMode(watermeterPin, INPUT);
   Serial.begin(9600); 
   attachInterrupt(sensorInterrupt, getFlow, FALLING);
                                     
   currentTime = millis();
   loopTime = currentTime;
} 

void loop ()    
{
   currentTime = millis();
   if(currentTime >= (loopTime + 1000))
   {
      loopTime = currentTime;
      literperhour = (pulse_frequency * 60 / 7.5);
      pulse_frequency = 0;
      Serial.print(literperhour, DEC);
      Serial.println(" Liter/hour");
   }
}
void getFlow ()
{ 
   pulse_frequency++;
}

Расчеты для работы датчика расхода воды


Результатом проекта является отображение количества воды, протекающей через датчик, в литрах в час, как показано ниже. Для того, чтобы получить это, есть небольшой расчет.


Arduino и датчик расхода воды

Согласно документации датчика расхода воды YF-S201, поскольку выходной сигнал датчика представляет собой импульс, вычисляя частоту импульса, мы можем рассчитать объем воды, протекающей через датчик. Частота импульсов в Гц составляет 7,5 * Расход (в литрах в минуту). Таким образом, количество воды в литрах в час = частота импульсов * 60 / 7,5.




© digitrode.ru


Теги: Arduino, датчик расхода воды, датчик Холла




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
Mike, у меня есть кое-какие уточнения:
1. Как вы получили 7,5Hz? Это заявлено в документации или экспериментально?
2. Поскольку датчик далеко не самый точный и сделанный буквально на коленке, то некорректно считать поток каждую секунду. Показания за секунду в разные секунды может очень сильно отличаться. Я бы считал за 5 или 10 секунд и умножал бы на 12 или 6 (для часа) соответственно. Т.о. вы набираете бОльшее кол-во импульсов, которое дает более точную картину в длительной перспективе. На практике точность измерения каждую секунду не нужна
3. Что касается прерываний есть вытекающее из п.2 следствие:
А что если между строкой считывания literperhour = (pulse_frequency * 60 / 7.5); и обнулением кол-ва импульсов pulse_frequency = 0; придет импульс и будет получено прерывание? Вы его нигде не учтете, счетчик импульсов обнулится. Да, вероятность очень низкая, но она есть smile . Потерять 1 импульс при считывании среза данных за 1сек и за 10сек - большая разница. Погрешность в первом случае будет гораздо выше.
P.S. Надеюсь, вы не воспримете советы "в штыки". Сам разрабатываю похожий проект для учета КПД системы обратного осмоса и стараюсь выжать максимум точности из датчика, стараясь не вносить своих.
  • Серго

  • 12 июля 2020 23:14
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
Подскажите пожалуйста код, чтобы подключить по этой же схеме два таких датчика и считывать одновременно показания.