STM32单片机智能温控风扇设计简介

发布者:玉米哥哥最新更新时间:2023-09-13 来源: elecfans关键字:STM32  单片机  智能温控风扇 手机看文章 扫描二维码
随时随地手机看文章

一、功能简介


本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602液晶、按键、蜂鸣器、L298N电机驱动模块直流电机、DS18B20温度传感器等。



系统功能:


系统运行后,LCD1602显示传感器检测的温度值;默认以自动模式运行,若按下K4键切换为手动模式,此时可以通过K1和K2控制风扇加减速,风扇档位共5档(0-5)。当再次按下K4键切换为自动模式;自动模式下,实时检测温度值,当温度高于上限且在2C范围内,以3档运行。当温度高于上限且在4C范围内,以4档运行。当温度高于上限且在6C范围内,以5挡运行。当温度高于上限且超过6C范围,以5档运行且蜂鸣器报警。若温度在上下限范围内,风扇以2档运行。若温度低于下限,风扇停止。可通过K3键进入阈值设置,K1和K2调节。


主要功能如下:


(1)温度检测与LCD显示;


(2)超上限温度越高风扇越快;


(3)低下限风扇停止;


(4)温度阈值设置;


(5)超限报警。


二、软件设计


//系统初始界面显示


void sys_open_show(void)


{


lcd1602_clear();


lcd1602_show_string(0,0,"Tp: C");


lcd1602_show_string(14,0,"Au");


lcd1602_show_string(0,1,"TL: C");


lcd1602_show_string(10,1,"TH: C");


}


//系统数据获取


void sys_data_get(void)


{


static u8 i=0;


while(1)


{


//温度获取


i++;


if(i%1==0)


{


TIM_Cmd(TIM3,DISABLE);//关闭定时器


sys_ctrl.temp=DS18B20_GetTemperture()*10;


TIM_Cmd(TIM3,ENABLE);//打开定时器


}


break;


}


}


//系统数据显示


void sys_data_show(void)


{


u8 buf[5];


while(1)


{


//温度显示


buf[0]=sys_ctrl.temp/100+0x30;


buf[1]=sys_ctrl.temp%100/10+0x30;


buf[2]='.';


buf[3]=sys_ctrl.temp%100%10+0x30;


buf[4]='�';


lcd1602_show_string(3,0,buf);


//温度阈值显示


lcd1602_show_nums(3,1,sys_ctrl.templ,2,0);


lcd1602_show_nums(13,1,sys_ctrl.temph,2,0);


//阈值闪烁指示


switch(sys_ctrl.mode)


{


case 1://温度下限


lcd1602_show_string(3,1," ");


delay_ms(50);


lcd1602_show_nums(3,1,sys_ctrl.templ,2,0);


break;

case 2://温度上限


lcd1602_show_string(13,1," ");


delay_ms(50);


lcd1602_show_nums(13,1,sys_ctrl.temph,2,0);


break;

}


//档位显示


lcd1602_show_nums(10,0,sys_ctrl.gear,1,0);


//手动状态显示


if(sys_ctrl.auto_flag)lcd1602_show_string(14,0,"SD");


else lcd1602_show_string(14,0,"Au");


break;


}


}


//系统数据设置


void sys_data_set(void)


{


u8 key=0;


key=KEY_Scan(0);


//自动手动模式设置


if(key==KEY4_PRESS)


{


sys_ctrl.auto_flag=!sys_ctrl.auto_flag;


}


//阈值模式设置


else if(key==KEY3_PRESS)


{


sys_ctrl.mode++;


if(sys_ctrl.mode>2)sys_ctrl.mode=0;


}


//阈值设置模式下,K1和K2加减


if(sys_ctrl.mode!=0)


{


//加


if(key==KEY1_PRESS)


{


switch(sys_ctrl.mode)


{


case 1://温度下限


 sys_ctrl.templ++;


 if(sys_ctrl.templ >99)sys_ctrl.templ=0;


 break;


case 2://温度上限


 sys_ctrl.temph++;


 if(sys_ctrl.temph >99)sys_ctrl.temph=0;


 break;

}


}


//减


else if(key==KEY2_PRESS)


{


switch(sys_ctrl.mode)


{


case 1://温度下限


 sys_ctrl.templ--;


 if(sys_ctrl.templ< 0)sys_ctrl.templ=99;


 break;


case 2://温度上限


 sys_ctrl.temph++;


 if(sys_ctrl.temph< 0)sys_ctrl.temph=99;


 break;

}


}


}


//手动模式下,档位调节


if(sys_ctrl.auto_flag==1)


{


//加速


if(key==KEY1_PRESS)


{


sys_ctrl.gear++;


if(sys_ctrl.gear>5)sys_ctrl.gear=5;


}


//减速


else if(key==KEY2_PRESS)


{


sys_ctrl.gear--;


if(sys_ctrl.gear<0)sys_ctrl.gear=0;


}


}


}


