51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码

设计要求
1.设计一种基于51单片机的花卉、农田自动浇水灌溉系统;

2.能够检测土壤湿度,当低于设定的下限值时,启动水泵进行浇水灌溉,并提供相应的声光报警指示;

3.能够通过按键设定湿度上下限值;

4.土壤湿度数据和湿度上下限值通过LCD1602显示屏显示;

5.完成系统元器件选型、电路绘制与C程序编写;

系统概述
自动浇水灌溉系统设计方案,以AT89C51单片机为控制核心,采用模块化的设计方法。

组成部分为:5V供电模块、土壤湿度传感器模块、ADC0832模数转换模块、水泵控制模块、按键输入模块、LCD显示模块和声光报警模块,结构如下。
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第1张图片
工作原理为:土壤湿度传感器测出土壤湿度模拟信号,经AD转换器将模拟信号转换成数字信号后传输到51单片机,单片机将土壤湿度数据与设定的上下限值进行比较。

当土壤湿度低于下限时,驱动水泵工作进行灌溉浇水,并提供声光报警。当土壤湿度增加至超过下限时,声光报警关闭,但水泵会继续工作,直到土壤湿度继续增加并超过设定的上限值为止。

用户可通过按键设定湿度上下限值,土壤湿度数据和上下限值数据均通过LCD显示屏实时显示。
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第2张图片
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第3张图片
原理图
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第4张图片
仿真分析
打开Proteus仿真文件,其后缀名为.DSN。双击单片机,加载AutoWater.hex文件(位于Keil C程序文件夹内),运行仿真,结果如下。
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第5张图片
由图可知,LCD显示当前测量的土壤湿度(Humidity)为53%,系统预设的湿度上限(H:High的缩写)为60%,下限(L:Low的缩写)为30%,土壤湿度正常,在上下限范围之内。

此时,湿度低报警灯和蜂鸣器处于关闭状态,继电器RL1开关打至下方,水泵处于断电状态。

通过调节滑动变阻器RV2(鼠标点击上下两个红色箭头),改变输入到ADC0832采样通道0的电压大小来模拟土壤湿度的变化。

点击RV2向下的红色箭头,模拟土壤湿度的降低。例如,当土壤湿度从53%降低至23%,低于下限值30%时,红色LED报警灯点亮,蜂鸣器发声,继电器RL1开关打至上方,水泵通电,开始自动浇水,绿色的水泵工作指示灯也被点亮。
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第6张图片
点击RV2向上的红色箭头,模拟土壤湿度的增加。

当土壤湿度从23%增加至37%,超过下限时,声光报警停止工作,但水泵会继续工作,直到土壤湿度继续增加到高于上限值为止,过程如下所示。
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第7张图片
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第8张图片
需要说明的是,水泵停止工作(即:土壤湿度超过上限)后,调节RV2模拟土壤湿度的下降,在下降到上下限范围内时,水泵不会启动,只有土壤湿度继续下降至低于下限时才会启动。

通过按键可以预设湿度的上下限值。

点击“设定”键,进入上下限设置模式,首先是H上限值光标闪烁,此时可以点击加/减键,改变上限值大小。
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第9张图片
上限值设置完成后,点击“设定”键,L下限值光标闪烁,同理,点击加/减键,改变下限值大小。
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第10张图片
上下限值都设置完成后,再次点击“设定”键,退出上下限设置模式。例如,我们设置湿度上限值H为75%,下限值L为25%,结果如下图所示。
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第11张图片
综上所述,仿真运行效果满足设计要求。

部分代码

void main()				//主函数
{
	Init1602();						 //初始化液晶函数
	init();							 //初始化定时器
	init_eeprom();  //开始初始化保存的数据
	while(1)						 //进入循环
	{
		for(m=0;m<50;m++)			//读50次AD值
			sum = adc0832(0)+sum;	//读到的AD值,将读到的数据累加到sum
		temp=sum/50;				//跳出上面的for循环后,将累加的总数除以50得到平均值temp
		sum=0; 						//平均值计算完成后,将总数清零
		temp = temp*0.390625;		//ADC0832存储数据为1个字节,湿度显示范围为0~100,因此1单位湿度=100/256=0.390625				
//		if(temp<=full_range)
//		temp=(temp*100)/full_range;
//		else
//		temp=100;
		if(set==0)					 //set为0,说明现在不是设置状态
			Display_1602(temp,MH,ML);//显示AD数值和报警值
		if(temp<ML&&set==0)	         //湿度值小于报警值
		{
			flag=1;					 //打开报警
			Relay=0;					 //继电器触点闭合,水泵工作
			LED_R=0;					  //红灯点亮
		}
		else if(temp>MH&&set==0)     //湿度值大于报警值
		{
			flag=0;					 //关闭报警
			Relay=1;					 //继电器触点打开,水泵停止
			LED_R=1;					  //红灯熄灭
		}
		else
		{
			flag=0;
			LED_R=1;			      //红灯熄灭
		}
		Key();						 //调用按键函数
	}
}

资料内容
(1)基于51单片机花卉、农田自动浇水灌溉系统设计论文;

(2)Proteus仿真文件;

(3)C程序文件;

(4)原理图文件;

(5)Visio流程图文件;

(6)参考资料;

(7)元器件清单;

资料图
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第12张图片
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第13张图片
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第14张图片
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第15张图片
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码_第16张图片
重要的事情说一遍!!!

由于51单片机的花卉、农田自动浇水灌溉系统设计是我的原创设计,获取全套资料,

请搜索查看我的【公】(众*)“号”:交院小智

你可能感兴趣的:(单片机开发,51单片机,土壤湿度,自动浇水,自动灌溉)