基于STM32的智能风扇系统
目录
1、概述
2、硬件组成
3、PWM调速原理
4、L298N电机驱动控制原理
5、红外线遥控编码原理
6、软件设计
7、实物测试
1、概述
该智能风扇以STM32单片机为核心,结合红外遥控、人体感应、蓝牙数据传输、电机驱动等模块,实现风扇的启动、正反转、多级调速等功能,并通过物理按键、红外遥控以及手机APP三种不同的控制方式控制风扇实现各种功能,在LCD液晶屏上会实时显示智能风扇系统的实时状态,包括风力等级、工作模式、风扇转速等信息,在蓝牙连接的情况下会将这些信息发送给手机,在手机APP上实时更新显示。与此同时,风扇转动过程中安全保护机制也会同步开启,当检测到有人体靠近扇叶时,警报器鸣响,风扇立即停止转动。
2、硬件组成
STM32F103ZET6精英板、TFTLCD液晶屏、TCRT5000红外传感器、HC05蓝牙模块、L298N电机驱动模块、单片机自带红外遥控和红外接头
3、PWM调速原理
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
我们知道,单片机的IO口输出的是数字信号,IO口只能输出高电平和低电平。假设高电平为5V 低电平则为0V 那么我们要输出不同的模拟电压,就要用到PWM,通过改变IO口输出的方波的占空比从而获得使用数字信号模拟成的模拟电压信号。PWM为高电平,电机提速运转,为低电平,电机不提速运转,如此一来,可以控制占空比来控制电机在一个PWM周期内的提速时间。
4、L298N电机驱动控制原理
L298N的两种接线方式
(1)不用拔去ENA的跳线帽,此时使能端为5V电机满占空比驱动,全速运行;同理可知输入端IN3 IN4对应输出B口的逻辑全速则不用拔去ENB的跳线帽。
(2)若要对直流电机进行PWM调速,需设置IN1和 IN2,确定电机的转动方向然后对使能端(本设计PWM输出引脚是PB5,所以驱动的ENA连接PB5)输出РWM脉冲,即可实现调速。
5、红外线遥控编码原理
红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。
红外传感器红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,光敏三极管一直处于关断状态,此时模块输出端为低电平,指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,光敏三极管饱和,此时模块的输出端为高电平,通过检测输出端的电平高低,判断风扇周围是否存在人体。
6、软件设计
PWM配置(PB5)
void TIM3_PWM_Init(u16 arr,u16 psc)
{ GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射 TIM3_CH2->PB5 //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形 GPIOB.5GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO//初始化TIM3TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位//初始化TIM3 Channel2 PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器TIM_Cmd(TIM3, ENABLE); //使能TIM3
}
红外传感(VCC、GND、PD1)
if(INFRARED_STATE()==0) //返回低电平,说明有障碍物{BEEP=1;delay_ms(50);BEEP=0;GPIO_ResetBits(GPIOB,GPIO_Pin_13); GPIO_ResetBits(GPIOB,GPIO_Pin_14);}
蓝牙配置(3.3V、GND、PA9接RXD、PA10接TXD)
void uart_init(u32 bound){//GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟//USART1_TX GPIOA.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9//USART1_RX GPIOA.10初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10 //Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器//USART 初始化设置USART_InitStructure.USART_BaudRate = bound;//串口波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式USART_Init(USART1, &USART_InitStructure); //初始化串口1USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断USART_Cmd(USART1, ENABLE); //使能串口1 }void USART1_IRQHandler(void) //串口1中断服务程序{if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收到数据{uart_receive = USART_ReceiveData(USART1);if(uart_receive == '3') //正转{GPIO_ResetBits(GPIOB,GPIO_Pin_13); GPIO_SetBits(GPIOB,GPIO_Pin_14);TIM_SetCompare2(TIM3,300); } if(uart_receive == '1') //停{GPIO_ResetBits(GPIOB,GPIO_Pin_13); GPIO_ResetBits(GPIOB,GPIO_Pin_14);} else if(uart_receive == '2') //反转{GPIO_SetBits(GPIOB,GPIO_Pin_13); GPIO_ResetBits(GPIOB,GPIO_Pin_14); TIM_SetCompare2(TIM3,300); } else if(uart_receive == '4') //睡眠风{TIM_SetCompare2(TIM3,400); } else if (uart_receive == '8') //强力风{TIM_SetCompare2(TIM3,80); } } USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断待处理位}
7、实物测试
工程源码:基于STM32的智能风扇系统-嵌入式文档类资源-CSDN下载
基于STM32的智能风扇系统相关推荐
- 基于stm32f407的智能风扇系统
内容及过程 的主要内容是设计并制作一个基于stm32f407的智能风扇系统,这个智能风扇系统能够实现测量是否有人出现,是否温度过高,是否有火灾险情出现,这个系统完美解决了电力资源浪费以及在危险环境下处 ...
- 基于STM32的智能手环系统的设计
STM32系列 基于STM32的智能手环系统的设计 STM32系列 前言 一.系统方案的设计 1.1系统功能分析 1.2系统总体结构 二.硬件电路的搭建 2.1STM32最小系统组成部分 2.2S硬件 ...
- 基于STM32的智能抽油烟机系统与设计
基于STM32的智能抽油烟机系统与设计 功能实现: 本课题是基于STM32的抽油烟机自动监控系统设计,通过STM32单片机实现对家用抽油烟机的检测与控制.完成有毒气体检测,并能自动发出报警信息,根据烟 ...
- 基于STM32的智能垃圾车系统
基于STM32的智能导盲系统 闲来无事,用手头STM32做个项目. 成品功能: 1.垃圾车可以可以按照规定的路线自动行驶,当红外传感器检测到有人靠近后可以自动停车,电机驱动打开垃圾桶盖: 2.垃圾桶内 ...
- 基于STM32的智能车灯系统
项目介绍: 本项目应用光敏电阻传感器模块实现了小车前大灯在环境光线不足的条件下自动亮灯的功能,另外自行设计了小车尾灯,模拟了实际汽车在转向及倒车时的灯光状态. 效果展示: 智能车灯系统_哔哩哔哩_bi ...
- 毕业设计——基于STM32的智能窗户系统(物联网、智能家居、APP控制、APP显示温湿度等信息、自动工作模式)
本工程包括一下功能:1.远程控制工作功能:手机端app远程控制窗户开关(手机app自主开发) 2.自动监测工作功能:自动监测天气,并控制窗户开关 3.远程监测数据功能:温度.可燃气体浓度及各种状态在手 ...
- 基于stm32f103的智能风扇系统
系统设计目标 本系统可以分为两个模式来进行运行,分别为手动模式和自动模式,同时,在上电进入系统后,还会有一个模式选择的界面产生. 模式选择:在此界面中,可以通过按键K1来控制模式选择,两个模式分别为手 ...
- 基于STM32的智能泊车系统
一.前言 想起第一次参加的电子设计校赛好像在昨天一样(虽然确实在昨天),但是为了纪念这一段时间的劳动,并且记录一下遇到的问题,所以写了这篇文章. 二.实现思路 通过手机向停车场发送停车请求,然后停车场 ...
- 7、基于STM32的智能风扇√★
7.
最新文章
- 23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter
- C# 中文件路径的操作
- java左手画圆右手画方_左手画圆,右手画方作文
- Java笔记(基础第二篇)
- c 运行js脚本语言,Javascript脚本语言
- Ubuntu16.04 Oracle JDK8和Open JDK8的安装与配置
- 在C#中使用C++编写的类
- [原创]网银在线chinabank安全漏洞之“不完善的开发软件包”
- 经营你的iOS应用日志(二):异常日志
- PHP利用memcache缓存技术提高响应速度
- java 字符串 查找 多个_初学者求教,如何在字符串中查找多个子字符串的位置...
- 出师表 / 前出师表 作者:诸葛亮
- Android中背景透明的Dialog
- 上交所、深交所证券代码编码规则
- QT——连接腾讯云物联网平台
- 站桩功(初稿)王芗斋 著
- 点云配准(一) 线性代数基础
- PDF压缩文件怎么压缩最小?用迅读PDF大师,一键无损压缩
- 暴力+格式转化+板子真题 蓝桥
- 有了TeamViewer,在家工作不是难事