一.硬件方案
本次设计采用STM32单片机做主控芯片,通过DS18B20采集温度,将温度显示在 LCD1602上。通过人体传感器检测周围是否有人存在,并根据温度的不同,利用STM32对风扇进行调速。
主要由STM32单片机+LCD1602液晶显示+DS18B20温度采集+按键设置电路+PWM风扇+人体红外检测;如图:
二.设计功能
(1)LCD1602液晶显示当前温度,风扇等级,自动手动模式。
(2)按键可以设置自动和手动2种模式切换,按键设置温度上限。
(3)手动模式下可以自由开启风扇,调整档位等级。
(4)自动模式下,人体红外检测到人并且当前温度大于我们设置温度上限值风扇开启。
(5)每大于一度风扇档位pwm加一,最大上限为10档。
所有资料:
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:
(2)PCB图如下:
四.软件设计
(1)程序流程图
(2)主程序源码
int main(void)
{
u8 count = 0;
Motor = 0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
delay_ms(500);
LCD_Init();//1602初始化
KEY_Init();//按键初始化
while(DS18B20_Init())//温度初始化
{
LCD_Write_String(0,0," DS18B20 Erro ");
LCD_Write_String(0,1," ");
}
DS18B20_Get_Temp();//温度初始化
LCD_Write_String(0,0," DS18B20 Init...");
delay_ms(1000);
LCD_Write_String(0,0,"Temp: C M: C");
LCD_Write_String(0,1,"Auto: Gear: ");
TIM3_Int_Init(1,7199);//10kh频率计数,定时100us
if(Auto_flag == 1)
LCD_Write_String(5,1,"on ");
else
LCD_Write_String(5,1,"off");
display_Max();
while(1)
{
keyscan();//按键扫描
if(count++ >= 200)//延时一段时间读取温度
{
count = 0;
temperature = DS18B20_Get_Temp();//获取温度
if(temperature<0)
{
LCD_Write_Char(5,0,'-'); //显示负号
temperature=-temperature; //转为正数
}else LCD_Write_Char(5,0,' '); //去掉负号
//显示温度
LCD_Write_Char(6,0,temperature/100+'0');
LCD_Write_Char(7,0,temperature%100/10+'0');
if(Auto_flag == 1)//在开启模式下,感应到有人,并且温度超过上限开启风扇
{
if(RTHW == 1)//感应到有人
{
temp_dispose(temperature/10);//根据温度进行pwm调节
}
else//没感应到有人,关闭风扇
{
PWM_Val = 100;
Motor = 0;
LCD_Write_String(14,1,"--");
}
}
else//关闭风扇
{
PWM_Val = 100;
Motor = 0;
LCD_Write_String(14,1,"--");
}
}
delay_ms(1);
}
}
全套资料下载链接: