基于单片机STM32的人体红外追踪风扇设计

引言

随着科技的不断发展,智能家居系统逐渐走进了我们的生活。人体红外追踪风扇作为一种智能化、节能且高效的家电,能够根据人的位置和环境温度自动调整风速,提升用户体验。本项目基于STM32单片机,结合人体红外传感器、温度传感器、OLED显示屏等外设,设计了一款能够追踪人体位置、自动调节温度的智能风扇。

本文将详细介绍该系统的设计方案、功能描述、硬件架构以及软件实现等方面,帮助读者全面了解该项目的实现过程。

系统方案

本系统采用STM32F103系列单片机作为主控芯片,搭建智能风扇控制系统。系统硬件部分主要包括以下几部分:

  1. STM32单片机:负责整个系统的控制,读取传感器数据,并根据算法进行决策,控制风扇的转速和方向。
  2.  三路人体红外传感器:用于检测人体在不同区域的位置,从而控制风扇的追踪功能。
  3. 0.96寸OLED显示屏:用于显示当前系统状态、温度信息、风扇档位以及模式选择等。
  4.  DHT11温湿度传感器:用于检测环境温度,为智能模式提供依据。
  5.  按键模块:用于手动设置温度阈值和风扇档位,方便用户根据需求进行调节。
  6.  风扇驱动电路:通过PWM信号控制风扇的转速,提供智能风扇的档位控制。

系统方案如图所示:

系统功能描述

1. 智能模式

在智能模式下,系统根据DHT11温湿度传感器采集的环境温度来自动调节风扇的档位。当温度高于用户设定的阈值时,风扇自动以较高的速度运行,以帮助降温;当温度低于设定阈值时,风扇的转速会降低,节能降噪。

功能特点:

  1. 温度阈值可以通过按键设置,方便用户调整。
  2. 根据温度实时调节风扇转速,保证室内温度在舒适范围内。

2. 追踪模式

在追踪模式下,系统通过三路人体红外传感器检测人体在房间内的位置,实时调整风扇的转向和转速,保证风扇始终对准人体,提供精准的气流。

功能特点:

  1.  三路红外传感器通过覆盖不同角度,实现360度无死角追踪。
  2. 风扇的方向和转速根据人体位置动态调整,提高舒适度。

3. 按键设置

系统提供按键设置功能,用户可以根据需求调整温度阈值、风扇档位以及选择模式(智能模式或追踪模式)。按键输入简单直观,用户体验友好。

功能特点:

  1. 设置温度阈值,适应不同的季节变化。
  2. 手动选择风扇档位,满足用户个性化需求。
  3. 切换模式,支持智能模式与追踪模式的自由切换。

4. OLED显示

OLED显示屏实时显示当前的系统状态,包括环境温度、设定的温度阈值、风扇档位、当前模式等信息。通过简洁的界面,用户可以一目了然地了解系统运行状态。

功能特点:

  1. 显示当前温度、风扇档位、模式选择等。
  2. 实时刷新,保证信息的准确性和时效性。

硬件设计

1. 主控单元:STM32F103C8T6

STM32F103C8T6单片机作为系统的核心,负责接收传感器的数据并做出相应的控制决策。它内置多路PWM输出,用于控制风扇的转速,且具备丰富的GPIO接口,便于连接人体红外传感器、按键以及显示屏等外设。

2. 人体红外传感器

本系统采用了三路人体红外传感器,每个传感器具有一定的检测范围。当人体进入传感器的探测范围时,传感器输出高电平信号,STM32单片机实时获取传感器数据并判断人体的位置,从而调整风扇的方向和速度。

3. DHT11温湿度传感器

DHT11温湿度传感器用于获取当前环境的温度值,为智能模式提供依据。该传感器通过单总线协议与STM32单片机进行通信,具有较高的精度和稳定性。

4. OLED显示屏

OLED显示屏通过I2C通信接口与STM32单片机连接,用于显示当前的系统状态。OLED显示屏分辨率为128x64,可以清晰地显示温度值、风扇档位、工作模式等信息。

5. 风扇驱动电路

风扇驱动电路基于PWM调制原理,通过控制风扇的电压频率来调节风扇转速。STM32单片机通过定时器生成PWM信号控制风扇的转速,实现智能风扇的档位控制。

软件设计

1. 传感器数据采集

STM32单片机通过I2C和GPIO接口读取DHT11温湿度传感器和人体红外传感器的数据。温度数据采集周期设置为1秒,而人体红外传感器则实时监测人体的存在与位置。

2. 控制算法

控制算法包括两个主要部分:

  1. 温度控制算法:根据DHT11传感器的温度值与设定的温度阈值进行比较,决定风扇的转速(低速、中速或高速)。该算法保证了温度变化时风扇能够及时响应。
  2. 追踪控制算法:根据三路红外传感器的输出信号判断人体的位置,调整风扇的转向。若人体在某个位置停留时间较长,风扇会自动将风向对准人体,并根据需要调整转速。

