水位继电器控制器能自己把水缸补满,不用单片机,也不用写一行程序。两支导电探针吊在两个不同的高度上:水位跌到下面那支尖端以下,模块的继电器就闭合、水泵开跑;水位升到上面那支尖端,继电器就断开。这两个尖端之间的那段距离,就是全部的窍门。
装控制器之前:水泵本身转不转?
有位客户手上拿着刚买到的新水泵写信来问:“do you know how to actually connect the water pump after i buy it to test if its actually working or not”(买回来之后到底怎么接,才能试出它是不是真的会动)。水泵这件事跟控制器一点关系都没有。拿一条 USB 转 5V 圆头电源线插在任何一个手机充电器上,把圆头插进一个圆孔母座带线,再把母座的红线跟水泵的红线拧在一起、黑对黑,水应该立刻就动。
通电之前先把水泵放进水里:它是靠所输送的液体来散热和润滑的,空转只会让叶轮和轴承白白发热。而且它是一台水泵——另一位客户用马来文问:“yg ni blh buat oxsigen angin ka.. atau untk pump air ja”(这个能打氧气、打气吗,还是只能抽水)。只能抽水:叶轮在空气里几乎推不动什么质量,而控制器本来就是靠液体的导电性来判断水位的。
零件清单——不用写程序的自动补水
可选加购
R365/R385 隔膜泵是自吸型的升级选择,它靠两个水管接嘴装在水缸外面,而不是泡在水里。它到手时是一颗只有两片金色焊片、没有引线的裸马达,所以你得自己焊线;它在 12 V 下要 0.5–0.7 A,需要一路能给足一整安培的独立 12 V 电源——主清单里那条 USB 升压线喂不动它。绝缘胶布用来包住这套接法里唯一那一处拧接头,并把探针线固定在缸壁上、定住高度。
你需要两路各自独立的 USB 输出——一个充电器加一个行动电源就够了——还需要两个容器,而这一点几乎没人提。水泵必须一直泡在水里,所以它不能待在它要填满的那个水缸里。它待在水源那一边——一个水桶、一个塑料桶,或者从别处引来的集水槽——把水沿着水管往上打进水缸,而探针吊在水缸那一头。这套东西完全不监视水源那边,所以让水泵始终有水盖着,仍然是你自己的事。
XHM203W 为什么要两支探针,一支不行吗?
XHM203W 用两支,是因为一支回答不了这个问题。单一个尖端只有两种状态,湿和干,而且是在某一个精确的高度上翻转——可是水从来都不是静止的。水泵自己搅出来的涟漪,或者从缸里舀走一杯水,都会反复跨过那个高度,于是水泵会在一秒钟之内启停好几次,把继电器触点和马达碳刷一起磨掉。两个尖端给的是一个区间:下面那支决定从哪里重新开始补水,上面那支决定在哪里停。
| 水位 | 下探针 | 上探针 | 水泵 |
|---|---|---|---|
| 低于下探针 | 干 | 干 | 启动,并持续运转 |
| 在区间里往上升 | 湿 | 干 | 继续运转 |
| 到达或高于上探针 | 湿 | 湿 | 停止 |
| 从区间里往下落 | 湿 | 干 | 保持停止 |
看第二行和第四行。探针报告的是一模一样的东西——下湿、上干——而正确答案在这两行里正好相反。单凭那一瞬间读到的任何东西,都分不出这两者,所以板子必须记住。这个记忆就是一个置位—复位锁存器,也就是探针插座和继电器线圈之间那几颗小信号元件在干的活:下面的尖端转干把它置位,上面的尖端转湿把它复位,两者之间它一直守着上一次的答案。任何值得买的水位控制器都是这么工作的;这个区间叫做回差(hysteresis)。

