二进制桌子时钟

5,526

49

6.

简介:二进制桌面时钟

关于:我喜欢学习,喜欢制作,喜欢分享。

二进制时钟是可怕的,专门为人谁知道二进制(数字设备的语言)。如果你是个技术人员,这个奇怪的时钟是为你准备的。所以,你自己做一个,保守你的时间秘密!

您将在Internet上找到许多不同类型的不同类型的二进制时钟。即使您可以像Amazon.com这样的在线商店购买二进制时钟。但是这个时钟与所有人不同,我用来玩大理石,给它一个优雅的外观。

下楼前请观看演示视频。

步骤1:物料清单

硬件组件

1. Arduino Pro Micro(购买)速卖通):这是时钟的主核心,并从RTC读取时间,并指令相应地驱动LED。如果尺寸对您无关紧要,您可以使用Arduino Nano甚至是Arduino Uno而不是Pro Micro。

2DS3231 RTC模块(买方速卖通):DS3231 RTC即使电源关闭时也会跟踪时间。尽管其他RTC如DS1307可以使用DS3231更准确。

三。MAX7219CNG LED驱动IC(从速卖通):Arduino的引脚数量有限。因此,如果你想在不浪费Arduino引脚的情况下驱动成吨的LED,MAX7219就是救星。它需要串行数据,可以独立驱动64个LED。

4. 20个PC蓝色LED,5毫米(从速卖通):蓝色给了我最好的结果。你可以试试其他颜色。

5. 20件PC玩大理石(从速卖通):使用标准尺寸的弹珠。大理石必须透明才能透光。

6电阻器10K:用于控制MAX7219 IC的段电流。请参阅数据表以了解不同段电流的准确值。

7电线

8原型PCB板(从速卖通):我使用了一个原型电路板的MAX7219集成电路与集成电路基地。您也可以设计您的定制PCB板。

硬件工具

1CNC3018 PRO激光雕刻机木工数控刨床(从德国购买)速卖通):他们的DIY CNG机器被用来雕刻大理石和LED的木头。对于任何制造商和爱好者来说,这是一台价格低廉的优秀机器。

焊站(购买一个速卖通):项目需要一些焊接,一个好的烙铁是制造商的必备工具。60W是DIY焊接的好选择。