3. 显示更新

OLED显示屏每秒更新一次,显示温度、风扇档位、当前模式等信息,确保用户实时了解系统运行状态。

总结

本项目实现了一款基于STM32的人体红外追踪风扇,结合温度自动调节和人体追踪两种智能功能,为用户提供更加舒适的使用体验。系统不仅实现了智能温控,还能够根据人体的位置自动追踪,为现代家居环境增添了更多的便捷和科技感。通过这款风扇,用户可以享受到更加智能化的家居体验,同时也为智能家居的发展提供了一些思路。

未来可以进一步优化该系统的算法和硬件设计,例如加入更多种类的传感器,提升风扇的精度与响应速度,使其更加智能化和高效。

资料获取

 请评论区留言或者私信作者。

人体感应智能温控风扇,PWM调速概述: 本文以STC89C52单片机为核心,通过数字温度传感器对外界环境温度进行数据采集,从而建立一个控制系统,使电风扇随温度的变化而自动调节档位,实现“温度高、风力大、温度低、风力弱”的性能。另外,通过红外发射和接收装置及按键实现各种功能的启动与关闭,并且可对各种功能实现遥控,用户可以在一定范围内设置电风扇的最低工作温度,当温度低于所设置温度时,电风扇将自动关闭,当高于此温度时电风扇又将重新启动。 人体感应智能温控风扇,PWM调速系统框图: 人体感应智能温控风扇,PWM调速设计原理: 本文介绍了一种基于STC89C52单片机的智能电风扇调速器的设计,该设计巧妙利用红外线遥控技术、单片机控制技术、无级调速技术和温度传感技术,把智能控制技术应用于家用电器的控制中,将电风扇的电机转速作为被控制量,由单片机分析采集到的数字温度信号,再通过可控硅对风扇电机进行调速。从而达到无须人为控制便可自动调整风速的效果。 人体感应智能温控风扇,PWM调速视频演示: 人体感应智能温控风扇,PWM调速具体功能如下: (1)风速设为从低到高共2个档位,可由用户通过键盘设定。 (2)每当温度低于下限值时,则电风扇风速关闭。 (3)每当温度在下限和上限之间时,则电风扇转速缓慢。 (4))每当温度高于上限值时,则电风扇风速全速运转。 人体感应智能温控风扇,PWM调速实物图片: 人体感应智能温控风扇,PWM调速附件内容如下:
### STM32F103 使用人体红外传感器教程 #### 硬件连接方式 为了使STM32F103能够与人体红外传感器(如HC-SR501)正常工作,需按照如下方式进行硬件连接: | HC-SR501引脚 | 连接至 | |--------------|--------| | VCC | 5V | | GND | GND | | OUT | GPIO输入引脚 | 具体来说,在STM32F103C8T6开发板上可以选择任意可用的GPIO作为输入端来接收来自HC-SR501的OUT信号[^2]。 #### 初始化设置 利用STM32CubeMX工具可以简化初始化过程。打开该软件并创建新工程,选择对应的MCU型号后进入Pinout&Configuration界面,配置相应的外设资源,比如启用SysTick定时器用于延时函数,并设定好串口参数以便后续调试打印信息[^4]。 #### 编写程序逻辑 下面给出一段简单的C语言源码片段,展示了如何读取HC-SR501的状态变化并通过LED指示灯反馈给用户: ```c #include "main.h" // 定义使用的IO口 #define PIR_PIN GPIO_PIN_0 #define LED_PIN GPIO_PIN_13 #define PIR_GPIO_PORT GPIOA #define LED_GPIO_PORT GPIOD void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1){ if(HAL_GPIO_ReadPin(PIR_GPIO_PORT, PIR_PIN)){ // 当检测到运动时点亮LED HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN, GPIO_PIN_SET); }else{ // 否则熄灭LED HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN, GPIO_PIN_RESET); } // 延迟一段时间再继续监测 HAL_Delay(100); } } /** * @brief 配置系统时钟. */ void SystemClock_Config(void){ RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /* Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){ Error_Handler(); } /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){ Error_Handler(); } } /** * @brief GPIO Initialization Function */ static void MX_GPIO_Init(void){ __HAL_RCC_GPIOD_CLK_ENABLE(); // 开启GPIOD时钟 __HAL_RCC_GPIOA_CLK_ENABLE(); // 开启GPIOA时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; // 设置PA0为输入模式,用来连接PIR传感器输出 GPIO_InitStruct.Pin = PIR_PIN; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 设置PD13为推挽输出模式,控制LED状态 GPIO_InitStruct.Pin = LED_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); } ``` 这段代码实现了基本的功能——每当HC-SR501探测到有人经过时就会点亮LED;反之,则关闭LED。此外还包含了必要的时钟树配置以及GPIO初始化部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值