一颗 3–5V 的迷你潜水泵,在出水口与水面齐平时每小时能送 70–110 升水,运行电流 100–220 mA,而且绝对不能直接接到 Arduino 的引脚上。中间要放一个继电器、一块 MOSFET 模块或者一块电机驱动板,给它自己的一路 5V 电源,然后让它整颗泡在水里。
一颗 3–5V 迷你潜水泵,实际能给你什么?
这颗 5V 迷你潜水泵是一个封好的米白色小胶囊,大约 56 × 33 × 24 mm,出水嘴在顶上,进水缝在正面那一片,背后出一条黑色的两芯线。唯一要你自己准备的是水管:任何内径 6–7 mm 的软质鱼缸管或硅胶管,硬套到出水嘴上就撑住了。管子要短、要粗,因为管子每多一米、管径每细一点,被磨掉的流量跟抬高度磨掉的是同一回事。
| 规格 | 数值 | 对你的项目意味着什么 |
|---|---|---|
| 工作电压 | 3–6V DC | 在 5V 电源上很舒服;3V 时转得慢、力气小 |
| 自由流量 | 70–110 L/hr | 完全不抬高度时量出来的——见下文 |
| 运行电流 | 100–220 mA | 是 Arduino 一个引脚设计值的五到十一倍 |
| 最大扬程(静扬程) | 大约 40–110 cm | 流量归零的那个高度 |
| 出水口 | 约 7 mm 的出水嘴 | 套 6–7 mm 内径的软管或鱼缸管,硬撑上去 |
自由流量这个数字会骗人,因为它是在出水口跟泵所站的那缸水齐平——一点高度都不抬——的条件下量的。把出水口抬起来,叶轮的压力就得拿去顶住一整柱水对抗重力:每高一厘米就吃掉一块,剩下的流量随着高度往下掉。到了最大静扬程,两边刚好打平,水停在管子里不动,流量就是零。
这个天花板因个体而异,落在 40 到 110 cm 之间,所以请照着低的那一端去规划。在两个端点之间——不抬高度时的满流量,和天花板处的零流量——一颗小型离心泵掉下去的曲线,已经接近直线到你可以直接按直线来算:算一下你的高度用掉了天花板的几分之几,流量就扣掉大约同样的比例。抬 20 cm,也就是桌上的一盆花对着地上的一个瓶子,等于保守估的 40 cm 天花板的一半,那就预计只剩自由流量的一半左右:接近 40 L/hr,也就是每分钟 0.7 升。一米高的架子已经越过这颗泵放弃的那条线了,而又长又细的水管同样会吃掉高度。
所以别信标称,自己量。把出水口放到你的项目真正需要的高度,让泵跑三十秒,水接进量杯里,再把接到的毫升数乘以 0.12——三十秒是一小时的一百二十分之一,所以这一道乘法就把你那杯水换算成了「在真正重要的那个高度上,每小时多少升」。下面那段程序会帮你计时。
如果这样还不够,要换的是泵,不是接法:这颗是循环泵,做吸程和高度都没用。R365 12V 隔膜泵是干放在水箱外面的,自吸大约 2 m,能推到大约 3 m 扬程,接口是 6 mm 的宝塔头——代价是一路 12V 电源,和两片要你自己焊线上去的插片端子。它在你的电路里也不像一块封好的模块,而是一颗真正的裸马达——有电刷、有露在外面的绕组,关断时有货真价实的感性反冲——所以它两端需要一颗续流二极管,需要继电器或者一块 L298N 去开关它,而本页上所有的电流数字,一个都搬不到它身上。
实作范例的零件——一颗被开关控制的水泵,全程不用焊接
另外那几条路——按你的项目真正需要的来挑
这些是替代方案,不是上面那张清单的加购项。IRF520 MOSFET 模块是给 5V 逻辑用的 PWM 调速那条路。DRV8833 是 3.3V 逻辑最干净的一条路,也是你要同时驱动两颗泵时该拿的那块——它那排 12 针排针是散装的,所以这块板子用之前得先焊。公对母杜邦线配的是 IRF520 模块那种排针,不是继电器的螺丝端子。R365 12V 隔膜泵,是给那些真正需要吸程或高度的项目留的一个老实出口。
为什么迷你水泵永远不能挂在 Arduino 的输出引脚上?
Uno 兼容板上那颗 ATmega328P,对电压很大方,对电流很小气:它的数据手册把单个引脚的绝对极限写在 40 mA,并且要求你按 20 mA 去设计。这颗泵光是运行电流就已经是这个数的五到十一倍,而开机的那一下更糟:转子还没转起来,就产生不了反电动势去抵抗电源,此时限制电流的只剩绕组本身那点电阻。按马达类零件常用的「两到三倍运行电流」来估,头几十毫秒会冲到接近 0.7 A——比绝对极限高了一个数量级。
大家常挂在嘴上的另一个警告,感性反冲,在这里答案不一样。这颗泵的绕组并不长在你那两条线的末端:定子被环氧树脂灌封在胶囊干的那一半里,连着它自己的换相电路,隔着一堵实心塑料墙去转另一边那个带磁铁的叶轮转子。你的开关喂的是那块小电路板,不是一个裸线圈,而那块板子自己会吸收自己的开关尖峰。真正把引脚这条路排除掉的是电流——而换成 ESP32 也一样不行:乐鑫的数据手册给 GPIO 的规格,是驱动能力开到最大时拉源 40 mA、灌入 28 mA,而那是引脚推得动多少,不是你可以往上面挂多少。反冲在这里确实会咬人,但咬的是继电器的线圈,而那正是那块模块上早就装好的那颗二极管要干的活。
继电器、MOSFET 模块还是电机驱动板——你需要哪一个?
一路 5V 继电器模块是「只管开和关」那条路。它那两个蓝色的三位接线块都是螺丝端子——左边 NO/COM/NC,右边 DC+/DC−/IN——所以裸线头直接夹进去就行。线圈侧和触点侧不共用任何金属:IN 只负责点亮一颗光耦,光耦里那颗三极管从 DC+ 把线圈吸合,而这个线圈扳动的触点,跟前面这些完全不相连。板上的 L/H 跳线决定那颗 LED 是以 DC− 还是 DC+ 为参考,也就决定了 IN 上是高电平还是低电平让泵转起来。这颗光耦同时也是这块 5V 板子能直接吃 ESP32 的 3.3V 引脚、完全不用电平转换的原因,前提是跳线放在 L:放 L 时,LED 的阳极被接到模块自己的 5V,你的引脚只需要把另一头拉到接近零,LED 拿到的电流由那路 5V 和它的电阻决定,你的逻辑电平根本不进这道算式。放 H 时,同样这个 3.3V 引脚要去推一颗按 5V 选好的电阻,LED 有可能暗到没办法把三极管打开。不管放哪一边,DC+ 都要一路像样的 5V——ESP32 板子插着 USB 时的 5V 或 VIN 脚,不是它的 3.3V 稳压输出,因为继电器的线圈是 5V 线圈,而且要吃几十毫安。更深的接线,在我们那篇继电器模块指南里。
IRF520 MOSFET 模块是通往「调速而不只是开关」的最便宜那条路。三极管坐在泵的负极线和地之间,你的引脚只负责给它的栅极充电,这只花掉负载电流的极小一部分。要注意的是:IRF520 不是逻辑电平器件——Vishay 的数据手册给的栅极阈值是 2.0–4.0V,而导通电阻是按 10V 栅压标的。在 5V 加两百来毫安的条件下它导通得很轻松,所以这颗泵稳稳落在它做得好的那一档;但在 3.3V 下,一颗最坏情况的片子可能根本打不开,这一点我们那篇 IRF520 指南拆开讲过。
DRV8833 双路驱动板是 3.3V 那条干净的路。TI 的数据手册给它 2.7–10.8V 的电机供电范围、每通道 1.5 A RMS,以及 2.0V 的输入高电平门槛——睡眠脚是 2.5V——所以 ESP32 的 3.3V 引脚在这里是一个扎实的高电平,不是一个碰运气的高电平,而且限流的活由芯片内部去做。两个通道就是两颗泵;代价是那排散装的 12 针排针要自己焊。我们那篇 DRV8833 对比 L298N 指南把这两块放在一起讲过——L298N 是给 12V 泵用的,因为它的输出级会掉掉大约两伏,喂 5V 泵会把泵饿着。
| 开关器件 | 泵的电流由谁扛 | 能否调速 | 3.3V 逻辑 | 要不要焊 |
|---|---|---|---|---|
| 一路继电器模块 | 机械触点,完全隔离 | 不能——只有开和关 | 可以,跳线放 L | 不用;螺丝端子 |
| IRF520 MOSFET 模块 | MOSFET,流向地 | 可以——PWM | 勉强;栅极不是逻辑电平 | 不用;端子加排针 |
| DRV8833 驱动板 | 驱动芯片,两个通道 | 可以——PWM,两颗泵 | 可以;2.0V 起就算高电平 | 要;排针散装 |
两条 PWM 路都有一个下限,而不是能一路平滑调到零,因为切开供电的同时,也切开了泵里面那块换相电路:大约低于三分之一到一半占空比时,转子根本转不过来,你听到的只是嗡嗡声。先用满占空比踢它几百毫秒,再降到你要的速度。在 Uno 上,就是在支持 PWM 的引脚——3、5、6、9、10 或 11——上写 analogWrite(pin, 255),维持两三百毫秒,然后 analogWrite(pin, 160),或者你自己那杯水量出来、转子还转得过来的那个值。

