【HC-SR501人体红外传感器】

article/2025/11/6 12:29:17

HC-SR501人体红外传感器

今天分享的是HC-SR501人体红外传感器的使用,下面我会结合stm32以及正在做的合泰HT32这两个型号的芯片进行例程讲解。

HC-SR501介绍

在这里插入图片描述

在这里插入图片描述

1、HC-SR501是基于红外线HC-SR501是基于红外线技术的自动控制模块 ,采用德国原装进口LHI778 探头设计,灵敏度高,可靠性强,超低电压工作模式 ,广泛应用于各类自动感应电器设备 ,尤其是干电池供电的自动控制产品。
2、模块为全自动感应,当人进入其感应范围则输出高电平,人离开感应范围则自动延时关闭高电平,输出低电平。传感器有两种触发方式(可通过跳线进行选择):第一种不可重复触发方式,即感应输出高电平后,延时一段时间结束,输出将自动从高电平变成低电平。第二种可重复触发方式,即感应输出高电平后,在延时时间段内,如果有人体在其感应范围活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平(感应模块检测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点)
3、具有感应封锁时间(默认设置:2.5S 封锁时间):感应模块在每一次感应输出后(高电平变成低电平),可以紧跟着设置一个封锁时间段,在此时间段内感应器不接受任何感应信号。此功能可以实现“感应输出时间”和“封锁时间”两者的间隔工作,可应用于间隔探测产品;同时此功能可有效抑制负载切换过程中产生的各种干扰。(此时间可设置在零点几秒—几十秒钟)。感应模块通电后有一分钟左右的初始化时间,在此期间模块会间隔地输出0-3 次,一分钟后进入待机状态。

引脚接线

HC-SR501在使用的时候我们只需要接三根线就可以了,VCC GND OUT(输出引脚)中间的那根是信号线也就是我们的OUT输出引脚。我们从该模块的背后可以看出有一端上面有H L 的跳帽,靠近这个的引脚为GND 剩下的一个就是VCC。

注意

该模块在使用的时候我们需要接5v直流进行驱动
并且我们可以通过下面这两个电位器进行延时和
距离的调节
顺时针转动延时调节的时候,感应延时加长反之减短
顺时针转动距离调节的时候,感应距离变长反之变短

在这里插入图片描述

进入正题,HC-SR501的具体使用

1.stm32驱动HC-SR501

