【基于STM32F103C8T6的智能风扇控制】

news/2025/1/12 14:24:28/

基于STM32F103C8T6的智能风扇控制

  • 前言
  • 一、功能介绍
  • 二、硬件介绍
  • 三、部分源码


前言

本次分享的是基于STM32F103的智能风扇的制作,相关的硬件和部分源码可看下面哦,需要成品的可私(创作不易,拒绝白嫖)


喜欢就给小殷一个关注和点赞吧

演示视频链接

在这里插入图片描述

一、功能介绍

1、按键模式下通过按键进行风扇档数改变一共设置为4档
2、自动模式下根据环境温度而改变温度的转速和档位
3、在定时模式下到达用户所设时间后自己停止在此期间可以通过按键进行时间的加减
4、通过红外传感器检测是否有人将手伸向风扇检测到后风扇立即停止
5、通过蓝牙进行风扇模式 风扇档位和定时时间的改变
6、通过语音进行风扇模式 风扇档位和定时时间的改变

二、硬件介绍

硬件清单

主控芯片STM32F103C8T6
蓝牙模块HC-05
语音模块SU-03T
温湿度传感器DHT11
显示屏OLED(0;96 IIC 4引脚)
按键散装独立按键
红外检测红外传感器
风扇直流电机风扇
电机驱动L298N
电源12锂电池

自制迷你版语音模块PCB

在这里插入图片描述

在这里插入图片描述

三、部分源码

