【Proteus仿真】【Arduino单片机】蔬菜大棚保温层卷放智能控制系统设计
一、功能简介
本项目使用Proteus8仿真Arduino单片机控制器,使用LCD1602显示模块、按键模块、28BYJ48步进电机模块、DS18B20温度传感器等。
主要功能:
系统运行后,LCD1602显示温度值、温度阈值、保温层开关状态。
如果温度高于上限,伸开保温层;
如果温度低于下限、合上保温层;
二、软件设计
/*
作者:嗨小易(技术QQ群:570487280)
*/
//系统数据显示
void sys_data_show(void)
{
while(1)
{
//温度值显示
lcd1602_show_nums(5,0,sys_ctrl.temp,2,0);
//温度阈值显示
lcd1602_show_nums(4,1,sys_ctrl.templ,2,0);
lcd1602_show_nums(13,1,sys_ctrl.temph,2,0);
//保温层状态显示
if(sys_ctrl.runflag==1)
lcd1602_show_string(11,0,"Open ");
else
lcd1602_show_string(11,0,"Close");
//阈值设置位置闪烁
switch(sys_ctrl.mode)
{
case 1://温度下限
lcd1602_show_string(4,1," ");
delay_ms(100);
lcd1602_show_nums(4,1,sys_ctrl.templ,2,0);
break;
case 2://温度上限
lcd1602_show_string(13,1," ");
delay_ms(100);
lcd1602_show_nums(13,1,sys_ctrl.temph,2,0);
break;
}
break;
}
}
//系统参数设定
void sys_data_set(void)
{
u8 key=0;
key=key_scan(0);
//模式设置
if(key==KEY3_PRESS)
{
sys_ctrl.mode++;
if(sys_ctrl.mode>2)sys_ctrl.mode=1;
}
//在设置模式下,加
else 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;
}
}
//确定
else if(key==KEY4_PRESS)
{
sys_ctrl.mode=0;
}
}
//系统功能控制
void sys_fun_ctrl(void)
{
static u8 one_flag=0;
while(1)
{
//正常模式下
if(sys_ctrl.mode==0)
{
//如果温度高于上限,伸开保温层
if(sys_ctrl.temp>sys_ctrl.temph)
{
sys_ctrl.runflag=1;
//电机仅转动一次
if(one_flag==0)
{
one_flag=1;
step_motor_28BYJ48_send_pulse(8,one_flag,STEPMOTOR_MAXSPEED,3,1);
}
}
//如果温度低于下限,合上保温层
else if(sys_ctrl.temp<sys_ctrl.templ)
{
sys_ctrl.runflag=0;
//电机仅转动一次
if(one_flag==1)
{
one_flag=0;
step_motor_28BYJ48_send_pulse(8,one_flag,STEPMOTOR_MAXSPEED,3,1);
}
}
}
break;
}
}
//应用控制程序
void app_ctrl_demo(void)
{
u8 i=10;
sys_parm_init();//系统参数初始化
key_init();
lcd1602_init();//LCD1602初始化
DS18B20_Init();
//等待数据稳定
while(i--)
{
//温度获取
sys_ctrl.temp=ds18b20_read_temperture()*10;
delay_ms(100);
}
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、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。