专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

单片机水塔水质监控器设计

作者:七彩流星雨   来源:本站原创   点击数:  更新时间:2014年04月21日   【字体:
确定选题:据我所见邻居生活都是用井水的。下雨时雨水下渗,水里杂质含量大,抽到水塔里后时间长了会在水塔积一层水垢,清洗麻烦;有时抽到泥沙损坏水泵;有时抽满水人不知道,继续抽浪费了地下水;关键时候遇到枯水期抽不上水。基于这四点我决定了这个选题


本作品设计目的和基本思路:目的是更好地帮助人们利用地下水资源;减少清洗水塔的次数;合理抽取井水,避免枯水期没有日常用水;以低成本低价格应用于老百姓家中。思路是从井水的浑浊度、水塔和井的水位高低监测获取参数,控制抽水机,水井枯水期来时提醒人们,并预先抽满水塔。当抽水中浑浊度过高时,则会停止抽水,等待水自然澄清,紧急用水时还可以通过按键人工强制抽水


项目摘要本系统是一个全自动化水塔管理电子设备,减少清扫水塔的次数,用水更合理更有保障,能够充当家用水塔的管家婆



2012年11月20日上午
在淘宝网上订购的电子元件终于到了。经历11.11购物狂欢节,还真牛。淘宝和支付宝的服务器是撑过去了,后面苦的是快递员们呐!

与上次做的自行车安全行驶监控器相比,这个装置算是最简单的了。装置的具体功能是要实现水质的检测,然后根据浑浊程度做出相应的处理。具体的话,等我做好再补充哈!
反正我的乐趣在于制作过程,最后的参赛结果也碰运气吧。主要在于创新点上。

程序我已经在2012年11月14日22:38:32开始编写了,因为要先过市里面那关吧,现在程序里面已经写好数码管显示程序了,准备继续写片内AD的控制程序。

这次使用的主控芯片,哈哈,你猜是什么呢?按照我的风格,应该会猜到是AVR单片机——ATmega16L。
没错,这次使用的仍是它,因为它功能较全,引脚数量恰好合适,不是太多也不太缺。
这次用了两块74HC573来控制四位共阴数码管的显示。其实一块都不用也行,AVR单片机的IO口驱动能力也不逊色于51 。但为了稳定,还是用上吧。

另外,刚一拿到数码管时,就愁了。数码管背面什么标识都没有,仅仅有一个CS字样,我就知道那个引脚是位选的,但是剩余的引脚什么也没标。好不容易才上网找得到准确详细的引脚排列。仔细一看,还真不规律呢,不知道他们这样子设计数码管的引脚排列的目的是什么。囧。。

还有一个关键的传感器没到,期待中。这个必须要有的,一切就靠它了。Come on!我先焊接最小系统和数码管显示电路


 
2012年11月22日23:25:08
郁闷啊~~~~呼呼!终于弄好数码管显示了。电路在中午焊接完成了,但是写程序测试时一直不正常。
第一次不正常的地方:数码管一通电时,内容一闪而过,随后一直处于灭了的状态。我一下子以为哪哪短路了,连忙断电,深怕烧坏三个芯片。然后我看了下电路板,然后对照下芯片的数据手册,发现并没有接错线,那是不是程序问题呢?我直接写IO输出0x0,另一个IO输出0xFF,按理说数码管全亮的,但是这次再一实验,数码管连闪都不闪了。然后我怀疑数码管是否有问题,我用万能表的二极管去搭,发现每个LED都可以发光。然后就卡在这了,直到下午两点,我外公一个偶然的动作:用手指靠近芯片,指着芯片说话,忽然我发现数码管跳动了!
按照我以往的经验,IO口在被单片机控制下,电平是不容易被改变的,当然也有可能发生改变,那种耦合我想应该对于这种电路很少发生。但是我外公手指靠近的时候,IO口电平改变了!这就说明:74HC573的其中几个IO口的引脚是悬空的!
那就麻烦了,形成这个原因的是焊接问题:虚焊。 随后我用万能表一条条线测电阻,唯有一条电阻无穷大。我轻轻一碰 。。。郁闷的线都从孔里滑出来了。
焊接一定不能粗心呐!确保每一个焊点都焊得结实。其实我前几天焊接时有点赶速度。
将线焊接好后, 跑程序一看,问题又出现了:
数码管数字乱七八糟的跳动显示。。。。
我不断地把程序简化,边简化边测试,一直简化到没有循环,单单控制IO口。只有这样才能判断问题在哪。
我结合AVR Studio4编程环境还有它内嵌Proteus 。将这两个软件联合调试,步进步进……
突然,我发现当我只要求在第一位上显示2时,第三位也显示出来了!然后我回去看位选表,并没有问题。然后一步进,发现IO口输出和我表里的内容并不符,但是从程序开始跑到运行这输出代码期间并没有任何代码对IO口进行修改。随后我就猜想,是不是IO口的输出算法 有问题。因为AVR单片机不像51单片机可以直接引用指定的端口设置1和0的。AVR一下子操作的就是8位。随后我到文件头一看,哎呀我的妈呀!


与运算居然写成了求模运算!这种错误在编译的时候是不会报的。哎呀,粗心问题呐!可困扰死我了!


程序的电路板如下两图。我手头没有其他颜色的线了,就只有粗细不同的红线两种。没办法进行细致的划分。我用粗的红色线来连接VCC和GND,细的红线是连接IO口。走线规则是走直线,走直角,少穿越。我从老式收音机电路板中学到一种走线办法是走到电路板另一面,在合适的地方再穿回来,这样可以避免直接交叉。当然这是对于单面板来说比较好看的走线办法。实际上像数码管那样排列不规则,又密集的IO口,这样做有点麻烦,我干脆直接走好了。不过这样子堆,有可能发生电感耦合,导致IO数据“无形”中被修改了。

 



听说每一位程序员都喜欢1024这个数字,呵呵,我们认为它是一个整数,和人们常说的100元类似。
1024KB=1MB。1024MB=1GB……于是我就作为测试了。实际上第四位我不打算用来显示数字,我打算用来显示控制状态。





晚安!加油,明天继续,明天先用万能表测试传感器是否能正常工作先!
因为市里面的截止日期已经到了,虽然有理由延时提交,但是不会多久的,先来个能对水浑浊度变化做出一点,哪怕是亮一个灯或是数码管闪一下的反应,去过市里面这关。对于钦州市来说,直接过去算了,不像南宁市那么有竞争力。比赛还是去年那个广西青少年科技创新大赛。具体也是在三月份左右开始。


可能有人疑惑我做的东西怎么没发电路图。对于这种小制作,其实我也没为此画过电路图,我是直接看着芯片的引脚定义来焊接的,电路图在脑画
了。


