17、基于51单片机GSM短信湿度远程浇花浇水控制系统设计

该设计利用STC89C52单片机和ADC0832实现GSM远程控制的浇花系统,通过湿度传感器监测土壤湿度,低于预设下限时发送短信提醒,用户回复后启动浇水,高于上限则停止。系统还包括LCD显示、按键设置和继电器驱动的水泵模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要

设计是基于STC89C52单片机和ADC0832的GSM远程浇花系统。本设计的电路内部包含湿度采集和AD转换等主要功能以及GSM收发短信功能远程浇水系统设计的浇水部分是通过单片机程序设计浇水的上下限值与感应电路送入单片机的土壤湿度值相比较,当低于下限值时,单片机控制GSM模块发送缺水短信,用户收到短信后回复浇水,单片机收到回复的短信后输出一个信号控制浇水,高于上限值时再由单片机输出一个信号控制停止浇水,并回复短信浇水完成到用户手机上。这样可以帮助人们及时地给心爱的盆花浇水。

关键词:STC89C52;湿度的采集与显示; LED

 自动浇花器的研究现状

现如今人们的生活质量不断提高。人们都喜欢在家里养养盆花,这样可以陶冶人们的情操,丰富人们的生活。同时盆花可以通过光合作用吸收二氧化碳,净化室内空气,在有花木的地方空气中阴离子聚集较多,所以空气也特别清新,而且许多花木还可以吸收空气中的有害气体,因此,养盆花如今被许多人喜爱。

给盆花浇水是否能做到适时及适量,是养花成败与否的关键。但是,在生活中人们总是会有没时间照顾的时候,比如工作学习太忙,旅游或者出差等。花草生长的问题大多数以上是由花儿浇灌不及时引起的;好不容易种植很长时间的花草,因为浇水不及时或者长势不好,用来美化室内环境的花草几乎成了“摆设”。因此,我想设计一种可以给盆花土壤湿度进行检测,并且自动浇水的盆花自动浇水系统。

STC89C52单片机的存储器

 在单片机中,存储器分为程序存储器ROM和数据存储器RAM,并且两个存储器是独立编址的。

 STC89C52单片机芯片内配置有8KB(0000H-1FFFH)的Flash程序存储器和256字(00H-FFH)的数据存储器RAM,根据需要可外扩到最大64KB的程序存储器和64KB的数据存储器,因此STC89C52的存储器结构可分为4个部分:片内程序存储器、片外程序存储器、片内数据存储器和片外程序存储器。

下图给出了STC89C52单片机的存储器分布空间。左侧框中为单片机自身提供的8KBFlash程序存储器和256字节数据存储器RAM。右侧为可扩展的64KB的程序存储器ROM和64KB的数据存储器RAM。

一、硬件方案

硬件构成:电源5V供电、单片机最小系统、GSM短信模块,按键电路,LCD 1602显示屏电路,电源开关,DHT11温湿度传感器,蜂鸣器,继电器驱动水泵模块,AD转换模块,水位检测模块。

二、设计功能

1. 单片机型号:STC89C52/51、AT89C52/51、AT89S52/51都可通用。
2.LCD1602液晶显示器,显示当前测量湿度和报警的上限和下限阀值。
3.按键可设置上限、下限值,低于下限报警并启动水泵浇水,高于上限停止浇水。
4.采用继电器驱动微型潜水泵,继电器优点就是可以驱动更大电流的负载,方便更换,实用性更强。
5.通过ADC0832将土壤湿度传感器检测到的模拟量信号转换成数字量信号给单片机,单片机控制1602液晶显示出当前的湿度百分比
6.加GSM短信模块,当湿度低于下限不直接启动继电器控制水泵加水,而是发送短信给主人,主人可以通过短信来控制是否需要浇花。
7.主人手机号码可通过按键随时更改(仅限移动用户)。

三、成品实物图

 四、原理图   

五、PCB图  

六、Proteus仿真  

七、程序源码  

