提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

在智能家居、楼道感应灯、安防报警这些场景里,人体感应技术随处可见。今天用 STM32+AS312(HC‑SR501)热释电人体红外传感器,搭建一套完整的人体检测实验。实现屏幕显示 + 串口打印 + LED 状态指示三位一体效果,真正看懂传感器采集、软件处理、结果输出整套嵌入式开发流程。

实验平台:STM32L431 主控|华为鸿蒙实训箱|TFT‑LCD 屏幕|AS312 人体红外传感器


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是热释电人体红外传感器?

我们本次使用的 AS312 也就是大家熟悉的 HC‑SR501,属于热释电红外传感器。
人体会持续向外释放特定波长的红外热辐射,传感器内部热释电元件可以捕捉这份红外信号。

✅检测到人体活动:输出高电平 1
❌无人体活动:输出低电平 0

⚠️重要小知识点:
传感器检测到人离开后,不会立刻变回无人状态,自带硬件延时,这是传感器固有特性,不是程序 bug。
硬件电路上传感器信号引脚接到 STM32 的PC8,单片机把 PC8 配置为 GPIO 输入模式,读取引脚电平,就可以判断当前区域有没有人。

二、整体实验方案

📌实验拓扑

STM32 主控主板 ↔ 智能家居扩展板 ↔ AS312 人体红外传感器;主板同时外接 TFT‑LCD 显示屏,Type‑C 连接电脑,串口助手接收实验数据。

想要实现的效果:

  1. TFT 屏幕实时展示:检测到人体显示「有人」图标 + 文字;无人显示「没人」图标 + 文字
  2. PC 串口助手输出状态变化日志,带时间戳记录每一次状态切换
  3. 开发板 LED 跟随状态翻转,做硬件状态提示
  4. 1 秒周期定时采集传感器,防止高频读取带来的信号抖动误判

📌硬件关键引脚

表格

引脚功能模式
PC8AS312 传感器信号输入GPIO 输入

三、软件实现思路拆解

1. 初始化

上电之后依次完成:HAL 库初始化、系统时钟配置、LCD 屏幕初始化、LED 初始化、串口初始化、人体红外传感器引脚初始化。
LCD 屏幕绘制 UI 界面,打印标题 “人体红外检测实验”,完成开机界面渲染。
代码如下(示例):

int main(void)
{
	HAL_Init();
	SystemClock_Config();	    //系统时钟初始化
	LCD_Display_Init();		    //屏幕初始化显示
	gpio_module_open(LEDS);		//LED初始化
	uart_open(uart2, 115200);	//串口初始化
	
	AS312_Init(); 				//人体红外传感器引脚初始化
	while(1)
	{
		Body_Handle(); //传感器检测业务处理函数
	}
}

2.软件定时采样,规避抖动

这里没有使用定时器中断,而是采用HAL_GetTick()系统滴答定时器做软件计时,设置1000ms 读取一次传感器数据

如果读取频率太高,传感器信号轻微抖动就会造成频繁误触发;1 秒采样间隔,兼顾响应速度与系统稳定性。

代码如下(示例):

if((HAL_GetTick() - tickstart) >= 1000) //1000ms检测一次
{
	tickstart = HAL_GetTick();
	as312_state = Infrared_Read_State(); //读取PC8引脚电平
}

3.状态判断,屏幕刷新显示

Infrared_Read_State()函数读取 PC8 引脚电平:返回 1 代表有人,返回 0 代表无人。
根据返回状态,调用屏幕绘图函数,绘制对应的图标,使用Show_Str()打印文字;用LCD_Fill()局部填充屏幕,消除画面残影。
状态 = 1:绘制有人图标,屏幕显示文字:有人
状态 = 0:绘制无人图标,屏幕显示文字:没人

四、实验现象描述

  1. 上电初始化:LCD 屏幕显示实验标题,初始状态为没人;串口助手打印初始化信息,波特率 115200 正常通信。
  2. 人走进传感器探测范围:屏幕切换 “有人” 图标文字;串口输出人体红外传感器数据:有人;开发板 LED 电平翻转。
  3. 人离开探测范围:等待传感器硬件延时结束后,输出低电平;屏幕切换为 “没人”;串口打印无人日志,LED 再次翻转。

串口助手会携带时间戳完整记录每一次有人 / 无人切换,屏幕、串口、LED 三者状态完全同步。

五、🔮脑洞拓展,还可以做什么?

  1. 🚨安防报警:检测到人,驱动蜂鸣器响起,简单入侵提醒。
  2. 💡人体感应灯:检测有人自动开灯,人离开延时关灯,复刻楼道感应灯。
  3. 🧹软件多次滤波:连续多次读到相同电平,才更新状态,进一步抑制误触发。
  4. 📶物联网上传:搭配 WiFi 模块,把人体检测状态上传云平台,远程查看现场是否有人。
  5. 🔢来访计数:LCD 屏幕统计检测到人体的总次数,做简易来访统计。

写在最后:小小的人体红外传感器,背后是一整套信号采集、逻辑处理、外设输出的嵌入式思维。把基础实验吃透,复杂项目就可以拆成一个个小模块去实现。

总结

本项目基于 STM32 主控搭配 AS312(HC‑SR501)热释电人体红外传感器完成人体检测实验,传感器通过 PC8 引脚输出高低电平,高电平代表检测到人体,低电平代表无人。
软件上使用HAL_GetTick()实现 1 秒定时采样,避免高频读取带来信号抖动;读取引脚电平后,在 TFT‑LCD 屏幕刷新图标与 “有人 / 没人” 文字,局部刷屏消除残影。通过变量对比前后状态,仅状态发生变化时才向串口输出日志,减少冗余打印,同时 LED 同步翻转作为硬件指示,实现屏幕、串口、LED 三者状态同步。
实验需要注意:传感器人离开后存在硬件固有延时,并非程序故障;合理设置采样周期可以提升检测稳定性。
该案例完整演示嵌入式开发流程:传感器信号采集、软件逻辑处理、多外设结果输出。可拓展实现感应灯、安防报警、来访计数、物联网云端上报等智能家居功能。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