三。钢丝切割机(从速卖通

4CNC用钛涂层硬质合金端铣刀(从美国购买速卖通):您也可以尝试使用本机提供的位。在这种情况下,您应该对设计进行一些更改。

第2步:雕刻和雕刻

我拿了一块165X145X18.8毫米的枫木软木片来放置时钟的发光二极管。在每个led的顶部,我会放置一个大理石和一个标准发挥大理石的大小是直径15.5毫米。所以,我做了15.7毫米深7毫米的洞。在孔的中心,我做了一个5毫米的钻头来放置LED。所有的文字都有2毫米的深度。你可以增加或减少你选择的深度。你也可以尝试激光雕刻文字。

整个设计是由可发明的画架。画架是一个基于Web的软件平台,允许您从单个,简单的程序设计和雕刻,大部分功能都可以自由使用。您只需要通过创建帐户或使用Gmail登录系统。

Easel Pro是基于会员资格的云软件,可在识别条免费的AESEL软件上构建。Easel和Easel Pro最小化与复杂的CAD和CAM产品制造软件相关的障碍,使用户可以轻松生产物理产品。

使用ISEL您可以以G代码格式导出设计文件,也可以从EASEL环境中直接设置CNC,并将命令发送到CNC。在这种情况下,您需要为画架安装驱动程序。您还可以将以前创建的G代码导入Easel IDE并修改。我包括在这里的设计文件。您可以根据您的选择轻松修改设计。

第三步:打磨和涂清漆

清漆可以提供一个美丽的完成木材工程和绘画。在给木头涂清漆之前,先用砂纸打磨你的作品,然后清洁你的工作区。砂光使木材看起来光滑,并为上光做准备。涂上几层薄薄的清漆,让每一层都干透,然后再进行下一层。要给一幅画上光,让它完全干燥,然后小心地刷上清漆。一层就足够画很多画了,但你可以再加一层,只要你先让前一层完全干透。

在涂清漆之前,你需要去除任何瑕疵和污点,然后再涂清漆。要做到这一点,使用100粒度的砂纸为未完成的部分,并与木纹的工作。轻轻地打磨直到工件光滑。清洁完木片后,在通风良好的地方涂上清漆。

清漆使木材免受环境灰尘和湿气的影响,但它会影响木材的颜色。

第4步:制造电路

时钟的主要组件是Arduino Pro Mini MicroController板和DS3231 RTC模块。Arduino Pro Mini和RTC模块的连接非常简单。您需要将RTC模块的SDA引脚连接到RTC模块的Arduino和SCL引脚的SDA引脚到Arduino的SCL引脚。SDA和SCL引脚实际上是A4和A5销的Arduino。您还需要在Arduino和RTC模块之间进行共同的接地连接。我用跳线电线来建立连接。

Arduino和DS3231 RTC之间的连接:

阿杜伊诺 DS3231型
症状自评量表(A5) 症状自评量表
SDA(A4) SDA.
5伏 VCC公司
GND. GND.

为了显示小时、分钟和秒,二进制时钟需要20个LED。如果你想显示日期,它需要更多。Arduino板有GPIO引脚的限制。所以,我使用MAX7219CNG LED驱动芯片,仅使用Arduino板的三个引脚就可以驱动成吨的LED。

MAX7219驱动IC能够驱动64个单独的LED,同时仅使用3根电线与Arduino通信,更重要的是,我们可以菊花链多个驱动器和矩阵,仍然使用相同的3根线。

64个LED由IC的16个输出引脚驱动。现在的问题是这怎么可能。嗯,同时点亮的最大LED数量实际上是8个。LED按8×8的行和列排列。所以MAX7219在很短的时间内激活每一列,同时它还驱动每一行。因此,通过快速切换列和行,人眼只会注意到连续的光。

MAX7219的VCC和GND转到Arduino的5V和GND引脚,另外三个引脚,DIN,CLK,CS转到Arduino板的任何数字销。如果我们想连接多个模块,我们只需将先前的断路板的输出引脚连接到新模块的输入引脚。实际上这些引脚都是相同的,除了前面板的DOUT引脚进入新电路板的DIN引脚。

Arduino和MAX7219CNG之间的连接:

阿杜伊诺 MAX7219型
十二 din
第11页 时钟
D10型 加载
GND. GND.

第五步:上传程序

整个程序是在Arduino环境下编写的。草图使用了两个外部库。一个用于RTC模块,另一个用于MAX7219 IC。在编译程序之前,从链接下载库并添加到Arduino IED。

在ArduinoPro Mini中上传程序有点棘手。如果您以前从未使用过Arduino Pro Mini,请参阅本教程:https://alselectro.wordpress.com/2017/05/14/arduin。。。

/*吉特:https://github.com/jarzebski/Arduino-DS3231>*/#include“Wire.h”#include“DS3231.h”#include“LedControl.h”/*现在我们需要一个LedControl来使用。*****这些管脚编号可能无法与您的硬件配合使用*****管脚12连接到DataIn管脚11连接到CLK管脚10连接到LOAD我们只有一个MAX72XX。*/DS3231时钟;RTCDateTime dt;LedControl lc=LedControl(12,11,10,1);int秒、分、小时;字节数[10]={b0000000、b1000000、b0100000、b0110000、b0010000、B01010000、B00110000、B01110000、b0001000、b010000};void setup(){//序列号.开始(9600);/*MAX72XX启动时处于省电模式,我们得打个叫醒电话*/lc.停机(0,false);/*将亮度设置为中等值*/lc.SET强度(0,15);/*并清除显示*/液晶显示器(0); //lc.设置(0,行,列,真);//lc.setRow公司(0,0,B11111111);//lc.setRow公司(0,1,B11111111);//lc.setRow公司(0,2,B11111111);//lc.setRow公司(0,3,B11111111);//lc.setRow公司(0,4,B11111111);// lc.setRow公司(0,5,B11111111);//lc.setColumn列(0,2,B11111111);//lc.setColumn列(0,3,B11111111);//lc.setColumn列(0,4,B11111111);//lc.setColumn列(0,5,B11111111);//初始化DS3231开始计时();//设置草图编译时间//clock.setDateTime设置日期时间(\uuu DATE\uu,\uu TIME\uu);pinMode(5,输入\u PULLUP);pinMode(6,输入\u PULLUP);pinMode(7,输入\u PULLUP);}int menu=0,向上,向下;int hours\u one;int hours\u ten;int minutes\u one;int seconds\u one;int seconds\u ten;void loop(){if(digitalRead(5)==0){delay(300);menu++;if(menu>3)menu=0;}if(menu==0){dtclock.getDateTime();小时=dt.小时;分钟=dt.分钟;秒=dt.秒;如果(小时>12)小时=小时-12;如果(hours==0)hours=1;hours\u one=hours%10;hours\u ten=hours/10;minutes\u one=minutes%10;minutes\u ten=minutes/10;seconds\u one=seconds%10;seconds\u ten=seconds/10;lc.setRow公司(0,0,数字[秒]);lc.setRow公司(0,1,数字[秒十]);lc.setRow公司(0,2,数字[分钟]);lc.setRow公司(0,3,数字[分钟]);lc.setRow公司(0,4,数字[小时]); lc.setRow公司(0,5,数字[小时数]);}如果(菜单==1){如果(数字读取(6)==0){延迟(300);小时数++;如果(小时数>=24)小时数=0;}如果(数字读取(7)==0){延迟(300);小时数--;如果(小时数<0)小时数=0;}小时数=小时数%10;小时数=小时数/10;lc.setRow公司(0,2,b0000000);lc.setRow公司(0,3,b0000000);lc.setRow公司(0,1,b0000000);lc.setRow公司(0,0,b0000000);lc.setRow公司(0,4,数字[小时数];lc.setRow公司(0,5,number[hours_ten]);}如果(menu==2){如果(digitalRead(6)==0){延迟(300);分钟++;如果(minutes>=60)分钟=0;}如果(digitalRead(7)==0){延迟(300);分钟--;如果(minutes<0)分钟=0;}分钟_one=minutes%10;分钟_ten=minutes/10;lc.setRow公司(0,4,b0000000);lc.setRow公司(0,5,b0000000);lc.setRow公司(0,1,(亿欧元);lc.setRow公司(0,0,b0000000);lc.setRow公司(0,2,数字[分钟]);lc.setRow公司(0,3,数字[分钟];}如果(菜单==3){clock.setDateTime设置日期时间(2020,4,13,小时,分钟,01);菜单=0;}//lc.设置(0,行,列,假)//lc.设置(0,行,列,真)//lc.setColumn列(0,列,B10100000)//lc.setRow公司(0,4,B11111111)//lc.setRow公司(0,行,(字节)0);//lc.setColumn列(0,col,(byte)0);//用于前导零查找DS3231_dateformat示例//序列号.打印(“原始数据:”);//序列号.打印(日期年); 序列号.打印("-"); // 序列号.打印(日期月); 序列号.打印("-"); // 序列号.打印(日); 序列号.打印(" "); // 序列号.打印(dt.小时); 序列号.打印(":"); // 序列号.打印(dt.分钟); 序列号.打印(":"); // 序列号.打印(dt.秒); 序列号.println(“”);///延迟(1000);}

步骤6:放置LED

在这个阶段,我会把所有的发光二极管的孔的木板。LED的连接如示意图所示。由于我们将使用MAX7219LED驱动程序来驱动LED,所以所有LED必须以矩阵形式连接。所以,我根据示意图把每列中所有LED的阳极引脚连接在一起,把每行的阴极引脚连接在一起。现在,我们的列管脚实际上是LED的阳极管脚,行管脚实际上是LED的阴极管脚。

要使用MAX7219驱动led,必须将led的阴极引脚连接到IC的数字引脚,将led的阳极引脚连接到IC的段引脚。所以,我们的列管脚应该连接到段管脚,行管脚应该连接到MAX7219的数字管脚。

您需要在MAX7219 IC的ISET引脚和VCC之间连接电阻,并且该电阻控制段引脚电流。我使用10k电阻以在每个段引脚中维持20mA。

第7步:连接LED

在这个阶段,我以行列矩阵的形式连接了所有的LED。我需要使用一些额外的跨接导线来连接LED,但如果LED的引线足够长,可以彼此接触,则无需额外导线的帮助即可进行连接。

在这种配置中,不需要电阻,因为MAX7219将负责电流。您的职责是为ISET电阻选择合适的值,并用该电阻向上拉含量销。在放置和连接LED之前,我会建议您检查每个LED。因为放置一个糟糕的领导将杀死很多时间。在下一步中,我们将行和列电线连接到最大IC。

第8步:连接电路板和LED

我们的电路板包括RTC、Arduino和MAX7219已经准备了很长时间,我们还在前一阶段准备了LED矩阵。现在我们需要根据示意图把所有的东西连接起来。首先,我们需要将行和列导线连接到MAX7219IC。示意图中提到了连接。为了更清楚,请按照下表进行操作。

LED矩阵 MAX7219CNG.
第0行 数字0
第1行 数字1
第2行 数字2
第3行 数字3
第0列 世嘉
第1栏 SEGB公司
第2栏 SEGC公司
第3栏 SEGD公司
第4栏 赛格
第5栏 SEGF公司

Row0->最顶行

列0->最右边的列(SS列)

完成连接后,需要用木片固定PCB板和Arduino,以避免断开连接。我用热胶水把所有的电路都固定好了。为避免任何短路,请使用大量胶水将PCB底部的焊点隐藏起来。

为了使时钟可用,你需要保留一个选项,以便在需要时调整时间。我增加了三个按钮开关来调整时间。一个用于更改选项,两个用于增加和减少小时和分钟。按钮放在右上角,这样就可以很容易地接触到。

第九步:放置弹珠

这是我们项目的最后阶段。所有电路连接都已完成。现在你需要将大理石放在木钟的顶部。放置大理石我用了热胶。为此目的使用透明白色胶粘剂棒。我在每个洞的每个孔中涂上热胶,在LED的顶部,我轻轻地将大理石放在每个洞里。添加胶水均匀地将增加LED的光泽。我用蓝色LED为我的时钟。它给了我最好的结果。

给时钟给出电力。如果它显示时间然后祝贺!!!

你成功了!

好好享受!

让它发光比赛

亚军
让它发光比赛

是第一个分享

    建议书

    • 让它发光比赛

      让它发光比赛
    • 第一次作家大赛

      第一次作家大赛
    • PCB挑战

      PCB挑战

    6讨论

    0.
    _MCA_

    7个月前

    为什么它在proteus模拟上不起作用?你能帮助我吗?

    0.
    瓦林克

    12个月前第9步

    真的是一个最好和伟大的项目。

    0.
    dudus.

    12个月前

    这看起来很酷!!

    2
    机器人060

    12个月前

    我对arduino代码有问题,它出现了以下错误。
    RTCDateTime未命名类型。
    有什么想法吗?

    0.
    雷蒙德6

    小费1年前

    这是一个非常好的例子多路复用LED阵列。我只有两条建议:
    1. "因为放置一个bed led会浪费很多时间。”将bed中的e替换为a,并继续使用大写的led而不是小写。
    2至于LED阵列的布线,“COLUMN0->Rightmost column”,但从前面还是后面看?我建议使用哪列时间显示,HH或SS。
    干得好!

    0.
    泰弗尔

    回复1年前

    非常感谢你的建议。我已经按照你的建议改正了。