欢迎来到苏州亚美娱乐优恵永远多一点新能源科技有限公司官网!

24小时咨询电话

4006-026-011

当前位置:亚美娱乐优恵永远多一点 > 新闻资讯 > 公司新闻 >

也会像图中那样因为面积较大只有一端与传感器

作者:admin发布时间:2020-07-01 09:25

  利用春节几天时间制作了一个放置于室外,太阳能供电的无线气象站和邮政信箱信件检测器。当信箱有信件时,家里的服务器系统会用中文女声播报“有信件,请查收”。同时可以绘制出当天室外温度和湿度的曲线图。 这篇文章将具体介绍他的制作过程和原理,并且给出相关原理图和源代码。具体描述可以访问我blog原文。

  文章中提到的设计均会提供源代码、电路原理图。但是这个制作跨度比较大,也涉及到我的其它一些项目,所以对于一些依赖的代码、设计,这里 将不给出。或许他们其中一些的资料我会在以后给出。

  文章中的照片是在设计过程中无意或者有意拍摄的,其中一些部分已经出现改 动。如果发现图片与文字描述不符的情况,以本文描述为主

  这里按照各模块所在地理位置(室外/室内)进行划分。图中上半部分是位于室外的传 感器和控制器。其中各传感器会将它采集到的原始模拟信号转化成数字信号发送给传感器控制器。而传感器控制器会将各传感器报告的数据汇总并作简单处理后,通 过无线模块发送给室内的接受终端。因为采用无线通讯,所以再考虑用一个电缆来给室外传感器供电就多此一举了。那么自然这里的电能供给就是指用电池供电了。 但电池用尽后需要更换,这又显得比较麻烦。所以我的设计中传感器采用了太阳能供电+锂电池蓄电的方式来给室外传感器供电。考虑到成本,这里的太阳能电池不 能用很大功率的,自然,整个室外传感器电路就需要运行在比较低的功耗条件下了。并且,南方经常有连续几周的阴雨天气,在阴雨天气中太阳能电池几乎不输出功 率,此时就需要在设计中将系统的功耗压缩到最小。这里对供电和功耗指标是,室外传感器需要能够在一次完全电池充电后,仅靠电池电力维持持 续工作15天以上。另一个指标是,在晴天太阳能电池的输出功率可以将电池完全充满。

  图中的无线GHz波段具有收发功能的芯片/模块。这类模块仅实现了物理层的通讯协议,需要为他们设计编写对应的链路通讯协议。当然这样也适合用单片机来操作。 因为功耗的限制,这里的无线模块的通讯距离比较小。

  上图的下半部分是位于室内的以太网/无线转发器。他的主要工作就是将由以太网发来的 IHES中央服务器请求转发成无线信号与室外的传感器通讯,并将收到的无线数据包转发到以太网络反馈给中央服务器。另外,这个模块上也开设了一个Web服 务器,允许我们直接用浏览器登陆该模块来与室外传感器通讯。

  其实这个模块做的大部分工作也可以直接交给中央服务器(PC)来实现,这样仅需 要实现一个诸如usb口-无线信号的适配器即可,但是考虑到这里选用的无线模块功率较低,在中央服务器处以经无法介绍到室外发来的信号。所以我在 设计中将这部分单独设计为一个模块,将他放置于离室外传感器比较近的阳台上。这样的一个限制就是:这个模块不适合用一台单独的PC来实现(考虑到阳台的环 境恶劣、占地以及成本因素)。这里我选择用成本低廉的单片机来实现这个模块的转发和webserver功能。这样的另外一个好处就是功耗很低,可 以通过网线供电的方式来给模块提供电能,而不需要另外接电源适配器。这后文我也会介绍如何改造交换机网口来实现用五类双绞线(以太网用 线)给设备供电。

  室外传感器的数据最终将以TCP数据包的形式发送到中央服务器上作处理和分析,并通过语音合成以中文语音将检测结果反馈给 我们。最后就是上面视频中的效果了。

  因为家中不可能时刻都有人在,所以当有新信件的时候,除了能够在当时尽可能早的 通知这个事件外,还需要在每天的特定时间,比如晚上吃饭和早晨起床的时候告诉家里目前信箱里是否还有信件,显然检测新投递了信件的办法是不行的(因为很难 检测信件取走的事件)。

  要检测出信箱当前是否有信件,办法也有不少,复杂的可以安装摄像头通过图像识别来处理,但这显然没有必要。简单的有 在信箱底部安放一个重力传感器,但是有时候信件就是一张纸(广告传单?),用重力传感器似乎不是很好的办法。

  这里我采取的是在信箱底部安装 一系列红外传感器,组成一个整列。当有信件投入信箱,它就会覆盖在这个传感器阵列上方,此时着要有1个传感器被遮盖,就可以检测出有信件存在。为了方便理 解,这里给出一张原理图:

  上图中蓝色框就是装有红外传感器阵列的平板,当有信件投入信箱后,它会覆盖在 这个平板上方。当然,也会像图中那样因为面积较大只有一端与传感器平板接触。

  这里的红外传感器采用的是反射式对管,既一个红外发射LED和 一个红外接收管(光敏二极管)。当有信件覆盖在一个传感器上方时,红外发射LED产生的红外光会通过信件反射并被接收管感应。而如果传感器上方没有信件 (或者在很远的距离),则接收管几乎不能收到由发射管产生的红外光。当然这里的一个前提是信箱内壁的反光率很低。

  另外,因为信件的大小不 一,从很大的报纸到小尺寸的信封都有。如果传感器数目过少或者摆放过于集中,很有可能出现信件正好落在没有放置传感器的区域。所以这里我用了8个传感器, 放置成前排5个,后排3个的形式。至于如何摆放有效,主要是看实际测试的效果,可以参考的是2个横向的传感器的之间的间距比一个较小的信封宽度略小。

  这 里描述的传感器阵列目前市面没有现成的(至少我不知道),我找到了一块装修多余的木板自行加工:

  首先是将木板切割成合适的大小,然后打孔, 并按装红外传感器(一个红外发射LED和一个红外接收管为一对),效果如下图所示。用热胶将他们固定。

  传感器阵列做好了,但是这样还不能被使用。需要有驱动电路来控制它并给出方便控制器理解的信号。这里需要考虑的问题是现在我 有8个红外发射管和8个红外接收管,如果分别驱动,就需要至少16组信号线根供电线。因为信箱是个密封性很差的容器,不适合将控制器也放置在信箱当 中。这样就要求控制器与这个红外传感器阵列的信号连接用尽可能少的线路来实现。

  这里采用的策略是将所有的红外接 收管并联,所有的接收管只用一路信号来采集。这样一个好处是可以提高接受灵敏度。而对于发射管,采用轮流点亮的方式驱动。如果在一个发射管被点亮的同时, 接受管检测到信号,就认为这个发射管上方有信件遮挡。

  原理图中可以看出这样一来正好使用了8路的信号线,我最终使用了五类双绞线来进行信号的传输。

  上 图为这个控制电路的成品照片。将控制电路与传感器阵列焊接在一起后,稍微对这个传感器做一下包装

  这四块面板采用并联的方式连接(需要在之间串联保护二极管如5819来防止因为部分电池板电压差异造成的倒流)。在上海近期 (冬天)晴天阳光照射的条件下,测得这块面板的短路电流可到170mA以上。

  而对于电池的选择,按照前文提到的 功耗和待机要求,我使用了900mAh的聚合物锂电池。这样如果按照无日照情况系统可以工作15天来计算,那么整个室外传感器系统允许的平均功耗大概为 2.5mA@3.8V。并且,如果算一天日照为8小时计算,那么对这块电池完全充电所需的平均充电电流在112mA。差不多可以满足我的要求。

  严格的说,要对锂电池充电需要有专门的充电电路来提供先恒流后恒压的充电方式。但是这里为了考虑成本以及考虑太阳能电池输出 功率比较低,我就偷了下懒。一般锂电池自带的保护电路都会提供过充过压保护。所以在后文可以看到太阳能面板的输出在经过几个二极管降压后直接对锂电池进行 充电。而在后文的验证数据中也可以看到锂电池保护电路对过充的保护。当然这是不标准的办法,不推荐使用。

  我选用了基于em198810芯片[6]的2.4G无线收发模块,市面上可以买到的模块型号如 Tr24B/Tr24A以及其他类似模块。做出这样的选择没有什么特殊原因,主要是手头有现成的模块在。该模块内建64byte FIFO收发缓冲区,并且带有CRC校验。我在实际测试中该芯片在最大输出功率下室内可以穿透2-3层墙壁,并维持10-20米的通讯距离。按照手册的介 绍,其工作在收发模式下的功耗为25mA@3.6V。相比而言比他优秀的其他模块也不少,同时如果情况允许可以选用314Mhz等较低频率的收发模块,可 以有效提高通讯距离。

  1. 监听来自室内无线终端的通讯请求,并读取信件传感器、温湿度传感器得到数据并通过无线. 锂电池电压监控

  对锂电池电压检测主要是为了我在调试过程中 观察系统实际的工作性能。并且今后可以针对当前电池剩余电量适当调整无线通讯的频繁程度从而提高系统待机时间。锂电池的工作范围一般在2.7V-4.2V 之间,这里我采用3:1电阻分压,将缩小4倍的电压信号(落入0-1.1V范围)接入AVR芯片的一个ADC引脚。通过用AVR内部的1.1V参考电压比 较就可求得实际的电池电压。我最后固件中可以提供0.01V的电压分辨率。

  图上的Solar Panel Probe是用于检测当前是否有光照的,不过目前我固件当中没有使用到。可以用它来做一些行为的调节,比如在白天有日照的时候允许开启更多的传感器。

  这里的VCC实际就是锂电池的当前电压了,目前设计上只要锂电池维持在3-4.2V就可以保证系统的正常工作。由于无线V以下,所以这里串联了一个1N4148提供0.6V的压降,使得即使工作在4.2V时,无线模块也可以安全的工作。

  上面2幅图是分别在不同制作阶段拍摄的,所以可以看到他们的接口有区别。第二幅图上已经安装了无线模块。

  这里为了理解方便先介绍我将上述传感器各模块组装并安放在视 频中方位的过程。至于固件的编写会在后文介绍。

  前文已经提到,传感器的控制单元不适合与信件传感器一同放置在信 箱内,除了前面提到的密封问题外,还有个因素是我家的信箱是铁质的,会对无线信号造成屏蔽。所以上图中的控制单元需要另外防止。为了保护电路不受风吹雨淋 破坏,我使用了如下的密封机壳:

  之前已经提过因为无线模块的通讯距离有限,且中央服务器不能直接与传感器无线信号建立通讯,所以需要设计一个模块负责将来自中 央服务器发来的TCP数据请求打包成无线数据包发送至室外传感器,并且将接受的结果用TCP包送回中央服务器。

  这 里我使用Atmega8L作为该转发器的中央处理器,并使用ENC28J60 SPI接口的以太网适配芯片[8]实现AVR芯片接入以太网的工作。其原理图如下:

  对于AVR与ENC28J60的配合使用,可以参考名为:An AVR microcontroller based Ethernet device地文章[2]。他的地址将在后文参考资料处给出。

  整个模块工作在3.3V电压下,因为整个模块功耗很低,所以这里采用从以太网取电来给模块供电。在后文将介绍,以太网将提供 13V左右的直流电能,为了有效利用,这里采用了DC-DC开关电源模块将12V电压转化成5V左右的电压再通过三端稳压器稳定在3.3V。该模块PCB 如下:

  以太网供电其实有专门的设备,也有专门的名词,叫做(POE)Power Over Ethernet。但是这类设备一般很贵,这里没有必要为此去购买他们。我用了一种不规范的办法来实现供电。因为对于10M/100M的以太网,8根双绞 线根是空余的。可以用来传输电能。

  当然这样做也有一定危险,比如误将其他设备介入 这根以太网线,那么就会造成设备烧毁。所以如果要用这个办法需要平时多加小心。

  实际上都 会把这些不占用的信号线用电阻拉低接地,所以自制时要注意将他们断开,防止短路

  将带有电源供应的以太网线连接到转发器网口上,这里还需要把电源线单独引出,并 接到DC-DC模块上,如下图所示。

  这里仅交待相关模块的固件的设计思路 以及高层次的逻辑分析。至于具体的细节,诸如依赖的代码库,这里不作过多介绍。请参考文后的相关资料。

  整个系统中IHES中央服务器将占有主导权,在服务器中运行着一个守护进程,它负责每隔一定的时间通过以太网向室内转发器发 出请求,室内转发器在接受到了请求后,进而向室外传感器发送无线请求。最后把收到的数据发送回IHES主服务器。

  同样的通 讯模式也应用在转发器中。转发器会在收到IHES服务器数据请求后开始与室外传感器联络,但它不会一直等待对方将传感器数据传回,同样它也会切换到其他任 务(处理Web请求?)并在一定时间后再次联系室外传感器,将采集到的数据收回并存储在自身内存中,等待IHES服务器来取回。

  如图所示,Sensor Checking Daemon是运行在IHES中央服务器上的一个“意识进程”,他会每半小时向以太网上的EtherBridge Agent(也就是室内转发器)发送一个IHES TCP请求包,但此时转发器不会开始无线通讯,而只是向服务器回应,告诉该请求已经收到,并告诉服务器数据将在多少时间后可以获取。中央服务器在收到回应 后就转而调度其他IHES“意识进程”。

  EtherBridge Agent在收到预取指令之后,就会将自身状态机转换到通讯模式,开始联络室外传感器(Outside Sensor)。但同样它也只是先发送预取指令,因为室外传感器可能会用比较长的时间(5ms)来收集传感器数据。这里涉及到一个无线通讯的策略 问题,所以适合用预取指令来实现。同样的,室外传感器在收到预取指令后,也仅仅是回应自身已经收到了请求。在室内转发其收到传感器回应之后,它会切换工作 模式到其他任务,比如监听并处理新的TCP或者HTTP请求。室外传感器在回应预取命令后,开始真正的传感器数据收集,并且将数据缓存在自身内存中。在一 定时间后,转发器又开始联系室外传感器,此时室外传感器就会将真正的数据传回。受到传回数据后同样转发器也将这份数据缓存在自身内存。等待IHES主服务 器回收。

  对 于无线部分的通讯,丢包现象比较普遍。目前的处理是在发生丢包时,命令发送者会再次发送重试,直到受到了对方的正确回应(通过CRC交验)。基于这样的设 计,如果室外传感器在收到请求后就进行传感器数据读取并将结果送回,很有可能会因为这个过程中的丢包使得转发器再次不断的请求。这样一次数据请求就会造成 室外传感器多次去收集数据,而这样会消耗较大电能(各传感器仅在收集数据时开启)同时数据收集比较耗时,需要大约5ms的时间,也就是说这样的模式,转发 器也需要等待5ms重新发送数据包,可能会导致总的通讯时间延长。

  对于以太网部分通讯,虽然丢包现象相对很低, 但是会出现同时多个请求者的情况,比如IHES服务器和从web服务器登陆的用户都希望访问室外传感器。这里要处理的问题就是降低一次数据通讯的延迟。同 时因为AVR单片机相对简单,不能很有效的处理多任务协调,如果在一次新的以太网数据请求过程中又发生新的请求,就难以进行数据的一致性维护。分类两大状态,空闲和激活状态。在大部分情况下,室外传感器都将工作在空闲情况下,此时所有传感器都被关闭或者设置在睡眠模 式,无线模块会定期唤醒进行监听,如果在监听过程中受到了来自室内终端的情况,则会切换到激活模式。否则无线模块会再次进入睡眠模式。这个模式下AVR芯 片只有在维护状态变换的情况下才工作,平时都工作在睡眠模式(关闭时钟信号)。

  当然如此短暂的监听时间会延长通讯的时常, 所以在空闲模式下只要收到了预取指令,固件就会切换到激活模式下,已进入这个模式固件便开始收集传感器数据。而同时无线模块将持续监听请求。当然,激活模 式有一个有效时常,当过了一定时间,固件又会回到空闲模式下。这个时长目前为1秒。

  对于处理无线请求,在引入了 状态管理后就非常简单。对于预取指令,固件要做的就是将Idle State切换到Active State即可。而对于取回指令,只需要简单的发送回目前内存中缓存的上一次去读结果即可。室内无线收发 器固件设计

  收发器的以太网操作部分由提供的参考例程修改而来。该模块会同时 监听80端口(Http服务)和8003(IHES agent service)。前者用于人工登陆至该模块操作,后者用于IHES中央服务器通讯。

  写到这里,该系统已经持续工作了2天半时间,虽然这2天上海都是晴好天气,不过也不妨来看看实际的功耗情况。当然,依据就是采 集到的数据了:

  对于花费的时间,这个项目在 1-2年前就开始酝酿中。就单单算制作这篇文章介绍的部分,大致花费我4个周六和春节2天时间。也就差不多一周左右。当然,其中涉及的IHES中央服务器 和构架、固件依赖的ArduinoLite库,RP infrastructure等这些的编写,如果把它们花费的时间算入,可能用来3-4个月左右。应该说还算是个短期的项目。

  对于改进,从前面分 析上已经可以看出锂电池的过充是一个问题,解决办法可以通过单片机监控锂电池电压,当达到过充标准后就进入放电模式来抵消电压上升。

  另外,无线模块也是可以改进的地方。可以选用314Mhz的模块,这样可以提高传输距离。

  对于功能上来说,下一步可以考虑安装气压、风向传感器。那样差不多真的能叫做气象站了(山寨的)

  不过需要说明的是因为 这些固件依赖了许多额外的库和框架,那些框架属于我正在进行的其他项目,且还没有到发布阶段,所以暂时不提供,请谅解

  固件采用avr-gcc4.2(WinAVR-20090313)编写。其中采用了Arduino-Lite AVR运行库。Arduino-Lite是我针对arduino库进行优化改良后的增强库,他提供类似的接口,但代码比原先可以缩减近一倍,执行效率提高 10倍左右。Arduino-Lite我会在不久发布。也可以参考下面的参考资料中我之前写过的Arduino-Lite预告文章。

  对于依赖的Tr24无线模块的驱动,可以去采用Alexander Yerezeyev编写的代码(见参考资料),也可以选用你喜欢的无线模块。

  [1] 基于AVR的TR24a驱动例程:spiriton-tr24a-demo, by Alexander Yerezeyev

推荐新闻: