Тема: Контроллер расхода и отключения воды на базе YF-S201
Поделюсь вариантом контроллера расхода (контроля отключения) воды, ну и покажу как это можно сделать с минимальными затратами. Возможно кому то и пригодится.
Нам потребуется сенсор YF-S201, любая плата Arduino. Я дам пример для NANO (UNO).
Этот датчик практически готовое решение. Резьба ½ для подключения очень удобна, и позволяет работать с гибкой подводкой.
Первый вариант передает в сериал порт значение л/мин. Можно сразу смотреть на компьютере. Если пофантазировать дальше, можно и Bluetooth и WI-FI подцепить. Однако я не буду этого делать. Оставлю простор для творчества.
Скетч для ардуинки ниже.
Сигнальный провод подключен к пину 2 (или любому, который укажите с скетче).
volatile int flow_frequency;
unsigned int l_hour;
unsigned char flowmeter = 2; // Пин к которому подключен сенсор.
unsigned long currentTime;
unsigned long cloopTime;
void flow ()
{
flow_frequency++;
}
void setup()
{
pinMode(flowmeter, INPUT);
Serial.begin(9600);
attachInterrupt(0, flow, RISING);
sei();
currentTime = millis();
cloopTime = currentTime;
}
void loop ()
{
currentTime = millis();
if(currentTime >= (cloopTime + 1000))
{
cloopTime = currentTime;
l_hour = (flow_frequency * 60 / 7.5);
flow_frequency = 0;
Serial.print(l_hour, DEC);
Serial.println(" L/hour");
}
}
Заливаем скечт, запускаем монитор порта и видим показания.
Теперь сделаем управление внешней нагрузкой (реле) если вода не поступает в течение, ну скажем , 30 секунд.
Реле вешаем на 3 пин, или какой укажите в скетче.
Теперь скетч выглядит так.
volatile int flow_frequency;
unsigned int l_hour;
unsigned char flowmeter = 2; // Пин к которому подключен сенсор.
unsigned long currentTime;
unsigned long cloopTime;
unsigned long controlTime; //Перепенная для хранения времени отсутствия воды
#define reley (3) // Пин реле управления нагрузкой
void flow ()
{
flow_frequency++;
}
void setup()
{
pinMode(flowmeter, INPUT);
pinMode(reley, OUTPUT);
Serial.begin(9600);
attachInterrupt(0, flow, RISING);
sei();
currentTime = millis();
cloopTime = currentTime;
}
void loop ()
{
currentTime = millis();
if(currentTime >= (cloopTime + 1000))
{
cloopTime = currentTime;
l_hour = (flow_frequency * 60 / 7.5);
flow_frequency = 0;
Serial.print(l_hour, DEC);
Serial.println(" L/hour");
}
//***************Управление нагрузкой********************
if(l_hour < 1)
{
controlTime = millis();
}
if(controlTime > 30000)
{
digitalWrite (reley, HIGH);
}
else
{
digitalWrite (reley, LOW);
}
//******************************************************
}
Здесь нужно пояснить следующее.
Запускать устройство необходимо после включения воды, что бы показания были не нулевые.
Чтобы опять нагрузка включилась, нужно перезагрузить систему.
Как будет время, подключу показометр какой нибудь.
С уважением, Николай.
Моё оборудование : → Винокурня Николя