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

基于STM32F103C8T6的智能风扇控制

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


前言

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


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

演示视频链接

【基于STM32F103C8T6的智能风扇控制】_第1张图片

一、功能介绍

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

二、硬件介绍

硬件清单

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

自制迷你版语音模块PCB

【基于STM32F103C8T6的智能风扇控制】_第2张图片

【基于STM32F103C8T6的智能风扇控制】_第3张图片

三、部分源码

/*=============================基于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 1
	  OLED_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 0
	 OLED_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();		  					     //初始化LED
    KEY_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);
	}
}

在这里插入图片描述

你可能感兴趣的:(DIY作品,stm32,单片机,嵌入式硬件)