DIY一款既实用又时尚的二进制手表

2020-05-073.5万
精华项目
AI 快速预览详细 收起
本文介绍了一个DIY项目——二进制手表。该项目由瑞典电子爱好者Alex制作,在instructables的钟表类比赛中获得了一等奖。手表采用ATmega328P-AU微控制器和APA102 LED,支持时间、日期显示及秒表功能。通过BCD码(Binary-Coded Decimal)实现二进制显示,使用户能够轻松读取时间。此外,手表还具备高精度计时、长电池寿命和USB充电等功能。整个项目的硬件设计包括框图、原理图和PCB布局,软件部分则涉及代码编写和编程。最终,通过焊接和组装,完成了这款既实用又时尚的二进制手表。

4.png

5.png

如图所示,今天给大家介绍一个炫酷的项目——电子风满满的二进制手表,由瑞典电子爱好者Alex制作。这个项目在instructables的钟表类比赛中获得了一等奖。

注:文中涉及的代码等资料,可以在文末左下角或者在“DF创客社区”公众号后台回复“Alex二进制手表”获取。

最近一段时间,开始接触到一些关于二进制手表的知识,我也开始在搜寻相关的资料来尝试自己是不是也能做一个。但是,我发现很难找到一个既实用又时尚的设计,所以一气之下,我决定干脆自己从头开始设计一个。

创意

6.png

灵感来源于下面这个视频:






想要做一个二进制手表第一步首先要确立一些设计标准,我想到了下面这些:

建立设计标准

  • 支持二进制RGB显示方式
  • 支持时间显示(非常精确的计时)
  • 支持日期显示
  • 支持秒表功能
  • 支持警报功能
  • 长电池寿命
  • 支持USB充电
  • 软件可由用户轻松定制
  • 设计简洁干净

这些标准成为了这整个项目设计的基础。下一步是会给大家说清楚我希望手表如何工作。

步骤2:简单的二进制呈现理论

DIY一款既实用又时尚的二进制手表图1

BCD码(Binary-Coded Decimal)

用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。

该计划很简单。除了接口是二进制的(特别是BCD(二进制编码的十进制))之外,二进制监视的操作与常规监视相同。BCD是一种二进制编码,其中每个十进制数字都由固定位数表示。我需要4位才能代表0-9的数字。对于标准的hh:mm时间格式,我需要其中4位数字。这意味着我总共需要16个位,这些位将由16个LED表示。

习惯了,用BCD读取时间非常容易。手表底部的行代表最低有效位(1),顶部的行代表最高有效位(8)。每列代表hh:mm时间格式的数字。如果LED亮起,则计算该值。如果指示灯熄灭,则忽略它。

要读取第一个数字,只需将第一列(最左侧)中所有激活的LED对应的值相加即可。从左到右对其他数字执行相同的操作。现在您已经在BCD中阅读了时间!

对于手表上的其他功能,该原理相同。RGB LED的使用将有助于区分使用不同颜色的不同功能和模式。这使用户可以轻松浏览各个功能而不会感到困惑。

下一步是创建框图!

计划很简单。二进制手表将像普通手表一样工作,除了界面将是二进制显示的。

这里用到了BCD码。

BCD码(Binary-Coded Decimal)

用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。

8421BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为8、4、2、1,也称为有权BCD码。

我需要用4位来表示0-9中的数字。且对于标准HH:MM时间格式,我需要4个这样的数字。这意味着总共1需要16位,这里用16个LED表示。

一旦你习惯了用BCD读时间是很容易的。

手表底部一行表示最低有效位(1),顶部的行表示最高有效位(8)。每一列表示HH:MM时间格式中的一个数字。如果LED亮起,则计算该值。如果LED熄灭,则忽略它。

要读取第一个数字,只需将第一(最左边)列中所有亮着的LED对应的值相加即可。从左到右对其他数字执行相同的操作。

所以上面对应显示的时间就是13:47!

这一原则同样适用于手表的其他功能。

使用RGB LED原因是有助于区分使用不同颜色对应不同功能和模式。可以让使用者轻松地浏览这些功能,而不会混淆。

下一步,我们来创建框图。

步骤3:开始工作

DIY一款既实用又时尚的二进制手表图2

与其他任何电子项目一样,框图是早期设计阶段的重要组成部分。

根据这些标准,我设法整理出了上面的框图。图中的每个方框表示电路中的一个功能,箭头表示这些功能之间的关系。整个框图很好地概述了电路的工作原理。

下一步是开始对框图中每个模块的各个组件进行决策!

步骤4:选择组件

在这个电路中有相当多的元件。下面,我挑选了一些最重要的部分,来解释我为什么选择它们。

LED

对于二进制显示界面,选择相当简单。我知道我想用LED来显示,并发现我需要16个LED(在4×4的网格中)来显示尽可能多的信息。