2012年11月23日23:44:17
浑浊度传感器测试完成,实验证明到手的两个浑浊度传感器都能起作用。但是我有一个疑惑的地方。
对于该传感器的接线,我查阅网上资料和官方数据手册,接线大概有三种。如下:
 


这个是来自官方数据手册的。由图可知,这样接的时候。浑浊度和电压的图像曲线是减函数的。浑浊度越大,电压越低。
我中午按照这种接线办法,发现电压表无论在浑水还是清水中,几乎保持在0.18V~0.22V之间。更换水环境后,稍稍有点变动,但还是在那个区间内。我觉得这种变化太小了,精度不够高。我差点以为传感器坏了,或者是传感器本身不好用。但是我不甘心呐!继续上网找了下大学生们的论文。





这个是来自[学士]基于单片机全自动洗衣机毕业设计_secret  这种接线办法
 我又试了一下这个,这个的话,无论换到哪个水环境。电压几乎不发生变动,保持在3.8V。这比官方的还差多了。这样接法好像是测总的电压,总的电压一般是不会变的。



这个是来自 
TS浊度传感器在洗衣机中的应用  他的接线方法与官方的不同。
看得出像是综合了官方的和上一个的电路图。我试了下这种接线办法,不过我去掉了其中的R1和无极电容 ,我的电路图如下图:



我现在只是用万能表去测试传感器,实际上还没有接到单片机中。万能表红针接VCC,黑针接②。VCC为5V直流。
我这样接后,在悬空状态下测得电压1.42V。



在纯净自来水中测得电压1.17V


在浑浊的井水中(我外婆说,搞浑浊多容易,然后她东擦西擦,越擦越来劲,结果出乎意料地浑浊。。。)
测得电压2.30V 




综合上面的三个不同环境下的电压值,我发现它的浑浊度与电压的图像并不是像官方数据手册里说的那样是一个递减的减函数。反而是一个增函数。随着浑浊程度的变大,电压也跟着变大。

但是由官方的数据手册可知,该传感器用的是发光二极管和光电三极管配合工作的。由官方提供的图可知引出来的是光电三极管的发射极。一般来讲光电三极管的伏安图像是向上的,即是增函数,而且它还有电流放大(增益)功能。
但是官方给的图像确实向下的,而我按照他提供的电路图,电压始终保持在0.18V~0.22V之间。这让人费解呢……

不过 ,不管怎么样,已经能够明显地识别出水环境的变化了。接下来准备接到单片机上,利用AVR单片机内置的AD转换器,算出得出电压并显示在数码管上。




2012年11月24日21:39:27
中午的时候,我编写完AD转换程序了。在开发板上实验成功。
void AD_init()
{
SREG|=0x80;
ADCSRA|=1<<ADEN|1<<ADIE|0x07;//AD转换器启动,中断使能,128分频
ADMUX=1<<REFS0|1<<ADLAR;//使用AVCC作参考电压,使用AD0通道,左对齐
ADCSRA|=1<<ADSC|1<<ADATE;//启动转换。置位自动转换

}
SIGNAL (ADC_vect)
{
//static char last;
char temp;
temp=ADCH;//舍去两个精度,直接取高位。实际上我就只有四位的数码管,再多位数也无意义。
//if (abs(temp-last)>2)
{
display(temp);
//last=temp;
}
}
 
下午放学回来后, 将传感器连接到电路板上。可是连接好后,同样的程序,又出现了乱码。
郁闷的,我继续一个个用万能表电阻档测,发现其中一个74HC573好像每个输出引脚都互通的,他们之间存在1KΩ的电阻。实际上正常的话,输出引脚之间为高阻态。哎,不知道什么时候弄烧你了,真是郁闷的。我之前焊接的时候,没有放IC卡座,这下有得我拆了……







今晚拆的时候,我开始是用上我的秘密武器——真空吸锡器去拆的,但是,我甩了好几下,也用力打了几下气,感觉总是被堵住,气不够大,这个情况上次我就出现了,但那次我仍是没办法疏通,即使是加热情况下,里面细小的管子里附着的焊锡怎么甩都不移位,冷了又堵了。
今晚我狂甩,但仍是没法通,然后突然,“啪”!的一声,它中间冒出火花,电阻丝短路了,顿时房间黑暗……我也被吓到,叫了一声,但并没有电到我。
外公怕了怕,听说他正在前往厕所,听到我叫声后,回头一看房间的灯黑完了,他说怕死了。
外公家这层楼的设计还算不错,几乎每个房间都有漏电断路器,只需要在门口处把开关打回去即可。我以为没有呢,然后又要跑到一楼大门外面冒着冷风摸黑换保险丝。
 

不过,没有热风机的我,只要用土办法——撬,我边用电烙铁加热边撬,撬得一点是一点,往死里撬,
越撬越愤怒,撬得我想死的念头都有了。没有先进的工具真可怕。但我照样把你给拆出来了!~~~~
然后我吸取教训,先给他一个IC座,再插上新的。也拖这次“福 ”,我把电路板的线又整齐排了下,要是不动这个功夫的话,我也不再想去排线了。


然后再而三地用万能表测,直到把整个电路都测完,第一确保没有短路现象(焊接问题),第二接对线。测试合格后,我自信地接上传感器!
传感器与主板的连接,我还是像上次自行车安全行驶监控器那样,设计一个直角三角形的接头,为了防止反插。但是如果非常非常不小心的话,仍会出现反插的情况。但是对于这个浑浊度传感器内部的电路来说,没有像触摸传感器那样娇嫩(那次我换掉三个~~~),要尽早意识到就没问题。

哈哈,一接上去,马上看到了相对稳定的数字180左右。
然后我把它放到清水里,AD的电压转换结果为239 。我再放到浑浊了一天的水里,电压示数为223!!!!
天啊!居然这次正常了!和官方数据手册的图像一样!大概就是一个减函数的图像。随着浑浊度增大,电压越来越低。然后我用一张纸直接隔着传感器,示数为5左右。哈哈!是不?电压这时很低了,如果水很浑浊,就会像纸一样,阻碍光线的散射和反射。








PS:AD转换器把通道里的电压转换出来,输出到寄存器里的结果并不是实际电压值。
它是把基准电压(我设为由AVCC提供,电压为5V) 平均分成256份(我舍去了两位精度)。即每份5/256约为0.02V。然后它会自动利用单片机提供的系统时间,把电压从GND的0V一份一份递增,就是逐次逼近通道电压。当很近的时候,触发系统中断并把递增了多少份这个数值写到寄存器里。在这里我设置了自动连续转换,AD转完后紧接着进行下一次转换,除了断电和使能位清零,它都会一直转换下去,而且转换速度也不慢。我的系统时钟使用内部8MHz,AD转换时选用了256分频因子。

实际电压可以通过这个数据获取。即是把数码管显示的数据乘上 0.02V即可。

