想监测水管里有没有水在流、流速快不快、累计用了多少水,YF-S201霍尔水流传感器是最常用的方案。它靠内部一个带磁片的叶轮转动,配合霍尔元件输出一串脉冲——流量越大脉冲越密,Arduino数一数脉冲数就能算出流量。这篇讲透它的原理、怎么接、代码怎么写、标定的坑在哪。

YF-S201的原理和霍尔脉冲输出
YF-S201的管体里装了一个叶轮,叶轮上嵌着一块小磁铁,管子外面贴着一颗霍尔传感器。水从进水口冲进去带动叶轮转,磁铁每转过霍尔元件一次就输出一个脉冲信号。它有三根线:红/VCC接5V、黑/GND接地、黄/OUT是脉冲输出脚,接Arduino任意一个数字或中断脚。

图中清晰展示了管体结构——Y型透明管、内置叶轮和磁铁,以及三根引出线。脉冲频率和流量近似成正比,典型模块满量程在1~30L/min,每升水大概对应450个脉冲(不同批次的模块参数略有差异,所以标定很关键)。
Arduino读脉冲算流量的思路
最简单的方式是配一个脉冲计数器库,或者直接用中断:把OUT接在支持中断的引脚(UNO上是D2/D3),在中断回调里给一个计数变量加1。规定一个时间窗口(比如1秒),数这一秒里有多少个脉冲,除以每升的脉冲数就得到瞬时流量(升/秒),再换算成升每分钟。
累计用水量更直观:每秒把瞬时流量累加进总和一个变量,跑完就得到这段时间流过的总水量。要注意浮点精度,积累大水量时用double或分档存储,别让小误差滚雪球。
标定的坑和实际接线要点
最大的坑是模块的“每升脉冲数”不固定,不同批次差异能有几十个趴。想测准,就接一个已知容积的容器,用一个固定水压放水,看实际数到多少脉冲,反推出真实的每升脉冲数再写进代码。水压不同脉冲标定也会偏,日常演示用厂家给的450左右就够,做精确计量就按实测值来。
另外它只能测水流经过时的实时流量,做“有没有漏水、水龙头有没有关”这类开关类判断很灵敏。接线注意共地,别把VCC和OUT接反。把YF-S201串在净水器、滴灌系统或智能水表上,再配个小OLED显示,一套家用流量监测就出来了。







串在净水器前测流量很实用,水流有没在跑一眼就知道
想测累计用水量就用浮点累积,别用整型放久了误差会放大
接的时候红黑白三根线别搞混,黄线OUT接中断脚脉冲才数的准
标定那步一定要做,不同批次的脉冲数差挺多,直接用人家的数计出来的量是估的