在我寻找可以完美呈现LED的过程中,APA102出现了。它是一种非常小(2mm X 2mm)的可寻址LED,颜色范围很广,而且相当便宜。尽管我以前从未和他们合作过,但它们似乎非常适合这个项目,所以我决定使用它们。

微控制器

微控制器的选择也很简单。

我有丰富的使用ATmega328P-AU的经验,对它的功能也很熟悉。

这与Arduino Nano板上使用的微控制器相同。

我知道会有更便宜的微控制器,但是介于Atmega328完全支持所有的Arduino库,所以这也是在这个项目中选择它的重要因素。

RTC(实时时钟)

RTC的主要要求是准确性。考虑到手表没有连接互联网,无法通过互联网连接重新校准时间,因此用户需要手动对其进行校准,因此,我想让手表的计时尽可能准确。

M41T62 RTC是我所能找到的最高精度的(±2ppm,相当于每月±5秒)。将高精度与I2C兼容性以及极低的电流消耗相结合使得这款RTC成为我们项目的理想选择。

DC-DC升压转换器

选择DC-DC升压转换器IC时,只需查看电路并确定所需的电压和电流即可。在低电压下运行电路会降低电流消耗,但不能低于4.5V(16MHz时钟频率下的最小微控制器电压),也不能高于4.5V(RTC的最大电压)。这意味着必须在精确的4.5V电压下运行电路。

通过计算,电路的最大电流不会超过250mA。因此,我开始寻找能够满足要求的升压转换器,并很快发现了TPS61220。

TPS61220只需要极少的外部元件,价格相当便宜,并且能够满足电流和电压要求。

电池

对电池的主要要求是尺寸。电池必须足够小,而且可以放入手表外壳,不然手表会看起来笨重。

我算了一下,电池尺寸不能超过20mm×35mm×10mm。

由于尺寸限制和250mA的电流要求,我对电池的选择仅限于锂电池。

我在Hobbyking上找到了我决定使用的个"Turnigy Nano-Tech 300mAh 1S"电池。

充电电路

对充电控制器没有特别的要求,只是需要与1S 锂电池兼容。

我找到了MCP73831T,它是一个完全集成的充电控制器,专为单电池充电应用而设计。

它的特点之一是能够调节通过外部电阻器的充电电流。

锂电保护

这里我想包括电压和电流监控,保护电池免受过充电和过放电的影响。

提供此类功能的IC数量有限,其中一个较便宜的选择是BQ29700 IC。它只需要极少量的外部元件,而且包括了单节锂电池的所有必要保护。

现在我们选好了元件,一起来创建原理图吧!

步骤5:原理图

DIY一款既实用又时尚的二进制手表图3

这里用到了Altium Designer,我能够使用每个组件数据表中的建议将上述示意图汇总在一起。原理图分为不同的框,以使其更具可读性。我还添加了一些注释,其中包含重要信息,以防其他人想要重新创建此设计。

下一步是在PCB上布置原理图!

通过使用Altium Designer,我能够利用每个组件的数据手册中的建议来整理上述原理图。

原理图被分成不同的块,更具可读性。我还添加了一些重要信息的注释,以防其他人想要重新创建此设计。

下一步我们在PCB上布局原理图。

步骤6:PCB布局

DIY一款既实用又时尚的二进制手表图4

DIY一款既实用又时尚的二进制手表图5

DIY一款既实用又时尚的二进制手表图6

DIY一款既实用又时尚的二进制手表图7

PCB布局是整个项目最具挑战性的部分。

选择使用2层PCB,以将PCB制造成本降至最低。

选择使用36毫米的标准手表尺寸,因为它看起来非常适合LED。

我增加了一些1毫米的螺丝孔来将PCB固定在手表外壳中。

我们的目标是通过将所有组件(当然除了LED)放置在底层,从而保持整个设计的整洁美观。

我还希望使用最少数量的过孔,以避免在顶层出现可见的过孔。这意味着我必须在单个层上布线所有走线,同时确保电路的"噪声"部分远离敏感的信号走线。我还确保所有走线尽可能短,将旁路电容放置在接近负载的位置。对于高功率元件使用较厚的走线,否则应遵循PCB设计的所有常见良好实践。布线花了相当多的时间,但我认为结果很好。

下一步我们来为手表外壳创建一个3D模型。

步骤7:3D设计

DIY一款既实用又时尚的二进制手表图8

DIY一款既实用又时尚的二进制手表图9

DIY一款既实用又时尚的二进制手表图10

表壳的设计基于采用Fusion 360的非常传统的经典表设计。表带使用了18mm的标准间距,使该表与多种其他表带兼容。

PCB的开孔设计比PCB本身大0.4mm,来适应任何制造误差。

