0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Arduino万年历日历时钟DIY图解

454398 来源:wv 2019-09-20 08:41 次阅读

时钟使用由Arduino控制的2个电子机械时钟运动来显示日和月。第三个石英控制机芯显示时间潮低潮或高潮。

日历是全自动的,并考虑到闰年以及夏季和冬季时间的变化。

时钟所有4个季度和每小时钟声都有完整的威斯敏斯特钟声。

时钟是独立的,不需要主时钟。

它有一个内置的解码器,用于DCF77“原子钟”。

辅助LCD显示屏显示时间,日期以及DCF77信号和解码器信息

请在此处查看我的日历时钟网页。

步骤1:

Arduino万年历日历时钟DIY图解

时钟设计围绕一个12英寸(300毫米)的英文办公室拨号时钟盒,我没有动静地从Ebay上捡起来。

金属表盘被剥掉,重新粉刷并用我自己的表盘设计重新标记了

橡木表盘环绕被剥去,拆开了然后将它漂白以减轻颜色。

我安装了铰链和一个锁扣,因此表盘可以打开可以访问内部的控件/电子设备。

图1和图2显示了安装在背板上的时钟组件。

图3显示了表盘后面的空背框。

图4显示了安装在表盘背面的3个时钟动作。 30秒的日间机芯直接用螺栓固定在表盘上。月份和潮汐运动安装在拧到木制表盘环绕的条上。

这可以隐藏固定螺母。

步骤2:连接

Chimes fig 1 adafruit Audio FX Sound Board

时钟通过adafruit Audio FX Sound Board + 2x2W发出季度小时和小时放大器

主板上有16MB的存储空间,因此您可以存储长达15分钟的高质量压缩音频。如果你使用单声道而不是立体声,那就加倍了

内置大容量存储USB - 将任何微型USB线插入声卡和计算机,你可以直接拖放文件,就好像它是一个USB密钥

压缩或未压缩音频 - 使用压缩的Ogg Vorbis文件获取更长的音频文件或未压缩的WAV文件

高质量声音-44.1KHz 16位立体声。解码硬件可以处理任何比特/采样率和单声道或立体声

11触发器 - 最多连接11个按钮或开关,每个按钮或开关可以触发音频文件播放

立体声线路输出 - 在线路级别左右声道均有突破,因此您可以随时连接任何类型的立体声或有源扬声器

五种不同的触发效果 - 通过更改文件名称,您

此时钟可以使用2种不同的铃声选项

选项1小时铃声是从4英寸长钟钟和钟琴的四分钟钟声。选项2小时钟是手铃和长钟钟的组合,而QT钟则是手铃。

每个音符都是单独采样,然后在Audacity中放在一起,为钟声制作音乐的每个部分。

对于每种类型,总共有六个编钟样本al,每季度四个,小时钟两个。四分之一的钟声分段组成,并提供威斯敏斯特式的钟声。

选项1(Glockenspiel)见上面的zip文件夹

有分段

第1节注释FAGC Quarter Chime T01.wav

第2节注释CGAF Half Chime T02.wav

第3节注释AGFC Three Quater Chime T03.wav

第4节注释CGAF Full Chime T04.wav

Quarter过去的时间播放第1节

半小时播放第1节然后第2节

小时过去一小时播放第1,2节然后第3节。

全部小时播放第1,2,3节然后播放第4节。

请注意,整小时响铃在59分49秒播放,因此它可以在小时开始播放小时之前播放。修改第843行至第49行的代码,例如if(minutes == 59 && seconds == 49 && chimepwr == 1)//允许完整的威斯敏斯特钟声在小时钟声开始之前响起49个老钟声

小时钟包括两个样本都是单个钟声。第一个样本持续不到一秒钟,然后结束时钟声消失。小时短T06.wav

第二个样本持续9秒,包含完整的单个铃声,因为它慢慢消失。小时长T05.wav

在一个真正的钟表中,锤子撞到铃铛,导致铃声响起。通常它会轻轻地消失,但如果时钟再次敲击钟声,例如如果它超过1点钟鸣响,那么铃声会停止消失并再次大声响起。

为了模拟这个效果,除了最后一个钟声之外,最后一个钟声都是短暂的钟声,最后9秒的钟声响起铃声响起。

选项2(手铃)见上面的zip文件夹

有部分

第1节注释FAGC Quater Chime T01.wav

第2节注释CGAF Half Chime T02.wav

