亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

智能水泄漏检测与电磁阀控制系统

核心组件清单

组件数量备注
铝合金外壳1主控箱体
Arduino UNO1主控微控制器
Arduino Ethernet Shield 21提供有线网络连接
电源模块1双路输出:12V驱动电磁阀,5V供电Arduino
AC接线盒1市电接入与隔离
LED套件(含限流电阻)1状态指示:红/黄/蓝三色
继电器模块21路双路5V + 1路双路12V,控制电机正反转
电动球阀112V直流电机驱动,带限位反馈
JST连接器套装1模块化接线
水浸传感器1并联部署于多个高风险点

项目背景与设计理念

一次偶然交谈让我意识到水泄漏的破坏力:朋友因出差期间水管爆裂,地下室家具尽毁。本项目源自我参加的微软物联网竞赛作品,但采用Arduino而非树莓派实现。我的设计哲学是「职责下放」:将简单任务交给简单设备(如Arduino)自主执行,必要时通过网络协作提供高级服务。即使网络中断,本地核心功能(检测漏水、切断水源)仍可正常运行。

系统架构与安装示意

智能水泄漏检测与电磁阀控制系统
主水管入口位于底部,蓝色电动球阀与手动旁路阀并联。正常运行时手动阀关闭;停电时打开手动阀旁路,保障用水不中断。

电动球阀内置12V直流电机,极性反转控制正反转。限位开关提供位置反馈:红线触地=全关,绿线触地=全开。上电后给左上接线端子施加正电压即可开阀。

控制器面板布局

智能水泄漏检测与电磁阀控制系统
左至右:AC电源插座、复位按钮、三色状态LED、传感器/电机接口、Ethernet口、USB调试口

传感器部署示例

智能水泄漏检测与电磁阀控制系统
传感器平铺于管道接头、热水器底部等易漏水区域,多个传感器并联接入同一检测端口

内部接线实拍

智能水泄漏检测与电磁阀控制系统
继电器模块、电源模块、Arduino主板整齐布局于铝合金外壳内

⚠️ 关键安全警示

本项目使用双路输出电源模块:12V路驱动电磁阀,5V路直接给Arduino 5V引脚供电(而非Vin)。一旦AC/DC模块通电,严禁再插入Arduino DC电源插头或USB线!若需USB调试,请自制仅保留数据线(D+/D-)的专用线缆。AC接线盒至电源模块间为110V市电,严禁带电操作,严禁触碰!

核心代码逻辑(Arduino C++)

// 关键常量定义
#define MQTT_CLIENT_PREFIX "GLX"
#define MQTT_LOCATION "BASEMENT"
#define MQTT_UID "001"
const int VALVE_TIMEOUT = 15; // 电机运行超时(秒)
const int MAIN_LOOP_DELAY = 500; // 主循环周期(ms)

// 引脚映射
const int LED_SYS = A0;      // 蓝灯
const int LED_FAULT = A1;    // 黄灯
const int LED_ALARM = A2;    // 红灯
const int WATER_SENSOR = 2;  // 水浸传感器(低电平触发)
const int BTN_RESET = 3;     // 复位按钮(上拉输入)
const int VALVE_CLOSED = 5;  // 关阀限位(低电平触发)
const int VALVE_OPENED = 6;  // 开阀限位(低电平触发)
const int RELAY_1 = 8;       // 电机继电器1
const int RELAY_2 = 7;       // 电机继电器2

// 状态变量
int waterLocal = 0, waterRemote = 0;
int valveState = -1; // -1未知, 0开, 1关
int valveConnected = -1, mqttConnected = -1;
volatile bool resetRequested = false;

// 防抖动读取
int readDebounced(int pin, int interval, int confirm) {
  int val = digitalRead(pin), cnt = 1;
  while (cnt <= confirm) {
    delay(interval);
    if (digitalRead(pin) == val) cnt++; else { cnt = 1; val = digitalRead(pin); }
  }
  return val;
}

