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

这篇具有很好参考价值的文章主要介绍了【基于STM32F103C8T6的智能风扇控制】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

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


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

演示视频链接

基于stm32的智能风扇,DIY作品,stm32,单片机,嵌入式硬件

一、功能介绍

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

二、硬件介绍

硬件清单

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

自制迷你版语音模块PCB

基于stm32的智能风扇,DIY作品,stm32,单片机,嵌入式硬件

基于stm32的智能风扇,DIY作品,stm32,单片机,嵌入式硬件

三、部分源码

/*=============================基于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);
	}
}

基于stm32的智能风扇,DIY作品,stm32,单片机,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-524505.html

到了这里,关于【基于STM32F103C8T6的智能风扇控制】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F103C8T6+LD3320语音识别模块智能灯控

    由于代码需求量过大,不方便一一回复,请大家关注微信公众号“微电子基地”(头像与CSDN头像一致),点击智能灯控即可获取项目代码及功能介绍,注:仅供参考学习。  LD3320 是一颗基于非特定人语音识别(SI-ASR:Speaker-Independent Automatic SpeechRecognition)技术的语音识别/声

    2023年04月09日
    浏览(45)
  • 基于STM32F103C8T6ADC检测交流电压

    上篇文章写了硬件部分的实现思路,通过采样电阻的到小电压后经过二级放大电路得到单片机可处理的交流电压,此文介绍了如何采用单片机采集交流电压以及stm32ADC外设的使用。首先是硬件电路部分。  电路没有采用核心板,而是直接将芯片焊接到主板上,采用type-c接口供

    2024年02月12日
    浏览(56)
  • STM32f103c8t6模板的搭建-基于正点例程

           笔者认为正点编写的官方例程结构较为整洁,可以便于后期的例程开发,如果开发者对于项目开发中芯片要求较高的话,有很多人会选择正点的开发板,但是通常大多数是stm32初学者会选择用价格更为便宜的c8t6来进行学习,而正点选用的教程开发板大多都是些RC、ZE、

    2024年02月06日
    浏览(68)
  • 基于STM32F103C8T6的超声波测距应用

    #一、超声波HC_SR04简介 #二、超声波工作原理 #三、超声波测距步骤 #四、硬件接线 #五、项目代码 一、超声波HC_SR04简介 超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收。电路板上有四个引脚:VCC、GND、Trig(触发)、Echo(回应) 工作电压与电流

    2024年02月03日
    浏览(47)
  • 基于stm32f103c8t6的fft频率计

    之前项目中需要用到正弦信号的频率测量,也参考了几个大佬的博客(链接如下),但可能是由于stm32的型号不匹配,虽然也在网上查了一些需要修改的地方,但结果一直不太对,后来经过自己摸索结果终于对了,在这里给大家分享下,具体原理不在赘述。 参考的部分大佬博

    2024年02月14日
    浏览(74)
  • 基于STM32F103C8T6的HC-06蓝牙通信

    如果朋友们 遇到了如下问题 ,可以仔细借鉴本文章和另一篇专门讲解 蓝牙通信问题 的文章,一定能够解决你在蓝牙通信时遇到的诸多困难 1.在调试蓝牙模块AT指令时无返回值 2.身边 无USB转TTL模块 可以直接调试蓝牙模块(本人就是由于无模块花了了整整一天才调试成功)

    2024年02月03日
    浏览(69)
  • HX711压力传感器(基于STM32F103C8T6)

    HX711模块是我们目前比较常见的压力传感器模块,主要的作用是用来做压力检测,重量监测等等。博主的这篇博文主要实现功能为,在对重量或者压力进行监测的同时,可以累加或者清零数值,在此基础上就可以对比如饮水量进行统计等等。 HX711模块是市面上比较常见的模块

    2024年02月11日
    浏览(58)
  • 基于stm32f103c8t6的定时器详解(持续更新)

    先声明:stm32f103c8t6中没有基本定时器、只有TIM1-TIM4:分别是高级定时器和通用定时器(对照下图请自行阅读stm32f103x的datasheet) 1、定时器功能:定时、输出比较、输入捕获、互补输出,其中基本定时器只有定时功能、通用定时器只没有互补输出功能、高级定时器具有所有功能

    2023年04月24日
    浏览(70)
  • 基于STM32F103C8T6的UAV飞控板硬件设计

    一、主控单元:         主控单元基于意法半导体公司的STM32F103C8T6单片机进行设计。STM32F103C8T6DE 内核为ARM Cortex-M3;最大主频:72MHz ;工作电压范围:2V~3.6V ;程序存储容量:64KB; 程序存储器类型:FLASH ;RAM总容量:20KB; GPIO端口数量:37 ;封装为LQFP-48;串行单线调试(

    2024年02月08日
    浏览(55)
  • 基于stm32f103c8t6及AS608-----指纹锁项目

              博主纯小白, 本文适合于初学者,大佬还请勿喷,欢迎提出意见,有纰漏之处将及时纠正。 在浅学了stmf103c8t6后,想着依据现在所拥有的知识和能力做一个小项目。 注:工程代码在文章末尾。 掌握C语言基础....这个最基础啦... 接触过类似单片机,稍微看得懂芯片

    2023年04月09日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包