//系统功能控制


void sys_fun_ctrl(void)


{


//手动模式下,速度控制


if(sys_ctrl.auto_flag==1)


{


pwm_set_duty(sys_ctrl.gear*20);//占空比


}


//自动模式下,速度控制


else


{


//如果温度高于上限,温度越高,风扇越快


if(sys_ctrl.temp>=sys_ctrl.temph*10)


{


if(sys_ctrl.temp>=sys_ctrl.temph10 && sys_ctrl.temp10+20)


sys_ctrl.gear=3;

else if(sys_ctrl.temp>=sys_ctrl.temph10+20 && sys_ctrl.temp10+40)**


sys_ctrl.gear=4;

else if(sys_ctrl.temp>=sys_ctrl.temph*10+40)


{


sys_ctrl.gear=5;


//高于设定值则蜂鸣器报警


if(sys_ctrl.temp >=sys_ctrl.temph*10+60) 


{


 beep_alarm(100,20);


}

}


}


//如果温度低于下限,风扇停止


else if(sys_ctrl.temp<=sys_ctrl.templ*10)


sys_ctrl.gear=0;


//温度在阈值范围内,风扇以固定速度运行


else


sys_ctrl.gear=2;


pwm_set_duty(sys_ctrl.gear*20);//占空比


}


}


//应用控制系统


void appdemo_show(void)


{


u8 i=10;


sys_parm_init();//系统参数初始化


KEY_Init();


BEEP_Init();


DS18B20_Init();


lcd1602_init();//LCD1602初始化


//读取温度数据,等待稳定


while(i--)


{


sys_ctrl.temp=DS18B20_GetTemperture();


delay_ms(100);


}


dc_motor_init();


pwm_init(100-1,800-1);//初始时,PWM占空比为0


pwm_set_duty(0);


dc_motor_dir_ctrl(0);


sys_open_show();//系统初始界面显示


while(1)


{


sys_data_get();//系统数据获取


sys_data_show();//系统数据显示


sys_data_set();//系统数据设置


sys_fun_ctrl();//系统功能控制


}


}

三、实验现象

图片

图片

图片


关键字:STM32  单片机  智能温控风扇 引用地址:STM32单片机智能温控风扇设计简介

上一篇:ACM32F303对比STM32F103差异说明
下一篇:STM32CubeMx入门教程(10):Fatfs文件系统的应用

推荐阅读最新更新时间:2024-11-17 03:21

