一.硬件方案
本次设计采用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);
- }
- }
复制代码
|