UnifiedWater v1 — 基于 Arduino MKR GSM 1400 的完整水质监测套件
零部件与材料
| Arduino MKR GSM 1400 | ×1 |
| Adafruit NeoPixel 环形灯 (WS2812 5050 RGB, 16颗) | ×1 |
| GY-21 温湿度模块 | ×1 |
| 浊度传感器 (光电晶体管输出) | ×1 |
| Adafruit 防水 DS18B20 数字温度传感器 | ×1 |
| DFRobot Gravity: 模拟矛头式 pH 传感器/计套件 | ×1 |
| SparkFun 12mm 轻触开关 | ×1 |
| 跳线 (若干) | ×1 |
| 220Ω 电阻 | ×1 |
所需工具
- 电烙铁
软件与在线服务
- Arduino Web Editor
- SORACOM Air 物联网连接平台
- SORACOM Harvest 数据采集
- SORACOM Lagoon 可视化仪表盘
项目详解
概述
河流是生存与贸易命脉。过去十年全球致力减少水体污染,但污染源头在河流——人们不直接向海倾倒垃圾,而是倒入河流,最终随河流入海。数据是治理关键。UnifiedWater 旨在提供低成本、可规模化部署的设备,采集并分析水质数据,便于企业/个人协同监测。
- 企业模式 (模式 2):多设备部署于河流不同节点,定时采集上传同一数据库,一键查看全流域状态。
- 个人便携模式 (模式 1):随身携带,按键触发采样,30 秒后数据上传在线看板。
监测参数:水温、pH、浊度、大气温湿度 — 涵盖河流污染评估核心指标。
演示视频 | 效果图

功能架构
前端设备:MKR GSM 1400 采集数据并经 GSM 上传 Soracom 云。两种工作模式:
• 模式 1:按键单次采样,适合间歇性监测
• 模式 2:定时自动采样上传,适合长期驻留监测
采集流程图示:


供电方案:LiPo 电池(板载接口)、移动电源、或 VIN 引脚外接电池。设备采样间隙深度睡眠以省电。
LED 环指示:三种状态
• 多彩循环:初始化/处理中
• 红闪:警告(需放入水中或错误)
• 蓝/绿渐进:正在采样,请置入水中

采样过程:传感器完全浸入水中。采样前 6 秒预热,建议预热期间即浸入以获最佳结果。
数据封装:以 JSON 发送至 Soracom,示例:
{
"Latitude": 53.3474617,
"Longitude": -6.2514529,
"waterpH": 7.30,
"waterTurbidity": 94,
"waterTemp": 12.10,
"atmoTemp": 14.50,
"atmoHum": 82,
"deviceID": 1,
"deviceName": "device1",
"epoch": 1559392636,
"mode": 2
}
后端云平台:Soracom 生态
• Soracom Harvest 接收存储数据
• Soracom Lagoon 构建仪表盘:地图标记采样点(颜色反映污染度)、折线图趋势、汇总表格、邮件告警(pH/浊度异常)

可扩展性:多设备并发上传同一仪表盘,低成本易部署,支持 Soracom Krypton 批量注册。未来可实现跨组织共享仪表盘协作。
核心优势
- 极低运维成本,设备高度自治
- 轻松扩展,单机或集群部署均宜
- 实时采集上传,云端即时可视化
- 随时随地通过在线看板查看数据
硬件构建指南
步骤 1:物料清单
- Arduino MKR GSM 1400
- 16灯 RGB LED 环
- GY-21 温湿度模块
- 浊度传感器
- 防水温度传感器
- pH 传感器及模块
- 轻触开关
- 220Ω 电阻
- 跳线若干

步骤 2:电路连接
建议焊接固化,面包板原理图如下:

MKR GSM 准备:焊好传感器后,装入 SIM 卡、GSM 天线、电池。本例用 2节 AA 电池经 VIN 供电。

