1. 项目全景与系统架构:LoRa水质监测浮标的整体功能、系统框图、核心器件选型

大家好,我是老张。做嵌入式通信这行十几年了,从最早的GPRS DTU到现在的LoRa、NB-IoT,折腾过不少东西。今天咱们聊的这个水质监测浮标项目,是我去年在南方一个湖泊项目里实际落地的方案。说实话,刚开始甲方说要搞“智慧水务”,我心里也犯嘀咕——湖面那么大,信号怎么传?供电怎么解决?传感器泡水里能撑多久?

嗯,这些问题咱们一个一个拆解。先看整体。

1.1 这个浮标到底要干啥?

说白了,就是一个漂在水上的“电子哨兵”。它得干三件事:

  • 感知:把水里的温度、pH值、溶解氧、浊度这些参数实时测出来
  • 传输:通过LoRa无线把数据发到岸边的网关,再上云
  • 自持:靠电池+太阳能,在湖面上自己活几个月甚至一年

你想想看,如果每个浮标都得拉根电缆到岸上,那成本得多高?所以LoRa这种低功耗、远距离的方案,简直就是为这种场景量身定做的。

核心功能清单:

  • 多参数水质采集(温度、pH、溶解氧、浊度、电导率)
  • LoRa无线数据上报(频段:470-510MHz,中国ISM频段)
  • 太阳能+锂电池供电系统
  • 本地数据存储(SD卡备份,防止丢包)
  • 低功耗休眠模式(采集间隔可配置,默认15分钟)

1.2 系统框图——一张图讲清楚

我习惯先画框图再动手。这个项目的系统架构分三层:

感知层(浮标本体):传感器组 → MCU(主控) → LoRa模块 → 天线
网络层(传输通道):LoRa网关 → 4G路由器 → 云服务器
应用层(数据呈现):云平台 → Web端/手机App

这里有个细节我特别想强调:浮标和网关之间是星型拓扑。每个浮标只管往网关发数据,不互相通信。为什么这么设计?

我在第一个版本里试过Mesh组网,想让浮标之间中继转发。结果发现湖面风浪一大,浮标位置漂移,拓扑频繁变化,功耗反而上去了。后来老老实实改回星型,每个浮标直接打给网关,简单可靠。

我的经验:LoRa在开阔水面上的通信距离实测能到3-5公里(视网关天线高度)。但如果浮标周围有芦苇荡或者桥梁遮挡,距离会骤降到1公里以内。选点的时候一定要实地踩点,别光看地图。

1.3 核心器件选型——我踩过的坑

选型这块,我直接给结论,附带我为什么这么选。

器件 型号 选型理由 避坑提醒
MCU STM32L071CBT6 超低功耗,待机仅0.3μA;内置12位ADC,可直接接模拟传感器 别用STM32F系列,功耗高一个数量级
LoRa模块 SX1268(国产替代:ASR6505) 灵敏度-148dBm,支持CAD信道检测;比SX1278功耗低40% 注意天线阻抗匹配,50Ω,别随便用根导线
温度传感器 DS18B20(数字) 一线总线,-55~125℃,精度±0.5℃ 防水封装要买不锈钢铠装的,普通树脂的泡水一个月就废
pH传感器 E-201-C(模拟) 工业级,响应快,成本可控 电极需要定期校准,我一般设成每月自动校准一次
溶解氧传感器 DO-957(荧光法) 免维护,不像电化学法需要换膜 价格贵,但省心。预算紧张可以用极谱法,但每3个月得换一次电解液
太阳能板 6V/5W 单晶硅 配合3.7V/10000mAh锂电池,阴天能撑7天 MPPT充电芯片用CN3791,便宜又好用

曾经踩过的一个大坑:我第一次做浮标时,为了省钱买了某宝上9块9的“LoRa模块”,结果通信距离只有200米,还经常丢包。后来换了正经的SX1268方案,同样的天线,距离直接拉到2.8公里。所以模块这钱真不能省,尤其是射频前端和晶振的精度,直接影响灵敏度。

1.4 供电架构——浮标的命脉

浮标死在半路上,90%是因为没电了。我的设计思路是:

  • 主电源:3.7V锂电池(18650四并,共10000mAh)
  • 充电:太阳能板通过CN3791给电池充电,最大充电电流1A
  • 稳压:电池输出经HT7833(3.3V LDO)给MCU和传感器供电
  • 开关控制:用MOS管(SI2301)做负载开关,传感器只在采集时通电

这里有个小技巧:LoRa发射瞬间电流高达120mA,如果电池电压偏低,LDO会掉压导致模块复位。所以我加了一个470μF的钽电容在LoRa模块电源脚旁边,专门应对发射瞬态。

1.5 通信协议——怎么把数据发出去?

LoRa只负责物理层,上层协议得自己定。我用的方案是:

数据帧格式(共12字节):
[0xAA] [0x55] [设备ID(2B)] [温度(2B)] [pH(2B)] [溶解氧(2B)] [电池电压(1B)] [CRC(1B)]

发送流程:
1. MCU唤醒,采集传感器数据(耗时约200ms)
2. 组装数据帧,计算CRC
3. 打开LoRa模块,发送(耗时约50ms)
4. 进入休眠,等待下一次采集

为什么帧长这么短?因为LoRa的空中传输时间跟数据量成正比。12字节的帧,在SF=10、BW=125kHz的配置下,空中时间大约200ms。如果帧太长,不仅功耗高,还容易跟其他浮标碰撞。

关于碰撞处理:我用了最简单的办法——每个浮标随机延时0~3秒再发。20个浮标同时上报时,实测碰撞率低于5%。如果浮标数量超过50个,建议上ALOHA协议或者时分复用。

1.6 小结——动手前的心理建设

嗯,这一章的内容差不多就这些。你可能觉得东西有点多,但做项目就是这样,前期想得越细,后期返工越少。

我个人习惯是:先搭一个最小系统——一块STM32最小板、一个LoRa模块、一个传感器,先把通信调通,再考虑防水、供电、外壳这些工程问题。别一上来就想着做完美产品,那会把自己逼疯。

下一章咱们会深入讲MCU的选型细节和低功耗设计,包括怎么把待机电流压到10μA以下。到时候我会把实际测出来的功耗数据贴出来,咱们一起算算电池能撑多久。

有什么问题,欢迎在评论区留言。我是老张,咱们下章见。


公众号:蓝海资料掘金营,微信deep3321