赣南师范学院水质自动监测系统的设计学院:物理与电子信息工程学院专业班级:08电子信息工程成员姓名:李勇杨琰赖兴君张细平张冬冬占玲玲指导老师:许粮管立新2010 年月日摘要水质监测系统主要是用于对水质的检测,这样的系统在我们的生活中得到广泛的运用,比如我们的自来水厂就有很多这样的系统。
而目前使用的水质监测系统主要是通过工业电供电,价格也比较昂贵。
所以本次设计的新颖点在于太阳能供电以及和手机,电脑进行信息的交流。
本次水质监测系统的设计主要是利用单片机和GSM模块来达到对水质的监测。
对水质主要的监测指标有:PH,水位,温度,清晰度等。
通过单片机对水中这些指标的检测之后,通过GSM模块把检测到的信息发送到手机以及电脑上进行存档,可以根据存档的信息可以判断出水质的好坏。
从而做出相应的措施。
本系统的优点具有节能,环保,电路简单等。
关键词:水质,GSM,水质监测第一章绪论1.1课题背景本课题的背景是基于江西省鄱阳湖生态经济区的建设。
鄱阳湖经济区的建设是江西省的重要规划。
它以江西鄱阳湖为核心,以鄱阳湖城市圈为依托,以保护生态、发展经济为重要战略构想,把鄱阳湖生态经济区建设成为全国生态文明与经济社会发展协调统一、人与自然和谐相处的生态经济示范区和中国低碳经济发展先行区。
国务院已于2009年12月12日正式批复《鄱阳湖生态经济区规划》,标志着建设鄱阳湖生态经济区正式上升为国家战略。
这也是新中国成立以来,江西省第一个纳入为国家战略的区域性发展规划,是江西发展史上的重大里程碑,对实现江西崛起新跨越具有重大而深远的意义。
所以针对这种情况,鄱阳湖水质的质量就很重要,因为这影响到周围居民的健康饮水。
于是我们选择这个课题用于研究鄱阳湖水质的变化。
用相应的传感器定时检测指定水域中水的PH值和清晰度等水质状况,将检测得到的数据通过无线通讯的方式传送到水质监测中心,可以知道鄱阳湖水质的好坏。
同时本系统也可以用于检测其它区域的地表水、地下水以及饮用水的水质状况等。
具有一定的实用价值。
1.2水质自动监测系统的介绍本系统是实现水质无人自动监测功能。
该系统可以分为三个部分:第一是太阳能供电部分;第二是水质数据采集处理部分;第三是无线数据发送接收部分。
第一个部分用太阳能提供系统的电源,既可避免每次更换电池的麻烦,又可以利用自然界充足的太阳能,起到了节能以及环保的效果,符合现代开发新能源的思路。
第二个部分采集数据系统。
第三个部分的无线通讯,将数据采集系统采集的数据编码转换后通过无线通信系统发送到监测中心。
并且可以在电脑上做成一个表格,把每一天发送过来的数据记录下来,用于对比和观察。
这样不用人工去记录数据,可以方便的显示出准确的水质数据以减轻工作人员的工作强度。
通过本系统测出的数据可以较客观的反映水质的情况。
从总体来看,本系统的创新性和先进性体现在利用了太阳能供电以及数据的无线发送和接收。
第二章系统功能的介绍2.1系统框架本系统分为三个部分:第一是太阳能供电部分;第二是水质数据采集处理部分;第三是无线数据发送接收部分。
第一个部分用太阳能提供系统的电源,既可避免每次更换电池的麻烦,又可以利用自然界充足的太阳能,起到了节能以及环保的效果,符合现代开发新能源的思路。
第二个部分采集数据系统。
第三个部分的无线通讯,将数据采集系统采集的数据编码转换后通过无线通信系统发送到监测中心。
根据以上的描述,可得系统的框架图如下:图 12.2 太阳能电源部分的设计2.2.1太阳能电源的原理我们这个系统利用太阳能供电,主要是利用太阳能电池的原理。
太阳能电池是通过光电效应或者光化学效应直接把光能转化成电能的装置。
它的原理是:太阳光照在半导体p-n结上,形成新的空穴-电子对,在p-n结电场的作用下,空穴由n区流向p区,电子由p区流向n区,接通电路后就形成电流。
这就是太阳能电池的工作原理。
太阳能发电方式太阳能发电有两种方式,一种是光—热—电转换方式,另一种是光—电直接转换方式。
而太阳能电池是一种直接把光转换为电的装置。
这是利用了光电效应,将太阳辐射能直接转换成电能。
太阳能电池是一种由于光生伏特效应而将太阳光能直接转化为电能的器件,是一个半导体光电二极管,当太阳光照到光电二极管上时,光电二极管就会把太阳的光能变成电能,产生电流。
当许多个电池串联或并联起来就可以成为有比较大的输出功率的太阳能电池方阵了。
太阳能电池是一种大有前途的新型电源,具有永久性、清洁性和灵活性三大优点.太阳能电池寿命长,只要太阳存在,太阳能电池就可以一次投资而长期使用。
2.2.2太阳能电池的电路图太阳能电池的原理电路图如下:图 22.3 单片机数据处理部分2.3.1 STC89C52RC的介绍(1)主要功能STC89C52RC是一个低电压,高性能CMOS 8位单片机,片内含8k bytes 的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash 存储单元。
STC89C52RC有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,STC89C52RC可以按照常规方法进行编程,但不可以在线编程(S 系列的才支持在线编程)。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
(2)功能特性· 兼容MCS51指令系统 8k可反复擦写(>1000次)Flash ROM· 32个双向I/O口 256x8bit内部RAM· 3个16位可编程定时/计数器中断时钟频率0-24MHz· 2个串行中断可编程UART串行通道· 2个外部中断源共8个中断源· 2个读写中断口线· 低功耗空闲和掉电模式软件设置睡眠和唤醒功能(3)引脚图图 3(4)引脚介绍STC89C52RC的40个引脚,从功能上来看可分为下面三个部分:①电源和时钟引脚·Vcc:电源端·GND:接地端·XTAL1:振荡反相放大器及内部时钟发生器的输入端·XTAL2:振荡反相放大器的输出端②控制线或其他电源的复用引脚·RET:复位输入端·ALE/PROG:外部扩展电路低字节地址允许锁存和EPROM编程输入端·PSEN(低电平有效):程序存储器外部取指控制信号·EA/Vpp:外部访问允许端和12V的编程允许电源③输入/输出引脚·P0:8位漏极开路双向I/O口。
外接存储器时,作为扩展电路低8位的地址和总线复用口·P1:8位具有内部提升电阻的双向I/O口·P2:8位具有内部提升电阻的双向I/O口。
外接扩展电路高8位地址线·P3:8位具有内部提升电阻的双向I/O口,P3口除了作为一般的I/O 口外,更重要的是它的第二功能。
2.3.2水温测量的设计(1)水温测量的原理水温的测量可以用温度传感器,温度传感器有数字信号输出和模拟信号输出两种。
而我们这次设计所用的温度传感器是数字信号输出的。
这种温度传感器是DS18B20,DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
DS18B20的管脚排列如下图:图 4从上面的图4可以看出,DS18B20只有三个引脚,它只需要一个数据线就可以完成与单片机的双向通讯,其测量温度的范围为温范围-55℃~+125℃,可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。
DS18B20所测得温度与温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。
DS18B20测温原理如图5所示。
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
图5 DS18B20测温原理框图(2) DS18B20与单片机连接的电路图因为DS18B20“一线总线”接口的温度传感器,所以只需要使用单片机的一个IO口就可以实现与DS18B20的双向通信,这里我们用得IO口是P1.4,用P1.4口去实现与DS18B20的通信。
温度值由P1.4传入到单片机,单片机再经过处理后发送到液晶显示和手机以及电脑上。
图 6(3)驱动DS18B20的程序DS18B20温度传感器的驱动程序如下:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit DQ = P1^4;uchar panduan;void delay1(uint count) //delay{uint i;while(count){i=200;while(i>0)i--;count--;}}void restds1820(void) //send reset and initialization command {uint i;DQ=0;i=103;while(i>0)i--;DQ=1;delay1(200);}函数名:向ds18b20写一个字节的数据void writebyte(uchar dat) //write a byte to ds18b20{// uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;writebit(testb);}}*函数名:向ds18b20写一个位的数据void writebit(char bits){uint i;if(bits) //write 1{DQ=0;i++;i++;DQ=1;i=8;while(i>0)i--;}else{DQ=0; //write 0i=8;while(i>0)i--;DQ=1;i++;i++;}delay1(2);}函数名:向ds18b20读一个位的数据bit tmpreadbit(void) //read a bit {uint i;bit dat;DQ=0;i++; //i++ for delay DQ=1;i++;i++;dat=DQ;i=8;while(i>0)i--;delay1(2);return (dat);}函数名:向ds18b20读一个字节的数据uchar readbyte(void) //read a byte date{uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=tmpreadbit();dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里}return(dat);}函数名:控制转换,读出温度uint tem() //DS18B20 begin change{uint Temp;//uchar get[10],k,H,L;restds1820() ;//dsreset();delay1(1);delay1(10);writebyte(0xcc);writebyte(0x44);delay1(15);restds1820();delay1(11);writebyte(0xcc);writebyte(0xbe);for(k=0;k<2;k++){get[k]=readbyte();}H=get[1];L=get[0];Temp=H*256+L;panduan=(Temp&0xf000)==0xf000;if(panduan){A_Temp=(-1)*Temp/16;}else A_Temp=Temp/16;return(A_Temp);}2.3.3 PH测量的设计(1) PH测量的原理PH是溶液中氢离子浓度的负对数,用来表示溶液的酸碱性。