第3节注释AGFC Three Quater Chime T03.wav

第4节注释CGAF Full Chime T04.wav

小时过去小时播放第1节

小时过半播放第1节然后第2节

小时过去小时播放第1,2节然后第3节。

Full Hour播放第1,2,3节然后播放第4节。

请注意,整小时响铃在59分47秒播放,因此它可以在小时开始播放小时之前播放。修改第843行到第47行的代码,例如if(minutes == 59 && seconds == 47 && chimepwr == 1)//允许完整的威斯敏斯特钟声在小时钟声开始之前响起49个老钟声

小时钟包括两个样本都是单个钟声。第一个样本持续不到一秒钟,然后结束时钟声消失。小时短T06.wav

第二个样本持续9秒,包含完整的单个铃声,因为它慢慢消失。小时长T05.wav

在一个真正的钟表中,锤子撞到铃铛,导致铃声响起。通常它会轻轻地消失,但如果时钟再次敲击钟声,例如如果它超过1点钟鸣响,那么铃声会停止消失并再次大声响起。

为了模拟这个效果,除了最后一个钟声之外,最后一个钟声都是短暂的钟声,最后9秒的钟声响起铃声响起。

按下“测试音按钮”时,还会播放测试波形文件。这允许您设置音量而无需等待时钟敲击。 T00.wav

小时编钟序列

小时。

1点钟 - 长鸣声

2点钟 - 短铃声然后长铃声

3点钟 - 短铃声,短铃声然后长编钟

4点 - 短铃,短铃,短铃,然后是长铃。等。

第3步:控制面板

除了主板上的Arduino复位开关外,控制面板还包含控制日历时钟的开关。

有关每个开关的详细信息,请参见上面的表4。

步骤4:LCD显示器

时钟背板上安装了4x20 LCD显示器。

显示器用于监控DCF77库和一些基本时钟功能。控制面板上的开关用于打开和关闭显示屏,通常仅在打开时钟时保持打开状态。

显示屏显示以下信息。

第1行

时间和日期。请注意,日期为英国格式dd/mm/yyyy

第2行

第1节在3个状态之间旋转

1显示下一个计算的闰年

2 DCF77库设置的石英调谐频率

3以Hz为单位的石英晶体精度。

注意这不是时钟精度,但DCF77信号应该损失石英晶体精度。 DCF77库通过将其与DCF77信号进行比较,自动调整Arduino石英晶体频率。

第2节时区和夏季/冬季时间指示器

第3行

第1节显示是否在开机时禁用了钟声。由于声卡在电源恢复时默认为全音量,因此在开机时会禁用响铃。我不想在停电后半夜被满卷钟声吵醒。通过按控制面板上的“Chime On”开关启用钟声。一旦开启,它们一直持续到断电并恢复。如果需要,控制面板上有一个手动“扬声器开/关”开关。

第2节显示DCF77库状态“Sync‘d”,“Locked”,“Dirty”或“Fail”

第4行

第1部分以百分比显示信号匹配。该库预测信号应该是什么,并将其与输入的DCF77信号进行比较。

Secton 2显示月份电机逻辑的状态。

步骤5:拨号

图1带有bezal的表盘可以安装时钟动作

图2用Turbo Cad设计的空白表盘

日历时钟表盘是使用Turbo Cad设计和绘制的。

然后将最终设计作为巨型贴纸打印在A3 Lazertran喷墨纸上。

首先擦掉原来的表盘,去除所有旧油漆和刻字。然后涂上一层白色(白色在旧钟表中看起来很糟糕)。然后将表盘贴纸应用于空白刻度盘,然后在干燥时,在顶部喷涂3层丙烯酸清漆。这使得贴花背景变得清晰,因此可以通过顶部的刻度字体看到白色表盘。

步骤6:日间运动控制

日间运动是30秒的奴隶运动。这些机芯适用于办公室和工厂的时钟,并由主时钟每30秒步进一次。

我在这个时钟中使用Synchronome机芯图1,因为它更紧凑。

图2和3大多数30秒的从动装置的工作方式与较大的根特型机芯相同。

零件和操作如下。

A是主棘轮,有120个牙齿

B操作电磁铁

C电枢

D电枢杆

E驱动棘爪,它移动棘轮 - 驱动弹簧通常使驱动棘爪与棘轮啮合,并且电枢远离电磁铁

