极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 92002|回复: 35

永不消逝的电波——Arduino制作BCD码电波钟

[复制链接]
发表于 2013-11-15 00:32:52 | 显示全部楼层 |阅读模式
本帖最后由 thomas 于 2013-11-15 11:12 编辑

特别声明:本帖仅作为技术方案探讨使用,禁止任何人用于商业行为。
如本帖对相关权利人利益构成伤害,请立即联系网站删除此贴!


分隔线内引自百度百科

------------------------------------------------------------------------------------------------
简介

电波表
所谓电波表,机身由原子时钟和无线电接收系统组成,由国家授时中心发出准确时间,通过无线电接收系统接收、经CPU处理后显示时间,电波表30万年误差不会超过一秒。简单的说就是一种接受标准时间信息的电波后,可以自动校对时间的手表。电波钟表是人类计时技术发展历程中,继沙漏、日晷、机械钟表、石英钟表之后的第五代计时器。电波钟表技术和产品的出现是人类计时史的又一次革命。
2技术特点

电波表
电波钟表将传统钟表技术与现代时频技术、微电子技术、通讯技术、计算机技术等多项技术相结合,通过接收国家授时中心以无线电长波传送的标准时间信号,经过内置微处理器解码处理后,自动校准计时器走时,使电波钟表显示的时间与国家保持的标准时间自动保持精确同步。
中国科学院国家授时中心与**公司合作,开发低频时码电波授时新技术,致力推动中国电波钟技术发展,推出具有中国自主知识产权的电波钟表,使中国成为世界上继德国、美国、英国、日本之后第五个实现长波授时技术民用化的国家。
-------------------------------------------------------------------------------------------------------

我算是第一批中国制式电波手表的用户,大概07年底入手的,CITIZEN BPC码电波表。
见当时新闻 http://www.dpcrct.com/dongtai/07.htm

后来单位也统一配发了电波表,几个同事手表放一排,秒针都是同步的,很有乐趣。
所以我野心膨胀,一直想找机会自制一个电波钟。
终于等到tb有模块出售了,15块,其实不算便宜。可到手后,发现不带解码功能。自己也一直没有合适的解码思路,闲置了。
专业电子论坛也试着破解过编码,都不完美。偶然发现一些资料,感觉趁热打铁,将代码解出来了。
资料地址 http://wenku.baidu.com/view/0b2e2526a5e9856a56126017.html
按照发布者的思路,其实自己设计电路接收并不复杂,只是灵敏度问题。
参考amoBBS.com上发布的帖子,相关编码规则

-----------------------------------------------------------------------------------------------------------
【二】BPC天线模块介绍:


BPC电波钟天线模块采用CME6005高灵敏度IC,性能稳定可靠,低碳低功耗,工作电压范围1.5~3.5V,工作电流70~100uA,静态电流0.2~2uA。

反面有白油字样V, G, T,空, P, H;脚位间隔是2.54mm。

V-接电源VCC,1.5~3.5V

G-接地GND

T-时间信号反向输出端

空(无丝印)-时间信号正向输出端

P-模块使能端,工作接底,静态接高

H-自动增益控制接高电平(模块已连好高电平)

--------------------------------------------------------------------------------------------------------------
试验过程


每一个夜黑风高的夜晚,总会有些奇迹发生。


电路很简单。

由于模块对开关电源非常敏感,我选择了一节3.6v电池接 V和G端(最高电压为3.5v,用两节1.5v电池最好)
然后G端和Arduino GND连接。
时间信号正向输出端接Arduino A0
就这么简单。

测试:我从藏宝箱里找了一个80年代的电话话筒,压电陶瓷的,直接 输出端和地,听见有节奏的咔哒声。如果将模块距离电脑屏幕稍近,立即能听见强烈干扰,估计是屏幕升压电路引起的。

特别注意! 模块应远离电脑屏幕,否则会引入很强干扰。

开始解析信号。考虑晚上干扰少,成功率比较高。
终于得到了一堆数据。
........
0011302423103103133
0011302413103103133
0011302433103033133
0011302423103033123
0011302413103033123
.......

第一次解码,傻了根本找不出有效数据。
这是4进制数据,不应该出现4,我做的分隔符。
失败了。

隔了一周,我将资料全打印出来,没事就分析下。发现是程序的问题。
开始改进,终于得到了完整的数据。
目前的数据
........
------------------------------------

2003021132022230310
2013-11-10 Week:7 Time: 3:10:0PM
------------------------------------

0003022133022230310
2013-11-10 Week:7 Time: 3:10:20PM
------------------------------------

