Arduino 自动除湿机排水泵控制系统:从原理到落地的完整实现
项目缘起
除湿机水箱满水自动停机,需人工频繁倒水。本项目设计一套基于 Arduino UNO 的自动排水系统:利用水的导电性配合达林顿三极管检测高/低水位,驱动继电器控制 120VAC 排水泵,实现“高水位开泵、低水位停泵”的全自动循环,彻底解放双手。
核心原理
水位检测:达林顿三极管放大微弱导电电流
自来水电阻率约 1-10 kΩ·cm,两根平行导线浸入水中构成 ~100kΩ 电阻。直接读取 GPIO 电压分压信号极弱,易受干扰。采用 MPSA13 达林顿对(两级放电极管集成,电流增益 β₁×β₂ ≈ 10,000),将微弱基极电流放大为可靠的集电极输出,直接驱动 Arduino 数字输入口(内部上拉)。
- 上探针(高水位)→ 达林顿 1 → Arduino D2
- 下探针(低水位/泵吸水口上方)→ 达林顿 2 → Arduino D3
- 公共参考极(最长)接 5V
- 状态指示 LED 跟随各达林顿发射极,直观显示水位


泵控制:继电器隔离强弱电
SPDT 继电器(额定 120VAC/1A)串联在泵电源火线回路:
- 线圈端:一端接 GND,一端接 Arduino D8(低电平触发或高电平触发视模块)
- 触点端:COM 接市电火线,NO 接泵火线输入
- 飞轮二极管(1N4007)跨接线圈抑制反向电动势

硬件清单(BOM)
| 分类 | 器件 | 规格/关键参数 | 数量 |
|---|---|---|---|
| 主控 | Arduino UNO R3 | ATmega328P, 5V 逻辑 | 1 |
| 扩展板 | Adafruit Proto Shield | 焊接原型板,做成 Shield 形态 | 1 |
| 水位检测 | MPSA13 达林顿三极管 | TO-92, Vceo 30V, hFE > 10k | 2 |
| 泵控制 | SPDT 继电器模块 | 120VAC/24VDC 1A, 5V 线圈, 含光耦隔离 | 1 |
| 接线 | 端子排 300V/20A | 12-24AWG, 3位 | 1 |
| 线材 | UL1007 22AWG 连接线 | 信号线 | 1卷 |
| 强电 | 16AWG 三芯接地延长线 | 剥离做泵电源回路 | 1 |
| 外壳 | 防水工程塑料盒 | IP65, 含线缆密封接头 | 1 |
| 执行器 | 微型潜水泵 | 120VAC, ≤1A, 扬程≥2m | 1 |
| 管路 | 3/8″ 内径软管 | 100ft 卷 | 1 |
| 辅助 | 焊锡、助焊膏、热缩管、扎带 | -- | 若干 |
工具清单
- 电烙铁(温控 350°C)、吸锡器
- 剥线钳、斜口钳、钢锉/塑料锉(开外壳孔)
- 万用表(测通断、电压、电阻)
软件逻辑:滞回控制(防抖动)
/*
* 自动除湿机排水泵控制器
* MIT License - Zachary J. Fields
*/
const uint8_t ENABLE_PIN = 2; // 低水位探针 (LOW=有水)
const uint8_t FULL_PIN = 3; // 高水位探针 (HIGH=有水)
const uint8_t RELAY_PIN = 8; // 继电器控制 (HIGH=吸合开泵)
void setup() {
pinMode(ENABLE_PIN, INPUT_PULLUP); // 内部上拉,水接地拉低
pinMode(FULL_PIN, INPUT_PULLUP);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // 上电默认关泵
}
void loop() {
// 高水位触发 -> 开泵(置位)
if (digitalRead(FULL_PIN) == LOW) { // 探针浸水 -> 达林顿导通 -> 拉低
digitalWrite(RELAY_PIN, HIGH);
}
// 低水位复位 -> 停泵(复位)
else if (digitalRead(ENABLE_PIN) == HIGH) { // 探针露出水面 -> 达林顿截止 -> 上拉变高
digitalWrite(RELAY_PIN, LOW);
}
// 中间区域保持原状态(滞回)
}
逻辑时序图
水位上升: [低水位] ---(触及上探针)--> [高水位] --> 继电器吸合 -> 泵运行 -> 水位下降 水位下降: [高水位] ---(脱离下探针)--> [低水位] --> 继电器释放 -> 泵停止 -> 等待下一轮
滞回宽度 = 两探针垂直距离,避免水面波动导致泵频繁启停。
制作实录
1. 面包板验证
- 搭建达林顿检测电路,串联 100Ω 限流电阻驱动指示 LED
- 验证:手指捏湿探针 → LED 亮;松开 → LED 灭
- 测试继电器模块:D8 输出高/低电平 → 听“咔哒”声、量触点通断


2. Proto Shield 焊接成型
- 按原理图布局:左侧达林顿+LED,右侧继电器驱动,中间端子排引出探针/泵/市电
- 强弱电区域物理隔离 > 5mm,走线加粗(泵回路用 16AWG)
- 焊接后万用表逐网络测通断、对地绝缘 > 10MΩ


3. 外壳加工与组装
- 塑料盒开孔:市电线用尼龙线夹固定(防拔脱),探针线用防水接头(PG7)
- 继电器模块双面胶固定盒底,Shield 插在 Arduino 上再放入盒内
- 泵端软管用扎带锁紧,防震动脱落

安装调试指南
- 探针定位:下探针置于泵吸口上方 2-3cm(防干转),上探针置于除湿机原浮子开关触发点下方 1-2cm
- 公共参考极:最长,伸至水箱底部,确保始终浸水
- 上电测试:手动注水至上探针 → 泵启动 → 排水至下探针露出 → 泵停止
- 长期运行:观察 3-5 个循环,确认无卡顿、漏电、泵异响
安全警示 ⚠️
- 强电致死风险:市电部分必须由持证电工操作,外壳可靠接地,上电前绝缘测试
- 泵干转保护:下探针必须低于泵吸口,否则泵抽空过热烧毁
- 水质影响:纯水/蒸馏水不导电,此法失效;加湿器/除湿机冷凝水含离子可用
- 电解腐蚀:探针长期直流极化会腐蚀,建议镀金/不锈钢探针或改交流激励检测
扩展思路
- 加装 ESP8266/ESP32 上报水位、泵运行时长至 Home Assistant / MQTT
- 增加流量计统计累计排水量,预测除湿效率
- 双泵冗余:主泵故障自动切换备泵,并发送报警通知
- 太阳能供电版:LiFePO4 电池 + 太阳能板,彻底离网
原理图

制造工艺
- 汽油泵:从手动装置到智能加注终端的演进
- 热泵技术:设计、制造与未来趋势
- DIY 蓝牙控制 Arduino 间谍小车
- FlickMote:基于手势的智能家居红外遥控器
- DIY Arduino TV-B-Gone:万能关机遥控器
- 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
- Arduino Uno 自动化乐高星球大战发射器
- Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
- SunGlass-BOT:基于 Arduino 的智能变色墨镜自制指南
- Arduino 项目优化供电方案:从按键开关到电池监测与数据记录
- Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
- 从零构建智能 Arduino 四足机器人:完整指南