因为转换速度快,而且我设置自动连续转换,每次转换的结果立刻显示出来。
这样的话,数码管显示的数据会一直有所跳动,比如传感器悬空时,数码管会随机显示179~181这三个数据,带有闪烁。
我在想能不能降低点转换频率呢?但是对水的灵敏度就降低了。
如果我要限制在两次结果相差不到2的时候,取上一次的结果显示。这样的话,确实是可以减少闪烁。明天先吧,明天把程序改下。还要注意下单片机里面的减法运算出现负数的情况,因为用的都是unsigned char。尽量避免吧
 

明天打算再去取更多的浑水来,我要知道传感器的分辨率,这点在数据手册 中没有提到。
外公外婆家用的是井水,而且门口到处是泥沙,多容易的事~~~最后还要测下对可溶性杂质的反应。




2012年11月25日11:38:40
我对各种水进行测试:
 


在干净的井水中为238.


混有大颗粒的泥沙,中层液体为145


加了食盐溶解后,测得食盐水为230


这时碰巧我妈洗完菜,我拿了一点洗菜水。测得232


在细小的沙粒中,取上层测得203



实验结果还是比较满意的。对可溶性的物质也可以测得出,而且相差5以上。往后还要考虑要模拟水井下的物质。
还有管道的设计。


2012年11月25日15:42:18
对程序改编,使用定时器控制AD的启动。我设置为每秒只转换两次。转换太快闪烁得要紧。
void AD_init()
{
SREG|=0x80;
ADCSRA|=1<<ADEN|1<<ADIE|0x07;//AD转换器启动,中断使能,128分频
ADMUX=1<<REFS0|1<<ADLAR;//使用AVCC作参考电压,使用AD0通道,左对齐
//ADCSRA|=1<<ADSC|1<<ADATE;//启动转换。置位自动转换

TCNT1=0xC2F7;//每0.5秒一次中断
TCCR1B|=0x04;//256分频
TIMSK|=0x04;//定时器1中断溢出使能

}
SIGNAL (ADC_vect)
{
char temp;
temp=ADCH;
display(temp);
TCNT1=0xC2F7;
}
SIGNAL (TIMER1_OVF_vect)
{
ADCSRA|=1<<ADSC;//AD启动转换
}

2012年11月26日下午
和在市政府的科协主任 聊过后,深感时间紧迫。定于12月1日前提交文字资料和相片。我决定以水的浑浊度为根据控制抽水机是否继续抽水作为本次项目的功能。另外加装水位传感器,实现整套系统的全自动。不知道这个定位好不好,虽然不如去年的好,总之拼一下试试。
现在只需要文字资料和照片,不管实际功能如何,得想办法以假乱真。。。在照片上体现出所有功能 。
抽水机听取主任的建议,用养鱼的水泵代替。

 2012年12月5日下午,再次与科协部长见面还碰巧看见张老师,他对该装置也提出了几点建议,但是时间太紧,目前没做完是一大麻烦,而且外观和整体模型都未成形,仅仅做好了核心部分。这种情况比去年的还糟。
建议有:
不仅由数码管显示水的浑浊程度,旁边加上3个LED灯辅助显示水的浑浊程度。
再外加四个LED灯,分别显示正常工作中,因缺水而补水中,强制抽水中,因浑浊而停止抽水中。
外壳封装成黑匣子,只保留对用户有直接作用的部分。浑浊度传感器打算使用热熔胶密封,将其捆绑在水泵上,随水泵一起入水。
设计水塔与水井(模型) 的水循环管道,方便演示其功能。
 我个人发现,对于不同环境,即使是让人感觉很清的水,显示出来的数值都不相同,并不能以一个定值来评估水的浑浊度。我看需要以我目前所看见的最纯净的水为标准,采用百分比形式。当换了不同的环境后,通过一个按键,设定以当地环境的清澈时的数值为准,然后程序里把该数值乘上一个百分比得出浑浊与不浑浊的分界点。
造成不同数值的原因有可能是光线问题、不同容器的容器壁的反射和散射作用,水质的问题。一个弊端就是当地的水最清澈就只能在这个值了,不能再高了。所以临时采用百分比这种比较粗略的方式判断,否则就会导致一直处于因浑浊而不能抽水的状态。


 2013年1月28日17:36:51
今天上网登录科技创新大赛的服务平台,发现市级和省级的审查都通过了呐。。那我就打算在这个寒假做完它。上次那个自行车安全行驶监控器在一个月的时间内赶做,太赶了,没爸在家帮弄的话,根本没时间完成,好险。



2013年2月7日23:51:17
接到通知,大赛组委会发的通知,我的作品已经列在进入决赛的名单里了。http://www.gxqs.org/creative/wjtz/201302/821.html
3月22号报到。嗯,还有两个月。看来这次时间还是比较充分的。那就赶快做吧!钦州市算我在内总共有三个人参加比赛,其中两个是小学生,他们都是灵山县实验小学的,看来灵山确实不错。

今晚, 我第一次尝试使用三极管,我以前一直很怕它,不是很知道怎么用法,今晚鼓起勇气,就算失败也要试一下。因为想了下,仅仅是控制一个继电器,就动用一个ULN2003,就太浪费了。我上网自学了下,了解三极管的种类和构造,以及使三极管工作在放大和开关下的条件后,我焊接进去试了下,居然成功了!
比起以前常用ULN2003电路来得更简洁,又占极少的电路板面积。我用的是8050D NPN型三极管来控制继电器。好简洁呢!爽呐!以后一定常用三极管,当然控制量多就用IC了 

我的接法是,单片机IO引脚串联100欧电阻(因为整个系统都是用5V的,单片机IO输出即使电流不大,但也是5V,串电阻是使基极的电压小于集电极的电压,就是
集电结反向偏置)到三极管基极,发射极接地(发射极正向偏置),+5V接到继电器的一个线圈引脚,另一个线圈引脚接到三极管集电极,这样三极管就工作在放大状态下了。
三极管有三种状态. 
1). 截止状态 : uB<0,两个PN结均为反偏,iB≈0,iC≈0,uCE≈UCC。三极管呈现高阻抗,类似于开关断开。 
2). 放大状态 : uB>0,发射结正偏,集电结反偏,iC=βiB。 
3). 饱和状态 : uB>0,两个PN结均为正偏,iB≥IBS(基极临界饱和电流)≈UCC/βRc ,此时iC=ICS(集电极饱和电流)≈UCC/Rc 。三极管呈现低阻抗,类似于开关接通。

对于PNP三极管而言,如果要使PNP三极管导通,那么基极与发射极(发射结)正偏,即:基极(N)电势要比发射极(P)电势低,(这就是发射结正偏).还需要基极(N)电势要比集电极(P)电势高,(集电结反偏).

