基于单片机的大棚温湿度自动控制系统(proteus仿真等全套资料)
本文要设计的大棚温湿度自动控制系统,要能够及时、准确地对温室大棚内的温度、湿度进行采集,将其显示在LCD1602液晶显示器上,然后与设定的上下限值进行比较,如果超出限制则启动温度、湿度控制设备,并通过蜂鸣器报警,直到温湿度回到规定的范围。要提高控制系统的可靠性,那么就要注意以下几个方面:选用的元器件要有很高的可靠性;在对电路板的设计时,要合理的布线和接地;性价比高的产品更容易被消费者接收,但是设计
目 录
1 前言 1
2 总体方案设计 3
2.1 温湿度控制系统的设计指标要求 3
2.2 系统设计的原则 3
2.2.1 可靠性 3
2.2.2 性价比 3
2.3 方案比较 4
2.3.1 方案一 4
2.3.2 方案二 4
2.4 方案论证 5
2.5 方案选择 5
3 单元模块设计 6
3.1 各单元模块功能介绍及电路设计 6
3.1.1 单片机最小系统 6
3.1.2 液晶显示模块 8
3.1.3 温湿度传感器模块 8
3.1.4 报警电路的设计 9
3.1.5 输出电路设计 10
3.1.6 电源的设计 12
3.1.7 按键电路设计 13
3.1.8 串口通信电路 14
3.2 元件清单 15
3.3 关键器件的介绍 17
3.3.1 STC89C52RC 17
3.3.2 SHT10温湿度传感器 19
4 系统软件设计 22
4.1 软件设计的总体结构 22
4.2 主要模块的设计流程框图 24
4.2.1 主程序流程图 24
4.2.2 SHT10子程序流程图 25
4.2.3 LCD1602子程序流程图 27
4.2.4 输出控制子程序流程图 28
4.2.5 键盘扫描子程序流程图 29
4.3 软件设计所用工具 31
4.3.1 Keil uVision4 31
4.3.2 Proteus 31
5 系统调试 32
5.1 用Proteus搭建仿真总图 32
5.2 用Keil对程序进行调试、编译 33
6 结论 36
6.1 系统的功能 36
6.2 系统的指标参数 36
6.3 系统功能分析 36
7 总结与体会 38
8 致谢 39
9 参考文献 40
附录1 系统的电路原理图 41
附录2 系统仿真总图 42
附录3 系统实物照片 43
附录4 系统源程序 44
2 总体方案设计
2.1 温湿度控制系统的设计指标要求
本文要设计的大棚温湿度自动控制系统,要能够及时、准确地对温室大棚内的温度、湿度进行采集,将其显示在LCD1602液晶显示器上,然后与设定的上下限值进行比较,如果超出限制则启动温度、湿度控制设备,并通过蜂鸣器报警,直到温湿度回到规定的范围。另外,还要能够通过按键修改设定的上下限。为了能够满足农业生产的需要,此次设计要达到一下指标:
(1)工作环境:温室大棚;
(2)温度测量误差:±1℃;
(3)测温范围:0~+55℃;
(4)湿度测量误差:±5%RH;
(5)测湿范围:0~100%RH;
(6)通过键盘电路修改上下限:有;
(6)温湿度报警:有;
2.2 系统设计的原则
2.2.1 可靠性
可靠性是在设计过程中应该优先考虑的一个因素,一个控制系统必须要能稳定、可靠地工作,才能投入到生产实践中去。如果系统的可靠性不能达标,那么系统出现故障的可能就会增大,造成很大的损失。这种损失不仅包括经济上和信誉上的损失,而且可能会对人身安全产生威胁。
要提高控制系统的可靠性,那么就要注意以下几个方面:选用的元器件要有很高的可靠性;由于供电电源很容易产生干扰,所以应该对其采用抗干扰措施;对输入输出通道也一样,要采用抗干扰措施;在对电路板的设计时,要合理的布线和接地;软硬件都要进行滤波;系统要有自己诊断功能等。
2.2.2 性价比
性价比也是一个系统设计中所要考虑的重要因素。性价比高的产品更容易被消费者接收,但是设计过程中不能盲目地追求性价比,它应该建立在对产品性能要求的基础上,首先要满足性能要求,然后再设法降低产品成本。
2.3 方案比较
2.3.1 方案一
采用PLC作为主控制器。
使用PLC的最大优点在于PLC使用梯形图进行编程,编程语言形象直观,难度较低,因此开发周期短,便于扩展。本文转载自http://www.biyezuopin.vip/onews.asp?id=12696而且PLC抗干扰能力强,工作稳定可靠,这一点已被长期的工业控制实践所证明。
void main(void)
{
unsigned char error,checksum;
LcdRw=0;
s_connectionreset();
welcome(); //显示欢迎画面
delay(2000);
LCD_Initial();
while(1)
{
error=0;
error+=s_measure((unsigned char*) &humi_val.i,&checksum,HUMI);
error+=s_measure((unsigned char*) &temp_val.i,&checksum,TEMP);
if(error!=0)
s_connectionreset(); //in case of an error: connection reset
else
{
humi_val.f=(float)humi_val.i; //converts integer to float
temp_val.f=(float)temp_val.i; //converts integer to float
calc_sht10(&humi_val.f,&temp_val.f); //计算湿度与温度
GotoXY(0,0);//
Print("Tep:");
GotoXY(0,1);
Print("Hum:");
temperature=temp_val.f;
zhuanhuan(temp_val.f);//转换温度为uchar方便液晶显示
GotoXY(5,0);
str[5]=0xDF; //℃的符号
str[6]=0x43;
str[7]='\0';
Print(str);
humidity=humi_val.f;
zhuanhuan(humi_val.f);//转换湿度为uchar方便液晶显示
GotoXY(5,1);
str[5]='%'; //%的符号
str[6]='\0'; //字符串结束标志
Print(str);
}
keyscan();
control();
//----------wait approx. 0.8s to avoid heating up SHTxx------------------------------
delay_n10us(80000); //延时约0.8s
}
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)