1. 项目概述:智能洗手液机的自动化改造
去年帮朋友改造过一批商用洗手液机,发现传统按压式设计在公共场所存在两大痛点:一是机械结构容易损坏,二是交叉接触可能带来卫生隐患。这次我们就用最常见的Arduino开发板配合红外传感器,实现一个零接触的智能洗手液机方案。
这个项目的核心在于通过非接触式传感技术触发液体泵工作,整个过程不需要任何物理接触。相比市售成品动辄上千元的价格,自制成本可以控制在200元以内,而且所有代码和电路都是开源的,特别适合学校、餐厅等需要批量部署的场所。
2. 硬件选型与电路设计
2.1 核心组件清单
- 主控板:Arduino Nano(体积小,自带USB接口)
- 传感器:HC-SR501人体红外模块(检测距离可调)
- 执行机构:12V微型隔膜泵(流量约1L/min)
- 电源:12V/2A直流适配器
- 辅助元件:继电器模块、硅胶软管、亚克力外壳
注意:选购隔膜泵时要确认其兼容洗手液的化学性质,普通水泵的橡胶部件可能被酒精腐蚀。我测试下来,食品级硅胶材质的泵头最为耐用。
2.2 电路连接示意图
arduino复制[红外传感器] --D2--> [Arduino]
|
D13
|
[继电器] <--[1N4007二极管]-- [隔膜泵]
|
[12V电源]
实际接线时有三个关键点:
- 继电器线圈两端必须并联续流二极管
- 传感器信号线建议加装10kΩ上拉电阻
- 泵的进液口要加装单向阀防止回流
3. 程序设计逻辑解析
3.1 主控制流程
arduino复制void loop() {
int sensorState = digitalRead(IR_PIN);
if(sensorState == HIGH) {
digitalWrite(PUMP_PIN, HIGH);
delay(800); // 出液时长
digitalWrite(PUMP_PIN, LOW);
delay(3000); // 防误触间隔
}
}
这个基础版本实现了:
- 检测到手部靠近(传感器输出高电平)
- 启动泵工作800毫秒(约出液1.5ml)
- 强制3秒冷却期防止连续触发
3.2 进阶功能优化
实际部署时我增加了以下增强功能:
- 环境光补偿:通过光敏电阻自动调整传感器灵敏度
arduino复制int lightLevel = analogRead(LIGHT_SENSOR);
int triggerThreshold = map(lightLevel, 0, 1023, 500, 200);
- 流量累计统计:EEPROM存储剩余液量
arduino复制EEPROM.update(addr, remainingML);
if(remainingML < 50) blinkLED(); // 低液量提醒
- 节能模式:无人时自动进入低功耗状态
arduino复制LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
4. 机械结构组装要点
4.1 泵体安装技巧
- 进液管要插入洗手液瓶底部,出液口建议使用L型弯头
- 泵体与外壳之间加装减震海绵降低噪音
- 所有管路连接处使用不锈钢喉箍紧固
4.2 传感器调试
HC-SR501模块有两个旋钮:
- 灵敏度调节(顺时针增加检测距离)
- 延时调节(控制输出信号持续时间)
建议初始设置:
- 检测距离:50-80cm
- 延时:0.3秒(避免手部微动导致多次触发)
5. 常见问题排查指南
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 无出液 | 泵反转/管路堵塞 | 调换电源极性/用温水冲洗管路 |
| 持续出液 | 继电器粘连 | 更换继电器并检查续流二极管 |
| 误触发 | 传感器灵敏度太高 | 逆时针调节灵敏度旋钮 |
| 液量不准 | 泵压不足 | 检查电源是否达到12V/2A |
调试时最容易忽视的是电源质量问题。我曾遇到一个案例:使用劣质电源适配器导致泵的转速不稳定,最终更换为工业级开关电源才解决。
6. 成品优化方向
经过三个月的实际使用,总结出以下改进建议:
- 双传感器防误触:增加第二个红外传感器,只有两个同时触发才出液
- 液位检测:用超声波传感器实时监测洗手液余量
- 网络功能:通过ESP8266模块上传使用数据到管理后台
- 语音提示:加入WT588D语音模块播报操作指引
最近测试发现,将出液时间从固定的800ms改为动态计算效果更好:根据前10次使用的平均间隔自动调整单次出液量,这样既能保证清洁效果,又能节省约15%的洗手液消耗。