安装PCB的螺柱和一个小的边缘,用于放置PCB板。

我确保将PCB从顶部凹进几毫米,避免LED的锋利的边缘卡在衣服上造成损坏。

外壳的高度完全由电池的厚度决定。外壳的其余部分设计得非常美观,边缘圆润,边角光滑。

我必须保持设计对3D打印友好,这样就可以在没有任何支撑的情况下在家里进行3D打印。

现在,硬件已经完成,是时候开始软件部分的工作了!

步骤8:代码

DIY一款既实用又时尚的二进制手表图11

我通过包含所有必需的库开始了代码。这包括用于与RTC通信和驱动LED的库。之后,我为每种模式创建了单独的函数。当用户通过按下按钮切换模式时,程序将调用与该模式相对应的功能。如果用户未在指定的时间内按下按钮,手表将进入睡眠状态。

所有LED都将逐渐熄灭,直到它们完全熄灭,才表明处于睡眠模式。使用睡眠模式可大大增加电池寿命,并在不使用时保持LED熄灭。用户可以通过按下上方的按钮唤醒手表,并且默认情况下手表会显示时间,因为这是最常见的模式。唤醒后,手表还将检查电池电量以确保不需要充电。如果需要充电,LED将在显示时间之前闪烁红色几次。如果电池电量低于临界水平,它将完全无法打开。

至于其他模式,我想让它们尽可能直观。我认为在所有模式下使用相同的按钮负责相同的功能将是最直观的。经过一些测试,这是我想到的按钮配置:

  • 按下顶部按钮:唤醒/在“显示时间”,“显示日期”,“秒表”和“警报”模式之间循环。
  • 顶部按钮保持: 进入“设置时间”,“设置日期”,“启动秒表”或“设置闹钟”模式。
  • 底部按钮按下:增加亮度。
  • 底部按钮保持: 进入“选择颜色”模式。

底部按钮始终负责亮度和颜色调整,而与您所处的模式无关。

当用户进入颜色调整模式时,LED开始循环显示所有可能的RGB颜色。用户可以暂停动画并选择该特定模式所需的颜色(红色显示时间,蓝色显示日期等)。

用户可以轻松自定义颜色来区分不同的模式。

现在代码已完成,是时候把它们上传到微控制器了!

第9步:编程

DIY一款既实用又时尚的二进制手表图12

差不多到了焊接和组装的时候了,但在此之前,我们需要对微控制器进行编程。

我遵循了这个教程。

Burn the bootloader to a ATmega328P-AU SMD
关于如何使用常规的Arduino UNO烧录引导程序和对微控制器进行编程的信息。

第一步是通过上传"ArduinoISP"示例代码,将ArduinoUno变成ISP烧录器。

我使用了一个带有编程接口的电路试验板,并将教程中的原理图连接起来。

之后,我只需在Arduino IDE中按下"Burn Bootloader",就可以将引导程序烧录到微控制器上。

一旦微控制器有了引导加载程序,我就简单地从Arduino UNO中删除了现有的微控制器,并使用Arduino UNO板作为USB转串口适配器,将代码上传到编程接口的微控制器。上传完成后,可以开始焊接过程。

下一步,我们收集所有组件并将它们焊接在一起。

步骤10:焊接

DIY一款既实用又时尚的二进制手表图13

DIY一款既实用又时尚的二进制手表图14

DIY一款既实用又时尚的二进制手表图15

DIY一款既实用又时尚的二进制手表图16

DIY一款既实用又时尚的二进制手表图17

DIY一款既实用又时尚的二进制手表图18

DIY一款既实用又时尚的二进制手表图19

DIY一款既实用又时尚的二进制手表图23

焊接过程分为两部分。首先需要焊接底层,然后是顶层。

我使用胶带将手表PCB固定在几个原型板之间。这确保了PCB在焊接过程中不会移动,这一点非常重要。

然后,我将焊接模板放在PCB上,并使用大量的焊锡膏覆盖所有的焊盘。接着,我开始使用镊子将所有组件放置在它们相应的焊盘上。然后,我用热风枪将所有组件回流焊接到位。

在焊接底层时,我进行了快速的目视检查,来确保焊接成功。然后,我翻过电路板,在另一侧重复焊接过程,这一次是焊接所有的LED。

焊接顶层时,关键的一点是不要使电路板过热,因为这会让底层的所有元件有脱落的风险。

保证所有元件都留在原处,并使用烙铁将按钮焊接到位后,PCB板也完成了!

现在是最后组装时候了!

步骤11:组装

组装非常简单。我将电池连接到PCB,并将电池和PCB放在3D打印外壳中。

之后,将四个螺钉拧入PCB各个角上的安装孔内。

最后,用18mm的弹簧条连接了表带,手表就完成了!