/*=============================基于STM32F103的智能风扇======================@Author;小殷童鞋
@Date:2023.4.8
@创作不易,给个赞和关注吧(拒绝白嫖)
@WX:y2836235214(可接单)
===========================================================================*//**********************************引脚接线**********************************
按键 PB6 PB7 PB8 PB9
OLED GND VCC  PB13-CLK PB14-DIN
风扇 PB5
蜂鸣器  PC14
蓝牙  TX--(PA10)   RX--(PA9)  
红外模块 PB4语音模块(SU-03T) B2-PA3  B3-PA2
WIFI模块(ESP8266) TX-PB11 RX-PB10
******************************************************************************//*=====================================功能说明=================================1、按键模式下通过按键进行风扇档数改变一共设置为4档
2、自动模式下根据环境温度而改变温度的转速和档位
3、在定时模式下到达用户所设时间后自己停止在此期间可以通过按键进行时间的加减
4、通过红外传感器检测是否有人将手伸向风扇检测到后风扇立即停止
5、通过蓝牙进行风扇模式 风扇档位和定时时间的改变
6、通过语音进行风扇模式 风扇档位和定时时间的改变===============================================================================*/
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "string.h"
#include "beep.h"
#include "timer.h"
#include "infrared.h"
#include "oled.h"
#include "dht11.h"
#include "motor.h"
//========================================变量定义================================*/
unsigned char temp = 0,humi = 0;          //实时温湿度值
unsigned char Usart1_cmd = 0;             //用来接收蓝牙和语音的指令
unsigned char speed = 0,mode = 0;            //当前占空比 默认关闭 和风扇转数模式 
unsigned char old_speed = 0,old_mode = 0; //该变量用于人体检测时旧值的存储 一段时间后如果没有检测到就恢复继续运行
unsigned char clock_start = 0;            //功能模式
unsigned char sec;                        //秒
unsigned char min;                        //分
unsigned char hour;                       //时
unsigned char clock_flag = 0;            //时间到标志
unsigned int set_time = 10,time[6] ={0};  //默认为10s
unsigned char work_mode = 0;              //模式变量
static unsigned char people_flag =0;             //红外检测标志
char str[24];                            //存储信息字符串的形式显示
char t_str[12];                          //存储温度信息
void Buzzer_Voice(void);                 //蜂鸣器提示声音
void Init_interface(void);               //初始化界面
void Time_Display(void);                 //定时显示界面
void KEY_Display(void);                  //按键显示界面
void Auto_Display(void);                  //自动模式界面
void Infrared_Display(void);             //红外显示界面void button_task(void);                  //按键功能
void infrared_task(void);                //红外功能
void interface(unsigned char interface); //界面显示
void clock_Action(void);                 //定时功能
void usart_task(void );                  //串口功能
void Fan_Speed_Mode(void);               //风扇转速模式
void Speed_Control_By_Tempearture(void); //自动伴随温度调节转速
/*==================================功能界面显示函数 ===============================*/
//初始化界面
void Init_interface(void)
{OLED_ShowCHinese(6,0,0);//智OLED_ShowCHinese(26,0,1);//能OLED_ShowCHinese(46,0,26);//风OLED_ShowCHinese(66,0,27);//扇OLED_ShowCHinese(86,0,4);//系OLED_ShowCHinese(106,0,5);//统	 //下面为显示控制 如不想显示则将1改为0即可
#if 1 OLED_ShowNum(6,6,2023,4,16);OLED_ShowCHinese(40,6,28);//年 OLED_ShowNum(60,6,5,1 ,16);OLED_ShowCHinese(74,6,29);//月 OLED_ShowNum(92,6,24,2,16);OLED_ShowCHinese(108,6,30);//日 
#endif#if 1OLED_ShowCHinese(28,3,31);//李OLED_ShowCHinese(48,3,32);//佳OLED_ShowCHinese(68,3,33);//蔓#endif}//定时模式显示定时的时间
void Time_Display(void)
{OLED_ShowCHinese(26,0,12);//定OLED_ShowCHinese(46,0,13);//时OLED_ShowCHinese(66,0,14);//模OLED_ShowCHinese(86,0,15);//式
#if 0OLED_ShowNum(30,4,time[0],2,4);OLED_ShowNum(38,4,time[1],2,4);OLED_ShowChar(46,4,':',4);OLED_ShowNum(52,4,time[2],2,4);OLED_ShowNum(60,4,time[3],2,4);OLED_ShowChar(68,4,':',4);OLED_ShowNum(74,4,time[4],2,4);OLED_ShowNum(82,4,time[5],2,4);	
#endif//定时时间显示--倒计时显示OLED_ShowNum(46,4,set_time/10,2,16);OLED_ShowNum(60,4,set_time%10,2,16);
}//按键模式
void KEY_Display(void)
{OLED_ShowCHinese(26,0,10);//按OLED_ShowCHinese(46,0,11);//键OLED_ShowCHinese(66,0,14);//模OLED_ShowCHinese(86,0,15);//式//下面显示转数 档位OLED_ShowString(30,3,(unsigned char *)"Speed:",16);OLED_ShowNum(76,3,speed,3,16);OLED_ShowString(30,6,(unsigned char *)"Mode:",16);OLED_ShowNum(74,6,mode,1,16);
}//自动模式
void Auto_Display(void)
{OLED_ShowCHinese(26,0,24);//自OLED_ShowCHinese(46,0,25);//动OLED_ShowCHinese(66,0,14);//模OLED_ShowCHinese(86,0,15);//式//下面显示转数 档位 和温度OLED_ShowString(36,3,(unsigned char *)"Speed:",16);OLED_ShowNum(84,3,speed,3,16);OLED_ShowString(0,6,(unsigned char *)"Mode:",16);OLED_ShowNum(42,6,mode,1,16);OLED_ShowString(78,6,(unsigned char *)"T:",16);OLED_ShowNum(100,6,temp,2,16);}//红外模式
//void Infrared_Display(void)
//{
//	 OLED_ShowCHinese(26,0,8);//红
//	 OLED_ShowCHinese(46,0,9);//外
//	 OLED_ShowCHinese(66,0,14);//模
//	 OLED_ShowCHinese(86,0,15);//式
//	 //在红外模式下如果检测到人则显示有人 并关闭风扇
//}//按键声响声音  m每次按下按键会有一声按键声响
void Buzzer_Voice(void)
{Buzzer_ON();delay_ms(200);Buzzer_OFF();			delay_ms(200);
}
/*=====================================主函数及功能函数================================*/
int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4	 delay_init();	    			     	 //延时函数初始化	 Init_Usart();					         //初始化串口LED_Init();		  					     //初始化LEDKEY_GPIO_INIT();               //按键初始化Buzzer_GPIO_Init();            //蜂鸣器初始化Infrared_Init();               //红外初始化DHT11_Init();                  //温湿度初始化Motor_Init();TIM3_PWM_Init();OLED_Init();			             //初始化OLED  OLED_Clear(0);	Init_interface(); 						 //初始化界面只显示一次delay_ms(1000);	printf("===============HardWare Init Finished============\r\n");//初始化成功提示音Buzzer_Voice();   Buzzer_Voice();delay_ms(4000);	while(1){interface(work_mode);                  //界面刷新Fan_Speed_Mode();                      //风扇转速模式Speed_Control_By_Tempearture();        //自动模式下风扇的控制button_task();	                       //按键触发infrared_task();                       //红外触发clock_Action();                        //定时功能usart_task();	                         //串口触发TIM_SetCompare2(TIM3,speed);	         //占空比调节delay_ms(200);}
}

在这里插入图片描述


http://www.ppmy.cn/news/240161.html

相关文章

从《小米超神》案例精讲,MOBA手游的性能优化

今天我们为大家带来由福州朱雀网络研发的MOBA手游《小米超神》的UWA测评报告分析。该游戏在不同配置的移动终端设备上,无论是画面表现力,还是性能开销都非常优异。在此,我们将对该款游戏的性能数据进行深度剖析,希望通过这篇文章可…

基于stm32c8t6的两轮平衡小车 第二篇——原理图及CubeMx配置

目录 1.原理图 2.CubeMx配置 (1)创建工程 (2)配置时钟树 (3)仿真模式选择 (4)TIM2配置为PWM输出模式 (5)定时器TIM3,TIM4设置为编码器模式 (6&a…

python+selenium 抢小米mix 2s手机

小米手机的确太难抢了,所以试着写了个程序玩下,还不知道行不行,明天试试!不过,还是要增加多个帐号一起抢,概率还是要大些,黄牛就是使用多帐号抢的!先附上源代码,有什么不…

104、基于51单片机智能风扇pwm调速红外遥控无线遥控风扇温控风扇系统设计

毕设帮助、开题指导、技术解答(有偿)见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、Protues仿真 六、流程图 七、程序源码 八、资料包括 摘要 随着气温的逐渐上升,风扇的需求量也逐渐扩大。传统风扇不能…

小米2s手机刷机开发版本

主要依照:http://www.miui.com/thread-3367802-1-1.html进行 但是有几点要说明: 开启开发者选项 设置->关于手机->连点三下MIUI版本,即开启了开发者选项 设置->更多设置->开发者选项 由于小米2没有(设置 -> 开发者选项 -…

小米电视3 android,小米电视系列ROOT教程(含4A,4S,4X等Android6.0.1版机型)

本帖最后由 MozhiTX 于 2020-6-11 09:55 编辑 首先,根据小米电视4A 65寸ROOT方法帖子的方法,本人尝试了不下20次,一直启动到小米自带的Recovery,无法进入到Twry Recovery。就FQ出去看了看,发现4pda上也有不少遇到相同问题的人,不过好在找到了解决问题的方法!原因在与:进…

基于stm32的智能风扇设计

相关程序下载:https://download.csdn.net/download/ManJuSa/19775016 1 任务要求 题目:基于STM32智能风扇设计 基本要求:通过按键开、关风扇; 通过设定时间,定时关闭风扇; 风扇有普通模式,…

基于51单片机智能温控风扇设计

具体实现功能 系统由STC89C52单片机DS18B20温度传感器数码管风扇按键电源构成。 具体功能: 1、采用DS18B20温度传感器测温并用数码管实时显示; 2、可以手动设置温度上下限;共3个按键:设置键、加键、减键; 3、温度…