G后吸杆,当衔铁被吸引时,可防止棘轮移动,这可能是由于振动或带有外露表盘的时钟 - 手上的风压力

H动量停止,这可以防止棘轮出现问题g每个脉冲移动一个以上的齿,并且用棘爪E将棘轮锁定在脉冲之间

J限制衔铁行程的行程极限停止,

当电磁铁B被来自主时钟的脉冲激励时,电枢C被吸引,棘爪E抵抗弹簧F的压力向右推进,并落入棘轮A上的下一个齿。当脉冲停止时,春天F驱动爪子! E向前,棘轮旋转一个齿,相当于表盘半分钟。 ’分钟‘手附着在。棘轮还通过一系列减速比为12比1的齿轮驱动’小时‘手。

工作电流运动的工作电流为250 mA。电磁铁的电阻在7.5到10欧姆之间,它们可以在电路中连接而不参考极性。

分针驱动用于指示月份的日期。这只手直接连接到由时钟电机棘轮驱动的120齿轮。因此,在原始时钟中,120 x 30秒脉冲将分钟驱动1小时。

图4 120齿轮被放大并叠加在时钟显示屏上,以显示每颗牙齿与月中的日期的关系。每个月最多有31天,所以120个牙齿除以31,得到3.87个牙齿,可以移动1天的手段。这显然是不可能的,因此时钟设计为每天移动3手牙齿。这一个月最多使用3x31天或93颗牙齿。在每个月末,添加额外的脉冲以将日期移动到该月的第1天。由于每个月的天数变化,Arduino微控制器在每个月结束时计算出来,需要多少额外的脉冲才能将日期移动到当月1日。

图5显示了多少额外的

这可以在图6中看到。将日手从1天移动到下一个需要3个脉冲所以需要脉冲从每个月末开始回到第1天。

例如,在31个月结束时,将发送额外的30个脉冲以在该月的第1天停止日期。

步骤7:月份拨号

图1月份表盘

月份指针由Lavet型步进电机驱动。

电机来自石英钟表机芯,石英控制板切出。电机需要非常低的电流来驱动它,并且可以通过微调电阻直接从Arduino输出驱动。电阻器用于调节电动机的电流,使其工作时不会过度驱动。

图2通过将极性反转到驱动线圈来驱动电机,这使得永磁体齿形转子(下面的红色)转动180°。每次驱动电机极性反转时,齿形转子将继续沿相同方向转动。

Arduino的2个输出引脚用于驱动电机,1个引脚始终与另一个相反。

月份指针指针连接到秒齿轮。这个轮子每60个极性变化一次,并且由于一年中有12个月,时钟电机需要步进5次(60个牙齿/12个月),以便在月经表盘上移动月份1个月。

请注意代码总是发送6个脉冲,因为第一个脉冲将被忽略,因为极性不会改变。在6个脉冲结束时,两个Arduino引脚都设置为“低”,因此在下个月之前没有电流通过驱动线圈。

在初始设置时,月份手可由2个开关控制,“stepmonth 1”和“stepmonth 5”。这是一个单中心关闭锁定开关。 “stepmonth 1”开关每秒对单个电机施加一次交替脉冲,并保持开启直到手开始移动。如果开关保持在月份,则电动机将继续步进,直到开关移动到中心关闭位置。 “stepmonth 5”开关每秒一次向蛾马达施加5个交替脉冲。要使用将开关移至开启位置并等待月份指针开始移动,然后返回中心关闭位置。然后月份将提前1个月然后停止。要设置月份指针,首先使用“stepmonth 1”开关将指针设置为一个月,然后使用“stepmonth 5”开关逐步执行整个月,直到显示正确的月份。

第8步:月运动修改

UTS石英钟运动哈克

我使用U.T.S.运动无花果在我的大多数时钟中都是1,因为它们质量很好,有一个安全的分针固定,并且可用于大手的高扭矩型号。