// 继电器控制:0=断电, 1=关阀, 2=开阀
void setRelays(int mode) {
  switch(mode) {
    case 0: digitalWrite(RELAY_1, HIGH); digitalWrite(RELAY_2, HIGH); break;
    case 1: digitalWrite(RELAY_1, HIGH); digitalWrite(RELAY_2, LOW);  break; // 关阀极性
    case 2: digitalWrite(RELAY_1, LOW);  digitalWrite(RELAY_2, HIGH); break; // 开阀极性
  }
}

// 等待限位触发
bool waitLimit(int pin) {
  for (int t = VALVE_TIMEOUT; t > 0; t--) {
    if (readDebounced(pin, 10, 10) == LOW) return true;
    delay(1000); Serial.print('.');
  }
  Serial.println(F(" 电机超时,请检查供电与接线"));
  return false;
}

// 开阀流程:先撞击关限位复位,再正向开阀
int openValve() {
  Serial.print(F("开阀中..."));
  setRelays(1); if (!waitLimit(VALVE_CLOSED)) return -1;
  setRelays(2); if (!waitLimit(VALVE_OPENED)) return -1;
  valveConnected = 1; valveState = 0; setRelays(0);
  Serial.println(F(" 阀门全开,开始监测")); return 0;
}

// 关阀流程:先撞击开限位复位,再反向关阀
int closeValve() {
  Serial.print(F("关阀中..."));
  setRelays(2); if (!waitLimit(VALVE_OPENED)) return -1;
  setRelays(1); if (!waitLimit(VALVE_CLOSED)) return -1;
  valveConnected = 1; valveState = 1; setRelays(0);
  Serial.println(F(" 阀门已关闭,请排查漏水点并擦干传感器")); return 0;
}

// MQTT回调:解析远程节点上报的漏水消息
void mqttCallback(char* topic, byte* payload, unsigned int len) {
  String msg = String((char*)payload).substring(0, len);
  if (msg.indexOf("WaterDetected") >= 0 && msg.indexOf(MQTT_LOCATION) == -1)
    waterRemote = 1; // 忽略自身上报,避免自触发
}

// 主循环:LED状态机、漏水判定、定时上报、看门狗复位
void loop() {
  updateLEDs(); // 分两阶段更新LED,实现闪烁效果
  if (resetRequested) { publishStatus(); wdt_enable(WDTO_1S); delay(5000); }
  waterLocal = !readDebounced(WATER_SENSOR, 100, 10);
  if (waterLocal || waterRemote) { if (valveState == 0) closeValve(); }
  if (--mqttIntervalCnt <= 0) {
    if (waterLocal) publishFault(); publishStatus(); mqttIntervalCnt = 20;
  }
  delay(MAIN_LOOP_DELAY/2); client.loop(); delay(MAIN_LOOP_DELAY/2);
}

原理图

智能水泄漏检测与电磁阀控制系统
完整原理图:含电源、继电器驱动、限位反馈、水浸传感器并联、以太网扩展板接线

制造工艺

  1. 树莓派传感器与执行器控制实战:加速度计、舵机与数据流
  2. 全自动泳池注水与监控系统:树莓派+低功耗Arduino传感器网络
  3. 用 Segger J-Link 调试 Arduino Portenta H7 双核系统
  4. 基于 Arduino、1Sheeld 与红外控制的万能安卓遥控器
  5. Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
  6. 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
  7. Arduino 电源控制中心:N-FET/P-FET/继电器/RTC 多功能扩展板
  8. Arduino 音频频率检测:基于 FFT 测量最响亮声音峰值
  9. Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
  10. Firmata + Xbox 手柄无线遥控 Arduino 小车:UWP 应用桥接方案
  11. DIY Arduino 加湿器控制器:继电器安全控制高压电路
  12. 石灰浆料系统:夹管阀与蠕动泵的“黄金搭档”