完整版基于单片机的家用水流量设计毕业设计.docx

上传人:b****6 文档编号:16151597 上传时间:2023-07-10 格式:DOCX 页数:22 大小:176.03KB
下载 相关 举报
完整版基于单片机的家用水流量设计毕业设计.docx_第1页
第1页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第2页
第2页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第3页
第3页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第4页
第4页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第5页
第5页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第6页
第6页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第7页
第7页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第8页
第8页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第9页
第9页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第10页
第10页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第11页
第11页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第12页
第12页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第13页
第13页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第14页
第14页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第15页
第15页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第16页
第16页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第17页
第17页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第18页
第18页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第19页
第19页 / 共22页
完整版基于单片机的家用水流量设计毕业设计.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

完整版基于单片机的家用水流量设计毕业设计.docx

《完整版基于单片机的家用水流量设计毕业设计.docx》由会员分享,可在线阅读,更多相关《完整版基于单片机的家用水流量设计毕业设计.docx(22页珍藏版)》请在冰点文库上搜索。

完整版基于单片机的家用水流量设计毕业设计.docx

完整版基于单片机的家用水流量设计毕业设计

基于单片机的家用水流量设计

 

摘要

谁是我们每天都要接触的东西,同时水也是非常宝贵的资源,怎么样才能够帮助我们节约、规划我们的用水,在这里我们想到了制作家用水流量仪器,在达到活动大脑的同时也能够为我们的家庭带来切合实际的提高节约意识与用水节约数字化,鉴于当前我国水资源短缺,如何节约环保已经成为各阶层共同应对的问题。

本次毕业设计我通过以单片机为主体,出于对多方面的综合考虑,通过对各模块的应用与结合,对水流量的测量进行设计与应用,旨在提高大众节水意识,优化生活质量。

关键词:

节约;流量;家用;单片机。

目录

引言:

2

方案设计:

2

1、方案选择2

方案一:

2

方案二:

3

方案三:

5

2、方案确定6

3、理论分析与方案论证7

4、总体设计7

1温度程序模块7

2水流量程序模块8

3显示程序模块8

5、单元电路(或软件模块)设计9

(1)时钟电路9

(2)复位电路10

(3)按键控制电路11

(4)水流量测量电路11

结束语:

12

参考文献13

引言:

当今社会,经济快速发展,人们生活水平普遍提高,对物质生活的需要和精神领域的追求也日趋提高,同时对家居等的舒适度,个性化,智能化,功能多样化等也提出了更高的要求。

鉴于当前我国水资源短缺,如何节约环保已经成为各阶层共同应对的问题。

本次毕业设计我通过以单片机为主体,出于对多方面的综合考虑,通过对各模块的应用与结合,对水流量的测量进行设计与应用,旨在提高大众节水意识,优化生活质量。

我设计的家用水流量可通过液晶屏对温度的实时显示调节用水温度,测量水的流量并换算为价格用于提示用户用水程度。

早期的水表由英国人发明,随后德国,法国,美国,日本等国依次发明或引进先进水表,具体有往复式单活塞式水表,旋转活塞式水表,圆盘式水表,旋翼式水表等。

我国的水表使用和生产较晚,直至1879年,李鸿章创建我国第一家水厂,水表进入我国。

之后的一百余年我国水表整体落后于西方发达国家。

目前我国家用水表多是机械旋翼式水表。

其弊端有:

水表始动流量大,不流水水表自走,漏损率高,检查和维修周期短,准确率低等。

方案设计:

1、方案选择

方案一:

本方案由流量计,单片机,显示器,温度测量计,报警器等主要器件构成,其工作原理大致为:

当打开水龙头时,根据单片机STC89C52的指令、水流量计传感器和数字温度传感器DS18B20实时采集水流量状态和水温的数据。

