本帖最后由 mrzhang 于 2024-3-27 23:08 编辑
本帖最后由 mrzhang 于 2024-3-27 23:08 编辑
前段时间看到安信可论坛搞活动免费送RD-03E雷达模块,就火速申请了,很幸运白嫖到了一块,在这里先感谢一下安信可论坛园长,感谢安信可科技,让我可以体验雷达模块
模块介绍
Rd-03E是由深圳市安信可科技有限公司开发的一款搭载矽典微的S3KM111L芯片的雷达模组。它工作在24GHz的K波段,每个单频扫描的调制带宽高达1GHz。该模组采用FMCW波形和S3系列芯片专有的先进信号处理技术,可实现精准的人体感应测距显示距离信息以及手势识别。Rd-03E模组可对运动、微动人体进行探测、识别,并上报实时距离,能够探测指定区域内的目标与手势并实时上报结果。
模块出厂自带的手势检测固件,到手后可以自行烧录精准测距固件
连接W801开发板
通过雷达模块的手册可知,模块在手势固件状态下测距功能很弱,所以要想实现人来灯亮,人走灯灭的效果,就需要将模块的固件刷为精准测距固件,刷写方法可通过手册中的方式使用keil刷写固件,如果手头没有daplink调试器也可以通过串口方式直接刷固件,
刷写完成后将模块与开发板连接,连接针脚如下:
W801开发板 |
Rd-03E雷达模块 |
5V |
VCC |
GND |
GND |
PA3 |
OT1 |
PA2 |
RX |
由雷达模块的精准测距手册可知,模块串口一帧命令的数据格式如下,其中距离信息为小端十六进制,两个字节,单位为 cm,则在开发板中使能串口,接收接收并解析数据,当感应到由运动物体后判断距离是否到达触发门限,距离低于门限就点灯
帧头 |
目标状态 |
距离信息 |
帧尾 |
AA AA |
1 byte |
2 bye |
55 55 |
目标状态值 |
说明 |
0x00 |
无目标 |
0x01 |
运动目标 |
0x02 |
微动目标 |
代码
#include "uart.h"
#include "wm_uart.h"
#include "wm_include.h"
#include "wm_config.h"
#include <stdint.h>
#define UART_TASK_SIZE 1024
static OS_STK uart_task_stk[UART_TASK_SIZE];
uint8_t rx_fifo_buf[64] = {0};
uint16_t rx_length = 0;
tls_os_sem_t * sem_rx = NULL;
s16 my_uart_rx_callback(u16 len, void* user_data)
{
rx_length += len;
tls_os_sem_release(sem_rx);
return WM_SUCCESS;
}
void my_uart_init()
{
wm_uart1_rx_config(WM_IO_PB_07);
wm_uart1_tx_config(WM_IO_PB_06);
tls_uart_options_t opt;
opt.baudrate = UART_BAUDRATE_B256000;
opt.paritytype = TLS_UART_PMODE_DISABLED;
opt.stopbits = TLS_UART_ONE_STOPBITS;
opt.charlength = TLS_UART_CHSIZE_8BIT;
opt.flow_ctrl = TLS_UART_FLOW_CTRL_NONE;
if (WM_SUCCESS != tls_uart_port_init(TLS_UART_1, &opt, 0))
{
printf("uart init seeor\n");
}
tls_uart_rx_callback_register((u16) TLS_UART_1, (s16(*)(u16, void*))my_uart_rx_callback, NULL);
}
void my_uart_task(void *data)
{
uint16_t rx_len = 0;
uint8_t range = 0;
char str[32]={0};
tls_os_status_t os_status = TLS_OS_ERROR;
tls_os_sem_create(&sem_rx, 0);
my_uart_init();
for(;;){
os_status = tls_os_sem_acquire(sem_rx, 20);
if(os_status){
if(rx_length > 0){
rx_len = tls_uart_read(TLS_UART_1,rx_fifo_buf,rx_length);
// for(uint i = 0: )
if(rx_fifo_buf[rx_len-1] == 0x55 && rx_fifo_buf[rx_len-2] == 0x55){
if((rx_fifo_buf[0] == 0xAA) && (rx_fifo_buf[1] == 0xAA) &&(rx_fifo_buf[5] == 0x55) &&(rx_fifo_buf[6] == 0x55)){
if (rx_fifo_buf[2] == 0x01 || rx_fifo_buf[2] == 0x02) {
range = rx_fifo_buf[4];
range=(range<<8)|rx_fifo_buf[3];
tls_gpio_cfg(WM_IO_PB_05, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);
// tls_gpio_write(WM_IO_PB_11, 1);
}
}
}
rx_length = 0;
sprintf(str,"%x ",range);
tls_uart_write(TLS_UART_1,str,strlen(str));
// tls_uart_write(TLS_UART_1, rx_fifo_buf, rx_len);
}
}
}
}
void create_my_uart_task(void)
{
tls_os_task_create(NULL,NULL,
my_uart_task,
NULL,
(void *)uart_task_stk,
UART_TASK_SIZE * sizeof(u32),
32,
0);
}
[![pFIWqRe.jpg](https://s21.ax1x.com/2024/03/27/pFIWqRe.jpg)](https://imgse.com/i/pFIWqRe)
![pFIWqRe.jpg](https://s21.ax1x.com/2024/03/27/pFIWqRe.jpg)