对于NPN三极管而言,如果要使NPN三极管导通,那么基极与发射极(发射结)正偏,即:基极(P)电势要比发射极(N)电势高,(这就是发射结正偏).还需要基极(P)电势要比集电极(N)电势低,(集电结反偏).








2013年2月11日22:24:19
更改5V电源输入接口的位置,腾出空间放置按键、LED灯。我想把所有开关、LED灯连同数码管放在一个开口处。
另外,我再焊接上一个IN4007二极管,用来防止电源线的正负接反。到时候参赛期间如果出问题,急忙检查的话,怕接错线烧得更厉害。这么做是有点保障。





 

2013年2月12日10:20:09
完成四个按键的焊接。经过程序测试无虚焊。
四个按键一端接到+5V,另一端接到PD0~PD3 。另外这四个端口引脚都接103排阻到地。
这样便是高电平触发了。只要按键按下,对应引脚就被拉高,在程序里进行“与”运算即可知道按了哪个键了。





2013年2月12日22:29:34

焊接完所有LED灯了,线好多啊。。。。~~~不过也没事,对于LED灯,只有6个LED的线挤在一起产生的干扰不会怎么样的。
 



2013年2月13日15:20:11
 水位传感器的IO口也焊接完了。。。其实就是和按键一样的焊接方式,把它们引出来。到这里,如果不出什么意外的话,电路板的所有焊接都已经完成了吧。就剩程序和那些水井模型了






2013年2月17日12:41:44
计划是: 
2月底前做完水塔、水井的模型,三月初编写和调试程序,最后两星期做展板


2013年2月23日21:49:19
今天去买了抽水机、一个置物架,定做了两个玻璃缸。
玻璃缸工程图如下:(3D模型、工程图制作软件:SolidWorks 2011 。我还不太熟练这个软件,不过比AutoCAD在这方面好用点,我个人觉得AutoCAD用于平面画图很棒,立体建模和制作零件工程图我就用SolidWorks了)然后直接打印工程图去白沙街那些做鱼缸的师傅定做。










另外,对于这个装置,我加多了一块木头做支撑,然后开了一道口子,用来插线的。还买了一个排插,总不能剪断抽水机的插头来接继电器吧。

引出来的IO和VCC插针,用热熔胶固定了下,焊锡的硬度不够。










还有就是置物架了。
买散装的回来,自己组装。汗,还没有送说明书,就一袋螺丝……
而且我发现不知道是偷工减料还是没有焊稳上去运输途中掉了(八九不离十是没有焊接上去,因为没有断裂的痕迹),架子的顶部,支撑顶板的螺丝,只用了3个,就是上了三个角而已,还有一个角没有焊上孔,而且送的螺丝也只送3个。
这个架子中间本来还有一层的,我不装它了,因为抽水机有点高,只能放在下层。这样还好,中间那层空出来的两个螺丝我用来悬挂这个水塔水质监控器






看到了吗?螺丝的”耳“只有三个。。。

装好了!~~~~即使没有安装说明书也是很so easy 的。



2013年2月24日14:24:10
在盒子旁边开个口子,仅仅露出插孔。
开口我是去街上的五金电动工具店里借电锯自己开的。但电锯的齿轮直径有点长,达到这个深度时已经有点超长了,但是电锯比手锯快得多,而且手锯开孔麻烦不好看。
后来用电工胶布包一层边。











接好插排内的线,线头先上点焊锡,这样扭进去不容易松散,而且又压得稳。再打个结。因为我打算是用胶水把它与盒子粘起来。一旦粘好后,里面的线出问题的话就很难拆开了。


2013年2月24日20:35:52
回家吃饭时,路过一家店,看到门口有卖白色的胶布,走近一看,呵电工胶布!
然后顺手就买下了。我拆开原来贴的黑色胶布,换上白色的。这样更好看 呵呵!~~~~







内部差不多就完工啦~~~明天放学后买些电线,3米应该够了。



2013年2月25日
买好了线和接头了。
买了五米多的粗铜线和十几米细一点的铜线(主要是价格问题。粗的1.5元一米,细的1.2元)
粗铜线打算用来连接抽水机的。细的拿来连接传感器和延迟5V电源的。
另外。在买插头时,发现有一种插头特别新颖,好有创意的设计!
它的脚可以旋转的,随时可以方便转成三角插头、两个角的插头,各个孔都可以插入!还申请了专利呢!~~~2元一个。






接线时,在盒子里面打了个结,无论是220V的电源线还是5V的电源线,都打上。钻孔钻8mm的。防止要是拿去参赛的时候,一不小心拉开了。多做点安全措施有必要的。不过这也就降低了制作的速度,慢工出细活嘛!



这样就接好电源线啦!~~~黑色的插头输出5V 1A直流电,另一个直接接220V到电机,由继电器控制电路通断。
另外,在电路板焊接的时候,我尽量把继电器下的220V的两根阴线与其他线,无论是电源线还是IO线,都离远点,在继电器那个区域,基本上不布线。继电器的引脚到接线端子座采用焊锡走线,所以该装置工作时,继电器那个区域蛮危险的。等全部做完后,这个区域还要用酒精清洗一遍,检查有没有残留的焊锡把电引到别的地方去,不然运输过程中稍微一摇晃说不准就短路上了,220V的电源线一旦碰到5V电源线或单片机IO非常非常不妥的。

2013年2月26日23:17:44
快速地接完抽水机的电线,仅用了四分钟~~~不过还算慢了。时间花在包胶布上,包得扎扎实实的。









另外,今天两个玻璃缸工匠师傅那边都做好了,但是没有小车,而且又刚好不合适,只能一个一个搬回来了,明天再搬回一个就齐了。
然后还要解决水管的问题,我打算用软水管做。还要弄两个水阀才行,玻璃缸已经钻好25mm的孔了,不知道有什么水阀合适装的,能够密封好的,而且玻璃孔没有螺纹。要不就用像空心螺丝那样的水阀吧,如果漏水就剪一块自行车内胎垫下去。


2013年2月28日23:01:58
做这个玻璃缸,老爸也来插手啦。觉得还不如自己割玻璃做划算,前几天请白沙街的那个师傅做,两个玻璃缸65+60=125元!
工费太贵了,材料听说才20元一平米。当初是怕钻孔钻不好漏水之类的问题。不过这费用算学校经费的话,就不管了,以后就自己做算了。
今天下午做了一下,发现还是有点漏水的问题,我用报纸垫在底部,灌多多的水,很快,深色的地方就出现在接口处。在水管接口处没处理好,可能加厚点橡胶垫和涂一层玻璃膏在接口外面会比较好,等明天后天玻璃胶干了再说。







2013年3月2日
今天下午和爸一起合作搞,速度很快。
漏水地方怀疑是螺纹处水浸出来,然后卷上几层层生料带 ,再扭回去。这样就不太漏水了。问题解决。