如果你没有U.T.S.然后你应该能够找到一种修改它的方法,因为它们都非常相似。唯一不能使用的是“静音”动作,扫描秒针,因为它们不依赖于1秒脉冲来驱动它们。通过将薄螺丝刀向下滑入图2中机箱顶部和底部可见的插槽,小心地将机芯分开,然后松开锁定卡舌。图3移除了顶部和底部的箱子部分。图4然后可以将石英PCB和电机部分作为一部分提起,留下空壳和电池座部分。将电池端子拉出并丢弃。图5现在可以修改上一步中移除的石英PCB和电机部分。图6用锋利的刀将轨道从集成电路(黑色斑点)切割到其中一个驱动线圈。焊接到驱动线圈的电线并将它们送入空电池槽。图7使用一小块vero板19个孔×4个条带构成石英电机驱动接口电路。该电路具有保护齐纳二极管x2 @ 8.3v,用于设置Lavett电机驱动电流的10K预设电阻,一个On/Off开关和一对PCP连接器,用于将电路连接到Arduino电路板的驱动输出。图8显示了Vero板的后部和切割轨道的位置。图9最后将电线从电机线圈焊接到Vero板,然后将外壳重新卡在一起。用少量热熔胶将Vero板粘贴到位。

步骤9:潮汐时钟

潮汐时钟显示低潮或高潮的时间。由于潮汐时间受到许多变量的影响,潮汐时钟使用现成的潮汐时钟模块,只需连接潮汐手。

使用在互联网上找到当地海滨的潮汐时间,然后设置时钟运动的调节轮。

步骤10:原理图

图1显示原理图和图2 Arduino Uno连接

原理图也可以在这里看到

步骤11:Vero Board布局

Arduino和音效板的组件安装在vero板上。然后将其安装在钟表的背板上。电路板上安装了一个反极性保护二极管

,这将使输入电压降低几分之一伏。电路板显示5.6伏连接,但需要调低电压,以便在连接Arduino和音板之前电源电压为5伏或更低。

步骤12:测试

由于时钟是全自动的,因此无需手动设置时间和日期。所有测试都是通过将DCF77格式的虚拟无线电时间和日期代码发送到时钟来完成的。

幸运的是,用于解码此时钟DCF77信号的DCF77库的设计者Udo Klein也设计了一个DCF77用于Arduino的无线电代码生成器。

使用发生器下载Udo的代码并通过串口对Uno进行编程

一旦电路板被编程,就将1K电阻连接到引脚3和一个小环路连接到Gnd引脚。在您正在测试的设备的DCF77天线周围缠绕一次导线。加载终端程序或只是从Arduino接口打开串行监视器。将波特率设置为115200并按Enter键。您应该在串行监视器上看到以下内容

正在运行

输出D3

到设定目标时间使用以下格式之一

简单模式: sYY.MM.DD hh:mm.ss

扩展模式: x :YY.MM.DD hh:mm.ss w sbtl

当前时间设置(YY.MM.DD hh:mm.ss w sbtl)w =工作日,s =夏季,b =备用天线,t = timzone更改预定,l =闰秒预定09.01.01 00:52:03 4 8001

这为您提供了如何设置时间的基本说明在Uno上的日期和日期已准备好设置为您设备上的时间和日期。

作为测试我的日历从6月30日到7月1日踩踏的示例,我发送此命令“x16.07.01 06: 30:00 1 1000“设定日期和时间至2016年7月1日06:30:00。我的时钟设置为GMT,因此当它解码时,它将设置为05:30。在1月1日的所有月份栏上,日历设定为在06:00而不是午夜(由于时钟运动的噪音)进行校正。

请记住,一旦您将命令发送到DCF77发生器,时钟就会从您设置的时间开始,所以当您的时钟解码时,它将在几分钟后开始。这就是为什么我把它设置为05:30而不是06:00。这使我的日历时钟时间能够解码准备好在06:00进行时间和日期的信号。

这是另一个例子

触发GMT的闰秒(CET需要一小时休息)

发送x15.01.01 00:45:00 1 0001

输出

正在运行

输出D3

当前时间设置(YY.MM.DD hh:mm.ss w sbtl)

w =工作日,s =夏令时,b =备用天线,t = timzone更改预定,l =闰秒预定15.01.01 00:45:00 1 232001

设置目标时间使用以下格式之一

简单模式: sYY.MM.DD hh:mm.ss

扩展模式: x:YY.MM.DD hh:mm.ss w sbtl

当前时间设置(YY.MM.DD hh:mm.ss w sbtl)

w =工作日,s =夏令时,b =备用天线, t = timzone更改预定,l =闰秒预定15.01.01 00:45:00 1 232001

这实际设置我的时钟(设置为GMT)一旦解码到12月31日23:45 2015加上几分钟的解码时间。

我在主时钟上使用它来检查注入的闰秒被检测到并传递到我的1秒从时钟上。

更多示例