当单片机STC89C52扫描到水流量计传感器的脉冲数,经过单片机STC89C52处理,计算出所采集的水流量后,通过液晶屏LCD1602能动态显示当前水流量、水费及水温(当温度超出安全范围时,报警器工作。

硬件框图(图1):

程序流程图(图2):

该方案特点:

(1)液晶显示有水温、水价、水费和当前水流量。

水流量的测量由开关控制。

(2)在程序中可以分为3个主要模块:

水流量模块,温度模块,显示模块。

(3)由于有时自来水水流不够均匀,水流量传感器较小,测量存在局限性。

方案二:

将滑动变阻器固定在密度较大的不锈钢网上,垂直于水流方向放置(与管壁无摩擦),将变阻器,恒定电源,安全电阻接入电路,因为不锈钢网的阻碍,水流会对不锈钢网产生力,所以通过水流的速度(因为管道横截面积确定,水流速度反映水的流量)可以转化成对应的电流。

将电流转换成相应的信号传入到单片机中,进而将对应的流量和费用传输到液晶显示屏上,将温度计固定在管道,将温度信号转换成电信号输入到单片机,输出对应水的温度。

(当水温过高时,温度信号转换成的电信号将进入警戒区域,报警器工作)。

硬件框图:

软件流程图:

该方案特点:

(1)原理较为简单,器件更为耐用。

(2)体现了多学科交叉的特点,水流对不锈钢网的冲击与滑动变阻器阻值的对应关系是依据了力学原理,将温度计对水温感应的信号转换为电信号涉及到热学与电学的转换等,本方案将多学科融入工程,通俗易懂。

(3)由于不锈钢网安装于管道中,从卫生角度和实用角度来看,并不如第一种方案。

譬如,不锈钢具有导热特性,长时间后不锈钢会被腐蚀,影响水质,不易更换维修等。

方案三:

该流量计工作原理如图所示,当液体流经产品内有涡轮叶片机构,使涡轮旋转,涡轮的转速随流量的变化而变化。

由于叶片内置磁体通过下方的一磁线圈回升,叶片周期性地切割电磁铁产生的磁力线,改变线圈的磁通量。

根据电磁感应原理在线圈内将感应出脉动的电势信号,此脉动信号的频率与被测流体的流量成正比。

该高频脉冲是成正比的转子角速度和流速。

脉冲信号随时传送给单片机,再由单片机将信号传给液晶显示器和警报器。

硬件框图(如图6):

程序流程图(如图7):

该方案特点:

(1)涡轮流量计是理想的低流量液体监测器件。

小型涡轮的反应迅速。

(2)涡轮技术是不受系统压力变化的影响。

流量传感器的标准电源和输出出规格可以很容易地改进,以适应当前的控制器。

2、方案确定

我设计该组件的目标及要求为:

可以在一定非适宜环境下工作,操作方便,具有较强的实用性与可行性。

尽量要求测量精确,误差较小。

该水流测量装置应具有较强的安全性能,不会对人体与环境造成负面影响。

本身不会造成大量的资源消耗或浪费。

简约美观,符合家居氛围。

各方案的特点:

首先,2美观性较差,3中的涡轮可能存在噪音。

其次,水流较小时2,3可能会停止转动,同时3的涡轮存在惯性,会使所测流量偏大,这些都使2,3方案可靠性降低。

再次,从实用角度来看,方案二中滑动变阻器的阻值随着水温的变化而变化,受环境影响大;从卫生性能上考虑,3方案中安装在水中的涡轮会使水质降低。

相比较而言我认为方案一更为合理,具体如下:

受温度影响较小,可以适应多种工作环境;美观简约,操作方便;耗费资源少,节约环保,不会对环境和人体造成负面影响;采用电子流量计进行水流测量,相对另外两种物理方案误差较小;经济廉价,实用性强。

综合以上分析,我认为方案一更加适合设计要求,故对方案一进行了具体的设计与实施。

3、理论分析与方案论证

工作原理:

当打开水龙头时,根据单片机STC89C52的指令、水流量计传感器和数字温度传感器DS18B20实时采集水流量状态和水温的数据。

当单片机STC89C52扫描到水流量计传感器的脉冲数,经过单片机STC89C52处理,计算出所采集的水流量后,通过液晶屏LCD1602能动态显示当前水流量、水费及水温。

各项技术保证:

我设计的家用流量设计大致可分为温度程序模块,水流量程序模块,显示程序模块。

其中温度程序模块主要是将温度信号转换成电信号和对温度的处理,如调节数值在合理范围内,是否超出安全范围并报警等。

水流量程序模块是对水流量进行数值读取并清零,对水流量数据进行处理等。

显示程序模块是计算出流量值,温度及资源分配情况等。

4、总体设计

1温度程序模块

(1)温度数据转换程序

由温度传感器DS18B20采集的温度数据读取后温度的低位和高位分别存在主芯片SCT89C52存储器中。

其中依定传感器的设计,读出的数据最高位为0时温度为正,温度为1时,温度是负数。

是以对温度数据处理,将温度数据高位和低位整合在一起,在判断温度的正负即可。

(2)温度数据显示前处理程序

将已处理好的温度数据的首先判断它的正负,然后再去运行其他的代码。

在这里,程序还设定了温度报警。

温度报警本来可以在DS18B20中对芯片进行设置,但考虑到对芯片的熟悉度不够,容易出错,而在程序中设定比较容易理解,写起来也不会太难。

还有实际水的温度不可能超过100度,所以测得100度以上的温度值就会显得多余,在程序中只要设定最高99.9度即可。

再就是美观上的设定,测得的温度在为个位时,十位为0就会看起来不太美观,只要把十位设定看不见即可。

如图9所示:

2水流量程序模块

水流量的测量主要依靠对得到的频率处理,由流量计在一段时间下产生高电平的个数决定,即Q(流量)=F(频率)R(商家设定值)所以只要在单片机中设定一定的时间,并在该时间之下计算出得到的高电平即可。

在本程序中STC89C52的两个定时器T0为计数状态,T1为计时状态,这样方可测量流量。

(1)水流量的读取程序

中断程序运行的时间到,就可以读取计数器中的数值,将下数值读出后把计数器赋值为0,等待下一次的取出,然后进入对读出数据的处理程序。

(2)水流量数据的处理程序

在预定时间到,即已经取出了定时器的数值。

我们计算的水流量最大是以每吨来计算并显示的,故一个整形或长整型的数不够,故先把它放在了一个int变量的存储空间内,做水流量的前三位,在定义一个长整型的数,把它作为水流量的后六位,这样计算起来也比较容易,数据也不会起冲突,也是为将要计算水价做准备。

设定该水流量的最大计数为250吨,超过了定值,则会从0开始。

如图11所示:

3显示程序模块

在程序中只是计算出流量值,温度值以及和资源分配的情况,一些字母的显示,

都要另加,这样才能尽善尽美的表达出显示出来的意思。

在显示程序中加入了温度的测量,所以在主程序中不必再测量温度。

在第一页主要显示的是温度、水费

和水流量的后六位,最后以t结尾。

第二页主要显示温度、单位水价和水流量的前三位,最后以kg结尾。

如图12、图13所示:

5、单元电路(或软件模块)设计

各单元电路:

(1)时钟电路

单片机的最小系统有三部分组成,即电源,时钟电路和复位电路。

其中单片机的电源引脚与5V电源连通即可,而时钟电路和复位电路还需接口扩展,这也是单片机的基本电路操作。

时钟电路用于产生单片机工作所需的时钟信号,时序是指令执行中各信号之间的相互关系。

单片机本身就如同一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。

在STC89C52单片机内部带有时钟电路,因此,只需要在片外通过XTAL1和XTAL2引脚接入定时控制元件(晶体振荡器和电容),即可构成一个稳定的自激振荡器。

在STC89C52芯片内部有一个高增益反相放大器,而在芯片的外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容。

在单片机的XTAL1脚和XTAL2脚之间并接一个晶体振荡器就构成了内部振荡方式。

STC89C52单片机内部有一个高增益的反相放大器XTAL1为内部反相放大器的输入端,XTAL2为内部反相放大器的输出端,在其两端接上晶振后,就构成了自激振荡电路,并产生振荡脉冲,振荡电路输出的脉冲信号的频率就是晶振的固有频率。

在实际应用中通常还需要在晶振的两端和地之间各并上一个小电容。

用晶振和电容构成谐振电路。

电容大小与晶振频率和工作电压有关。

但电容的大小影响振荡器的稳定性和起振的快速性,为了提高精度,本实验板采用20pF的电容作为微调电容。

在设计电路板时,晶振、电容等均应尽可能靠近芯片,减小分布电容,以保证振荡器振荡的稳定性。

(2)复位电路

复位是单片机的初始化操作,其目的是使CPU和系统中各部分处于一个确定的状态,并从这一状态开始工作。

单片机的RST引脚为复位引脚,振荡电路正常工作后,RST端加上持续两个机器周期的高电平后,单片机就被复位。

我采用按键开关复位是指通过接通按钮开关,使单片机进入复位状态。

本设计中将开关复位与上电复位组合在一起形成组合复位电路,上电复位电路完成上电复位功能,开关复位电路完成人工复位。

图15中C7与R5构成了上电复位电路。

上电复位后,电源经R5对C7充满电源,C7等效于开路,RST端为低电平;单片机正常工作。

按开关K1后,C7两端电荷经R5迅速放电,K1断开后,由C7、R5及电源完成对单片机的复位操作。

在上述电路中C7、R5按上电复位电路的设计而取值。

(3)按键控制电路

课题设计之初,要求基本实现的功能有水流量的控制、水价的改变。

由于液晶显示屏不能够完全实现其显示,故又增加了换页功能,共三个控制键。

图16按键电路

(4)水流量测量电路

水流量测量电路如图28,图27为模块设计应用的流量计。

本次设计中最重要的是水流量的测量,通过水流量传感器的数据采集,根据商家的水流量传感器的参数可以得出单片机在运算时的数据。

水流量传感器参数:

环境温度:

-10~55℃

流量计算在流量为:

0.2~0.4LMin时1L=2100次;0.5~0.8LMin时,1L=2280次;0.9~1.2LMin时,1L=2350次;1.2~2.5LMin时,1L=2460次;(脉冲次数在流量变化时有一定程度的变动)

接线方法白线:

信号输出;黑线:

电源负

测量精度:

±5%(在流量稳定的系统,精度可达±2%)

工作电压:

DC0~~24V

工作压力:

≤100PSI(7kgcm)

耐湿性能:

在环境湿度为90%以下时性能保持稳定

寿命测试:

本产品用进口干簧管作感应元件,在负荷小于24V1mA前提下,开关寿命大于3亿次。

图17图18

结束语:

本文是在老师的精心指导和严格要求下完成的,####老师以其严谨求实的治学态度、高度的敬业精神、兢兢业业、孜孜以求的工作作风和大胆创新的进取精神对我产生重要影响。

同时,还特别感谢####各位同学对我的无私帮助,使我得以顺利完成论文。

通过这次设计,使我获得了丰富的理论知识,极大地提高了实践能力。

单片机领域这对我今后进一步学习计算机方面的知识有极大的帮助。

在此,我忠心感谢####老师以及电子工程系各位老师的指导和支持。

在未来的工作和学习中,我将以更好的成绩来回报各位领导和老师。

参考文献

[1]张风言.电子电路基础(第二版).北京:

高等教育出版社,1995.

[2]张风言.电子电路基础(第一版).北京:

高等教育出版社,1986.

[3]康华光.电子技术基础模拟部分[M].第五版.北京:

高等教育出版社.

[4]王俊峰,斐炳南,李传光.电子产品的设计与制作工艺[M].北京理工大学出版社,1995.

[5]王丽敏,邓舒勇.电路仿真与实验[M].第一版.哈尔滨:

哈尔滨工程大学出版社,2000.

[6]谭浩强C语音程序设计(第二版).清华大学出版社

附录:

C语言程序清单

#include

}