在台子的顶部,拿两块木头来固定玻璃缸的两个角 ,防止它因底下的抽水机震动而移位掉下去。
另外在出水口,一半采用软水管,一半采用硬水管,一方面好运输一方面简洁好看。
 硬水管还需要一个卡扣固定,控制器还需要几根螺丝来固定,目前只是暂时绑一下来测试。



今晚,我把浑浊度传感器用玻璃胶进行密封。为了防止意外,我做好了两个传感器,如果有问题剪线接上另外一个。
玻璃胶涂得不太好,毕竟才接触了两次而已,这方面技术很生疏。

这是我认为目前焊接得最漂亮的一个!






2013年3月3日17:21:40
今天整个装置几乎完工啦!
目前能实现水位检测,低水位自动抽水。上午调试时,总出现一个问题,数码管乱显示,程序也总是不对。看了一阵子才发现是AVR单片机出问题了,程序经常跑飞,具体原因先不管,果断换了一块,稳定许多了。 
我外婆在旁边拍了N张照片。。。。但多数是手抖的。挑选了些清晰的都上传了。更多照片请看相册。
 













由于忘记先前跟爸说带他那台笔记本电脑 过来,所以就直接搬我的电脑到一楼来做算了。
尽管这里没法接网线,我还是能上网的。先用我的手机连接三楼的无线路由器,然后手机用USB连接电脑。然后手机里打开设置共享网络,即可!
信号还可以,有两格。

另外,装置的外壳打算不盖了,就这样全露出来,标签、装饰贴在顶部。就这样才露出全手工的样子,不搞太多封装。


对于在单片机里的除法。一般来说我这个装置需要进行除法运算,因为浑浊度的评估等级,以清澈时的数值为标准,中等浑浊为0.95,严重浑浊为0.90. 在单片机程序里,如果直接拿一个int或float型的数乘以0.95的话,程序体积会突然间增大三倍,原因是编程环境的内部算法不好。
我投机取巧换了一种,因为我不需要小数部分,所以,可以这样来算:标准值*95/100  。这样就可以避免进行小数运算了,还能自动舍去余数,单片机里进行整数乘除还是很可以的。
ClearValue=QualityValue;
CentreValue=ClearValue*95/100;
LowValue=ClearValue*90/100;
由于没有特别规定的标准值,我暂且以目视浑浊为基准了,这个百分比明天等玻璃胶干了以后,再实际更改下。

2013年3月4日
之前发现有一个浑浊度值的边界问题,导致抽水机频繁抽抽停停,就像抽筋一样。
我以前看过自动控制论里一些有关边界的问题,他们那些“砖家”理论说在两个功能范围之间设一个死区,在该区里不做任何反应。
这样子,不说能解决边界问题,但至少能减少触发边界问题的次数,就是抽水机不是那么频繁地抽抽停停,因为边界始终存在。
于是我就试下吧!

2013年3月5日黄昏
我发现问题并没有想象中的那么简单, 经过多次观察传感器的数值,不知道是单片机的AD模块不稳定还是传感器的问题,不过我认为单片机的AD模块的误差影响不大,官方数据手册里说的是+-3LSB绝对精度。
我怀疑是传感器那边,当加入泥沙等混浊物时,液体是流动的,细小泥沙也跟着流动,导致光的阻碍也是不均匀的。

实际上,我观测到的数值,浮动的范围超乎我的意料, 竟是 0~11,在那么大的范围不稳地地浮动,叫我怎么判断水是浑浊还是澄清的啊!

于是乎,我必须想办法把这个误差强制限制下来,必须要让最终数值保持一定的时间不变动但又能快速识别出有混浊物加入。

在我洗澡的时候,忽然想出一个算法,能解决这个问题,然后今晚在学校晚自习有空时验算过几次,就是考虑下极端情况,发现应该没问题的。今晚回到家后,按照我的思路编成程序,奇迹般的,数值的变动情况正是我想要的! That's what I need !
兴奋死了!真想怒吼一声“成功啦!”

就在此时,电脑桌面突然变黑,右下角提示“此Windows副本不是正版”,弹出窗口说“你可能受到了盗版软件的侵害!……”

好吧!纯属巧合,我不认为微软会在这个恰好时机这么告诉我的。怀疑是激活的期限到了吧,我装的是正版原厂镜像,等下我再用软件再免激活一次就OK了,那不碍事的,谁不是用盗版的啊。

我对我的算法还是比较自信的,但是我还是得连续试验几十次,看下这个算法是否一直长期稳定有效,如果没问题的话,我会贴出来一起分享!
 
2013年3月6日13:41:44
不错,今天暂未发现算法有问题,
刚刚解决了些关于指示灯的显示逻辑问题和更合理地改进该算法以便演示和实际使用后,程序算是比较完善的了。另外发现一个不稳定的问题:我还没把复位引脚拉高电平。目前还只是悬空的,这样很不稳定,单片机容易受到外界干扰自发复位。睡几分钟觉先,傍晚再搞


2013年3月7日13:38:45
发现,仅仅拉高复位引脚并没大作用,我怀疑不是单片机在复位造成的错乱。
在多次的开开关关中,我想可能是开关接触不良或者电源的供电不稳定 。

我在电源的接线端子处并联 一个330uF的电容,做滤波用。效果明显,反复开开关关都很稳定。我当初以为电源适配器里的滤波电容已经起这个作用了,不必再接一个,可能那个电容不够大吧。
另外,意外地发现,可以投机取巧用另外一种方法检测水井是否抽干。原先我还打算在水井模型上开个洞放水位传感器的,但是这个想法不现实,真实中的水井是没法安装水位传感器的。
现在的办法就是,利用现在这个浑浊度传感器,当水位低于浑浊度传感器的时候,红外发射和接收他们两个之间没有水做介质传播,取而代之的是空气。实际中发现,在空气中检测到的电压数值较低,相差三四十。
利用了这一点,间接得出水井被抽干了。

这样的话,我整个演示流程就顺畅了,而且不用更换浑浊的水。拿两个桶,一个浑浊,一个清水。一开始,水塔上的水处于低水位线,水管放在清水中,抽水机自动启动抽水。当我提起水管时,浑浊度传感器一起被提起,提出水面时,能够代表这是水井的水抽干了,然后装置上按照原先的设置,会将此判断为严重浑浊或水井无水,进而停止抽水。
再放入清水中时就继续抽水。然后再拿出来,放到浑浊的水中,它不会抽水。然后放回清水中,直到抽到高水位线自动停止。
整个过程就很顺畅了。然后放掉水塔的水到清水桶中等待下一轮演示。 



2013年3月7日23:05:57
算法基本上没有问题,那到这里整个装置就基本做好了,就剩些装饰和贴纸说明。还有展板。 

