文章目录
- 一、功能简介
- 二、软件设计
- 三、实验现象
- 联系作者
一、功能简介
本项目使用Proteus8仿真STM32单片机控制器,使用报警模块、LCD1602显示模块、DS18B20温度模块、加热制冷模块、按键模块、HC05蓝牙模块等。
主要功能:
系统运行后,LCD1602显示传感器检测的温度值;
可通过按键K3设置恒定温度,K1和K2进行加减调节,恒定温度范围是0-10,设定好后可再次按下K3保存。系统会根据当前温度与目标温度比对,通过PID算法控制加热或制冷工作。若温度高于报警上限或低于报警下限值则蜂鸣器报警。检测温度会实时将数据通过串口传输到手机终端显示。
二、软件设计
/*
作者:嗨小易(QQ:3443792007)*///系统数据显示
void sys_data_show(void)
{u8 buf[6];u16 temp=sys_ctrl.temp;static u8 i=0;while(1){//温度显示if(sys_ctrl.temp>=0){buf[0]=' '; }else {temp=-sys_ctrl.temp;buf[0]='-'; }buf[1]=temp/100+0x30;buf[2]=temp%100/10+0x30;buf[3]='.';buf[4]=temp%100%10+0x30;buf[5]='\0';lcd1602_show_string(5,0,buf);//温度阈值显示lcd1602_show_nums(8,1,sys_ctrl.temph,2,0);//阈值闪烁指示if(sys_ctrl.mode!=0){lcd1602_show_string(8,1," ");delay_ms(50);lcd1602_show_nums(8,1,sys_ctrl.temph,2,0);}//串口终端输出i++;if(i%20==0){USART1_SendString("\r\n当前温度:");USART1_SendString(buf);USART1_SendString("°C\r\n");} break; }
}//系统数据设置
void sys_data_set(void)
{u8 key=0;key=KEY_Scan(0);//阈值模式设置if(key==KEY3_PRESS){sys_ctrl.mode=!sys_ctrl.mode;}//阈值设置模式下,K1和K2加减if(sys_ctrl.mode!=0){//加if(key==KEY1_PRESS){sys_ctrl.temph++;if(sys_ctrl.temph>10)sys_ctrl.temph=0;pid.target_val=sys_ctrl.temph;}//减else if(key==KEY2_PRESS){sys_ctrl.temph--;if(sys_ctrl.temph<0)sys_ctrl.temph=10;pid.target_val=sys_ctrl.temph;} }
}//系统功能控制
void sys_fun_ctrl(void)
{float duty;
// u8 buf[4];
// u8 temp=0;//在正常运行模式下if(sys_ctrl.mode==0){sys_ctrl.pid_val=(float)sys_ctrl.temp/10;//PID调节sys_ctrl.pid_val=pid_realize(sys_ctrl.pid_val);if(sys_ctrl.pid_val>=0){sys_ctrl.flag=0;duty=sys_ctrl.pid_val;}else {sys_ctrl.flag=1;duty=-sys_ctrl.pid_val; }
// //观察PID调节值
// temp=duty;
// buf[0]=temp/100+0x30;
// buf[1]=temp%100/10+0x30;
// buf[2]=temp%100%10+0x30;
// buf[3]='\0';
// USART1_SendString("\r\nPID值:");
// USART1_SendString(buf);
// USART1_SendString("\r\n");//升温PWM调节if(sys_ctrl.flag==0){TIM_SetCompare2(TIM2,duty);TIM_SetCompare3(TIM2,0);}//降温PWM调节else{TIM_SetCompare3(TIM2,duty);TIM_SetCompare2(TIM2,0);}//如果温度高于报警上限,或低于报警下限,蜂鸣器报警if(sys_ctrl.temp>=ALARM_TEMP_MAX*10 || sys_ctrl.temp<=ALARM_TEMP_MIN*10){beep_alarm(1,1000);}}
}//应用控制系统
void appdemo_show(void)
{u8 i=10;sys_parm_init();//系统参数初始化KEY_Init();BEEP_Init();DS18B20_Init();lcd1602_init();//LCD1602初始化pwm_init(100-1,800-1);//读取温度数据,等待稳定while(i--){sys_ctrl.temp=DS18B20_GetTemperture()*10;delay_ms(100); }USART1_Init(9600);sys_open_show();//系统开机界面显示while(1){sys_data_get();//系统数据获取sys_data_show();//系统数据显示sys_data_set();//系统数据设置sys_fun_ctrl();//系统功能控制 }
}
三、实验现象
B站演示视频:https://space.bilibili.com/444388619
联系作者
视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。