**************ds1820写数据子程序********************

voidds1820wr(ucharwdata)

{

unsignedchari=0;

for(i=8;i>0;i--)写数据2进制8次

{

DQ=0;给脉冲信号

DQ=wdata&0x01;数据传送

delay_18B20(10);延时

DQ=1;给脉冲信号

wdata>>=1;数据移位

}

}

*****************ds1820温度转换程序****************************

uintread_temp()

{

uchara,b;

ds1820rst();ds1820复位ds1820wr(0xcc);跳过读序列号

ds1820wr(0x44);启动温度转换

ds1820rst();ds1820复位

ds1820wr(0xcc);跳过读序列号

ds1820wr(0xbe);读取温度

a=ds1820rd();将温度数据给a

b=ds1820rd();将温度数据给b

tvalue=b;将温度数据转移

tvalue<<=8;

tvalue=tvalue|a;

if(tvalue<0x0fff)是正温度吗

tflag=0;正温度标志

else

{

tvalue=~tvalue+1;负温度,取反加1

tflag=1;负温度标志

}

tvalue=tvalue*(0.625);温度值扩大10倍,精确到1位小数(0.0625)return(tvalue);

}

****************ds1820温度显示子程序*************************

voidds1820disp()

{

uchart1,t2,t3,t4;

t3=tvalue1000;百位数(0-9是0x30-0x39)温度值放大了十倍

t1=tvalue%10010;个位数t4=tvalue%10;小数位if(tflag==1)

{

wr_dat(0x2d);负温度显示负号:

-

}

elsep37=1;

if(t3!

=0)

{

t1=9;

t2=9;

t3=10;

t4=9;

p37=0;

}

if(t2>=4)

p37=0;elsep37=1;

if(tflag==1)

{

p37=0;负温度显示负号:

-

}

if(t3==0)

{

t3=10;如果百位为0,不显示if(t2==0)

{

t2=10;如果百位为0,十位为0也不显示

}

}

wr_dat(table[t3]);显示百位wr_com(0x80+3);wr_dat(table[t2]);显示十位

wr_dat(table[t1]);显示个位wr_dat(0x2e);显示小数点wr_dat(table[t4]);显示小数位

}

