前言

`
本次实验基于 STM32+Huawei LiteOS 操作系统,使用两路 DYP‑R01‑V1.0 激光测距传感器,搭建一套非接触式虚拟电子围栏系统,面向智慧农业周界入侵检测场景CSDN博…。
利用单串口分时复用技术驱动两个激光传感器,依靠 Modbus‑RTU 协议读取测距数据;LiteOS 多任务完成数据采集、入侵逻辑判断、屏幕显示;当物体遮挡激光光路,触发蜂鸣器本地报警、串口打印告警,同时将围栏状态上报物联网云平台,遮挡消失自动解除报警。

与传统实体围栏对比:虚拟激光围栏无需金属线缆,不会被农机破坏,适合大田作业环境。


🛠硬件环境

  • 主控:STM32L431VC,华为智慧农业实训箱,Huawei LiteOS 系统
  • 传感器:DYP‑R01‑V1.0 激光测距传感器 ×2,Modbus‑RTU,TTL 3.3V 电平
  • 外设:蜂鸣器、TFT 显示屏、ESP8266WiFi 模块
  • 调试工具:串口调试助手、物联网平台

传感器参数:供电 3.3‑5V;盲区 2cm;室内量程 2‑400cm;默认从机地址0x01;读距离寄存器0x0100,单位 mm。

硬件接线
设备 引脚 STM32 引脚 说明
传感器 1 TX/RX PB11/PB10 交叉连接,3.3V TTL 电平
传感器 2 TX/RX PC0/PC1 交叉连接,3.3V TTL 电平
在这里插入图片描述
整个系统由 STM32 核心板、智慧农业扩展板、电子围栏模块组成,通过 WiFi 接入物联网平台,PC 端串口调试,平台、微信端可以查看围栏报警状态。

硬件原理图

在这里插入图片描述

核心方案:仅使用LPUART1 这一个串口外设,通过软件反初始化、引脚重映射、标志位切换,分时驱动两路传感器,节约硬件串口资源。

📡通信协议:Modbus‑RTU

主机读取距离寄存器命令帧(8 字节):
01 03 01 00 00 01 85 F6

  • 01:从机地址
  • 03:读保持寄存器功能码
  • 01 00:寄存器起始地址
  • 00 01:读取 1 个寄存器
  • 85 F6:CRC‑16 校验,低字节在前

💻软件架构:LiteOS 三任务并发

系统创建 3 个独立任务并行工作,任务之间依靠全局缓存共享传感器数据:

  1. fence_task(测距任务,周期 100ms)
    发送 Modbus 读取指令,调用UART_Change()切换串口引脚,轮流读取两路传感器距离,解析存入全局缓存;通信超时则距离清零,防止脏数据误报。
    VOID fence_task(VOID)
    {
    while(1)
    {
    DYP_Send_Data(); //发送Modbus读命令帧
    DYP_Read_State(&data1_cache, &data2_cache);
    LOS_TaskDelay(100);
    }
    }

2.UART_Change 串口切换核心函数

void UART_Change()
{
HAL_UART_DeInit(&hlpuart1); //反初始化串口外设
if(uart_flag) uart_flag = 0;
else uart_flag = 1;
HAL_Delay(1); //等待引脚电平稳定
MX_LPUART1_UART_Init(115200);
HAL_Delay(1);
}

关键点:必须先DeInit销毁旧配置;增加延时保证引脚电平稳定;去掉延时会出现丢包、第二路传感器读不到数据。

3.Fence_Function 围栏入侵判断函数

static void Fence_Function(void)
{
uint16_t data1, data2;
uint8_t state = 0;
static uint8_t old_state = 0;

DYP_Read_Data(&data1, &data2);
if(((data1>50)&&(data1<100)) && ((data2>50)&&(data2<100)))
state = 0; //无闯入
else
state = 1; //非法闯入

if(state != old_state){ //状态跳变才触发报警,抑制抖动
if(state == 1) beep_open();
else beep_close();
}
old_state = state;
}
逻辑:两路测距同时落在 50‑100mm 判定围栏正常;任意一路超出阈值判定入侵;边沿检测,只有状态发生变化才开关蜂鸣器,避免频繁抖动报警

4.control_task(控制任务,周期 100ms)
调用围栏判断函数,LED 闪烁控制,处理 WiFi 心跳,将围栏状态上报物联网平台。
5. view_task(显示任务)
TFT 屏幕实时显示两路测距值以及围栏工作状态。
在这里插入图片描述
配置 WiFi 账号密码、产品 ID、MQTT 订阅发布主题,设备完成和物联网平台对接,实现围栏状态云端上报。

📝实验现象与测试结果

实验分为三种场景:正常无遮挡、入侵遮挡、遮挡恢复。

1. 正常状态(无物体遮挡光路)

两路测距稳定 50‑100mm。

  • TFT 屏幕:电子围栏状态正常
  • 蜂鸣器:关闭无声
  • 串口:打印传感器测距数据
  • 云平台:EnclosureInput = 0(正常)

2. 入侵状态(手放入两传感器中间遮挡光路)

  • TFT 屏幕:显示存在非法闯入
  • 蜂鸣器:持续蜂鸣报警
  • 串口调试助手输出告警信息
  • 云平台:EnclosureInput = 1(非法闯入)

串口调试助手实际效果截图:

在这里插入图片描述

3. 恢复状态(手移开,遮挡消失)

测距回到 50‑100mm 区间;蜂鸣器停止;TFT 恢复正常;串口打印入侵结束;云端状态恢复 0。

物联网平台设备数据截图:
在这里插入图片描述

🐛调试踩坑记录

  1. 传感器无任何数据返回
    排查:TX/RX 接反;波特率不匹配;电平 5V 烧毁传感器;硬件没有共地。
  2. 第二路传感器读取不到数据
    排查:uart_flag标志逻辑错误;UART_Change()缺少延时;引脚配置错误。延时是串口切换稳定的关键!
  3. 系统频繁误报警
    排查:阈值设置不合理;传感器安装偏移;强光环境干扰激光测距。
  4. Modbus CRC 校验报错
    排查:CRC16 字节顺序错误,切记低字节在前

📚实验总结与优化思考

✨收获

  1. 掌握 DYP‑R01‑V1 激光传感器硬件特性,吃透 Modbus‑RTU 协议帧、CRC‑16 校验、大端数据解析。
  2. 理解单串口分时复用:一套硬件串口外设,软件反初始化 + 引脚切换,实现驱动多路传感器,节省硬件资源。
  3. LiteOS 多任务开发思路:采集任务负责硬件读取,控制任务执行业务逻辑,显示任务负责 UI 输出;多任务之间使用全局缓存交互。
  4. 边沿状态检测实现防抖动报警,只有状态跳变触发告警,减少系统负载。

⚠️现存不足

  1. 距离阈值写死在代码,传感器间距改动需要修改固件,缺少云端参数下发功能。
  2. DYP‑R01‑V1 强光环境测距性能下降,大田部署需要光照补偿算法。
  3. 只能检测是否入侵,无法区分是人、动物等目标类型。

💡创新扩展方向

  1. 硬件扩展:实现 4 路激光周界防护,继续扩展串口分时复用逻辑;缺点采集周期变长;也可以新增硬件串口。
  2. 算法优化:增加多次采样滤波,连续 N 次检测入侵才告警,过滤短暂环境扰动。
  3. 农业场景升级:太阳能供电;接入声光驱赶模块;搭配毫米波雷达弥补激光大雾强光短板;LoRa 远距离通信适配无公网农田。
  4. 功能升级:云端下发修改报警阈值,云端持久存储入侵报警时间日志。

更多推荐