基于STM32F103+TFT液晶屏+CEM5825的人体模块检测
分享作者:qingchen
作者昵称:奥巴马
评测品牌:萤火工场
评测型号:CEM5825F
发布时间:2025-03-12 10:39:13
0
前言
转载自创作者聪聪哥哥 利用STM32F103ZE芯片,TFT液晶屏显示与CEM5825人体存在雷达模块检测空间内有无人体运动感知及人体生物感知
开源口碑分享内容

工作原理:通过发射电磁波对目标进行照射并接受其回波,解析其中蕴含的距离、 速度、角度等信息。模块自动处理上述参数信息后,通过串口以ASCLL码的形式发出 。


一:硬件资料

1.1 模块管脚定义:

1.2模块电气特性


实测模块的工作情况如下图:

实测模块的工作电流和模块给出的工作电流是一致的。

由于手头上没有2.0mm间距的杜邦线,所以将2.54的杜邦线拆开,直接固定在2.0mm的位置,在安装的过程中注意不要将5v,GND,txd和rxd四根线中任意两两之间短接,否则可能造成模块的损坏。

二:软件资料

2.1 串口基本配置参数

2.2 模块输出类型:

2.3 模块指令介绍

2.3.1 设置最大的检测距离:rmax = ?

可设置小数后一位的距离值,单位米。默认 rmax=6。 例如:发送 rmax=2,模块会返回“received message: rmax=2 rmax is 2.0”表示指令 配置成功。如未收到此反馈信息,请检查发送指令是否带回车换行,重发指令。




2.3.2.设置大幅度灵敏度阈值:th1_mov=**、th2_mov=**、th3_mov=**


th1_mov 对应 2.8 米以内的信号阈值,默认 60。

th2_mov 对应 2.8-8 米以内的信号阈值,默认 30。

th3_mov 对应 8 米以外的信号阈值,默认 12


2.3.3.设置小幅度灵敏度阈值:th1_occ=**、th2_occ=**、th3_occ=**

th1_occ 对应 2.8 米以内的信号阈值,默认 60。

th2_occ 对应 2.8-8 米以内的信号阈值,默认 55。

th3_occ 对应 8 米以外的信号阈值,默认 12。


灵敏度阈值越大,模块越不灵敏。做分段灵敏度主要是近距离的目标反射信号相对会强一 些,因此在近距离时并不需要和远距离一样的灵敏度。同时针对不同的环境,也可以针对性做 设置。分段灵敏度可搭配测试模式进行调试,一般建议客户按照默认参数进行测试。


2.3.4:设置测试模式:test_mode=*


当 test_mode=1 时,模块进入测试模式,在测试模式中时,模块除 mov 和 dis 信息外, 还会输出信号强度 str 数值。模块默认 test_mode=0。

本模块默认设置是按照最高灵敏度设置的,测试场地是空旷的大房间。当使用环境发生变 化,例如进入一个较小的封闭房间时,此时可能因为房间较小带来信号的多次反射折射,或者 周围其他电磁因素,造成噪底抬高超出默认灵敏度阈值。此时则需要通过进入 test_mode,观 察在没有人时的 dis 以及 str 大小,来设置对应的灵敏度值。



2.3.5  保存设置:save

发送 save,模块会返回“received message: save all vars have been saved 并打印出 所有设定值”表示指令配置成功,参数保存。如未收到此反馈信息,请检查发送指令是否带回 车换行,重发指令。

2.3.6 获取当前参数:get_all

发送 get_all,模块会返回“received message: get_all”并返回当前模块所有参数设置。 如未收到此反馈信息,请检查发送指令是否带回车换行,重发指令


三:安装测试:

3.1 水平直线安装:

安装高度 1 米,测量时人体正对雷达。测试静坐以及走动两种状态下的覆盖范围。

3.2 挂高垂直测试

本模块也可挂高做人体存在检测。 我们的测试场景为挂高 3 米,测量人体静止站立及走动的 FOV。


四:软件代码


if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)

{

  Res =USART_ReceiveData(USART1); //读取接收到的数据

 

  if(u8UART3RecvStatus == 0)  

  {

  if((Res== 0x6F) ||(Res== 0x6D) )

  {

   USART_RX_STA = 0 ;

   USART_RX_BUF[USART_RX_STA] = Res ;

    u8UART3RecvStatus = 1;

  }  

 }

 else if(u8UART3RecvStatus == 1)  

 {

    USART_RX_STA ++ ;

   USART_RX_BUF[USART_RX_STA] = Res ;

   if(USART_RX_STA >= 15)

   {

    USART_RX_STA = 0 ;

 

    u8UART3RecvStatus = 0 ;

   }  

 }


显示函数:  

LCD_ShowString(30,110,200,16,16,USART_RX_BUF);  //显示LCD ID



全部评论
暂无评论
0/144