本帖最后由 1ylh 于 2015-4-22 10:24 编辑
DIY远程水箱水位及温度采集显示系统
玩电子这么多年了,各种各样,形形色色的元件都把床底给堆满了,消耗的太少,都在吃灰呢。一直以来都是仿制仿制,仿制又要买新的元件,备的元件都不适合新的“项目”,自己做的东西都很少,眼看着东西都没法消耗了,终于下定决心搞一个真正的“DIY”吧。 记得以前(嗯嗯,估计至少有3年了吧)看见论坛上有人发的带水箱水位显示的自动上水器,当时回帖说想DIY个数码显示的,显示水位的百分比。为此,12年的时候就在 淘宝上买好了水压传感器,美信里申请好了相应的芯片(幸好早申请好了,现在已经无法申请了——我没有企业信箱啊)。芯片型号见图纸吧。 电路设计部分,自己只会51,所以选了个STC系列带AD的,因为之前只玩过89c2051/89C51嘛,又想玩下AD,所以选了这款,显示用2位的数码管就可以了,想起以前还申请过DS1920不锈钢的传感器(以前申请了18b20,美信没给,就换着申请了下这个,就是比较难装,不锈钢纽扣式封装),顺便加一个温度采集吧,反正加个切换显示就行。乡下的水箱在4楼顶上,我总不能传感器装楼顶,给它弄个15米的线路吧,那样信号都不知道会变成啥样子,所以方案选择时打算弄两套单片机系统,楼上的一套专门采集信号,串口发送到楼下的单片机来处理显示,考虑供电和走线,选用网线来传输,15米的距离还是用RS485的通信吧,保险点(反正申请的485芯片,嘿嘿),网线有4对线,其中2对用来供电,两对用来通讯,正好,搞定!楼下的主控,接收串口发来的信息,处理,显示,驱动水泵抽……等等,超过今天的范围了,为什么??下文慢慢说吧! 硬件选择完毕,就开始画电路图了。水压传感器是电桥输出,信号mV级别,弄个仪放吧,简单高效!一片358运放给压力传感器恒流供电,多的一组组成一个减法电路——处理下压力传感器的零点漂移吧!(结果没用上,因为,俺那个传感器漂移居然是负值),下面就是电路图了(信号采集部分
) 画好了,然后画PCB,根据好几年前买的盒子尺寸画!(再汗一个,那盒子都买了有5年以上了)
过了年,打样回来,准备安装呢,一看傻眼了!主控的封装弄错了,宽体的弄成窄体的了,看看吧:
算了,谁叫自己那么笨,还好管脚距离是一样的,用刀刮刮,就这样用吧! 有网友说什么14位16位的飘什么的,我至于吗?就一个1米多的水箱,分成256份来显示还不够?难道我要弄到连0.1mm的水位变化都显示出来?再说了,我才几块钱的单片机啊,足够了。测试水压采集,弄个管子,先嘴巴吹气,咋纹丝不动啊,嘴巴压力不够?找万能的度娘,有人表示可以到20kpa啊。咋不动呢?传感器坏了?换一个吧,幸好买了好几个不一样的,(幸好应该改成不幸,哈哈),可以动了,看着换下来的传感器,应该不对啊,新的就坏了?难不成是拿错了?结果一试,晕啊,卖家发货的时候把1mpa的和20kpa的装混了,1mpa的,嘴巴能吹动才怪呢!哈哈 好了,采集部分基本弄好了,是不是该弄下面处理部分了呢?嗯嗯,要加上水泵,加上电压、电流监测、加上抽水多久水位没变化要自动关机,加上电机过热、过载、超压、欠压保护,加上……等等!看着手上的9块剩余的板子,想想已经有了的简单上水控制,还是算了,以后再说,我再用块采集部分的板子,改成数据显示和报警就得了,哈哈,省就一个字啊!嗯嗯,连单片机也换成便宜的11f02e吧,2k程序足够了,不要ad,便宜啊! 信号处理部分代码编程说明: 1、主控采用STC11F02E,串口速率2400(速率低,尽量减少距离造成的误码概率,)晶振6MHZ;只会汇编,代码用汇编编写,用的是WAVE 6000。 2、软件接收下位机发来的数据信号,在二位数码管上显示。因为为上位机,数码管一直显示,不屏蔽显示;采集部分显示30秒后关闭显示; 3、采用内部EEPROM存储设置的报警水位,掉电不失; 4、接收下位机数据,形式为*,水位,温度,E0,E1,E2;*为引导符号,水位为百分数,温度为10进制温度,E0表示水位传感器错误(暂时未考虑),E1为温度传感器错误,E2为水位硬件溢出错误;当发生错误代码时,优先显示错误代码,优先顺序是E0.E1.E2,且以每秒一次速度闪动; 5、在正常情况下,按键“上”和“下”是切换显示水位和水温开关。按设置键进入报警水位设置,“上”为加1,“下”为减1,报警水位只能设置在1%~80%报警,设置时报警位以一秒一次的速度闪动,再次按设置键存储退出,在无操作30秒后自动存储退出。按键时蜂鸣器短响一声。 6、增加看门狗,约1s复位一次,水位比较时,连续3个水位数据达到要求才开启报警,防止在水位报警边沿时反复触发;报警电路全部完成,其中水位报警30秒长响一次,每次约1000ms,传感器故障每30秒,短响3次,每次200ms,间隔200ms。双重报警一长一短。 7、增加一个数据接收故障报警功能,连续10秒未收到正确串口信息就显示故障E3.并按传感器故障报警响铃。 8、蜂鸣器用的是无源蜂鸣器,驱动频率约4khz。 9、装好485芯片后,不能在线编程了,还没继续深入研究,反正以上功能没有大的缺陷性问题,不升级也没关系(上述代码运行时发现的问题是,故障报警不是一有就声响,而是30秒一次,也就是有故障后30秒才第一次报警,以后每30秒响一次,如果串口信号开始正常,采集部分由故障码发来,在串口通讯故障后,原故障码没有清除,会在处理部分显示) 其他说明: 1、 温度传感器因为是纽扣封装,很难固定,正好在某论坛上买的自闪变色LED灯的外壳可以用,去掉灯,去掉纽扣电池,锉刀打磨下正好安装上DS1920,没拍详图。 2、 电源插口没拍照片,在网线口上面安装的。采集部分单片机供电开始是7805,后来改成了78L05,可以在照片上反映出来,原因有两点,a、7805比较高外壳扣不拢;b、采集部分显示器30秒后关闭,电流不大,78L05足矣。因为78L05关系到单片机的AD转换,故此预先筛选了下电压尽量到5V,其实只要稳定即可,现场设置时,在最高水位调整多圈电位器,让显示为AA即可)。两位数码管,100%显示AA%。 3、 PCB板错误地方:a、单片机封装错误,宽体变成窄体,刮下引线,安装也可以使用,第11和20脚要用铜丝跳线焊接下;b、压力传感器封装画错,因压力传感器要安装在外壳边沿,引线要外引,故影响不大;c、运放减法电路错误,第5、6脚信号要反过来,因为使用的这枚压力传感器零漂移是负值,所以没有使用(使用的是降低安装高度,让水位在零时,水管里残存的压力使其为零),如果需要使用,稍微改造下即可纠正。 4、 采集部分数码管没露出,因为正常工作时数码管是关闭的,而且我用了插座安装,调试好后可以拔出数码管,另外采集部分户外安装,需要防水,所以没必要开孔,安装好后接缝处要做防水处理(包括温度传感器接口和网线接口也要做防水,槽也没开好,很难看,呵呵,将就吧)。 5、 面板上目前还没来得及标注按键和指示灯的功能,上面的灯左边是电源,右边是通讯指示,采集部分一秒发一个信号闪一次,处理部分接受到信号闪一次,下面的按钮左边的是“减”,中间是“加”,右边是“设置”按钮。 6、 成本分析,开始时,只想用好手上有的芯片,反正是申请的,也没做过多考虑,做完后看了下淘宝,那片仪放MAX4194和RS485(其实是全双工的RS422)都要20~30一片,吓死人啊,真的要这么做,用我们这的话说就是“豆腐花了肉的价”,所以呢,如果要省成本的话,仪放可以用LM324来搭一个差动放大电路代替,RS422改成RS485吧,MAX485也不贵,STC12c4052AD也可以选其他便宜点的STC片子,新系列的反而便宜点。 7、 其他还没想到,想到再补充吧,下周下乡去现场安装试运行下!
嗯,数码那没m币,所以在那边也发了帖子,哈哈!
打完收工!!
源码.rar
(9.58 KB, 下载次数: 199)
|