=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 温度显示功能还是必不可少,平时可以了解室内或室外温度。以往设计的几种辉光钟、VFD荧光钟,都在温度传感器的应用方面忽略了一些小小的细节。
其实DS18B20很好用,但是要注意如果使用DS18B20的话,一定要将其
远离发热源,包括PCB本身。以往做过的QS30-1辉光钟、QS18-12辉光钟,包括YS18-3荧光电子管时钟,我都把DS18B20装在了电路板上,这样,虽然DS18B20的管身露在外面,但是
PCB本身是要发热的,
热量会通过DS18B20的三个金属管脚直接传导到管子里,往往温度会比实际温度高出好几度。
所以这次专门为温度传感器设计了
可插拔的接口,使用3.5的耳机插头连接DS18B20温度传感器。而且使用了
高质量的3.5耳机插孔和全金属的高档镀金耳机插头。
看一下,这是用于室内温度探测的外置温度传感器,其实就是在3.5mm耳机插头里内置了一颗DS18B20温度传感器,做好了样子还是不错的,而且
杜绝了温度不准的问题。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 将温度传感器做成插孔外接方式还有一个好处,就是可以将温度传感器拉出室外,用于测试室外温度。
曾经有一位朋友就问过我好多次,能不能显示室外温度,其实将DS18B20飞线飞出室外就可以了,但是原先的辉光钟、荧光钟,都需要自己动手改造,这次直接用
1米线长或者3米线长的带不锈钢探头的DS18B20温度传感线就可以了。
既然是可插拔的,如果温度传感器未插上会有什么结果?在以前设计的QS30-1和QS18-12辉光钟上,如果不焊接DS18B20并且按下遥控器上的TEMP键查看温度时,时钟会死机,因为它在不停的等待DS18B20的回复,其实这是一个不合理的程序模块,这次在黄金纪念版上,我采用了检验和初始化模块,能够迅速判断是否装有DS18B20温度传感器,如果未装传感器,时钟会快速退出温度显示状态。
看一下效果,插头依然采用镀金的
3.5mm全金属耳机插头:
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 看一下温度采集时的温度显示功能:
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 这次的辉光钟与以往最大的不同是具备了
GPS校时功能。
准确度是时钟最首要要解决好的问题,也是最基本的功能,功能再丰富,效果再花哨,走时不准就失去了作为时钟的最原始意义。
其实有很多校时的方式:
电波、GPS、网络、GSM等等......
每种校时方式都有其特点,当然,
最准确的就属GPS对时了,理论上能够达到
30nS,但是我们平时使用误差在100ms就足足能满足需求。但是GPS对时有一个不方便的地方,就是GPS需要在露天的地方才能接收到信号,或者在窗边。
这次选用的GPS接收机是台湾的一款室外防水的带磁吸附底座的GPS接收机,它采用
SiRF Star III代技术,
-159dBm的灵敏度,采用
NEMA0183通讯协议,其实我在这里只是使用了简单的获取卫星精确格林尼治时间的功能。
这款GPS接收机是RS232接口的,需要转换为TTL电平信号,通过时钟的MCU串口进行通讯。
原本GPS接收机自带的是PS/2的标准接口,由于需要使用TTL电平信号,所以我给GPS接口动了点儿小手术:把PS/2接口剪掉,依旧使用3.5mm的标准耳机插头。
值得一提的是,原本需要一颗MAX232或者SP3223等等这些RS232转TTL电平的专用芯片来转换数据接口类型,我
只使用了一颗三极管,两颗电阻,一颗二极管完成RS232-TTL的简单转换,并且把它们都塞到了一颗金属的3.5mm耳机插头里面,请看制作过程:
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= GPS接收机获取的不是当地时间,而是
格林尼治标准时间,也就是说如果我们的位置在不同的时区,需要进行相应的时间换算。
原来,我忽略了这个问题,认为这个换算格林尼治时间很简单,无非是加减小时的问题,但是其实这个换算算法还是值得认真思考的。
比如说,大家都知道,北京时间是
GMT+8的时区定义,如果我获取到了一个时间信息是格林尼治时间2011年3月31日20点整,那么北京时间应该是多少呢?有些朋友会说,时间+8就行了啊,是的,没错,如果单纯算时间,就是加减的问题而已。但是牵扯到日期,就需要判断是否闰年,是否大月小月的问题了。复杂倒不是很复杂,但是陷阱很多,弄不好日期会不准确。
我在数码之家发了一篇帖子,专门讨论格林尼治时间换算各时区的时间的算法,并且贴上了源代码:
http://www.mydigit.net/read.php?tid=249841 比如从GPS里读出了一条命令:
$GPRMC,105404.739,A,2307.5573,N,11323.3638,E,2.65,348.60,040411,,,A*65 提取出来格林尼治时间是:
2011-04-04 10:54:04.739 换算成北京时间+8是18:54:04.739 很简单,没啥问题。
但是晚上又读到一条命令:
$GPRMC,213201.236,A,2307.5573,N,11323.3638,E,2.65,348.60,040411,,,A*65 换算成北京时间就不是简单的+8的问题了,差点儿疏忽,不然会差很远。
算法搞定了,我们就能根据获取的GPS标准格林尼治时间,来得到世界上各个时区的时间,所以在这次黄金纪念版辉光钟上,还可以
自行设置用户所在的GMT时区,设定好时区以后,GPS对时的时候会自动根据
格林尼治时间换算当地时间。
手动启动GPS对时的时候,背景灯会快速的闪烁红色,一般GPS正常工作的时候,会在20秒内获取到正确的GPS卫星标准时间,并重新调整时钟日期和时间。
除了手动启动GPS对时的功能以外,我还在程序里设定了每周一早8:00,自动启动GPS校时功能,这样下来,想不准都难。
GPS是可以插拔的,如果没有连接GPS设备的时候,启动自动对时的时候,时钟会自动检测到GPS不存在,并快速退出对时模式。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 秀一下全家福,和温度传感器和GPS接收机均插在时钟上的样子: 一共包括:
1、电源适配器; 2、红外线遥控器; 3、辉光钟; 4、GPS接收机; 5、室内温度传感器; 6、室外温度传感器;