为什么潜水泵必须一直泡在水里?
潜水在这里不是一个加分项,而是这颗泵唯一能工作的方式。转子转在一个普通的塑料滑动轴承里,靠被泵的水来润滑和降温,而灌封起来的定子也是把热量倒进同一缸水里。让它在空气里跑,这两件事同时停摆——轴承会咬死,热量无处可去,几分钟就能把泵送走。它也不自吸,因为离心叶轮在空气里转什么都送不动,所以它就该坐在水箱底部,让进水缝整片没在水下。
这也就把水位变成了你电路的一部分,而那正是我们那篇水位继电器控制器指南整篇在讲的事。

水泵怎么通过继电器接到 Arduino 上,电源又该怎么选?
让 Uno 继续走 USB,另外给泵配一颗自己的 5V 3A 火牛,经一条 5.5 × 2.1 mm 圆孔母座带线接出来。在这个接法里,两路电源从头到尾不碰面:继电器的触点就是一个用金属做的开关,所以泵那条回路从火牛出发、回到火牛结束,它的负极和 Uno 的地之间根本不存在任何一条线。这个「分开」,就是你买继电器买到的东西。两条 PWM 路正好相反,而这一步恰恰是大家会漏掉的——MOSFET 模块或 DRV8833 读你的引脚,读的是一个电压,而电压只有相对某个参考点量出来才有意义,所以在那两条路上,Arduino 的 GND 和泵电源的负极必须接在一起,否则输入端看到的是一个两边都不认同的电平,泵就会抽搐,或者干脆不启动。继电器的线圈可以吃 Uno 的 5V,因为线圈只是几十毫安;泵不行,原因就是那一下启动冲击。从主机的 USB 口到泵之间的每一段导体都有电阻——线材、板上的自恢复保险丝、杜邦线——将近一安培的电流流过零点几欧姆,就是从一条本来只有五伏的电源上吃掉零点几伏,于是板子就在泵启动的那一瞬间掉电重启——这跟我们那篇 SIM800L 电源指南讲的是同一套机制,只是换了个更能吃的负载。三安培不是为泵准备的,泵只要五分之一安;它是为了让那条电源几乎察觉不到开机冲击,也是为了以后项目里再加一颗泵或者一盏灯时,同一颗火牛还有余量。这颗火牛唯一不该做的事,是插进 Uno 的圆孔电源座:那条路会经过板上的稳压器,而稳压器需要的输入电压,比它输出的还要高出大约一伏。插头尺寸和「中心正极」这件事,在我们那篇圆头直流电源指南里。
| 从 | 到 | 为什么 |
|---|---|---|
| Uno 5V | 继电器 DC+ | 给线圈侧供电 |
| Uno GND | 继电器 DC− | 线圈回路 |
| Uno D8 | 继电器 IN | 控制脚 |
| 母座带线的红线(中心针) | 继电器 COM | 泵的供电送进触点 |
| 继电器 NO | 泵的红色那根导线 | 触点闭合 → 泵拿到 5V |
| 泵的黑色那根导线 | 母座带线的黑线 | 两个裸线头绞在一起,套热缩管或者焊起来——它闭合的是泵自己的回路,完全不会碰到 Uno |
因为控制侧是螺丝端子,你要的线是公对公:一头插进 Uno 的排母,另一头压在螺丝下面。公对母是给模块排针用的——也就是 IRF520 那条路。在这一切通电之前,先把母座带线的极性定下来:红线是中心那根导体,而这颗火牛的中心针是正极,但那个注塑的插头上没有任何标记,所以拿万用表在插头上花十秒,才是让自己确定的老实做法。这一步要紧,是因为这颗泵的驱动电路被密封在泵体里面——一颗无刷泵接反了不会倒着转,它只是不转,而这不是一个你愿意让它带着电、慢慢去查为什么的状态。然后设定 L/H 跳线,第一次运行时用耳朵确认一下,因为线圈吸合会有一声清脆的「咔」,再让下面的 RELAY_ACTIVE_HIGH 跟它对上。Uno 的引脚在 setup() 跑起来之前都是悬空的输入,所以接好泵之后按一次复位,看看继电器怎么动:触发极性搞反的话,泵会在每一次上电、每一次复位、每一次上传程序的时候都开起来——在一个小水箱里,这就是桌上多一滩水、泵开始空转的由来。
整套东西请留在低压直流的范围里。继电器的触点上,那个蓝色方块上印着一个市电规格,但这里没有任何东西该靠近市电接线。这个项目确实有的那个危险很直白:桌上一罐敞开的水,后面就是一颗接着市电的火牛。把板子和火牛都放到离水箱远一点的地方,并且让泵的引线和火牛的电源线,都先低于各自的插座再往上接,这样顺着线流下来的水会从最低点滴掉,而不是顺着线钻进接插件里。
如果你想先看看这样一颗泵,怎么从两条裸线一路接到由板子来开关,这段视频讲的就是实际动手的部分:
// 3-5V 迷你潜水泵配一路继电器模块的台面测试。
// 把泵沉进水里,出水管放到你项目需要的高度,
// 从串口发任意一个字符,泵就正好跑 30 秒。
// 30 秒是一小时的一百二十分之一,所以:每小时升数 = 接到的毫升数 x 0.12。
const uint8_t RELAY_PIN = 8; // 继电器模块的 IN 端子
const bool RELAY_ACTIVE_HIGH = true; // L/H 跳线放在 L 的话,这里改成 false
const unsigned long RUN_MS = 30000UL; // 30 秒的计量运行
bool pumpRunning = false;
unsigned long startedAt = 0;
void setPump(bool on) {
// 逻辑极性只在这一个地方决定,所以换跳线位置时只需要改这一处。
digitalWrite(RELAY_PIN, (on == RELAY_ACTIVE_HIGH) ? HIGH : LOW);
pumpRunning = on;
}
void setup() {
Serial.begin(9600);
setPump(false); // 先把电平定在安全侧,此时引脚还是输入:在一块
pinMode(RELAY_PIN, OUTPUT); // 低电平有效的板子上,这一次写入会打开引脚的上拉,
setPump(false); // 于是 IN 在整个 pinMode 期间都被拉高,继电器就不会
// 在程序还在启动的时候吸合,把泵开起来。
Serial.println(F("Pump under water? Send any character to run it for 30 s."));
}
void loop() {
if (!pumpRunning && Serial.available()) {
while (Serial.available()) {
Serial.read(); // 顺手把行尾也读掉
}
startedAt = millis();
setPump(true);
Serial.println(F("Running..."));
}
if (pumpRunning && (millis() - startedAt >= RUN_MS)) {
setPump(false);
Serial.println(F("Stopped. Measure the millilitres you collected,"));
Serial.println(F("then multiply by 0.12 for litres per hour at that height."));
}
}
不用装任何库。真正会把这两个数字花出去的项目,是我们那篇自动浇花系统指南,和那篇迷你鱼菜共生系统。