x15.01.01 00:45:00 1 0001 = 23:52:00 2015/12/12 gmt + 0触发闰秒

x14.03.30 01:50:00 1 0010 = 00:45:00 30/03/14 gmt + 0触发时钟+1小时

x14.10.26 02:50:00 1 1000 = 02: 45:00 26/10/14 gmt + 1触发时钟返回

x21.03.01 05:20:00 1 1000 = 21.03.01 05:20:00 1 49000 2月28日之后没有闰年触发在06:00hrs

x16.02.28 06:20:00 1 1000 = 05:20 28 feb 2016闰年步骤到29

x16.03.01 06:30:00 1 1000 = 05:30 01 2016年3月闰年步骤从29到01

x16.07.01 06:30:00 1 1000 = 05:30 2016年7月1日步骤从30到01

x14.03.30 23:30:00 1 0000 = 22:30 2014年3月30日

x14.03.30 01:30:00 1 0000 = 00:30 2014年3月30日

x14 .03.30 13:30:00 1 0000 = 12:30 2014年3月30日

步骤13:代码

代码v18 for Udo Klein的v3库

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130304
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184820
收藏 人收藏

    评论

    相关推荐

    【原创】基于51单片机的DS1302电子钟万年历(带闹钟)(Proteus仿真+C语言+原理图论文)

    电子万年历系统以AT89C52单片机为核心,构成单片机控制电路,结合DS1302时钟芯片和DS18B20温度传感器,完成时间和温度的读取,全部信息由LCD1602液晶实时显示。 日历时间的校准和闹钟
    发表于 03-15 16:17

    基于51单片机的1602显示带闹钟万年历设计

    电子发烧友网站提供《基于51单片机的1602显示带闹钟万年历设计.rar》资料免费下载
    发表于 01-12 09:34 9次下载

    基于51单片机的万年历设计要求

    电子发烧友网站提供《基于51单片机的万年历设计要求.rar》资料免费下载
    发表于 01-12 09:24 1次下载

    基于51单片机的万年历设计

    电子发烧友网站提供《基于51单片机的万年历设计.rar》资料免费下载
    发表于 01-03 11:22 2次下载

    基于51单片机的1602显示带闹钟万年历设计

    电子发烧友网站提供《基于51单片机的1602显示带闹钟万年历设计.rar》资料免费下载
    发表于 01-03 11:16 0次下载

    基于单片机的电子万年历设计

    电子万年历是单片机系统的一个应用,由硬件和软件相配合使用。硬件由主控器、时钟电路、温度检测电路、显示电路、键盘接口5个模块组成。主控模块用AT89C52、时钟电路用时钟芯片DS1302
    的头像 发表于 11-29 09:25 1079次阅读
    基于单片机的电子<b class='flag-5'>万年历</b>设计

    基于verilog的万年历

    基于vivado2018.3实现的万年历,能够识别平年和闰年并且自动进位计数。从秒到年,测试基本实现所有功能,且无明显BUG欢迎各位下载学习。
    发表于 11-06 17:20 0次下载

    手机控制单片机该如何去实现?

    想用嵌入式(单片机)做一个LED屏幕的万年历,希望能用手机控制调节时亮度等,应该怎样去做呢!
    发表于 10-24 07:04

    51单片机自动校时万年历设计方案

    51单片机自动校时万年历设计
    发表于 09-26 08:20

    38 数字万年历项目实战2 - 第6节

    STM32程序函数代码
    充八万
    发布于 :2023年08月17日 01:51:44

    38 数字万年历项目实战2 - 第5节

    STM32程序函数代码
    充八万
    发布于 :2023年08月17日 01:50:53

    动感数字结合到万年历里也是蛮带感的

    电路函数电子diy
    学习电子知识
    发布于 :2023年08月15日 21:56:06

    DIY Arduino IN-1数码管时钟

    电子发烧友网站提供《DIY Arduino IN-1数码管时钟.zip》资料免费下载
    发表于 06-26 10:39 0次下载
    <b class='flag-5'>DIY</b> <b class='flag-5'>Arduino</b> IN-1数码管<b class='flag-5'>时钟</b>

    基于51单片机的多功能时钟万年历设计

    单片机
    YS YYDS
    发布于 :2023年05月28日 12:58:16

    基于单片机的电子万年历程序设计

    基于单片机的电子万年历实物设计资料
    发表于 05-22 15:29 1次下载