AVR 单片机学习(九)iic总线及TWI模块的使用方法
IIC总线定义与特点 I2C总线的工作原理 AVR的TWI模块的使用方法 AT24C02IIC inter integrated circuit 总线是一种由PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如:电源和系统风扇,可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。 TWI:ATMega 系列单片机内集成两线制串行接口模块,ATmegl文档称为TWI接口事实上TWI与PHILIOS
[单片机]
AVR <font color='red'>单片机</font>学习(九)iic总线及TWI模块的使用方法
STM32的PWM输入模式设置并用DMA接收数据
环境: 主机:WIN7 开发环境:MDK4.72 MCU:STM32F103 说明: 项目中需要进行红外学习,如果采用输入捕获的方式,因为定时器只能捕获上升沿或者下降沿,所以只能获得周期,而不能得到具体的红外波的高低电平的时间.所以采用PWM输入的方式进行捕获. 采用的是PA8脚,对应TIM1的通道1. 源代码: /********************************************************************* * 函数 ***********************************************************
[单片机]
51单片机学习笔记(五)
已经很多天没有写程序了,原因很简单,竟是迷上了新版的西游记,连续看了几天,今天写的是续上以前的教材,“心率计数器”是继“电子时钟”的一个计算器/计时器的应用。 对于计数器/计时器的应用,似乎就是熟练的问题,对计数器/计时器的使用很容易理解,但是要是不看书本,那编写出的程序多半是有错误的,因为对TMOD,TCON,IE,的控制方式,不看书是很难把它记住的,而应用起来却是十分简单。 在这里要说一下在计数器模式下,t1计数的是p3.5的脉冲信号,t0计数的是来自p3.4的脉冲信号。因为我手头上没有心率传感器,所以就只用一根杜邦线接在p3.5口上,然后用手捏杜邦线的另一头,用这种方法给p3.5脉冲信号,挺有意思的。 写这个程序
[单片机]
单片机技术中的软硬件防干扰方法
单片机技术中防止干扰,保安全可靠运行也是一个很重要的问题。本文从电磁辐射、电源干扰和信号通道干扰三个主要干扰源入手,介绍了采用硬件和软件的防干扰措施,对于从事单片机应用设计者有重要参考价值。   1 引言   随着单片机技术应用发展,在应用过程中,如何防止外界的干扰,确保单片机安全可靠运行,是一个很重要的问题。我们在多项测控项目的实践中体会到,干扰源主要来自三个方面。一是空间场干扰,通过电磁辐射富入系统:二是电源干扰,它直接侵害系统:三是信号通道干扰,通过与单片机相连的前、后向通道进入系统。一般来说,空间场干扰在强度上远小于其他两个干扰源产生的干扰,且容易对付。只要采取良好的屏蔽、正确的接地及恰当的高频滤波就可以得到满意解决
[工业控制]
<font color='red'>单片机</font>技术中的软硬件防干扰方法
Microchip:不断拓展8位和16位MCU市场
一、约400种8位和16位MCU产品可供选择 Microchip如今有约400种8位和16位的单片机(MCU)产品供用户选择,适用于消费、汽车、办公自动化、通信及工业控制等不同市场领域的高产量嵌入式控制应用。这些产品可提供一系列功能特色:小的封装尺寸、高集成度、超低功耗、极高的性能、先进的模拟功能、高度可靠的闪存技术,以及先进的通信功能,如CAN、USB、Ethernet、LIN和RF。此外,Microchip还提供配套的开发工具和软件来为整个8位和16位单片机市场服务,让用户能够轻松、快速地开发出他们的应用。 Microchip产品的一大特色就在于所有产品都采用了同一种开发系统基础架构。当应用需求发生变动时,能够实现各类Mi
[焦点新闻]
51单片机(六)—— GPIO控制多路LED
本文中,我们对多路LED进行控制,硬件电路如下图所示 在《51单片机(五)—— GPIO点亮一个LED》中,已经对这个电路做了详细介绍,这里不再详述。 在这个实验中,我们采用两种方法对多路LED进行控制,实验是需要把J21接口的8个引脚与单片机的P0口的8个引脚分别连接在一起。 方法一: 实现代码如下所示 #include reg52.h //包含头文件,一般情况不需要改动, sbit LED1=P0^0; //用sbit关键字 定义LED1到P00端口, sbit LED2=P0^1; sbit LED3=P0^2; sbit LED4=P0^3; sbit LED5=P0^4; sbit LED6=P0^5
[单片机]
51<font color='red'>单片机</font>(六)—— GPIO控制多路LED
018_STM32程序移植之_串口接收中文
(一)在平时数据传输中很少用到接收中文的情况,但是最近需要用到就花了半天时间来弄弄 (二)接收原理,从现在接收情况分析:一个中文占两个数据的空间,也就是两个十六进制可以转化成为一个中文 (三)示例情况,用Hex Editor来看看中文 “你好”,可以看到四个十六进制数据:0xc4,0xe3,0xba,0xc3 (四)我们的目的还是单片机通过串口来进行数据的接收,用CH340短接T和R看看发送“你好”也是会接收到十六进制0xc4,0xe3,0xba,0xc3 (五)从上面两点来看,一个中文占据两个数据,也就是说当我们发送“你好”给单片机时候实际中断了四次,接收到的数据分别为0xc4,0xe3,0xba,0xc3 那么我们
[单片机]
单片机典型论文竞赛题精华集锦(三)
单片机论文五 简易无线电遥控系统   一、任务   设计并制作无线电遥控发射机和接收机。   1.无线电遥控发射机      2.无线电遥控接收机      二、要求   1.基本要求   (1)工作频率:fo=6~10MHz中任选一种频率。   (2)调制方式:AM、FM或FSK……任选一种。   (3)输出功率:不大于20mW(在标准75Ω假负载上)。   (4)遥控对象:8个,被控设备用LED分别代替,LED发光表示工作。   (5)接收机距离发射机不小于10m。   2.发挥部分   (1)8路设备中的一路为电灯,用指令遥控电灯亮度,亮度分为8级并用数码管显示级数。   (2)在一定发射功率
[模拟电子]
<font color='red'>单片机</font>典型论文竞赛题精华集锦(三)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved