1.高性能:STM32F103系列单片机采用ARM Cortex-M3内核,具有高运算速度和强大的处理能力。
2.低功耗:该系列单片机具有多种低功耗模式,能够有效地延长设备的使用寿命。
3.丰富的外设接口:STM32F103系列单片机集成了多种外设接口,方便与外部设备进行通信和控制。
4.易于开发:STM32F103系列单片机提供了完善的开发工具和文档支持,降低了开发难度。
单片机原理图
单片机图
stm32f103c8t6最小系统板实物图
DHT11温湿度传感器实物图
2.3.4 舵机介绍(含图)
舵机是一种电动执行器,用于控制机械装置的角度,通常用于控制模型、机器人和其他自动化系统中的运动部件。舵机通过接收控制信号来精确控制l其角度位置,从而实现对相关装置的定位控制。
舵机通常由电机、减速装置、电子电路和反馈系统组成。其工作原理基于电机的旋转运动和减速装置的作用,通过电子电路控制电机的旋转角度。
电机和减速装置:舵机内部配备有一个直流电机,通常是核心less电机或有刷电机,通过减速装置将电机的高速旋转转换成较低速的高扭矩输出。减速装置通常由齿轮组成,可以提供高精度的角度控制。
电子电路:舵机内置有电子控制电路,用于接收外部的控制信号,控制电机旋转到特定的角度位置。这些电路通常包括位置反馈系统,可以确保舵机达到精确的位置控制。
反馈系统:大多数舵机l配备了位置反馈装置,如旋转电位器或编码器。这些反馈系统允许电子电路检测舵机当前的位置,并根据控制信号调整电机的角度,以实现精确的位置控制和稳定性。
舵机实物图
2.3.5 风扇电机介绍(含图)
风扇电机控制原理:使用 H 桥电机驱动器控制风扇电机的转速和方向,它由 4 个三极管组成类似于字母 H 的电路,电机 则在 H 的中央,接 A、B 两端如图 5 所示。通过单片机控制电机驱动器的输入,改变 H 桥的开关状态, 从而控制电机的正反转和转速,例如,Q1、Q4 导通时电机顺时针转动;Q3、Q2 导通时,电机逆时针转 动;Q1、Q3 或 Q2、Q4 导通时,电机不转,所以电机转动的必要条件是 H 桥上必须是对角的三极管导 通,电机才能工作[5] [6] [7]。通过调整 PWM 信号的占空比改变电机的转速。
图 5. H 桥原理图
风扇电机实物图
2.4 相关电路连接图
本设计整体设计由温度传感器模块、红外传感器、手动按键模块、驱动电机模块、显示模块和舵机摇头模块组成,能够实时检测环境温度,并给予反馈。
智能风扇整体设计框图
硬件的连接电路中,其中大功率MOS管需要注意,需要外接电源,不能使用单片机提供的5V引脚,因为如果这个mos管直接连接单片机中的5V引脚的话,就会造成程序的崩溃。
硬件的连接电路
2.5 相关代码或流程图
DHT11温度传感器信息采集与处理流程图
程序设计流程图
2.5.1红外传感器的驱动程序:
红外传感器模块主要是用来检测前方是否有人存在,主要是用在自动模式下的
#include "stm32f10x.h"
void Infrared_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
//PB10口来检测红外避障模块的功能,如果检测到障碍物返回1,未检测到障碍物返回2
uint16_t Get_Sign(void)
{
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)==0)
{
return 1;
}
else
{
return 2;
}
}
2.5.2 DHT11温湿度传感器的驱动程序:
#include "stm32f10x.h"
#include "dht11.h"
#include "oled.h"
#include "delay.h"
extern uint8_t dat[5];
void dht11_package_show(void)//DHT11显示模式打包
{ //显示温度和湿度字符
OLED_ShowChinese(10,0,9,16,1);
OLED_ShowChinese(26,0,8,16,1);
OLED_ShowString(42,0,":",16,1);
OLED_ShowChinese(10,16,10,16,1);
OLED_ShowChinese(26,16,8,16,1);
OLED_ShowString(42,16,":",16,1);
OLED_Refresh();
if(DHT_Read())
{ //显示湿度
OLED_ShowNum(52,16,dat[0],2,16,1);
OLED_ShowString(70,16,"%",16,1);
// OLED_ShowNum(50,0,dat[1],5,16,1);
//显示温度
OLED_ShowNum(52,0,dat[2],2,16,1);
OLED_DrawPoint(70,12,1);
OLED_ShowNum(74,0,dat[3],1,16,1);
OLED_Refresh();
delay_ms(10);
}}
2.5.3电机的驱动:
#include "stm32f10x.h"
void key_PWM_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitTypeDefStrucutre;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 ;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//你
GPIO_Init(GPIOB,&GPIO_InitStructure);
TIM_InternalClockConfig(TIM3);//选择内部时钟
//时基单元配置
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period=20000-1; //ARR自动装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=72-1; //PSC
TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
//输出比较器初始化
TIM_OCInitTypeDefStrucutre.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitTypeDefStrucutre.TIM_OCPolarity= TIM_OCPolarity_High;
TIM_OCInitTypeDefStrucutre.TIM_OutputState= TIM_OutputState_Enable ;
TIM_OCInitTypeDefStrucutre.TIM_Pulse=0; //CCR
TIM_OC3Init(TIM3, &TIM_OCInitTypeDefStrucutre);
TIM_Cmd(TIM3,ENABLE);
}
void setccr3(uint16_t crrnum3)
{
TIM_SetCompare3(TIM3,crrnum3);//设置风扇的转速
}
2.5.4自动模式是由以下程序实现的:
void auto_mode_Init(void)
{
speed_control_Init();
//显示速度两个字
OLED_ShowChinese(10,32,7,16,1);
OLED_ShowChinese(26,32,8,16,1);
OLED_ShowString(42,32,":",16,1);
OLED_Refresh();
setccr(1500);
}
void auto_go(void)
{
dht11_package_show();//温湿度的获取和显示
if(dat[2]>=27&&dat[2]<29)//温度大于27度,进入低转速模式
{
low_speed();
}
if(dat[2]>=29&&dat[2]<31)//温度大于29度,进入中等转速模式
{
medium_speed();
}
if(dat[2]>=31)//温度大于31度,进入高转速模式
{
high_speed();
}
}
2.6 运行结果
在系统设计完成后,进行了系统测试和分析并记录下来测试的数据,当按下 K1 键位选择到 手动模式时,通过按键控制,用户可以手动打开或关闭风扇,是否扫风,是否摇头状态,并通不过不同档位来调整风速,为用户提供了更大的灵活性和便利性。接下来,我模拟了炎热天气,在风扇传感器附近放了一盆热水,并通过 LCD 显示严格把控温度,以此来验证风扇是否能够通过温度来自行调节风扇转动速度,风扇预先设定阈值分别为 27℃、29℃、31℃。测试结果表明,温度从 25℃开始上升,当分别 通过 27℃、29℃风速依次提高,当通过 31℃时,风速提高明显。通过事先设定的摇头,风扇能够完成相应的摇头控制,具体记录的数据如下所示。同时红外模块是可以检测风扇前是否有人的。左前有人,就只会在左半边进行扫风;如果检测到左前没人,会检测右前是否有人,如果右前有人,只会在右半边进行扫风;如果左前和右前都有人,才会180度扫风;如果左前和右前都没人,那就不会扫风。
智能风扇系统测试结果 :
环境条件 温度 模式
< 27℃, 26℃时 档位:0
27℃ < 温度 < 29℃, 28.1℃时 档位:1档 低速模式
29℃ < 温度 < 31℃, 30℃时 档位:2 档中速模式
温度 > 31℃, 32.4℃时 档位:3 档 高速模式
2.7 总结
本文设计了一种基于STM32的智能风扇,通过使用STM32最小系统板作为中心控制器,L298N芯片驱动直流电机,人体红外传感模块HC-SR501作为传感器模块,数字式集成温度传感器DHT11作为温度测试元件,0.96英寸七位OLBD显示屏显示数字等关键技术,实现了风扇转速的自动调节和手动调节功能。该系统具有操作简便、功能丰富、智能化的特点,可以提供舒适的使用体验,具有较高的推广和应用价值。它具有以下特点和优势:
1.智能调节和自动化:系统可以根据环境条件(如温度、湿度)或用户习惯自动调节风扇的运行状态,提升使用体验并节约能源。
2.数据采集与分析:风扇可以收集环境数据(如温度、空气质量),用户可以通过电脑查看历史数据和分析报告。
3.智能互联和场景联动:可以与其他智能设备(如智能家居系统)互联,实现场景联动。
综上所述,基于物联网技术的智能桌面风扇系统不仅提供了便捷的远程控制和智能调节功能,还能通过数据分析和智能互联实现更高效的能源利用和用户体验,是现代智能家居的重要组成部分之一。
在未来,智能风扇可以和其他智能家居实现联动,实现更智能化的环境管理。通过不断探索,未来的智能风扇可以在实现空气质量的更新以及进一步的节能减耗方向上做出更大的贡献。