板子上那几个中文标记,分别是什么?
XHM203W 的四个接线处里,有三个印着中文标记,第四个干脆什么都没印。四个全在这里:
| 标记 | 它是什么 | 接什么 |
|---|---|---|
| 左边蓝色螺丝端子 | 电源输入,12 V 交流或直流皆可 | 那条 12 V USB 升压线,经一个圆孔母座带线接进来 |
| 下水位(白色两针插座) | 低水位——重新开始补水的那个高度 | 一条探针线,直接插上 |
| 上水位(白色两针插座) | 高水位——停泵的那个高度 | 另一条探针线,直接插上 |
| 输出(右边蓝色螺丝端子) | 输出——继电器裸露的开关触点 | 水泵自己那一路电源的其中一条线,剪断后压在这两颗螺丝上 |
电源极性很宽容,而板子本身就说明了原因:输入端子后面那颗黑色方块是一个桥式整流器,不管电源以哪个方向进来,它交给稳压电路的都是同一个极性——这也是为什么这块模块吃 12 V 交流和吃 12 V 直流一样自在。那个端子上没有印 + 或 −,有桥堆在电路里,也确实不需要印。两条探针线都在包装里:一个白色两针插头接出一红一黑两根线,而它们剥出来的镀锡裸线头就是电极。
在把一整缸水交给它之前,先在干处把板子验一遍。让它单独通电,输出那两颗螺丝上什么都不接——红色 LED 会亮。然后把其中一条线的两个裸尖端浸进一杯自来水里再提出来,换另一条线再来一次,一边盯着插座旁边那两颗绿色指示灯,一边听继电器的动静。水来水走,板子应该跟着反应:一声「咔」是它决定开泵,另一声是它决定停泵。要发现哪里不对劲,一个杯子比一整缸水好得多。
Dean Satchell 演示的正是这个型号的板子:
水泵为什么要用它自己那一路电源?
输出端子本身不供电。那是直接接到继电器触点上的两颗螺丝——一个自己没有电压的开关,这就是干接点的意思。这颗继电器是 SONGLE 的 SRD-12VDC-SL-A,末尾那个 -A 是 SONGLE 订货型号里代表单组常开触点(Form A)的后缀:只有常开,根本没有常闭那一边。所以这里是两颗螺丝,而不是普通继电器模块或延时继电器上的 NO/COM/NC 三个——这里只有一组触点可以引出来。
所以水泵自带它那一路电源,你把它两条线里的其中一条剪断——低压直流水泵剪哪一条都行,不过剪红线可以让黑线留成一整条不断的通路——再把剪出来的两个线头压在输出的两颗螺丝上,顺手把黑线那一处拧接头用胶布包回到圆孔母座那边。为什么我们这套接法要专门给它第二条 USB 通道,算一下就明白了。模块本身的逻辑电流大约 20 mA;继电器线圈在 12 V 下是 400 Ω,所以吸合时再加上 12 ÷ 400 = 30 mA。五十毫安只有那条 12 V 升压线 500 mA 建议负载的十分之一——很宽裕,直到水泵也挤进来。
把可选的12 V 隔膜泵加进来,0.5–0.7 A,总电流就顶到 0.75 A,正好是这条线的绝对上限、一点余量都不剩——而要在 85 % 这种现实的转换效率下交出那 8.4 W(12 V × 0.7 A),从 USB 口抽走的将近 2 A,正好是这条线标称的输入天花板。所以 0.1–0.2 A 的那台 5 V 水泵,要用自己那条普通的 5 V 线和自己那个圆孔母座。
这颗继电器的额定是 250 V 交流 10 A,所以单就触点的能力而言,一台市电水泵是在它的范围之内的——但那一侧的布线、外壳和接地不是玩家自己动手的步骤,我们那篇继电器模块安全指南把这条线画得很清楚。

探针的尖端到底该放在哪里?
在液体里,吊着,别碰缸壁。XHM203W 在两个裸尖端之间送出一股很小的电流,看水有没有把这个回路接通,所以水本身就是那个开关。把尖端贴平在缸壁上,你会同时得到两种失效:水位说它该淹到了,它却可能并没有真的浸在水里;而缸壁上一层凝结的水珠或者一层藻膜,会在缸子空着的时候把它桥通。
两条线给了你四个裸尖端,而其中只有两个是用来定高度的。每一对里的黑线是共用的参考端:把这两根黑线拧成一股,吊在靠近缸底的地方,比任何一支红色尖端都深,这样只要缸里有水可读,它就一定在水里。让每根黑色尖端各自吊得够深也一样管用——拧在一起只是让你少管一根线而已。接在下水位上的那支红色尖端,吊在你希望重新开始补水的高度;接在上水位上的那支红色尖端,吊在你希望停泵的高度。两者要拉得够开——水桶大小的缸里,大约一个手掌的宽度——因为这个间距就是回差。用绝缘胶布把线贴在水线以上的缸壁上,让尖端不会漂走;要把线接长一段,可以看我们那篇绝缘胶布与热缩管怎么选。
这套方法要靠水里溶解的矿物质来带那股电流。自来水、雨水、池塘水都行;蒸馏水和去离子水不行,因为纯水是极好的绝缘体——导电的是溶解在里面的盐类,不是 H₂O 本身。油类和燃油里根本没有离子。