部分代码:

	byte_write(0x2003, dianhuahaoma[1]);
	byte_write(0x2004, dianhuahaoma[2]);
	byte_write(0x2005, dianhuahaoma[3]);
	byte_write(0x2006, dianhuahaoma[4]);
	byte_write(0x2007, dianhuahaoma[5]);
	byte_write(0x2008, dianhuahaoma[6]);
	byte_write(0x2009, dianhuahaoma[7]);
	byte_write(0x200a, dianhuahaoma[8]);
	byte_write(0x200b, dianhuahaoma[9]);
	byte_write(0x200c, dianhuahaoma[10]);
	byte_write(0x2060, a_a);	
}

/******************把数据从单片机内部eeprom中读出来*****************/
void read_eeprom()
{
	MH   = byte_read(0x2000);
	ML   = byte_read(0x2001);
	dianhuahaoma[0]=byte_read(0x2002);
	dianhuahaoma[1]=byte_read(0x2003);
	dianhuahaoma[2]=byte_read(0x2004);
	dianhuahaoma[3]=byte_read(0x2005);
	dianhuahaoma[4]=byte_read(0x2006);
	dianhuahaoma[5]=byte_read(0x2007);
	dianhuahaoma[6]=byte_read(0x2008);
	dianhuahaoma[7]=byte_read(0x2009);
	dianhuahaoma[8]=byte_read(0x200a);
	dianhuahaoma[9]=byte_read(0x200b);
	dianhuahaoma[10]=byte_read(0x200c);
	a_a      = byte_read(0x2060);
}

/**************开机自检eeprom初始化*****************/
void init_eeprom() 
{
	read_eeprom();		//先读
	if(a_a != 1)		//新的单片机初始单片机内问eeprom
	{
		MH  = 80;
		ML  = 20;
		dianhuahaoma[0]=0;
		dianhuahaoma[1]=0;
		dianhuahaoma[2]=0;
		dianhuahaoma[3]=0;
		dianhuahaoma[4]=0;
		dianhuahaoma[5]=0;
		dianhuahaoma[6]=0;
		dianhuahaoma[7]=0;
		dianhuahaoma[8]=0;
		dianhuahaoma[9]=0;
		dianhuahaoma[10]=0;
		a_a = 1;
		write_eeprom();	   //保存数据
	}	
}

/****************************************************************************
函数功能:AD转换子程序
入口参数:CH
出口参数:dat
****************************************************************************/
unsigned char adc0832(unsigned char CH)
{
	unsigned char i,test,adval;
	adval = 0x00;
	test = 0x00;
	Clk = 0;       //初始化
	DATI = 1;
	_nop_();
	CS = 0;
	_nop_();
	Clk = 1;
	_nop_();
	
	
	if ( CH == 0x00 )      //通道选择
	{
		Clk = 0;
		DATI = 1;      //通道0的第一位
		_nop_();
		Clk = 1;
		_nop_();
		Clk = 0;
		DATI = 0;      //通道0的第二位
		_nop_();
		Clk = 1;
		_nop_();
	} 
	else
	{
		Clk = 0;
		DATI = 1;      //通道1的第一位
		_nop_();
		Clk = 1;
		_nop_();
		Clk = 0;
		DATI = 1;      //通道1的第二位
		_nop_();
		Clk = 1;
		_nop_();
	}
	
	Clk = 0;
	DATI = 1;
	for( i = 0;i < 8;i++ )      //读取前8位的值
	{
		_nop_();
		adval <<= 1;
		Clk = 1;
		_nop_();
		Clk = 0;
		if (DATO)
		adval |= 0x01;
		else
		adval |= 0x00;
	}
	for (i = 0; i < 8; i++)      //读取后8位的值
	{
		test >>= 1;
		if (DATO)
		test |= 0x80;
		else 
		test |= 0x00;
		_nop_();
		Clk = 1;

资料包括:

需要完整的资料可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。

纷传点击用微信打开即可,过程有点繁琐请见谅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ENGLISH_HHZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值