1. 项目全景与系统架构:货架异常报警系统概述、硬件选型、软件架构分层、通信协议选择
大家好,我是你们的老朋友。今天咱们正式开干《货架异常报警系统》这个项目。说实话,我做了这么多年嵌入式,最怕的就是一上来就写代码。你想想看,连系统长什么样都没搞清楚,代码写得再漂亮也是白搭。所以第一节课,咱们先把全景图铺开,把架构理清楚。
1.1 项目概述:我们要解决什么问题?
这个系统说白了,就是给货架装上一双「眼睛」和一张「嘴」。货架要是歪了、倒了、被人碰了,它能第一时间告诉你。我在仓库现场见过太多事故——货架倾斜没人发现,最后整排倒下来,损失几十万。嗯,咱们这个系统就是防患于未然。
核心功能其实就三个:
- 感知异常:检测货架倾斜、震动、位移
- 本地报警:声光报警,提醒现场人员
- 远程通知:通过无线网络把报警信息发到管理后台
你可能会问:为什么不直接买现成的?我告诉你,市面上的工业报警系统一套下来少说五六千,而且协议封闭,想二次开发?门儿都没有。咱们自己做的,成本控制在200块以内,还能随意定制功能。
1.2 硬件选型:传感器、控制器、报警器怎么搭?
硬件选型这块,我踩过的坑可不少。咱们一个一个说。
1.2.1 传感器选型
货架异常检测,最核心的就是角度检测。我个人习惯用 MPU6050 六轴陀螺仪加速度计。为什么选它?
- 便宜,淘宝上模块才十几块钱
- 精度够用,静态角度误差在0.5度以内
- I2C接口,接线简单
我曾经试过用单轴倾角传感器,结果货架稍微震动一下就开始误报。后来换成MPU6050,配合卡尔曼滤波,稳得很。这里有个小技巧:安装时传感器要固定在货架立柱的中部,太靠上容易被货物遮挡,太靠下又检测不到整体倾斜。
传感器参数对比
| 型号 | 测量范围 | 精度 | 接口 | 价格 |
|---|---|---|---|---|
| MPU6050 | ±180°/s | 0.1° | I2C | ¥15 |
| ADXL345 | ±16g | 0.1g | SPI/I2C | ¥20 |
| SCA100T | ±30° | 0.01° | SPI | ¥80 |
1.2.2 控制器选型
控制器我推荐 ESP32。为什么?
- 双核处理器,跑传感器采集和网络通信不冲突
- 自带WiFi和蓝牙,省掉外接模块
- 功耗控制好,电池供电也能撑几天
你可能会说:STM32不也挺好吗?没错,STM32确实稳定,但你要做物联网,还得外挂ESP8266或者4G模块,板子面积大一圈。ESP32一颗芯片全搞定,省心。我记得第一次用ESP32做项目时,还担心它发热问题,后来实测连续跑72小时,温度也就40度出头,完全没问题。
1.2.3 报警器选型
报警器分两种:
- 蜂鸣器:用于声音报警,选有源蜂鸣器,5V供电,声音够大
- LED指示灯:红色高亮LED,配合蜂鸣器实现声光报警
避坑指南:我曾经直接用GPIO驱动蜂鸣器,结果声音小得可怜。后来加了个三极管驱动电路,声音大了三倍。记住:蜂鸣器一定要用三极管或MOS管驱动,别直接接IO口。
1.3 软件架构分层:代码不能写成屎山
做嵌入式最怕什么?最怕代码写成一坨,三个月后自己都看不懂。所以我习惯把软件分成三层:
┌─────────────────────────────┐
│ 应用层 (App Layer) │
│ 报警逻辑、数据上报、配置管理 │
├─────────────────────────────┤
│ 中间层 (Middleware) │
│ 卡尔曼滤波、协议解析、任务调度│
├─────────────────────────────┤
│ 驱动层 (Driver Layer) │
│ MPU6050驱动、WiFi驱动、GPIO │
└─────────────────────────────┘
驱动层:直接跟硬件打交道。比如读写MPU6050的寄存器、控制蜂鸣器高低电平。这一层尽量封装成函数,上层调用时不用关心底层细节。
中间层:处理数据。比如原始加速度数据有噪声,我用卡尔曼滤波平滑一下。再比如WiFi断线了,自动重连的逻辑也放这里。
应用层:业务逻辑。比如「倾斜超过15度持续3秒,触发报警」。这一层代码应该最薄,只做决策,不做具体实现。
你想想看,如果哪天要换传感器,我只需要改驱动层,应用层代码一行都不用动。这就是分层的好处。
1.4 通信协议选择:数据怎么传?
通信协议这块,我踩过的坑比传感器还多。咱们这个系统涉及两种通信:
1.4.1 传感器与控制器通信:I2C
MPU6050用的是I2C协议。为什么选I2C?
- 只需要两根线(SCL、SDA),接线简单
- 支持多设备挂载,以后加温湿度传感器也方便
- ESP32硬件I2C稳定,软件模拟也不难
这里有个坑:I2C的速率不要设太高。我一开始设了400kHz,结果线长了点就开始丢数据。后来降到100kHz,稳如老狗。嗯,有时候慢就是快。
1.4.2 控制器与服务器通信:MQTT
远程上报数据,我选 MQTT 协议。为什么?
- 轻量级,报文头只有2字节,适合物联网
- 支持发布/订阅模式,一个设备报警,多个终端能同时收到
- 有QoS机制,保证消息不丢
MQTT vs HTTP 对比
| 特性 | MQTT | HTTP |
|---|---|---|
| 报文开销 | 2字节 | 几百字节 |
| 实时性 | 高(长连接) | 低(短连接) |
| 功耗 | 低 | 高 |
| 适用场景 | 物联网、传感器 | Web、API |
我曾经用HTTP做数据上报,结果设备每5秒发一次请求,电池两天就耗光了。换成MQTT后,同样的电池撑了两周。说白了,物联网场景下,MQTT就是比HTTP香。
注意:MQTT的Broker服务器要选稳定的。我推荐用阿里云IoT平台或者自建Mosquitto。千万别用免费的公共Broker,数据安全和稳定性都没保障。
1.5 小结:第一节课咱们干了什么?
好,第一节课的内容就这么多。咱们把整个系统的骨架搭起来了:
- 硬件:MPU6050 + ESP32 + 蜂鸣器/LED
- 软件:三层架构,驱动层、中间层、应用层各司其职
- 通信:传感器用I2C,远程用MQTT
下一节课,咱们开始动手搭硬件电路。我会把原理图、接线图、PCB布局都讲清楚。到时候你跟着我一步步来,保证不翻车。
记住一句话:架构想清楚,后面少加班。咱们下节课见。