步骤 3:代码逻辑解析
四大核心模块:
- 采集传感器数据
- 获取时间与地理位置
- 数据处理聚合
- 发送数据至云端
采集传感器数据:6 秒预热后循环 16 次,每次点亮一颗 LED。波动大的 pH/浊度各采 16 次取均值;高精度温度仅最后一轮采一次。
Serial.println("Taking Sample");
delay(6000); // 传感器预热
for (int i = 0; i < 16; i++) {
if (mode == 1) strip.setPixelColor(i, strip.Color(0, 255, 0));
else strip.setPixelColor(i, strip.Color(0, 0, 255));
strip.show();
waterTurbidity += getWaterTurbidity();
waterPh += getWaterPh();
if (i > 14) {
waterTemperature = getWaterTemp();
atmoTemperature = getAtmoTemp();
atmoHumidity = getAtmoHumidity();
}
delay(500);
}
// 熄灭 LED 环
获取时间与地理位置:时间从同步 GSM 网络的板载 RTC 读取;经纬度从 GPRS 定位获取。
void getCredentials() {
currentEpoch = processTime(); // RTC 时间
while (!getLocation()); // 阻塞直到定位成功
}
bool getLocation() {
if (location.available()) {
latitude = location.latitude();
longitude = location.longitude();
return true;
}
delay(500); return false;
}
数据处理:计算均值,串口打印,生成 JSON 字符串。
void processData() {
waterPh /= 16; waterTurbidity /= 16;
// 串口输出各项数值...
}
String makeLine() {
// 拼装 JSON 字符串,含所有字段
return dataReturned;
}
发送数据:HTTP POST 至 harvest.soracom.io,打印服务器响应,随后进入睡眠等待下一次触发。
void parseData(String dataToSend) {
if (client.connect(url, 80)) {
client.println("POST / HTTP/1.1");
client.println("Host: harvest.soracom.io");
client.println("User-Agent: Arduino/1.0");
client.println("Connection: close");
client.print("Content-Length: "); client.println(dataToSend.length());
client.println(); client.println(dataToSend);
// 读取响应...
}
}
步骤 4:关键变量配置
mode:1=按键触发,2=定时自动deviceID/deviceName:集群部署时的唯一标识sleepTime:采样间隔(测试用 5 秒,实地建议 15 分钟)proDebug:调试开关,true时需打开串口监视器才运行
步骤 5:上传代码与首次采样
将 MKR GSM 连接电脑上传代码(mode=1),传感器浸入水中,按键触发采样上传,重复几次填充 Soracom Air 数据。
步骤 6:配置 Soracom 平台
6.1 创建账号并注册 SIM:按官网向导注册、激活 SIM、创建组、启用 Harvest。

6.2 创建组与启用 Harvest

步骤 7:配置 Lagoon 可视化看板
创建仪表盘、添加地图/图表/表格组件、设置邮件告警阈值。

传感器校准指南
- pH 传感器:探头浸入 pH 7 纯净水静置 5 分钟,串口监视读数,调节模块电位器至读数为 7。
- 浊度传感器:探头浸入纯净水,读取模拟引脚电压,修改
sensors.h中calibration变量为该电压值,以此为 0% 浊度基准。
依赖库
- ArduinoLowPower (Arduino LLC, LGPL)
- Adafruit_NeoPixel (Phil Burgess, LGPL)
- MKRGSM (Arduino AG, LGPL)
- Wire (Nicholas Zambetti, LGPL)
- OneWire (Jim Studt, GPL)
- DallasTemperature (GPL)
- RTCZero (Arduino LLC, LGPL)
外壳制作与最终部署
制作便携且可固定的外壳,支持两种模式切换。

确认模式设置正确,即可实地部署。检测你身边的河湖水质,探索仪表盘更多组件!
项目背景
数据是新货币,高效采集是改善环境的关键。通过集体监测河湖污染,唤醒公众关注,推动行动。受 Soracom 大赛启发,希望企业与个人能在共享仪表盘上协作,全球可视化水体健康状况。
你将为阻止水污染做什么?行动必须从今天开始,明天就太晚了。

源代码
GitHub 仓库:https://github.com/Andrei-Florian/UnifiedWater-v1
原理图

schematics_e7TRP6KJKI.fzz
制造工艺
- 树莓派 PIR 运动传感器控制 LED 实战指南
- 树莓派低成本土壤湿度传感器:智能灌溉 DIY 指南
- 树莓派 DS18B20 温度传感器测试与 HC-SR04 超声波测距实战
- 树莓派 + MCP9808 + InfluxDB + Grafana:家庭温度监测系统
- Sensor Telemetry 2.0.1:基于 Azure IoT Hub 的高精度温度监控系统
- 低成本情绪传感器与 EEG:实时情绪检测硬件方案
- 树莓派 2 (Windows 10 IoT Core) 采集 Adafruit 10DOF IMU 数据上传 Azure Event Hubs
- MyRiver:基于 Arduino MKR FOX 1200 的河流水质远程监测系统
- Arduino Cloud 传感器塔:温度、动作与气体监测
- 现代复古点唱机:Raspberry Pi + Arduino NeoPixel 声控灯光音乐播放器
- 实时物联网压力监测:MKR GSM 1400 + Arduino Cloud + Google Sheets
- 氧传感器 (O2) 详解:作用、位置与故障征兆