2013年3月8日13:36:55
公布下程序整个源代码,转载请注明出处哈,其中算法也在里面,供其他人参考。有什么意见也可以提下。
 
















2013年3月12日12:46:45
悄悄加了一个小后门,就是在每次按下初始化按键时,自动把当前的标准值存到ATMega16单片机内置EEPROM里,当按下第四个按键时,能够自动把存在内置EEPROM的数值读取出来并作为当前使用的标准值。这样能够方便我到现场演示前的调试。我可以在布展那天调到合适的标准值并保存下来,第二天直接读取就行。
另外,贴在装置上的贴纸也做好了,展板也OK了



原理解析:
由于水中含有悬浮及胶体状态的微粒,使得原来无色透明的水产生浑浊现象,其浑浊的程度称为浑浊度。浑浊度的单位是用"度"来表示的,就是相当于1L的水中含有1mg.的SiO2(或是白陶土、硅藻土)时,所产生的浑浊程度为1度,或称杰克逊。 浊度单位为JTU,1JTU=1mg/L的白陶土悬浮体。 
浑浊度是一种光学效应,是光线透过水层时受到阻碍的程度表示水层对于光线散射和吸收的能力。 
它不仅与悬浮物的含量有关,而且还与水中杂质的成分、颗粒大小、形状及其表面的反射性能有关。 

演示稿:
您好,这是一个水塔水质监控器,它主要是应用在城镇和农村的普通老百姓家庭中。
它主要是根据你水井里面水的浑浊度来工作的。
当我水塔里面的水用完时候,水位到达低水位线以下(开水塔泄水阀,等待)……
然后它就会自动启动抽水机抽水。但是,如果此时水井处于枯水期的话,就是说水井里面没有什么水抽了,(把水管提出水面) 
现在它就会自动停止抽水,等到有水抽了它就继续抽(再放回水里) 。
它主要的功能就是这个:
比如说如果现在水井里面的泥沙太多,水已经浑浊了,(水管拿到浑浊的水里) 
这里黄灯就亮起来了,说明水是浑浊的,同时抽水机也是自动停止了的,等到水自然澄清后,才会自动抽水(拿回水井)
当然,如果这个时候你的确很需要水的话,可以按下这个强制按钮,就能无视浑浊的水直接抽上来,但我不建议你这么做。 

这个装置方便快捷,成本低廉,比那些专业设备价格要低很多,对于普通老百姓家庭来说,已经能够胜任这一任务。所以这个经济实惠,又有人性化功能的装置必定是你家里水塔的优秀管理员。 

(基本功能演示完成,等待水被抽到高水位线,期间回答参观者问题)
(水到达高水位线后,装置自动断开抽水机电源)
嗯,现在水塔抽满水了就自动停了。 

测量原理: 
在此装置中,我以澄清水为标准,根据浑浊度传感器反馈回来的数据判断水质(在浑浊度传感器那边已经有校准)
浑浊度在这里可以显示出来,现在显示的是标准值。另外还可以通过下面这三个LED灯的亮灭情况观察到:绿色表示浑浊度达到要求,黄色表示浊度达不到要求,红色表示不能饮用。  
这个数字下降1可以认为浊度增加了1度。国家规定生活饮用水的浊度不得超过5度。一般主要看的是这三个LED灯,只要黄灯亮了就说明水质浑浊,最好不要饮用,而且会自动断电中国1976年颁布的生活饮用水水质标准)  
(经过多次对比实验,在普通家庭中这种测量方法已经能区分出能饮用的贺岁和不能饮用的水)

背景:
经过我调查发现,极大多数的农村城镇家庭自己在家旁边挖一口井,他们生活用水全部来自这口井。然而问题就来了:
①有时候下雨,地表的水带很多泥土、杂质渗透到水井里面,导致水质浑浊。如果没有这个装置的话,这些水被抽到水塔后时间长了会在水塔积一层水垢,清洗麻烦 ,而且饮用它们也不卫生。
②有时抽到泥沙很多的话,损坏过滤网和水泵;
③有时候水井处于枯水期,就是天气干旱,有些地方没有水可抽的时候,人们不知道,开着抽水机在那里抽空气,很是浪费电。
④有时水塔抽满水人不知道,继续抽浪费了地下水;
⑤水塔的水用完了以后,还要人为去启动抽水机抽水,比较麻烦。
所以我发明了这个装置来解决以上五个生活问题。  

2013年3月25日
本作品获广西青少年科技创新大赛中学生科技创新成果二等奖。


2013年3月27日12:38:35
本作品打算在外公家的水塔上安装使用,由于水井是已经密封了的,在安装时将去掉水质监控功能,保留水塔水位自动控制功能,即低水位自动抽水,满水自动停止。计划在本周六、日开始实行

2013年3月30日 
水塔水质监控器安装过程顺利,检测灵敏,已经投入使用。 家人给予高度评价。
老人家开水龙头发现没有水时,大叫一声抽水,然后另一个就在下面开闸抽水,然后在钟前守候着直到时间差不多了才离开,这样很麻烦。
如今这种现象已经不会再出现了,老人家也不用去管抽水机、水塔了。装置能在即将用完水前自动抽水,能够保证用水连续供应,不会断。这样空气不会进到水管里,每次开水龙头时也不会有喷射之类的现象发生了。




2013年5月22日17:51:21

由于学校准备拿这个东西做长期展览,而且家里很享受它带来的种种周到的服务,所以决定将这个作品装回当初在比赛现场展览时的样子,然后再开发一个新的来给自己用。

决定现在开始,重新做一个。新开发的水塔水质监控器按照其功能来说,不能再这样命名了。应该更名为“水塔水位监控器”。
 
这个新作品采用STC 51单片机,因为它价格便宜,并不需要AVR单片机那么高级的功能,我自制一块是贴片焊接的PCB电路板,在节约成本的同时,增加其性能。并且对电路也进行改进,提高稳定性。


2013年5月23日18:09:35
完成绘制原理图。
增加了测试点,方便维护。 
对单片机所有不用的IO引脚进行上拉,防止电磁干扰。
由于手头没有排阻,所以只好用贴片电阻代替。
在89C51单片机里,也是有内部EEPROM的,只是不是真正的EEPROM,但和EEPROM有着一样的功能,所以不需要外接EEPROM芯片。电路中还有一些参数尚未确定。
另外,51单片机里,ALE引脚还有一个非常有用的功能是:
ALE以六分之一振荡频率固定输出正脉冲, 8051一个机器周期=6个状态周期=12个振荡周期,若采用6MHz的晶体振荡器,则ALE会发出1MHz的固定的正脉冲。 可以用于驱动外部芯片,给外部芯片提供时钟振荡信号。
至于继电器,由于驱动是大功率220V抽水机,在开关闭合、断开的瞬间我敢肯定会在继电器内部产生电弧,但这继电器还受得住,开关频率最多一天就两次,寿命来个两三年还是可以的,更换也是轻松的事,就不弄消弧电路了,我也无法确定是否真的消弧了,因为继电器密封了的
看大图请到相应相册看高清图片





