アマゾンで購入し中国から送られてきた水流計 YF-201C を調べてみた。
銘板に豆粒サイズで「YF-201C」と書いてある。WaterFlowSensorが正式名のようで電話番号まで
Arduinoとセットで検索したらソースが見つかった。部品の販売会社のようだ。
ここからデータシートPDFへのリンクがある。
5V/GND とデジタル2ピンへ接続したスケッチ例がある。
パルス*0.00225で流れたリットル数が出るようだ。
そのまま引用させてもらった・・・
以下は、1分間の流量を計算するソース
パルス数を7.5で割ればいいようです。
/*
YF-S201C-Water-Flow-Sensor
modified on 14 oct 2020
by Amir Mohammad Shojaee @ Electropeak
https://electropeak.com/learn/
based on www.hobbytronics.co.uk examples
*/
double flow; //Water flow L/Min
int flowsensor = 2;
unsigned long currentTime;
unsigned long lastTime;
unsigned long pulse_freq;
void pulse () // Interrupt function
{
pulse_freq++;
}
void setup()
{
pinMode(flowsensor, INPUT);
Serial.begin(9600);
attachInterrupt(0, pulse, RISING); // Setup Interrupt
currentTime = millis();
lastTime = currentTime;
}
void loop ()
{
currentTime = millis();
// Every second, calculate and print L/Min
if(currentTime >= (lastTime + 1000))
{
lastTime = currentTime;
// Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min.
flow = (pulse_freq / 7.5);
pulse_freq = 0; // Reset Counter
Serial.print(flow, DEC);
Serial.println(" L/Min");
}
}
以下は簡単バージョン、パルスが発生するたびに割り込みを発生させ加算している。
起動以降、水量を加算させるのみ。
Arduinoは変数初期化は要らんのだなあ・・・
/*
YF-S201C-Water-Flow-Sensor
made on 14 oct 2020
by Amir Mohammad Shojaee @ Electropeak
https://electropeak.com/learn/
*/
double flow; //Liters of passing water volume
unsigned long pulse_freq;
void setup()
{
pinMode(2, INPUT);
Serial.begin(9600);
attachInterrupt(0, pulse, RISING); // Setup Interrupt
}
void loop ()
{
flow = .00225 * pulse_freq;
Serial.print(flow, DEC);
Serial.println("L");
delay(500);
}
void pulse () // Interrupt function
{
pulse_freq++;
}