DIY一款既实用又时尚的二进制手表图20

DIY一款既实用又时尚的二进制手表图21

步骤12:结论和改进

这款手表的表现完全符合预期,我非常满意。

到目前为止,我还没有遇到任何问题,使用了整整一周后,电池仍可以几乎充满电。

未来,我将来可能会在手表中添加其他功能。

由于USB端口连接到微控制器,因此可以随时更新升级固件。

不过现在,我会继续使用这个“版本”的手表,先观察它在长时间使用后的表现如何。

PS : 大家如果对这个项目有任何想法,意见或问题,可以在下面留言讨论。
你也可以直接与作者交流,他的邮箱是aptechnologies.se@gmail.com。

DIY一款既实用又时尚的二进制手表图22

那么问题来了,上面现在是几点钟?


项目作者:Alex

编辑:Roy

参考资料:

  1. Burn the bootloader to a ATmega328P-AU SMD: http://www.electronoobs.com/eng_arduino_tut6.php
  2. 原文地址:https://www.instructables.com/id/The-Ultimate-Binary-Watch/
  3. 部分资料来源于互联网,首发于DF创客社区

4.png (503.3 KB, 下载次数: 10779)

DIY二进制手表 · 实用时尚的电子风设计_image_3.webp

5.png (365.83 KB, 下载次数: 10581)

DIY二进制手表 · 实用时尚的电子风设计_image_6.webp

6.png (718.56 KB, 下载次数: 10607)

DIY二进制手表 · 实用时尚的电子风设计_image_9.webp

Alex二进制手表.zip

433.11 KB, 阅读权限: 50, 下载次数: 4

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(36)
JOVI
JOVI
学习学习
花生编程
花生编程
所以怎么知道上面显示的是几点啊?
花生编程
花生编程
二进制手表,赞!
三春牛-创客
三春牛-创客
真的很棒啊!不过上面是几点钟?看了半天还是不懂……
三春牛-创客
三春牛-创客
厉害厉害
腿毛利小五郎
腿毛利小五郎
附图.......
腿毛利小五郎
腿毛利小五郎
我来交作业了,用的合宙的Air32f103c8t6,充电模块买的集成的,网上抄了一套最小系统板子,随便写了一下代码,就成了哈哈哈哈,叫我点灯工程师。(评论怎么上传图片呢)
耘想
耘想
评论内容
派大星ym
派大星ym
厉害厉害厉害
派大星ym
派大星ym
酷酷酷酷酷
billshu
billshu
[email]abdulkhalique712@gmail.com[/email],你好,二进制手表,这个邮箱回复说不是作者。
billshu
billshu回复billshu
博主有Gerber文件吗?
DFHJM_IpFmV
DFHJM_IpFmV
可以把打印pcb的软件来一个波?
RRoy
RRoy
作者
回复DFHJM_IpFmV
这个项目是在instructables上的,作者无法上传压缩文件,好多人要想要PCB文件,项目作者留了他的邮箱: [email]abdulkhalique712@gmail.com[/email] ,你可以尝试联系他一下
知行1
知行1
非常喜欢,已经做成了,借鉴的原创意,PCB和程序全部重新开发了,采用STM32主控,使用了自带的RTC+外置晶振,加了一颗紫外线传感器,一颗气压传感器,这样多了紫外线测量、温度和海拔功能,更像是一个户外表,然后又把小区的门禁卡NFC也集成上去了,功能妥妥的了,下面上图
秋老师
秋老师回复知行1
大神能联系您吗?我的手机13738432985
RRoy
RRoy
作者
回复知行1
你这个做的太棒了,必须发个帖子出来,让大伙儿膜拜一下
tata
tata
大神啊!!!
DFS1w2cb8o8
DFS1w2cb8o8
厉害厉害
DFshark
DFshark
很想仿制一个,F3D文件实在找不到软件打开,能不能给个STL文件?
RRoy
RRoy
作者
回复DFshark
Autodesk Fusion 360 可以打开的
DFshark
DFshark
能不能提供一个stl的3D文件?
樊庆勇
樊庆勇
看起来很酷的样子!
VYN3CrvI
VYN3CrvI
没有pcb文件吗?
RRoy
RRoy
作者
回复VYN3CrvI
因为这个项目是在instructables上的,作者无法上传压缩文件,原帖子下面好多人要想要PCB文件,项目作者留了他的邮箱: [email]abdulkhalique712@gmail.com[/email] ,你可以尝试联系他一下,顺便练习一下英文!
漫步者
漫步者
4x4 那个是正方向? 转90度,180度,如何读?不好确认!
第一位采用2个LED,就很简单确定了。
RRoy
RRoy
作者
回复漫步者
很好的提议,以后做的小伙伴可以参考!