2013年5月25日19:17:48

修改电路,修改部分元器件的封装。
增加一个蜂鸣器,使用跳针控制,可以检测传感器是否损坏,因为使用二极管的话,在水塔那边碰传感器,不一定能看到放在屋子里的装置上的发光二极管发的光,所以改用声音。
只要我碰几下传感器,能听到蜂鸣器能发声就证明浮球传感器没有损坏。因此更加方便维护。
很多地方加入电阻,根据实际情况决定是否需要焊接,如果不需要就直接用焊锡连起来就行,全部元器件除了蜂鸣器外,采用贴片封装。
调整测试点分布。

这次修改,差点白费功夫。我按错一个按键,把所有元器件的参数、封装都恢复到默认设置,并保存了。
吓死我了,心想这下完了,然后我再想了下,这么出名的Altium Designer Release 10 不可能连这点失误都没有考虑到,于是我2不停地再到处点,看看有什么能够恢复之类的功能。结果哈哈!被我找到了。在左边的工程文件列表的树形图中,右键当前文档(原理图),在弹出的快捷菜单中最后一项:“本地历史”。点它后会列出一大堆同名的原理图,但后缀以数字区分。原来每一次保存时,AD都自动备份下来,只要双击他们就马上可以恢复。另外我看了下,他们是保存在C盘里的我的文档里的。


由于AD10里没有这个芯片的PQFP-44封装,自己对照着这个封装的图纸在画了一个封装,打印出来发现很吻合!



然后就继续安排布线,我试过用软件自带的自动布线,但它布线的结果并不令我满意,还是自己手动布线好!


布线完成,以负片形式打印出来:由于是单面板,一些线路根本没办法连通,我对部分线路采用过孔连接,到时候焊接时在底部用软电线连上就行。


涂感光油墨


曝光后
显影


显影完成,还要检查一些线路有没有短路之类的然后再蚀刻


蚀刻





蚀刻完成


脱模



还要再检查有没有线路短路之类的,这次我用万能表的二极管蜂鸣器档位来测,但是结果令我大失所望。因为多边形铺铜(铺地线)与线的距离太小了,10mil而已,有的还不到10mil,导致一些IO线和地直接相连,后来以为只是一部分,用小刀刮一下就行,后来发现有很多地方,实在不愿意刮了,决定重新做一块,间距设到18mil去。线宽照旧10mil


2013年6月2日23:07:57
由于感觉太难看,又重新做了一块

按照同样的方法得到:



然后我饶有兴趣地涂上了UV阻焊绿油





然后打印好焊盘和孔的菲林胶片,对准贴上去。绿油是没办法干的,绿油只有在紫外线灯照射下,才会固化,干。没被照到的地方保持液态然后被酒精等溶剂洗掉。所以必须保证一次性贴好,我就是没能一次性贴准,然后第二次移位修正时,整个板子的绿油就毁了。。。哎。以后还可以做两三个定位孔,用牙签插进去固定,这样应该很准。




洗掉后就成这样子了,后来我用砂纸打磨过,把那些多余的绿油磨掉,只保证焊点有铜就行,然后进行钻孔。绿油听说可以用NaOH洗掉,但手头上也没这个药品,显影液、脱模液都不能洗去阻焊绿油。







哎呀,比上次还难看。。。。我又有再做一块的冲动了,或者弄一点NaOh来洗掉绿油,可能也不太好洗呢

下次弄的时候,就蚀刻完后就可以了,不弄阻焊绿油和文字油墨了,很麻烦的说。。。不过裸露的铜时间长了可能也会变点。


2013年6月5日13:13:09
重新做了一块!再做多少块都不介意。。。管它呢。。
 

这次不印丝印层,不印阻焊层,所以把版权信息印在Top Layer ,通过腐蚀铜来写下版权的信息。
决定先钻孔后再蚀刻铜板再脱模。





2013年6月5日16:52:01

开始钻孔,由于地方、座椅的限制,没找到合适高度的桌椅,也没有台钻,就只有一个台钳和一把手电钻。
刚开始第一第二个孔很难钻,没有东西固定手电钻。不过后来,熟练了,即使没有台钻,双手就能搞掂!钻得蛮准的。主要是钻头一定要安好,钻时钻头一定要垂直,看不到钻头晃来晃去就行,不然就容易偏了。
最好先不要洗掉感光油墨和腐蚀电路板再钻,就着感光油墨钻比较好钻, 不容易滑,钻好后如果断路了,还可以用油性笔修补电路,然后再进行蚀刻铜箔和脱去感光油墨膜。这是经历了几天的三四次失败后得到的经验…………油性笔不会被三氯化铁腐蚀,它可以保护需要的铜箔,它的笔迹可以被脱模液洗去。





坐在床上钻的。。。。对照着电路板的设计图,看哪个位置需要钻孔就对应着钻下去。普通的IO孔都是0.8mm,二极管、开关等是1mm直径。钻头很细,一定要垂直钻,不然钻头会断,危险的。

 

钻好后,就是蚀刻电路板,把铜箔洗去。
每次腐蚀的时候,我都发现铜是从周围向中间消失的,就是周围的先被腐蚀掉,然后慢慢收向中间,然后就没了。
这溶液我腐蚀过三四块板了,有点浅绿色、墨绿色的,生成的氯化亚铁和氯化铜还有部分三氯化铁、氧化铁、氧化亚铁等弄的。





腐蚀的时候,铜箔表面变成那种红棕色或者像砖红色,显眼得很,可以被扫去,用画笔刷去后马上有会生成回来。


蚀刻电路板OK!
自认为是最成功的一次制版!失败多了经验多了,电路板一路做下来每一步都很清楚,心里也有底了。真是太爽了!

检查过没有短路、短路的地方,另外继电器的中点铜线我忘记用油性笔修补,一小部分铜没有了,等下用焊锡补上,主要是当时还不清楚用油性笔画上去
是否真的可以保护铜。下一步就是焊接元器件了。 

咱也学下乔布斯在电路板上签名,签得不好,见笑了。。 。签得真是爽啊!哈哈!






2013年6月6日11:36:40
焊接51单片机时,先对准芯片的引脚,对得准准的,把电烙铁的头换成刀头。然后在四周堆上大量的焊锡,把所有引脚都盖上去,并且在堆锡的过程中,抖动电烙铁,让焊锡充分变成液态浸透引脚。
然后用电烙铁沾大量的松香,然后去吸走焊锡,把焊锡吸到烙铁头上,然后用高温海绵擦去烙铁头的焊锡。
每次都一定要是沾大量松香,不能不用松香,轻轻一碰后马上提起烙铁,焊锡就被吸上来了。提起电烙铁的时候,发现吸不上时,烙铁不能往外拖,不能刮着焊锡,不然会损伤阻焊层的。我这里往外拖是让焊锡保护铜,因为我没有弄阻焊层进去。在真正的电路板上绝对不能拖。吸不上就用多点松香,要不就再堆锡,堆多点再吸。
不过这个能吸起来的前提时烙铁在第一次使用时必须充分形成锡合金,就是把焊锡通过高温渗透到烙铁头里去,这样才能吸得住焊锡。