我们从真实客户身上看到的常见错误
把「5V」读成「引脚可以直接带」。电压是泵需要的东西,电流是它向开关它的那个器件索取的东西。5V 的泵接在 5V 的引脚上,依然是一颗马达挂在 20 mA 上。
在空气里试泵,看它坏没坏。它会响几秒钟,听起来完全正常,而你已经花掉了它的一部分寿命。要试,就在一罐水里试。
照着自由流量那个数字买。那是零扬程下的数字。水要送多高,才决定了到底有没有流量真的送到。
让水箱见了底。几乎没有人是故意让这种泵空转的。他们只是写了一段定时浇水的程序,从一个第三天就会空掉的瓶子里抽水,然后泵就在空气里待完了剩下的一整个星期。如果程序看不见水,那就要么把每一次运行都限制在一个水箱肯定还供得起的水量上,要么给它一个浮球开关或者一根水位探头,让它能自己问。
明明是进水口的问题,却怪到泵头上。泥土、藻类和须根会糊在正面那一片进水缝上,而第一个症状是:泵听起来完全正常,出水却只剩一丝。把它拿出来,冲干净那些缝,然后让它站在一小块垫高的东西上,而不是泡在水箱底部的淤泥里。
FAQ
5V 水泵可以直接接到 Arduino 引脚上吗?
不行。它运行时要 100–220 mA,启动瞬间接近 0.7 A,而引脚是按 20 mA 设计的。中间要放一个继电器、一块 MOSFET 模块或者一块驱动板,并且让它走自己的电源。用 MOSFET 模块或驱动板时,要把它的地和板子的地接在一起;用继电器的触点则完全不需要共地。
迷你潜水泵能把水送多高?
静扬程大约在 40 到 110 cm 之间,因个体而异——而在那个高度上流量是零,不是「小一点」。请按低的那一端规划,然后拿量杯自己量一遍手上这颗。
迷你水泵可以用 PWM 调速吗?
可以,通过 MOSFET 模块或者 DRV8833,但没办法一路调到零。切开供电的同时也切开了泵自己那块换相电路,所以大约低于三分之一到一半占空比时,它只会嗡嗡响,不会转。
我的迷你水泵为什么跑了几分钟就不动了?
最常见的原因是它空转过。它的轴承靠所泵的水来润滑,灌封的定子也是把热倒进同一缸水里,所以在空气里这两件事几分钟内就会一起失效。它也不自吸。
小水泵该用继电器还是 MOSFET?
只需要开和关,或者泵的电源和逻辑是两个不同电压,就用继电器。要 PWM 调速,就用 MOSFET 模块或 DRV8833——3.3V 的板子选 DRV8833。
最后更新:2026 年 9 月。有问题?WhatsApp 联系我们。



Mini Water Pump Submersible DC 3V-5V - 5V WATER PUMP
Arduino Uno Compatible SMD UNO R3 with Type B Cable - ATMEGA328P with CH340G-Microcontroller Project
Relay Module 3.3V 5V 12V 1/2/4/8 Ways Optocoupler Trigger Relay Module 1 2 4 8 Channel Relay Module - 5V RELAY MODULE(1WAY)
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-M 20CM
Power Supply Adapter DC Universal AC to DC Converter PSU 5V2A 5V3A 9V2A 12V2A - P.S. ADAPTOR (5V3A)
5.5x2.1mm DC Power Male Connector Plug Jack Adapter for Arduino DIY Electronics Projects - 5.5x2.1 DC CONNECTOR (F)
IRF520 MOSFET Driver Module PWM Output Power Control for Arduino Raspberry Pi DC Motor Control
DRV8833 Dual Motor Driver 2 DC Motors 1.5A Arduino Smart Car Project
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-F 20CM
R365 12 Water Pump Pnuematic Diaphragm Water Pump Watering System Motor