HLK-LD1125H-24G人体测距微波雷达

本文介绍了HLK-LD1125H-24G,一款24GHz毫米波人体存在检测雷达模块,其通过检测人体呼吸等微小运动来提高检测准确性。文章详细阐述了微波雷达的工作原理,并提供了模块的使用步骤,包括信息输出模式、配置指令和串口通讯协议。此外,还分享了一段用于提取雷达测得人体距离的C语言代码,以及如何通过串口打印数据进行验证。总的来说,该模块在人体检测方面表现出较高的准确性和实用性。
摘要由CSDN通过智能技术生成

**

HLK-LD1125H-24G人体测距微波雷达

**


概述

转载官方概述:

HLK-LD1125H-24G 是一款高灵敏度 24GHz 毫米波人体存在检测雷达模块。区别于传统雷达通过检测人体移动的大幅度动作或者微小幅度的肢体动作来判断人体存在,本模块主要特点是通过检测积累人体呼吸等微小幅度的运动,来判断人体的存在。因此对人体存在的检测相比传统移动检测雷达来说,准确率更高。不易漏报。


提示:以下是本篇文章正文内容

一、微波雷达是什么?

微波是波长很短的无线电波,微波的方向性很好,速度等于光速。微波遇到车辆立即被反射回来,再被雷达测速计接收。这样一来一回,不过几十万分之一秒的时间,数码管上就会显示出所测车辆的车速。雷达或微波乃是类似广播传送器所发出的电波,只不过频率较高出许多。当人物或物体在微波的 感应范围内移动时,便会启动感应器。

实物展示

在这里插入图片描述
在这里插入图片描述

二、使用步骤

1.外观与引脚

在这里插入图片描述

引用官方手册图片

2.使用说明

  • 雷达输出的信息

首先我们要知道,他通过串口会传给我们的信息是什么样的,那么我们看下图。
在这里插入图片描述

一开始建议新手使用TTL转串口进行调试检测模块是否可以正常使用,也能知道所接受的信息格式。

  • 雷达的信息输出模式

雷达的输出有三种模式

  1. 当雷达检测到较大幅度运动时,则输出 mov,dis=***。
  2. 当雷达检测到人体静止状态或者微小幅度动作时,则输出 occ,dis=***。
  3. 当雷达检测不到目标时,则停止输出。
    dis 代表目标距离,单位米。

雷达配置指令

我们可以配置雷达的一些属性,例如最大检测距离、各个分段的灵敏度。此内容不是本文章的重点,需要了解的可以参考官网的应用手册。
该链接为官方提供的应用手册,免去你们查找资料的时间。添加链接描述

代码展示

注意:配置串口时与LD1125雷达的通讯协议。接受与发送设置选:ASCII

在这里插入图片描述

通常我是只需要这个模块所测出人体距离的功能,那么我们就需要提取出我们所需要的距离数字,来实现我们的功能,代码如下。

  • LD1125.C
    这里我使用的是串口4,可以根据自己进行修改使用其他串口。
#include "LD1125.h"
#include "sys.h"
u8 UART4_RX_BUF[UART4_REC_LEN];     //接收缓冲,最大USART_REC_LEN个字节.
u16 UART4_RX_STA=0;       //接收状态标记	
u16 len;
void Bluetooth_Init(void)//串口初始化
{
	GPIO_InitTypeDef GPIO_InitStruct;
	USART_InitTypeDef USART_InitStruct;
	NVIC_InitTypeDef NVIC_InitStruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE);
	
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStruct);						//TXD
	
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_11;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStruct);						//RXD

	USART_InitStruct.USART_BaudRate=115200;
	USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
	USART_InitStruct.USART_Parity=USART_Parity_No;
	USART_InitStruct.USART_StopBits=USART_StopBits_1;
	USART_InitStruct.USART_WordLength=USART_WordLength_8b;
	USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
	USART_Init(UART4,&USART_InitStruct);
	
	USART_ITConfig(UART4,USART_IT_RXNE,ENABLE);
	USART_Cmd(UART4,ENABLE);
	
	NVIC_InitStruct.NVIC_IRQChannel=UART4_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
	NVIC_Init(&NVIC_InitStruct);
}
void UART4_IRQHandler(void)                	//串口4中断服务程序
{
	u8 Dat;
	if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
		{
		Dat =USART_ReceiveData(UART4);	//读取接收到的数据
		
		if((UART4_RX_STA&0x8000)==0)//接收未完成
			{
			if(UART4_RX_STA&0x4000)//接收到了0x0d
				{
				if(Dat!=0x0a)UART4_RX_STA=0;//接收错误,重新开始
				else UART4_RX_STA|=0x8000;	//接收完成了 
				}
			else //还没收到0X0D
				{	
				if(Dat==0x0d)UART4_RX_STA|=0x4000;
				else
					{
					UART4_RX_BUF[UART4_RX_STA&0X3FFF]=Dat ;
					UART4_RX_STA++;
					if(UART4_RX_STA>(UART4_REC_LEN-1))UART4_RX_STA=0;//接收数据错误,重新开始接收	  
					}		 
				}
			}   		 
     } 											 
} 

double convert (const char* r,int len)//提取数字相关函数
{
	int len1;
	int i;
	float temp;
	float xiaoshu;
	char flag;
	for(len1=0,temp=0,xiaoshu=0,flag=0,i=10;len1<len;len1++)
	{
		if(r[len1]=='.')
		{
			flag=1;
			continue;
		}
		if(flag==0)
		{
			temp = temp*10+(r[len1]-'0');
		}
		else
		{
			xiaoshu+=(r[len1]-'0')/(float)i;
			i*=10;
		}
	}
    return(temp+xiaoshu);
}

double GetMidText( char* text,int len)//提取数字相关函数
{
	int i;
	char flag=0;
	for(i=0;i<len;i++)
	{
		if((text[i]>=0x30)&&(text[i]<=0x39))
		{
			return convert(&text[i],len-i);
		}
	}
	return 0;
}





  • LD1125.H
#ifndef __LD1125_h
#define __LD1125_h
#include "stdio.h"	
#include "sys.h"
#define UART4_REC_LEN  			200  	//定义最大接收字节数 200
extern u8  UART4_RX_BUF[UART4_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符 
extern u16 UART4_RX_STA;         		//接收状态标记	
void Bluetooth_Init(void);
extern u16 len;
double convert (const char* r,int len);
double GetMidText( char* text,int len);
#endif
  • main主函数
    提取出我们所需要的距离后,通过串口一printf函数打印到我们的电脑进行数据的查看,是否得到我们所想的效果。
#include "stm32f10x.h"
#include "LD1125.h"
#include "SG90.h"
#include "usart.h"
#include "delay.h"
int main(void)
{	
	Bluetooth_Init();
	delay_init();
	MG_Init();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	uart_init(115200);	 //串口初始化为115200
	while(1)
	{
	if(UART4_RX_STA&0x8000)
		{					   
			len=UART4_RX_STA&0x3fff;//得到此次接收到的数据长度
			printf("\n%f\r\n",GetMidText((char*)UART4_RX_BUF,len));
			UART4_RX_STA=0;
		}
	}
	
}


总结

LD1125雷达模块总体来说,功能还是不错的,功能性强。另外这是我个人写的第一篇博客,一步一步学习一步一步进步,另外一些概念性问题时转载百度和官方描述,以及一些模块的参数也是使用的官方图片。

  • 10
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DDKevin19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值