**********************流量程序*******************************

voidliuliang()

{

while(d>=2)

时间到?

{

d=0;

d清零

b=TH0*256+TL0;读取频率

TH0=0x00;计数器清零

TL0=0x00;

g=0;时间标志位

}

loop();水流量计算程序与数据转换程序

}

**************第一页显示子程序***************************

voiddisplay1()

{

wr_com(0x80);温度显示

wr_dat(0x54);显示T

wr_dat(0x3a);显示:

read_temp();读取温度

ds1820disp();温度显示

wr_dat(0x00);显示°

wr_dat(0x43);显示C

shuifei();

wr_com(0x80+0x40);水流量(t)显示wr_dat(0x46);

wr_dat(0x4c);

wr_dat(0x4f);

wr_dat(0x57);

wr_dat(0x3a);

wr_dat(0x20);

wr_dat(table[n9]);

wr_dat(table[n8]);

wr_dat(table[n7]);

wr_dat(0x2e);显示小数点

wr_dat(table[n6]);

wr_dat(table[n5]);

wr_dat(table[n4]);

wr_dat(0x20);显示小数点wr_dat(0x74);

wr_dat(0x20);

}

**************第二页显示子程序**********************

voiddisplay2()

{

wr_com(0x80);温度显示

wr_dat(0x54);显示T

wr_dat(0x3a);显示:

read_temp();读取温度

ds1820disp();温度显示

wr_dat(0x00);显示°

wr_dat(0x43);显示C

wr_com(0x80+10);水价显示wr_dat(table[j2]);

wr_dat(0x2e);wr_dat(table[j1]);

wr_dat(0x5c);

wr_dat(0x2f);

wr_dat(0x74);

wr_dat(0x20);

wr_com(0x80+0x40+5);水流量(kg)显示wr_dat(0x20);

wr_dat(0x20);

wr_dat(table[n4]);

wr_dat(0x2e);显示小数点wr_dat(table[n3]);wr_dat(table[n2]);wr_dat(table[n1]);

wr_dat(0x20);wr_dat(0x6b);wr_dat(0x67);

}