/*==================infrared.h===============*/
#ifndef _INFRARED_H_
#define _INFRARED_H_
#include "stm32f10x.h"/*-----大家可以根据自己进行引脚端口等的修改---------*/
#define PORT GPIOB
#define PIN GPIO_Pin_4
#define GPIOB_RCC RCC_APB2Periph_GPIOB#define Read_STATE() GPIO_ReadInputDataBit(PORT,PIN)//读取人体红外的值void Infrared_Init(void);
void  infrared_test(void);
#endif
/*=================infrared.c=================*/
#include "infrared.h"
#include "led.h"
#include "usart.h"//红外引脚初始化
void Infrared_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量   RCC_APB2PeriphClockCmd(GPIOB_RCC,ENABLE);	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Pin  = PIN ;GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;GPIO_Init(PORT ,&GPIO_InitStructure);
}//红外人体感应功能测试
//感应到人体输出高电平,离开感应区域输出低电平
//下面的判断语句中根据自己的功能来进行修改
void  infrared_test(void)
{if( Read_STATE() == RESET){printf("NO People\n");close_led();	}else{printf("People\n");open_led();}
}
/*===================main.c==================*/
#include "stm32f10x.h"
#include "usart.h"
#include "stdio.h"
#include "led.h"
#include "infrared.h"void Delay(unsigned int t)
{unsigned int i,j;for(i = 0;i < t;i++){for(j = 0;j< 12000;j++);}
}int main(void)
{Usart_Init();Led_Init();Infrared_Init();USART_SendStr(USART1,"STM32 Infrared Test\n");while(1){infrared_test();	}

2.合泰HT32驱动HC-SR501

/*=================infrared.h================*/
#ifndef _INFRARED_H_
#define _INFRARED_H_#include "ht32f5xxxx_ckcu.h"
#include "ht32f5xxxx_gpio.h"
#include "ht32f5xxxx_01.h"//端口号定义
#define HT_GPIO_PORT_infrared HT_GPIOA//引脚定义
#define infrared_GPIO_PIN  GPIO_PIN_15
#define Read_STATE() GPIO_ReadInBit(HT_GPIO_PORT_infrared,infrared_GPIO_PIN)   
void Infrared_Init(void);
void  infrared_test(void);
#endif
/*================infrared.c=============*/
#include "infrared.h"
#include "led.h"
#include "uart.h"void Infrared_Init(void)
{CKCU_PeripClockConfig_TypeDef CKCUClock_infrared= {{0}};CKCUClock_infrared.Bit.PA = 1;  //开启GPIOB时钟CKCU_PeripClockConfig(CKCUClock_infrared, ENABLE);GPIO_DirectionConfig(HT_GPIO_PORT_infrared,infrared_GPIO_PIN,GPIO_DIR_IN);GPIO_InputConfig(HT_GPIO_PORT_infrared, infrared_GPIO_PIN, ENABLE);GPIO_PullResistorConfig(HT_GPIO_PORT_infrared, infrared_GPIO_PIN, GPIO_PR_DOWN);
}//红外人体感应功能测试
//感应到人体输出高电平,离开感应区域输出低电平
void  infrared_test(void)
{if( Read_STATE() == RESET){printf("NO  People\n");LED1_OFF();	}else{printf("People\n");LED1_ON();}
}
/*==================main.c==================*/
#include "ht32.h"
#include "ht32_board.h"
#include "led.h"
#include "delay.h"
#include "uart.h"
#include "infrared.h"/**********************TH32 红外人体感应**********************
Author:小殷Date:2022-5-4
******************************************************/
int main()
{Led_Init();USARTx_Init();Infrared_Init();printf("HT32 INFRARED TEST\n");while(1){infrared_test();delay_ms(1000);}
}

总的来说,HC-SR501这款人体感应测试还挺好用的,上述两个Demo 的用法基本一致,只是相应的函数名称和初始化上有点区别。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/iG8wCbrd.shtml

相关文章

微信小程序点击数据列表,进入列表详情页面的思路

1.在index.wxml 通过 bindtap去绑定一个事件。 对于详情页的传输数据&#xff0c;点击事件可以通过 data- 去实现&#xff0c;后面相当于是键值对&#xff0c;data-id"{{item.id}}"&#xff0c;意思是把列表的id传过去。 <view class"goods"><vi…

小程序---小程序列表项拖拽排序

一、拖拽效果图展示 首先&#xff0c;上个gif图看看效果 吐血测试了一天&#xff0c;目前还未发现bug。ps(拖拽效果仅在前端实现&#xff0c;未和后端交互) 文章代码参考小程序实现列表拖拽排序 &#xff0c;参考文章还是存在一些bug和不足&#xff0c;比如&#xff0c;样式代…

微信小程序列表页

我们在做Android开发时,几乎每个app都有几个列表,在Android中列表一般是用listview&#xff0c;后来就使用recyclerview做了,不管是小程序还是Android或者ios&#xff0c;列表都是常见的一种数据展示方式,那么在小程序中怎么实现呢&#xff1f;先使用最笨的方法做, 如图&#…

小程序列表展示

小程序列表展示 wxml代码 <view class"content"><form catchsubmit"formSuos" catchreset"formReset"><view class"group"><view class"sous"><input class"text1_3" auto-focus pl…

微信小程序信息展示列表

微信小程序信息展示列表 效果展示: 代码展示: wxml <view class"head"><view class"head_item">分类</view><view class"ring"></view><view class"head_item">价格</view> </view>…

微信小程序-列表展示、条目点击。

直接贴图&#xff1a; wx:for"{{datas}}"设置数据源&#xff1b; wx:for-item"item"设置条目名称&#xff1b; data-index{{index}}设置角标。 bindtapitemClick点击事件。 {{item.item}}显示数据 datas数据源。 条目点击 itemClick: function(e) { …

【微信小程序】-- 案例 - 本地生活(列表页面)(三十)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

微信小程序删除list指定列表项

一、删除效果展示&#xff1a; // 重要代码片段async deleteListItem(e) {const sureResult await wx.showModal({title: "提示",content: "确定要删除这项吗",});if (sureResult.confirm) {const { index } e.currentTarget.dataset;setTimeout(()>{…

【小程序从0到1】小程序常用组件一览

欢迎来到我的博客 &#x1f4d4;博主是一名大学在读本科生&#xff0c;主要学习方向是前端。 &#x1f36d;目前已经更新了【Vue】、【React–从基础到实战】、【TypeScript】等等系列专栏 &#x1f6e0;目前正在学习的是&#x1f525; R e a c t / 小程序 React/小程序 React/…

微信小程序商城系列之商品列表页(一)

微信小程序商城列表页 wxml: <view classlist><block wx:for{{dataList}} wx:keylist wx:for-item"item"><view class"list_item"><navigator urldetails?id{{item.goods_id}}><view classimg><image src"{{imghr…

微信小程序——商品列表

主页面 <view class"container"><googsList goodsClassList"{{goodsClassList}}" goodsList"{{goodsList}}" bind:leftClick"leftClick" bind:toDetails"toDetails" bind:scrolltolowerGoodsClass"scroll…

微信小程序 - 商城项目 - 列表排序

sort ( ) 排序 需要实现两个排序功能&#xff0c;价格排序和好评排序&#xff0c;且都可以正反切换 数字比较 价格排序中&#xff0c;价格为数字类型&#xff0c;属于数字的比较&#xff0c;无需转换类型 // 点击价格排序的图标handlePrice(){this.setData({priceOrder:!this…

微信小程序之多列表的显示和隐藏功能【附源码】

效果图&#xff1a; 实现思路&#xff1a; 实现单个列表的显示和隐藏应该使用唯一元素让程序知道你应该显示和隐藏哪个列表项&#xff0c;可以用数据的id&#xff1b;css中定义一个hidden{display&#xff1a;none}控制显示和隐藏&#xff0c;然后通过三元运算符来判断&#x…

微信小程序列表实现

1.在 .json文件中使用 navigationBarTitleText定义当前窗口title {"navigationBarTitleText": "小程序列表实现" }2.在 .wxss文件中编写如下&#xff1a; // page设置当前窗口背景色 page{background-color: #F5F5F5 }// 定义.container设置容器样式 .co…

微信小程序 开发列表

一.知识点 (一).列表渲染 wx:for tip:wx:for“array”可以等于参数名&#xff0c;在js中调用 Page({ data:{ array: [{name: 小李},{ name: 小高}]} })&#xff0c;获取值&#xff1b;也可以直接把wx:for"{{[1, 2, 3]}}"&#xff0c;把值放在上面 1.在组件上使用wx:f…

微信小程序实现分类列表

1、效果展示 2、fenleiliebiao.wxml文件代码 <!-- 头部搜索 --> <view class"title_search"></view> <!-- 头部搜索 --> <!-- Tab布局 --> <view catchtouchmovetrue><view classnavBox><view classtitleBox1 id"…

微信小程序--数据列表

设置页面标题 首页可以使用&#xff1a; app.json中window对象的"navigationBarTitleText"参数进行标题设置&#xff0c; 每个页面也可以在对应json文件中使用"navigationBarTitleText"参数进行标题设置 也可以在js文件的onRead函数中使用&#xff1a;js中…

用小程序完成简单的详情列表功能

最近学习了微信小程序&#xff0c;写了一个详情列表 主要思路是&#xff1a; 1.先通过接口拿到数据&#xff0c;在onLoad(options){}中调用wx.request(){}函数&#xff0c;获取到数据 2.完成数据渲染后&#xff0c;&#xff0c;用catchtab给它绑定一个点击事件&#xff0c;点…

微信小程序--列表展示

小知识&#xff1a; wx:for"{{list}}"用来循环数组。 wx:for-item‘变量名&#xff08;随便起&#xff09;’ 它是指定循环数据当前的变量名&#xff0c;可以通过 {{变量名.属性}} 展示数组的元素。 wx:for-index‘变量名&#xff08;随便起&#xff09;’&#x…

vmware 下 ubuntu 双网卡设置

写在前面&#xff1a; 本文章旨在总结备份、方便以后查询&#xff0c;由于是个人总结&#xff0c;如有不对&#xff0c;欢迎指正&#xff1b;另外&#xff0c;内容大部分来自网络、书籍、和各类手册&#xff0c;如若侵权请告知&#xff0c;马上删帖致歉。 目录 step 1&#xf…