【stm32简单外设篇】- HC-SR501 / 人体红外被动红外传感器

一、适用场景

适用场景:人体/运动检测(入侵报警、走廊/楼道自动照明、智能家居存在检测、节能灯控、触发录像/抓拍、嵌入式低功耗唤醒实验)。

二、器材清单

HC-SR501 PIR 模块 ×1

stm32f103(或其它 STM32)开发板 ×1

若干杜邦线(公对母)×1组

5V 稳压电源(若模块标注 5V)×1(注意部分模块可 3.3V 工作)

三、工作原理(要点)

PIR(被动红外)探测:传感器通过焦平面上的热释电探测元件感知环境红外辐射的瞬时变化(如人体移动引起的红外对比变化),模块内部放大并经过比较器/整形输出高电平脉冲表示检测到"运动/人体通过"。

输出逻辑:模块在检测到活动时 DATA 输出高电平(且保持 TIME 设定的大约 5s--300s 之间);若选择非重复触发或短触发模式,输出可能只在第一次检测到活动时产生脉冲。输出为 TTL 级别(高电平约接近 VCC),不同模块在 5V/3.3V 下表现不同,接入 MCU 前请确认电压兼容性或使用分压/电平转换。

四、接线示意
VCC → +5V

GND → GND

标准库

PA1 →out

HAL库

PA1 →out

五、示例代码

标准库

cpp 复制代码
#include "stm32f10x.h"
#include "stdio.h"
#include "bsp_SysTick.h"
#include "bsp_usart.h"


void gpio_init()
{
	GPIO_InitTypeDef PA;
	
	//使能时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

	
	PA.GPIO_Pin = GPIO_Pin_1;
//	PA.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	PA.GPIO_Mode = GPIO_Mode_IPD;
	GPIO_Init(GPIOA,&PA);
}


int main()
{
	USART_Config();
	SysTick_Init();
	gpio_init();
	while(1)
	{
		if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1) == SET)
		{
			Usart_SendString(USART1,"come on\n");
		}else
		{
			Usart_SendString(USART1,"leave\n");
		}
		Delay_us(1000000);
	}
//	return 0;
}

HAL库

cpp 复制代码
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == 1)
			HAL_UART_Transmit(&huart1,"有人路过\r\n", strlen("有人路过\r\n"), HAL_MAX_DELAY);
		else
			HAL_UART_Transmit(&huart1,"无人路过\r\n", strlen("无人路过\r\n"), HAL_MAX_DELAY);
		HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

六、讲解视频

https://www.bilibili.com/video/BV1Km1LBiEHi/?spm_id_from=333.1387.upload.video_card.click&vd_source=f7dfe1b14f260b9cc3a146d2dbfd0719

摘要:本文介绍了如何在 STM32 上使用 EC11 增量式旋转编码器(带按键):适用场景、器材清单、正交编码工作原理、接线方式,以及推荐的 TIM 硬件编码器模式与通用的 EXTI+状态机软件解码实现。提供了按键去抖与短/长按判定示例,并列出实战注意点(去抖、计数器回绕、分辨率选择与安装细节),适合用于嵌入式 UI 与参数控制场景。

相关推荐
hhh3u3u3u4 小时前
Visual C++ 6.0中文版安装包下载教程及win11安装教程
java·c语言·开发语言·c++·python·c#·vc-1
泛凡(Linyongui)4 小时前
PY32F002B实践之二--宠物腹背理疗仪项目介绍及头文件解析
c语言·keil·py32·32位单片机·腹背理疗仪项目实践
Wave8455 小时前
FreeRTOS软件定时器详解
stm32·单片机·freertos
VBsemi-专注于MOSFET研发定制5 小时前
奶茶制作机器人功率MOSFET选型方案——高效、精准与可靠驱动系统设计指南
单片机·嵌入式硬件
网域小星球7 小时前
C 语言从 0 入门(十四)|文件操作:读写文本、保存数据持久化
c语言·开发语言·文件操作·fopen·fprintf
水云桐程序员7 小时前
单片机项目从入门到精通
单片机·嵌入式硬件
网域小星球7 小时前
C 语言从 0 入门(七)|字符数组与字符串完整精讲|VS2022 高质量实战
c语言·开发语言·字符串·vs2022·字符数组
Jia ming7 小时前
C语言实现日期天数计算
c语言·开发语言·算法
Wave8457 小时前
STM32 裸机中断与 FreeRTOS 中断管理的四大核心差异
单片机·嵌入式硬件
若忘即安7 小时前
【硬件电路设计18】WIFI+BlueTooth
单片机·嵌入式硬件