基于树莓派 2 和 Arduino 的全功能泳池控制器套件:继电器板、温度传感器与配件
项目概述
作者因泳池泵定时器在三个月内两次故障,且更换成本高达 120 美元且功能有限,决定自行开发一套低成本、高扩展性的自动化泳池控制系统。该系统基于运行 Windows 10 IoT Core 的树莓派 2,配合 Arduino Pro Mini 读取多路 DS18B20 防水温度传感器,通过固态继电器板控制交流设备(水泵、瀑布泵、泳池灯、庭院灯),并通过直流继电器控制太阳能加热阀门。整套系统成本远低于原有定时器与传感器的更换费用,并实现了远程监控与多变量智能控制。
核心硬件清单
- 树莓派 2 Model B ×1
- PNY 16GB MicroSD 卡 ×1
- SparkFun Arduino Pro Mini 328 (5V/16MHz) ×1
- SainSmart 5V 4路固态继电器板 ×1
- Tolako 5V 继电器模块 ×1
- DS18B20 防水温度传感器 ×3(泳池水、太阳能热水、室外空气)
- 4.7kΩ 电阻(1/4W,用于 1-Wire 总线上拉) ×10
- 树莓派 USB WiFi 适配器 ×1
- USB 公对母延长线 (1 英尺) ×1
- 管夹 (6只装) ×1、J-B Weld MarineWeld 环氧胶 ×1、座圈垫圈 ×2
- Micro USB 电源适配器 ×1
- 3D 打印机 (Printrbot Simple) 用于打印外壳与传感器支架
- FTDI USB 转 TTL 模块 (给 Arduino Pro Mini 烧录固件)
软件与服务
- Windows 10 IoT Core (树莓派操作系统)
- Visual Studio 2015 (C# 后台应用开发)
- IIS / HTTP 服务 (设备间通信)
- Arduino IDE (Arduino 固件编写)
- OneWire 库、DallasTemperature 库 (温度传感器驱动)
- openHAB (开源家庭自动化平台,提供替代 UI)
系统架构与关键模块
1. 交流设备控制 (固态继电器 + 树莓派 GPIO)
树莓派通过 GPIO 驱动 4 路固态继电器,再控制原有 30A 交流中间继电器,实现对泳池泵、瀑布泵、泳池灯、庭院灯的远程开关。所有交流接线均在专用外壳内完成,符合户外防护要求。
2. 3D 打印外壳
外壳由作者儿子设计,容纳树莓派、固态继电器板及接线端子,提供良好的固定与散热。所有 STL 文件可在项目 GitHub 仓库获取。
3. 多点温度监测 (Arduino Pro Mini + I²C)
三个 DS18B20 传感器分别安装于:室外空气、泳池回水管、太阳能集热器回水管。Arduino Pro Mini 每秒轮询一次三路温度,通过 I²C (地址 0x40) 以字符串格式 "PoolTemp|SolarTemp|OutsideTemp" 向树莓派上报。树莓派端每 4 秒读取一次 I²C 数据并缓存,供 Web API 调用。
4. 传感器安装工艺要点
- 支架建议用 ABS 打印,填充率 ≥75%,耐候与耐热性更好。
- 水温传感器安装:在管道钻 5/16" 孔,插入传感器约 3/4",加座圈垫圈固定,顶部灌注 J-B Weld 环氧胶静置 24 小时固化。
- 安装前务必关闭所有水泵、泄压,避免喷水损坏设备。
5. 太阳能阀门控制 (直流继电器)
太阳能集热器使用直流电磁阀,树莓派通过另一路直流继电器驱动。控制逻辑:仅当室外温度 > 60°F 且太阳能回水比泳池水高 ≥ 2°F 时开启阀门,否则关闭,避免无效循环浪费能源。
6. 应用开发与部署
树莓派运行无头的 Windows 10 IoT Core 后台应用,内置简易 HTTP 服务器 (端口 8888) 响应 GET/POST 请求:
- GET /SENSORS/POOLTEMP 等返回当前温度
- GET /DEVICES/POOLPUMP/STATE 返回设备状态
- POST /DEVICES/POOLPUMP/ON|OFF 控制继电器
部署关键经验:不能直接从 Visual Studio "Release" 部署,需先删除旧部署,再通过 AppX Manager 安装 .appx 包;采用 "Blinky Web Server" 模式 (前台 UI 应用启动后台 HTTP 服务) 可避免首次请求后进程崩溃。
7. 用户界面
自制 HTML5 单页应用,兼容手机/平板/电脑浏览器,实时显示三路温度、六路设备状态并提供开关按钮。后期接入 openHAB,配置 Sitemap 与 Items,获得原生移动 App 体验与规则引擎支持。
核心代码片段
Arduino 固件 (I²C 从机读温度)
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#define SLAVE_ADDRESS 0x40
const int POOL_PIN = 3, SOLAR_PIN = 5, OUTSIDE_PIN = 7;
OneWire poolTemp(POOL_PIN), solarTemp(SOLAR_PIN), outsideTemp(OUTSIDE_PIN);
DallasTemperature poolSensor(&poolTemp), solarSensor(&solarTemp), outsideSensor(&outsideTemp);
char data[24]; String temperatureData; long prevMillis = 0, interval = 1000;
void setup() {
poolSensor.begin(); solarSensor.begin(); outsideSensor.begin();
Wire.begin(SLAVE_ADDRESS); Wire.onRequest(requestEvent);
}
void loop() {
if (millis() - prevMillis > interval) { prevMillis = millis(); readTemperatures(); }
}
void readTemperatures() {
poolSensor.requestTemperatures(); solarSensor.requestTemperatures(); outsideSensor.requestTemperatures();
temperatureData = String(poolSensor.getTempFByIndex(0)) + "|" +
String(solarSensor.getTempFByIndex(0)) + "|" +
String(outsideSensor.getTempFByIndex(0));
while (temperatureData.length() < 24) temperatureData += " ";
}
void requestEvent() {
temperatureData.toCharArray(data, 24); Wire.write(data);
}
树莓派 C# 关键类 (节选)
HttpServer:基于StreamSocketListener的轻量 HTTP 服务器,处理 GET/POST,回传 JSON 文本。Devices:封装 5 个 GPIO 引脚 (12,13,16,18,22) 对应 5 路继电器,提供PinValue与State属性。Sensors:后台Timer每 4 秒读取 I²C 24 字节,解析更新三个温度字符串属性,线程安全加锁。
原理图与 3D 模型
项目提供三张原理图:交流继电器接线、直流太阳能阀门接线、树莓派–Arduino–传感器 I²C 接线。所有 3D 打印件 (外壳、空气温度支架、水温传感器支架) STL 文件托管于 GitHub。
项目地址
完整 Visual Studio 2015 解决方案、Arduino 固件、openHAB 配置、STL 文件均可在 GitHub 获取:
https://github.com/mmackes/Windows-10-IoT-PoolController
制造工艺
- 树莓派专业温度监测:基于 DS18B20 传感器的完整指南
- 树莓派 2 搭建户外气象站:接入 ADS‑WS1 串口气象站
- 树莓派精准监测机柜温度:DS18B20 多点部署实战
- 基于 Sensorflare 与树莓派的 433 MHz 智能家居控制器构建指南
- 树莓派 OpenCV 乒乓球追踪进阶教程
- 树莓派 LIRC 通用红外遥控器专业构建指南
- 树莓派 PIR 运动传感器控制 LED 实战指南
- 树莓派射频转直流:包络检波器构建与故障排查
- Cycle Chaser:树莓派让自行车变身夜间光影秀
- 树莓派低成本土壤湿度传感器:智能灌溉 DIY 指南
- 树莓派防窃报警器 DIY:压力触发播放警报声
- 精通树莓派传感器:电子与通信协议实战指南