1003022132022230310
2013-11-10 Week:7 Time: 3:10:40PM
------------------------------------

2003022132022230310
2013-11-10 Week:7 Time: 3:11:0PM
------------------------------------

0003023132022230310
2013-11-10 Week:7 Time: 3:11:20PM
------------------------------------

1003023133022230310
2013-11-10 Week:7 Time: 3:11:40PM
------------------------------------
.......


左侧是电波手表作为基准对照,分秒不差。


基础解码程序,不带任何纠错及验证功能。
不考虑纠错的话,可以直接每天校准DS1302时钟模块了

未完待续。


  1. int timeWidth=0;
  2. int dataOut=0;
  3. int lostData=0;
  4. int flag=0;
  5. int P0=0;
  6. int P1=0;
  7. int P2=0;
  8. int P3=0;
  9. int P4=0;
  10. int BPChour=0;
  11. int BPCminuate=0;
  12. int BPCsecond;
  13. int BPCweek=0;
  14. int BPCday=0;
  15. int BPCmonth=0;
  16. int BPCyear=0;
  17. int BPCArray[19]={
  18.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

  19. void setup() {
  20.   Serial.begin(9600);
  21. }
  22. void loop() {
  23.   int sensorValue = analogRead(A0);
  24.   if(sensorValue<100){                //低位触发计数开始
  25.     timeWidth++;
  26.     lostData=0;
  27.   }
  28.   else if(timeWidth!=0){              //高位输出,如果不为空,则输出脉宽信息
  29.     dataOut=timeWidth-1;
  30.     //        Serial.print(dataOut);      //输出原始数据
  31.     BPCArray[flag]=dataOut;
  32.     flag++;
  33.     timeWidth=0;
  34.   }
  35.   else{                               //低电平计时数开始
  36.     BPCArray[18]=dataOut;
  37.     lostData++;
  38.     if(lostData>12){                  //判断是否为1S缺秒脉冲标志,是则换行
  39.       Serial.println("");
  40.       //////////////////////////////////////////////////////////////////////////////
  41.       int i;
  42.       for (i = 0; i < 19; i = i + 1) {
  43.         Serial.print(BPCArray[i]);  ////统一输出存储数据
  44.       }
  45.       Serial.println("");
  46.       P1=BPCArray[0];
  47.       P2=BPCArray[1];
  48.       P3=BPCArray[9];
  49.       P4=BPCArray[18];

  50.       if(BPCArray[0]*20+20==60){
  51.         BPCsecond=0;
  52.         BPCminuate=BPCArray[4]*16+BPCArray[5]*4+BPCArray[6]+1;
  53.       }
  54.       else{
  55.         BPCsecond=BPCArray[0]*20+20;
  56.         BPCminuate=BPCArray[4]*16+BPCArray[5]*4+BPCArray[6];
  57.       }      
  58.       if(BPCminuate==60){
  59.         BPChour=BPCArray[2]*4+BPCArray[3]+1;
  60.         BPCminuate=0;
  61.       }
  62.       else{
  63.         BPChour=BPCArray[2]*4+BPCArray[3];
  64.       }
  65.       if(BPChour==0){         //noon 12
  66.         BPChour=12;
  67.       }
  68.       BPCweek=BPCArray[7]*4+BPCArray[8];
  69.       BPCday=BPCArray[10]*16+BPCArray[11]*4+BPCArray[12];
  70.       BPCmonth=BPCArray[13]*4+BPCArray[14];
  71.       BPCyear=2000+BPCArray[15]*16+BPCArray[16]*4+BPCArray[17];
  72.       Serial.print(BPCyear);
  73.       Serial.print("-");
  74.       Serial.print(BPCmonth);
  75.       Serial.print("-");
  76.       Serial.print(BPCday);
  77.       Serial.print(" Week:");
  78.       Serial.print(BPCweek);
  79.       Serial.print(" Time: ");
  80.       Serial.print(BPChour);
  81.       Serial.print(":");
  82.       Serial.print(BPCminuate);
  83.       Serial.print(":");
  84.       Serial.print(BPCsecond);

  85.       if(P3>1){
  86.         Serial.print("PM");
  87.       }
  88.       else{
  89.         Serial.print("AM");
  90.       }
  91.       Serial.println("");
  92.       Serial.println("------------------------------------");

  93.       ///////////////////////////////////////////////////////////////////////////
  94.       flag=0;
  95.       lostData=0;   
  96.     }
  97.   }
  98.   delay(100);        //采样时间。 取这个值抗干扰能力最好,如果取小反而不易处理
  99. }

复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-11-15 09:24:10 | 显示全部楼层
很神奇 学习了
回复 支持 反对

使用道具 举报

发表于 2013-11-15 09:42:30 | 显示全部楼层
此贴神贴!!!!!
回复 支持 反对

使用道具 举报

发表于 2013-11-23 19:58:49 | 显示全部楼层
准备试一下,很神奇!
回复 支持 反对

使用道具 举报

发表于 2014-6-3 17:32:07 | 显示全部楼层
神贴收藏了。
回复 支持 反对

使用道具 举报

发表于 2014-6-7 19:58:58 | 显示全部楼层
为什么我接收到的时间不是一堆零就是时间不对呢?
回复 支持 反对

使用道具 举报

发表于 2014-6-9 07:22:57 | 显示全部楼层
哇!很强大啊!
回复 支持 反对

使用道具 举报

发表于 2014-6-19 10:13:52 来自手机 | 显示全部楼层
绝对神贴。ms对时信号不是全天提供。
回复 支持 反对

使用道具 举报

发表于 2014-9-6 11:56:36 | 显示全部楼层
你好,用你的程序成功编译通过,模块也买到了,现在是不能接收信号,(室内)在外边用发光正极管焊在模块的T端,负极焊接在模块的地,发光管在室外有闪烁,室内无闪烁,不知道是我室内不能接收信号还是哪里没对?
模块和ADUINO接线 是锂电3.9V接模块电源端,模块T接的A0,短接模块上的P到模块的地在接到ARDUINO的地上,这样接应该对吧,始终接收不到信号,不知道是哪里没对?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-6 23:49:53 | 显示全部楼层
504835618 发表于 2014-9-6 11:56
你好,用你的程序成功编译通过,模块也买到了,现在是不能接收信号,(室内)在外边用发光正极管焊在模块的 ...

电波对建筑物内的干扰很敏感,建议凌晨2点左右试验一下。
有时隔几堵墙就不行了。如果能在信号端连一个压电陶瓷片听下声音最好,如果有干扰,很容易听出
回复 支持 反对

使用道具 举报

发表于 2014-9-7 10:59:57 | 显示全部楼层
thomas 发表于 2014-9-6 23:49
电波对建筑物内的干扰很敏感,建议凌晨2点左右试验一下。
有时隔几堵墙就不行了。如果能在信号端连一个压 ...

谢谢回复,在请问模块对电池电压要求严吗?我用的是3.9V锂电(充好电在3.9-4.2V),在卖家那里看见说明如何测试模块是否好坏?也没看见发光管闪烁(买了2片基本一样);在就是你的输入信号是用的正输入还是负输入?
引用你上面的:时间信号正向输出端接Arduino A0这里是模块介绍:反面有白油字样V, G, T,空, P, H;脚位间隔是2.54mm。

V-接电源VCC,1.5~3.5V

G-接地GND

T-时间信号反向输出端

空(无丝印)-时间信号正向输出端

P-模块使能端,工作接底,静态接高

H-自动增益控制接高电平(模块已连好高电平)
请问到底是A0接正,还是负,谢谢!!
下面是我改到12864液晶上的图片;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-9-7 11:51:34 | 显示全部楼层
本帖最后由 504835618 于 2014-9-7 11:53 编辑

拿到窗台上模块上的发光管在闪烁,应该是接收到了信号,怎么没解析去电波码呢?信号输入正负信号都接过,无任何数字
ARDUINO供电是用的2片锂电,模块供电是1个3V的纽扣电池。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-10 20:02:23 | 显示全部楼层
本帖最后由 thomas 于 2014-9-10 20:06 编辑

时间信号正向输出端接Arduino A0

接个压电陶瓷听听声音看看。如果声音清晰,就能翻译出来,如果有杂音,就需要等到凌晨干扰少时再接收。电波表基本都是凌晨2点、4点工作的
电池电压似乎有点儿高,看下芯片说明
回复 支持 反对

使用道具 举报

发表于 2014-9-10 21:22:46 | 显示全部楼层
这帖子漂亮啊,第一次听说电波表啊,争取制一个出来玩玩啊,的确很神奇
回复 支持 反对

使用道具 举报

发表于 2014-9-11 12:01:43 | 显示全部楼层
thomas 发表于 2014-9-10 20:02
时间信号正向输出端接Arduino A0

接个压电陶瓷听听声音看看。如果声音清晰,就能翻译出来,如果有杂音, ...

谢谢回复,电池已改为纽扣电池3V的,我把输入端改到A2上了,应该没影响吧!只有凌晨看看了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 17:44 , Processed in 0.046976 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表