*****************控制流量测量的开关程序***********************

voidkaiguan1()

{

if(p14==0)按键按下?

{delay

(2);

if(p14==0)

{delay

(2);

p36=~p36;P3.6取反

TR0=~TR0;TR0取反

while(p14==0);按键松开

}

}

}

 

**************界面切换开关程序********************

voidkaiguan2()

{

if(p15==0)按键按下?

{

delay

(2);

if(p15==0)

{delay

(2);

kai=~kai;P3.6取反

while(p15==0);按键松开?

}

}

}

*****************水的单价控制开关程序************************

voidkaiguan3()

{

if(p16==0)按键按下?

{delay

(2);

if(p16==0)

{delay

(2);

j++;水价加一

if(j>40)水价大于40j=0;水价清零j2=j10;水价分位j1=j%10;

while(p16==0);按键松开?

}

}

}

**********************程序初始化******************************

voidlcd_init()

{

TMOD=0x15;设定定时器0为计数功能,定时器为1为定时功能

TH0=0x00;定时器0赋初值0次

TL0=0x00;

EN=0;液晶使能端为0

wr_com(0x38);液晶初始设置

wr_com(0x0c);

wr_com(0x06);

wr_com(0x01);

wr_com(0x40);

wr_dat(0x06);写CGRAM写字模

wr_dat(0x09);

wr_dat(0x09);

wr_dat(0x06);

wr_dat(0x00);

wr_dat(0x00);

wr_dat(0x00);

wr_dat(0x00);

zong=0;总流量(带小数点)

EA=1;开启总中断

ET1=1;开启定时器1中断

TR1=1;开启定时器1

TR0=0;开启计数器0

p16=1;p16为1

p15=1;p15为1

p14=1;p14为1

zong=995;总流量的后三位赋初值

a=199999;总流量的前六位赋初值

j=20;水价赋初值

j2=

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2