万一有一支探针不报了会怎样?
探针出错的每一种方式,在 XHM203W 看来都长得一模一样:尖端被提出了水面、插头被扯出了插座、黑色参考端悬在半空、镀锡的尖端蒙上一层水垢发暗了。全部都意味着没有电流,而没有电流就等于干——上面那支尖端读到干,就等于缸还没满。所以探针故障并不会让水泵停下来。它拿走的,是本来要让水泵停下来的那个东西,于是缸里继续往上灌。
这个方向是固定的,你没法把它反过来,所以要围绕着它做设计。给水缸留一个溢流口,通到你不介意水流过去的地方。让水源那个容器装的水,少于水缸剩下的空间,那么最坏的一次彻底失效,也不过是把一桶水搬个家,而不是湿掉一地板。头几个自动循环,人守在旁边看,别转身就走;每隔几个星期把尖端提出来擦一擦,因为亮的金属读得到水,发乌的金属读到的是空气。
它能改成抽干集水槽,而不是把水缸补满吗?
不能。XHM203W 常被说成有补水和排水两种模式;它只有一种。它那两个输入并不能互换:一个是启动输入,一个是停止输入,写死在板子的逻辑里,而不是写在插头上。把两条线对调,换掉的是这两个输入所看的高度,不是它们的职责。你拿到的仍然是「启动端转干就开泵,停止端转湿就停泵」,只不过现在启动端吊在高处、停止端吊在低处。而那支低处的尖端,只要缸里还有值得留下的水,它就一直是湿的,所以停止条件永远不会松开:水泵只有在水位低于那一支尖端时才跑得起来,而水一碰到它,它又马上被叫停。所以这一对调并没有把板子反过来——它是把整个区间丢掉了,剩下你对着单一个高度补水。排水需要的是一台在尖端转湿时启动的水泵,而用一个「转干才启动」的输入配一个「转湿才停止」的输入,无论怎么排列都做不出这个东西。
自带浮球开关的抽水泵用机械方式解决了这件事:浮球随水位上升,把泵体内部的一个开关闭合,所以触发条件本来就是「湿」。或者干脆交给单片机,锁存器不过是四行程序,而它的方向是一个常数。下面这段程序就是把 XHM203W 的行为写出来,外加板子本身给不了你的那个极性;在 Uno 上编译出来是 2,258 字节。
// 两探针水泵锁存器 - 用软件写出 XHM203W 的逻辑,外加板子本身
// 给不了你的那个极性。要做集水槽排水,把 DRAIN_MODE 设成 true。
//
// 接线:共用电极 -> D7。下探针 -> A0,上探针 -> A1,
// 并从 A0 和 A1 各接一颗 1 Mohm 电阻到 GND。继电器模块的 IN -> D8,
// 它自己的 VCC/GND 接 Arduino 的 5V/GND。探针要泡在水里,不能贴在
// 缸壁上。D7 只在读取的那一刻才驱动,所以电极每秒只导通几个毫秒,
// 而不是整天都在导通。
const int PIN_DRIVE = 7; // 共用电极
const int PIN_LOW = A0; // 下探针 - 重新补水的高度
const int PIN_HIGH = A1; // 上探针 - 停泵的高度
const int PIN_RELAY = 8; // 继电器模块的 IN
const int WET_COUNTS = 300; // 满量程 1023。自来水桥接一颗 1 Mohm
// 下拉电阻时读数远高于此;空气读到 0。
const bool DRAIN_MODE = false; // false = 给供水缸补水,true = 抽干集水槽
const bool ACTIVE_LOW = true; // 多数 1 路继电器模块是 LOW 电平触发
bool pumpOn = false;
bool probeIsWet(int pin) {
digitalWrite(PIN_DRIVE, HIGH);
delay(5); // 读之前先让 1 Mohm 那个节点稳下来
analogRead(pin); // 丢弃:ADC 采样保持里还是上一次的旧值
int counts = analogRead(pin);
digitalWrite(PIN_DRIVE, LOW); // 把电极重新停下来
return counts > WET_COUNTS;
}
void setPump(bool on) {
bool level = ACTIVE_LOW ? !on : on; // LOW 触发的模块要把驱动反过来
digitalWrite(PIN_RELAY, level ? HIGH : LOW);
}
void setup() {
Serial.begin(9600);
pinMode(PIN_DRIVE, OUTPUT);
digitalWrite(PIN_DRIVE, LOW);
pinMode(PIN_RELAY, OUTPUT);
setPump(false); // 绝不让水泵在复位时自己跑起来
}
void loop() {
bool wetLow = probeIsWet(PIN_LOW);
bool wetHigh = probeIsWet(PIN_HIGH);
// 锁存器。只有两个事件会改变任何东西;在这两者之间,pumpOn 一直
// 保持它原来的样子,这就是区间中段安全的原因。
if (DRAIN_MODE) {
if (wetHigh) pumpOn = true; // 集水槽满了 - 开始抽干
else if (!wetLow) pumpOn = false; // 降到下探针 - 停
} else {
if (!wetLow) pumpOn = true; // 缸里水少了 - 开始补
else if (wetHigh) pumpOn = false; // 到了上探针 - 停
}
setPump(pumpOn);
Serial.print(wetLow ? "low:wet " : "low:dry ");
Serial.print(wetHigh ? "high:wet " : "high:dry ");
Serial.println(pumpOn ? "pump:ON" : "pump:off");
delay(1000);
}
如果你要的是一个读数,而不是一个开关?
探针加继电器的控制器没有「满到几成」这个概念——只有「过了这支尖端没有」。要在屏幕上看到一个数字,超声波传感器可以从液体外面测出水面上方那段空气的距离,我们那篇用 Arduino 做水缸水位监测讲的就是这条路。而在很短的一段量程里,水位检测模块是一片交错走线的桨状板,浸进去的部分越多,它的电阻就越低。这两条路都需要一颗单片机。
我们从真实客户那里看到的常见错误
从模块的电源端子给水泵供电。输出那两颗螺丝是一个开关,不是一个插座;而 12 V 输入是给板子自己用的——一台 5 V 水泵接到那里,看到的是 12 V。
忘了那两个参考尖端。两支红色尖端泡在水里,黑色的却吊在空气中,那就是一个开路,于是满缸读成空缸,水泵永远不停。
拿一个比探针间距还浅的水桶做测试。上面那支尖端跑到桶沿以上,停泵的条件就永远不会到来,于是台面测试以一摊水收场。用杯子或水桶试的时候把两个尖端凑近,真正的高度等装到缸里再定。
常见问题
不用 Arduino,自动水泵控制器是怎么工作的?
两个裸探针尖端吊在不同的高度上,浸在水里时让一股很小的电流通过。一个锁存器在下面那支尖端转干时启动水泵、在上面那支尖端转湿时停泵,两者之间一直守着这个决定。不用写码,也不用板子。
我需要两支探针还是三支?
三个电极,用包装里那两条两芯线做出来。两根黑线是共用的参考端:拧成一支吊得够深的尖端,始终在水面以下。两支红色尖端定出你的停泵高度和重新补水的高度。
XHM203W 能切换 240 V 市电水泵吗?
触点额定是 250 V 交流 10 A,所以继电器本身是有这个能力的。围绕它的市电布线则不是 DIY 步骤——外壳、接地,以及谁有资格做这项工作,才是决定因素,我们那篇继电器模块安全指南讲的就是这件事。这套接法只停留在低压直流。
它能用在蒸馏水上吗,或者拿来当打气泵的控制器?
两个都不行。它的感测靠的是溶解的矿物质在两个尖端之间导电,而纯水接近绝缘体,油类和燃油也一样。空气则完全不导电,而这套接法里的泵是抽水的。
我能不能让它在缸满的时候把水抽出去?
用这块板子不行。它那两个输入是固定的启动输入和固定的停止输入,所以对调插头只是换了它们各自看的高度,永远换不了哪一个负责启动水泵。排水需要一个「转湿才启动」的触发:一台内建浮球开关的抽水泵,或者一颗单片机。
最后更新:2026 年 8 月。有问题?WhatsApp 联系我们。



Water Level Relay Controller Liquid Level Detection Auto Water Sensor Tank Pump Control Switch
Mini Water Pump Submersible DC 3V-5V - 5V WATER PUMP
USB To 9V DC Jack Cable 5.5 x 2.1 mm 5V 9V DC Power USB Cable Connector Jack - USB TO 12V DC JACK
USB To 9V DC Jack Cable 5.5 x 2.1 mm 5V 9V DC Power USB Cable Connector Jack - USB TO 5V DC JACK
5.5x2.1mm DC Power Male Connector Plug Jack Adapter for Arduino DIY Electronics Projects - 5.5x2.1 DC CONNECTOR (F)
R365 12 Water Pump Pnuematic Diaphragm Water Pump Watering System Motor
Electrical Insulation Tape 18mm x 10m PVC Color Coded Marking Red White Blue Yellow Green Black - ELECTRICAL TAPE (RED)