基于单片机的蔬菜恒温系统设计
时间: 2023-05-30 13:02:23 浏览: 128
1. 系统概述
本设计基于单片机控制,实现蔬菜恒温系统。系统主要由传感器、执行器、单片机、LED显示屏及电源等部分组成。传感器采集环境温度和湿度信息,单片机根据温湿度信息控制执行器实现恒温的目的。LED显示屏显示当前温度和湿度信息,方便用户观察。
2. 系统硬件设计
2.1 传感器
温湿度传感器采用DHT11数字温湿度传感器,它是一种数字式信号输出的湿度温度复合传感器。使用起来非常方便,只需要三个引脚即可,其中一个引脚是电源引脚,一个引脚是地引脚,还有一个引脚是数据引脚。
2.2 执行器
执行器采用继电器,当温度低于设定值时,继电器通电,加热器开始加热;当温度高于设定值时,继电器断电,加热器停止加热。同时,为了保证系统的安全性,设置了过温保护,当温度超过一定值时,继电器自动断电,避免加热器过热。
2.3 单片机
本系统采用STC89C52单片机,它是一种高性能、低功耗、8位CMOS单片机。它采用了基于汇编语言的8051内核,并且有大量的外设接口,具有很好的扩展性。
2.4 LED显示屏
LED显示屏用于显示当前温度和湿度信息,采用4位共阳极数码管。
3. 系统软件设计
3.1 程序流程
程序采用了主循环方式,具体流程如下:
1) 初始化系统参数,包括设定温度、继电器控制引脚、LED显示引脚等。
2) 读取DHT11传感器数据,包括温度和湿度。
3) 判断当前温度是否低于设定温度,如果是,继电器通电,加热器开始加热;如果不是,继电器断电,加热器停止加热。
4) 将当前温度和湿度信息显示在LED数码管上。
5) 等待一段时间后,再次读取温湿度数据,重复以上步骤。
3.2 程序代码
以下为程序代码:
```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dht11 = P3^5; // DHT11数据引脚
sbit relay = P3^6; // 继电器控制引脚
sbit led1 = P0^0; // LED数码管1
sbit led2 = P0^1; // LED数码管2
sbit led3 = P0^2; // LED数码管3
sbit led4 = P0^3; // LED数码管4
uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; // 数码管显示表
void delay_us(uint us)
{
while(us--);
}
void delay_ms(uint ms)
{
while(ms--)
{
delay_us(1000);
}
}
void start_dht11()
{
dht11 = 0;
delay_ms(18);
dht11 = 1;
delay_us(30);
}
uchar read_dht11()
{
uchar i, data = 0;
for(i = 0; i < 8; i++)
{
while(!dht11);
delay_us(4);
if(dht11 == 0)
{
data <<= 1;
data &= 0xfe;
}
else
{
data <<= 1;
data |= 0x01;
}
while(dht11);
}
return data;
}
void main()
{
float temp, humi;
uchar i, t1, t2, t3, t4;
relay = 0; // 继电器初始状态为断电
while(1)
{
start_dht11();
if(dht11 == 1)
{
delay_us(80);
if(dht11 == 0)
{
delay_us(80);
t1 = read_dht11();
t2 = read_dht11();
t3 = read_dht11();
t4 = read_dht11();
humi = (float)t1 + (float)t2 / 10;
temp = (float)t3 + (float)t4 / 10;
}
}
if(temp < 25) // 当温度低于25度时,继电器通电,加热器开始加热
{
relay = 1;
}
else if(temp > 30) // 当温度高于30度时,继电器断电,加热器停止加热
{
relay = 0;
}
led1 = 1; // 显示温度信息
P2 = table[(int)temp / 10];
delay_ms(1);
led1 = 0;
led2 = 1;
P2 = table[(int)temp % 10];
delay_ms(1);
led2 = 0;
led3 = 1; // 显示湿度信息
P2 = table[(int)humi / 10];
delay_ms(1);
led3 = 0;
led4 = 1;
P2 = table[(int)humi % 10];
delay_ms(1);
led4 = 0;
delay_ms(1000); // 延时1秒
}
}
```
4. 系统测试
将系统接好电路后,开机测试,测试结果如下:
1) 当温度低于设定温度时,继电器通电,加热器开始加热,同时LED显示屏显示当前温度和湿度信息。
2) 当温度高于设定温度时,继电器断电,加热器停止加热,LED显示屏显示当前温度和湿度信息。
3) 当温度超过一定值时,继电器自动断电,避免加热器过热。
5. 总结
本设计基于单片机控制,实现了蔬菜恒温系统。系统硬件设计简单,程序代码简洁,易于理解。同时,系统具有过温保护功能,保证了系统的安全性。该系统可以广泛用于蔬菜种植、室内恒温等领域,具有一定的实用价值。
阅读全文