cubemx stm32 hc-sr505模块 检测有无人 驱动代码

本项目介绍如何利用STM32与HC-SR505人体红外传感器实现人体存在检测。通过CubeMX配置串口及输入引脚,并编写C语言代码实现状态判断与输出。适用于初学者学习人体感应器的原理及其应用。

CubeMX配置

  1. 开一个串口
  2. 开一个输入引脚,配置成下拉模式

硬件连接

VCC —— 5.5V
Sign —— PB5
GND —— GND

在这里插入图片描述

代码

hc_sr505.c

#include "hc_sr505.h"
#include "GPIO.h"

#define HC_SR505_Port	GPIOB
#define HC_SR505_PIN	GPIO_PIN_5

uint8_t hs_sr505_Judge(void)
{
	if((HC_SR505_Port->IDR & HC_SR505_PIN) == HC_SR505_PIN)
	{
		return manned;
	}
	else
	{
		return unmanned;
	}
}

hc_sr505.h

#ifndef __HC_SR505_H_
#define __HC_SR505_H_

#include "stdint.h"

typedef enum
{
	manned 	= 0,
	unmanned
}IsThereAnyone;

//判断有没有人
uint8_t hs_sr505_Judge(void);

/*	//使用方法

	if(hs_sr505_Judge() == manned)
		PrintfDebug("有人\r\n");
	else
		PrintfDebug("没人\r\n");

*/


#endif	/*__HC_SR505_H_*/

main.c

头文件

#include "hc_sr505.h"
#include "stdio.h"
#include "stdarg.h"

主文件外部函数


#define DEBUG_HUART huart1
/* 手写printf,避免使用微库造成不必要的错误 */
#define CONSOLEBUF_SIZE 512

void PrintfDebug(const char *fmt, ...)
{
	char Uart_buf[CONSOLEBUF_SIZE];
	va_list args;
	va_start(args, fmt);
	int length = vsnprintf(Uart_buf, sizeof(Uart_buf) - 1, fmt, args);
	va_end(args);
	HAL_UART_Transmit(&DEBUG_HUART, (uint8_t *)Uart_buf, length, 0xff);
}

初始化

主循环

	if(hs_sr505_Judge() == manned)
		PrintfDebug("有人\r\n");
	else
		PrintfDebug("没人\r\n");
	HAL_Delay(200);

效果

在这里插入图片描述

参考资料

人体红外传感器HC-SR501

### 连接方式 HC - SR505 是一种人体红外感应模块,通常需要与 STM32 开发板在面包板上进行连接。一般来说,HC - SR505 模块有三个引脚,分别是 VCC(电源正极)、GND(电源负极)和 OUT(信号输出)。 在面包板上连接时,将 HC - SR505 模块的 VCC 引脚连接到 STM32 开发板的 3.3V 或 5V 电源引脚,GND 引脚连接到 STM32 开发板的地引脚。OUT 引脚连接到 STM32 的一个 GPIO 引脚,该引脚用于读取 HC - SR505 模块输出的信号。例如,如果选择将 OUT 引脚连接到 STM32 的 PA0 引脚,在代码中就需要针对 PA0 引脚进行相应的配置。 ### 使用步骤 1. **初始化 GPIO 引脚**:在 STM32 代码中,需要对连接 HC - SR505 模块 OUT 引脚的 GPIO 进行初始化。从引用内容可知,要使能相应的 GPIO 时钟,并将该引脚配置为浮空输入模式。以下是示例代码: ```c #include "stm32f10x.h" #define HC_SR505_CLKLINE RCC_APB2Periph_GPIOA #define HC_SR505_PORT GPIOA #define HC_SR505_PIN GPIO_Pin_0 void HC_SR505_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(HC_SR505_CLKLINE, ENABLE); GPIO_InitStruct.GPIO_Pin = HC_SR505_PIN; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(HC_SR505_PORT, &GPIO_InitStruct); } ``` 2. **读取传感器数据**:初始化完成后,就可以通过读取连接的 GPIO 引脚电平状态来获取 HC - SR505 模块的输出信号。当有人体在模块的感应范围内活动时,OUT 引脚会输出高电平;当无人活动时,OUT 引脚输出低电平。以下是读取数据的示例代码: ```c uint8_t Read_HC_SR505(void) { return GPIO_ReadInputDataBit(HC_SR505_PORT, HC_SR505_PIN); } ``` 3. **主函数调用**:在主函数中调用初始化函数,并不断读取传感器数据,根据数据进行相应的处理。示例代码如下: ```c int main(void) { HC_SR505_Init(); while (1) { uint8_t sensor_value = Read_HC_SR505(); if (sensor_value == 1) { // 有人体活动,可添加相应处理代码 } else { // 无人活动,可添加相应处理代码 } } } ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嵌入一下?

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

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

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

打赏作者

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

抵扣说明:

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

余额充值