还有个办法就是用多股铜线,浸了松香后,放在一堆焊锡的旁边,用烙铁同时加热铜线和焊锡,然后提起铜线,焊锡很多就会被吸到铜线上去了。

焊接完成后,一定要用放大镜+手电筒来检查引脚是否互相搭上,否则通电后可能会烧毁芯片的。松香是不导电的。松香可以用酒精洗去,洗不洗都没什么要紧的。






终于焊接完所有元器件了。在焊接过程中,部分元器件的参数更改,去掉高低水位的指示灯,去掉复位按钮。

在继电器周围,画有高压危险的标志,而我设计电路时也对这一区域不进行覆铜。因为如果覆铜的话,220V的电位差可能会导致与5V的单片机电路耦合,产生故障。







2013年6月7日20:02:32

程序编写、测试完成!启用了51单片机的掉电模式、看门狗,串口通信三大功能。
单片机采用6MHz外部晶振,内部使用双倍速(6T)模式。振荡器增益1/2 gain 。
经过实际测量,工作电压5V,抽水机抽水过程中控制器电流60mA左右,功率0.3W。抽水完毕后到下次抽水前,单片机处于掉电(停机)模式,整个控制器电流2.5mA左右,功率0.0125W。
沿袭“水塔水质监控器”里的功能,该水塔水位监控器照样具有记录抽水次数、高水位传感器失误次数、低水位传感器失误次数这三个参数。
89C51RC单片机同样具有EEPROM,我看了它的数据手册发现通过IAP/ISP技术可以访问内部Flash,其中数据区Flash可以当做EEPROM用,芯片设计者对EEPROM划分了八个扇区,每个扇区512字节。
我将抽水任务标识这一个字节的数据放在第一扇区,地址为
0x2010
累计抽水完成次数这一个long型数据放在第二扇区,地址为
0x2210
低水位传感器失误次数(long型)放在第三扇区地址为
0x2410
高水位传感器失误次数(long型)放在第四扇区,地址为
0x2610

另外对于这个片内EEPROM 的操作,一般需要先对要被所写的数据覆盖的区域进行擦除操作后才能写数据,不擦除也可以写,但是数据可能会出错。因为:字节编程:将1写成1或0,将0写成0,不能将0写成1,所以要擦除,只有擦除才能将0写成1 

51单片机的下载工具没有读取片内EEPROM的功能,我自己设计了一个引导程序。
在系统刚上电时,电路板上唯一一颗绿色的LED灯以20Hz的频率快闪,闪烁5秒。在它闪烁期间,通过串口(波特率2400,停止位1,数据位8,校验位N)向系统发送0x42这一字节的数据,那么系统马上作出回应,模板如下:

Hello,我是水塔水位监控器,由杨宇庆于2013年6月7日编程制作完成。\n现在向您报告运行情况:\n

从2013年6月7日投入使用以来,\n
累计完成抽水任务 0 
次\n
低水位传感器失误 0 次\n
高水位传感器失误 0 次\n  
感谢您的使用!下次有需要还可以叫我出来。\n我愿继续为您全天候管理水塔。祝您身体健康,万事如意,阖家幸福!\n 

另外,在此期间,发送0x14这一字节的数据,系统会马上清零这三个记录,请别轻易发送哟,收到这三个数据的她怕我作者也怕。因为我觉得这些记录很有纪念意义。

 5秒过后,系统将关闭串口功能,指示灯恢复为1Hz闪烁。
绿色LED灯在抽水状态即单片机工作状态保持1Hz的闪烁
LED在单片机初步检测到水位到达高水位或低水位线时,保持亮起,然后单片机开始复查水位,直到复查完毕恢复闪烁。
一旦抽水完成,单片机进入掉电(停机)模式时,LED保持熄灭。当水位到达低水位线时,传感器拉低外部中断引脚,产生一个下降沿,这个下降沿将唤醒单片机,迅速恢复正常工作模式,然后检测低水位,检测水确实是在低水位后,开始启动抽水机抽水……如此循环。

单片机复查水位的操作是:一秒钟检测一次,10秒过后,就检测了十次。每检测到一次计数加一,十秒后判断计数是否超过6,即有60%的检出率,就做出判断:水位确实到达该水位线,否则记录错误数+1,不进行任何操作。
虽然这个还不能说是确实到达,但是这种传感器就两条引线,光凭单片机本身也是很难摸清传感器到底是坏了还是没坏的。所以之前在楼下连的两个闸刀开关就很有作用了。另外电路板上还有蜂鸣器帮助检测水位传感器的工作状况。

还有个细节就是,在每次向EEPROM写数据期间,由于需要擦除再进行写入,虽然这个时间很短,大概13~20ms,但是,万一就在这个时候, 家里停电了,装置外部电源就停了,电路上唯一还有电能提供的就是电源适配器里的电容和我焊在电路板上的470uF电容。这两个电容为单片机供电,但电脑是很小的,为了节省电能,支撑这单片机完成这一操作,就熄灭LED灯,碰运气了。虽然这个概率很小很小很小,但我认为还是有可能性的,并联多个大电容能够提供更多的电能。而且数据手册上说道,当电压过低时,不能进行ISP/IAP读写操作。如果真的发生了,可能导致写入的记录不准确。 
 
明天早上就将“水塔水质监控器”拆下来,并读出里面EEPROM的数据保存到我的电脑上。然后换上新的"水塔水位监控器"。这样的话,他就宣告退役啦!~~~要不要什么仪式呢,呵呵。退役后,将重新安装在木桌上,装回原来参加比赛时的样子,整个演示装置包括那台小抽水机送往学校实验室供展览用。


2013年6月8日
旧版水塔水质监控器,已经停止使用。新版已经开始投入使用,安装过程顺利。
调取内部EEPROM数据发现,从2013年3月11日11时起开始担任家里水塔的管家,直到2013年6月8日8时,累计完成抽水86次。除了刚开始第一个星期用时出现点意外,经过维护后,将近三个月里不出现任何故障,期间经历过大暴雨、停电等环境影响。
嗯,记录蛮有历史意义的。 
另外,我读取了整个Flash和EEPROM数据到电脑上备份。 

关闭窗口
上一篇:用汇编语言实现单片机的循环灯控制

相关文章

阅读排行
推荐文章