实时物联网压力监测:MKR GSM 1400 + Arduino Cloud + Google Sheets
核心硬件清单
| 组件 | 数量 | 关键规格/用途 |
|---|---|---|
| Arduino UNO | 1 | 采集传感器数据,通过串口转发给MKR GSM |
| Arduino MKR GSM 1400 | 1 | 蜂窝网关,经Serial1与UNO通信,上传数据至Arduino Cloud |
| 压力传感器 (0-150 psi) | 1 | 模拟输出,接UNO A2 |
| DHT22温湿度传感器 | 1 | 数字接口,接UNO D11 |
| DS3231 RTC模块 | 1 | I2C接口,提供精准时间戳 |
| 四路逻辑电平转换器 (BSS138) | 1 | 5V(UNO)↔3.3V(MKR) I2C/串口电平转换 |
| 3.7V 2000mAh+ LiPo电池 | 2 | 分别供电UNO与MKR,支持移动部署 |
| 升压转换模块 | 1 | 电池升压至5V供UNO |
| 基础元件包(LED/电阻/导线等) | 1 | 指示灯、上拉电阻、面包板搭建 |
| 面包板 | 1 | 原型搭建 |
云端与软件服务
- Google Sheets:数据存储、解析、邮件告警脚本
- Arduino IoT Cloud:设备管理、变量监控、Webhook触发
- Arduino Web Editor / IDE:代码编写烧录
项目目标
构建低成本原型,利用蜂窝网络远程监测工业设备压力,适用于无WiFi/有线网络的现场。数据流向:
压力传感器 → UNO(模拟转压力值) → 串口 → MKR GSM 1400(蜂窝上传) → Arduino Cloud → Webhook → Google Sheets(解析/存储/告警)
数据流详细走向
步骤1:压力传感器 → UNO
传感器输出模拟电压,UNO读取A2引脚,按线性公式换算为psi:
float voltage = (analogRead(A2) * 5.0) / 1023.0;
// 0 psi → 0.4889V (约100 ADC), 150 psi → 4.5V
float m = (150 - 0) / (4.5 - 0.4889);
float b = 150 - m * 4.5;
float pressure_psi = m * voltage + b;
参考教程:YouTube压力传感器接线与标定
步骤2:UNO → MKR GSM 1400 (串口)
跨设备串口通信三原则:RX↔TX交叉、共地、波特率一致(9600)。UNO使用Serial,MKR使用Serial1(硬件串口1,引脚13/14)。
三种触发上传模式:
- 定时上报:每30分钟(
transmitFrequency)主动发送 - 阈值触发:压力>40 psi或<20 psi持续>2分钟(
dtLastTriggerLimit)立即上报 - 云端轮询:Arduino Cloud下发指令(
pinCloud=2)→MKR拉高UNO A1引脚→UNO主动上报当前值
步骤3:MKR GSM 1400 → Arduino Cloud (蜂窝)
MKR解析UNO串口数据包(格式<索引,告警标志,持续时间,按钮状态,月,日,年,时,分,秒,湿度,温度,压力>),更新Cloud两个变量:
dataStringCloud:打包所有遥测数据的字符串,简化Google Sheets解析pinCloud:云端控制引脚,1=点亮板载LED,2=触发UNO即时上报
步骤4:Arduino Cloud → Google Sheets (Webhook)
核心是Google Apps Script的doPost(e)函数。设置步骤:
- 新建Google Sheets → 工具 → 脚本编辑器
- 粘贴
doPost代码(见附件GoogleSheetsScript.js) - 发布 → 部署为网络应用:版本选New,执行身份我,访问权限任何人(含匿名)
- 复制生成的URL,粘贴到Arduino Cloud的Webhook配置页
参考项目:Arduino IoT Cloud Google Sheets Integration
步骤5:Google Sheets解析与存储
doPost将dataStringCloud按逗号拆解,写入RawData表表头对应列;再汇总去重写入Data表最新行。表格示例:在线演示表
步骤6:Google Sheets邮件告警
脚本含第二函数sendEmail(),每分钟定时触发(触发器设置:时间驱动→分钟计时器→每分钟);逻辑:
- 压力超限恢复正常 → 发送"Status Change Alert - Normal"
- 压力超限持续 → 发送"Status Change Alert - Outside Setpoints"(最多4次)
- 设备>60分钟无上报 → "Alert - Over 60 minutes Since Last Device Update"
- 设备恢复上报 → "Alert - Device Started Updating"
关键指标
| 指标 | 实测值 | 优化方向 |
|---|---|---|
| 电池续航 | ~24小时 | 关闭OLED屏、移除DHT22/DS3231、降低上报频次 |
| 日均流量 | ~0.7 MB | 仅上传压力、延长上报间隔至1小时 |
| 总成本 | $241 | MKR GSM 1400($70) + UNO($22) + 电池/外壳/传感器/杂项 |
硬件采购渠道
- Arduino官方店:store.arduino.cc
- Adafruit:adafruit.com
- Amazon、Harbor Freight、Home Depot
核心代码
UNO端:InstrumentReader.ino
// 关键片段:压力读取、三种触发模式、OLED显示、串口发包
#include #include #include "U8glib.h" // Velleman OLED专用库
#define DHTPIN 11 #define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE); U8GLIB_SH1106_128X64 u8g(3,4,6,7); // CLK, MOSI, CS, DC
RTClib RTC; const int ledPin=9, ledPin2=8, buttonPin=A1;
int transmitFrequency=30; // 分钟
float lowTrigger=20.0, highTrigger=40.0, dtLastTriggerLimit=2.0;
// ... 完整代码见附件,含防抖动、RTC、OLED绘图、串口发包逻辑 ...
Google Apps Script:GoogleSheetsScript.js
// 核心两函数:doPost(接收Webhook写表) + sendEmail(定时触发告警)
// 完整代码见附件,含去重、列动态扩展、布尔值转0/1、阈值判定邮件发送
MKR GSM 1400端:CommunicationsDevice.ino
代码随项目附件提供,核心逻辑:Serial1读取UNO数据包 → 解析 → 更新Cloud变量 → 处理Cloud下发的pinCloud指令控制GPIO
原理图
制造工艺
- 树莓派对接HDC2010:I²C温湿度传感器完整接线与编程指南
- BMP180 I2C 气压传感器树莓派接入指南
- Python/MicroPython 传感器记录仪:无缝写入 Google Sheets
- 树莓派 2 (Windows 10 IoT Core) 采集 Adafruit 10DOF IMU 数据上传 Azure Event Hubs
- Windows 10 IoT Core 上基于 SHT15 的精准温湿度监测
- UnifiedWater v1 — 基于 Arduino MKR GSM 1400 的完整水质监测套件
- 智能物联网罐:ESP8266 + Arduino + 超声波传感器实时监测罐内物位
- Arduino Cloud 传感器塔:温度、动作与气体监测
- DIY Arduino 智能手表:打造属于你的 Apple Watch 风格腕表
- 通过 Arduino IoT Cloud 用 Alexa 控制电视:分步指南
- Arduino Nano 指纹传感器项目——分步教程
- ADLINK 与 Google Cloud 合作交付无缝物联网解决方案