发帖
15 0 0

[雷达灯控]安信可RD-03E+联盛德W801+点灯

mrzhang
中级会员

1

主题

7

回帖

219

积分

中级会员

积分
219
雷达灯控教程 1384 15 2024-3-27 23:08:36

本帖最后由 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]([url]https://s21.ax1x.com/2024/03/27/pFIWqRe.jpg[/url])]([url]https://imgse.com/i/pFIWqRe[/url])



![pFIWqRe.jpg](https://s21.ax1x.com/2024/03/27/pFIWqRe.jpg)

──── 0人觉得很赞 ────

使用道具 举报

2024-3-28 08:33:51
赞,不过图片好像丢了
2024-3-28 08:36:11
图片没有上传成功!还有需要附上效果视频,把视频上传至B站,然后超链接到贴子里。
2024-3-28 08:49:36
2024-3-28 09:03:38
2024-3-28 09:55:44
2024-3-28 14:52:40
2024-4-2 16:24:13
选择不发光
2024-4-5 11:34:21
2024-4-5 12:55:16
您需要登录后才可以回帖 立即登录
高级模式
12下一页
统计信息
  • 会员数: 28296 个
  • 话题数: 40290 篇