✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进
❤欢迎关注我的知乎:对error视而不见
代码获取、问题探讨及文章转载可私信。
☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。
🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇
一、HC - SR501人体红外传感器简介
HC - SR501是一种基于红外线技术的自动控制模块,常用于检测人体的红外辐射变化。它能在检测到人体活动时输出高电平信号,当人体离开检测范围一段时间后,输出恢复为低电平。该传感器具有灵敏度高、可靠性强、低功耗等优点,广泛应用于安防、照明控制等领域。
主要参数
- 工作电压:DC 4.5V - 20V
- 静态电流:<50μA
- 电平输出:高 3.3V/低 0V
- 触发方式:L 不可重复触发/H 可重复触发
- 延时时间:5s - 5min(可调)
- 感应角度:<120°锥角
- 感应距离:7m - 12m(可调)
二、硬件连接
将HC - SR501与STM32进行连接,一般只需要连接三根线:
- VCC:连接到STM32的电源正极(如3.3V或5V)
- GND:连接到STM32的地
- OUT:连接到STM32的一个GPIO输入引脚,用于读取传感器的输出信号
假设将HC - SR501的OUT引脚连接到STM32的PA0引脚,以下是具体的硬件连接图示例(此处可简单手绘或用文字描述):
HC - SR501 | STM32 |
---|---|
VCC | 3.3V |
GND | GND |
OUT | PA0 |
三、STM32代码实现
1. 初始化GPIO引脚
在使用之前,需要对连接HC - SR501的GPIO引脚进行初始化,将其配置为输入模式。以下是基于STM32 HAL库的初始化代码:
#include "stm32f1xx_hal.h"
// 定义连接HC - SR501的GPIO引脚
#define HC_SR501_PIN GPIO_PIN_0
#define HC_SR501_PORT GPIOA
void GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 使能GPIOA时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
// 配置PA0为输入模式
GPIO_InitStruct.Pin = HC_SR501_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(HC_SR501_PORT, &GPIO_InitStruct);
}
2. 读取传感器状态
编写一个函数来读取HC - SR501的输出信号,判断是否检测到人体活动。
uint8_t Read_HC_SR501_State(void)
{
return HAL_GPIO_ReadPin(HC_SR501_PORT, HC_SR501_PIN);
}
3. 主函数
在主函数中,初始化GPIO引脚,然后不断读取传感器的状态,并根据状态进行相应的操作。
int main(void)
{
HAL_Init();
GPIO_Init();
while (1)
{
uint8_t state = Read_HC_SR501_State();
if (state == GPIO_PIN_SET)
{
// 检测到人体活动
// 这里可以添加相应的处理代码,如点亮LED等
// 示例:点亮PB12引脚连接的LED
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
}
else
{
// 未检测到人体活动
// 熄灭LED
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
}
}
}
四、代码解释
- GPIO_Init函数:该函数用于初始化连接HC - SR501的GPIO引脚。首先使能GPIOA的时钟,然后将PA0引脚配置为输入模式,不使用上拉或下拉电阻。
- Read_HC_SR501_State函数:该函数用于读取HC - SR501的输出信号,通过调用HAL_GPIO_ReadPin函数获取引脚的电平状态。
- 主函数:在主函数中,首先调用HAL_Init函数进行HAL库的初始化,然后调用GPIO_Init函数初始化GPIO引脚。在无限循环中,不断读取传感器的状态,根据状态控制PB12引脚连接的LED的亮灭。
五、注意事项
- 电源稳定性:确保HC - SR501的电源稳定,避免因电源波动导致传感器工作异常。
- 安装位置:合理选择传感器的安装位置,避免阳光直射、强热源等干扰因素。
- 触发方式:根据实际需求选择合适的触发方式(可重复触发或不可重复触发),并通过传感器上的跳线进行设置。
通过以上步骤,你可以使用STM32读取HC - SR501人体红外传感器的状态,并根据检测结果进行相应的控制。