如图所示,本日给大家先容一个炫酷的项目——电子风满满的二进制腕表,由瑞典电子爱好者Alex制作。这个项目在instructables的钟表类比赛中得到了一等奖。
注:文中涉及的代码等资料,可以在DF创客社区公众年夜众号后台回答“Alex二进制腕表”获取。
最近一段韶光,开始打仗到一些关于二进制腕表的知识,我也开始在征采干系的资料来考试测验自己是不是也能做一个。但是,我创造很难找到一个既实用又时尚的设计,以是一气之下,我决定干脆自己从头开始设计一个。

创意
灵感来源于下面这个视频:https://www.bilibili.com/video/BV1Mt4y117eP/
想要做一个二进制腕表第一步首先要确立设计的一些标准,我想到了下面这些:
建立设计标准
支持二进制RGB显示办法支持韶光显示(非常精确的计时)支持日期显示支持秒表功能支持警报功能长电池寿命支持USB充电软件可由用户轻松定制设计简洁干净
这些标准成为了全体项目设计的根本。下一步会给大家说清楚我希望腕表如何事情。
步骤2:大略的二进制呈现理论操持很大略。二进制腕表将像普通腕表一样事情,除了界面将是二进制显示的。
这里用到了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:开始事情与其他任何电子项目一样,框图是早期设计阶段的主要组成部分。
根据这些标准,我设法整理出了上面的框图。图中的每个方框表示电路中的一个功能,箭头表示这些功能之间的关系。全体框图很好地概述了电路的事情事理。
下一步是开始对框图中每个模块的各个组件进行决策!
步骤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:事理图通过利用Altium Designer,我能够利用每个组件的数据手册中的建议来整理上述事理图。
事理图被分身分歧的块,更具可读性。我还添加了一些主要信息的注释,以防其他人想要重新创建此设计。
下一步我们在PCB上布局事理图。
步骤6:PCB布局PCB布局是全体项目最具寻衅性的部分。
选择利用2层PCB,将PCB制造本钱降至最低。
选择利用36毫米的标准腕表尺寸,由于它看起来非常适宜LED。
我增加了一些1毫米的螺丝孔来将PCB固定在腕表外壳中。
我们的目标是通过将所有组件(当然除了LED)放置在底层,从而保持全体设计的整洁都雅。
我还希望利用最少数量的过孔,以避免在顶层涌现可见的过孔。这意味着我必须在单个层上布线所有走线,同时确保电路的"噪声"部分阔别敏感的旗子暗记走线。我还确保所有走线尽可能短,将旁路电容放置在靠近负载的位置。对付高功率元件利用较厚的走线,否则应遵照PCB设计的所有常见良好实践。布线花了相称多的韶光,但我认为结果很好。
下一步我们来为腕表外壳创建一个3D模型。
步骤7:3D设计表壳的设计基于采取Fusion 360的非常传统的经典表设计。表带利用了18mm的标准间距,使该表与多种其他表带兼容。
PCB的开孔设计比PCB本身大0.4mm,来适应任何制造偏差。
安装PCB的螺柱和一个小的边缘,用于放置PCB板。
我确保将PCB从顶部凹进几毫米,避免LED的锋利的边缘卡在衣服上造成破坏。
外壳的高度完备由电池的厚度决定。外壳的别的部分设计得非常都雅,边缘圆润,边角光滑。
我必须保持设计对3D打印友好,这样就可以在没有任何支撑的情形下在家里进行3D打印。
现在,硬件已经完成,是时候开始软件部分的事情了!
步骤8:代码我通过包含所有必需的库开始了代码。这包括用于与RTC通信和驱动LED的库。之后,我为每种模式创建了单独的函数。当用户通过按下按钮切换模式时,程序将调用与该模式相对应的功能。如果用户未在指定的韶光内按下按钮,腕表将进入就寝状态。
所有LED都将逐渐熄灭,直到它们完备熄灭,才表明处于就寝模式。利用就寝模式可大大增加电池寿命,并在不该用时保持LED熄灭。用户可以通过按下上方的按钮唤醒腕表,并且默认情形下腕表会显示韶光,由于这是最常见的模式。唤醒后,腕表还将检讨电池电量以确保不须要充电。如果须要充电,LED将在显示韶光之前闪烁赤色几次。如果电池电量低于临界水平,它将完备无法打开。
至于其他模式,我想让它们尽可能直不雅观。我认为在所有模式下利用相同的按钮卖力相同的功能将是最直不雅观的。经由一些测试,这是我想到的按钮配置:
按下顶部按钮:唤醒/在“显示韶光”,“显示日期”,“秒表”和“警报”模式之间循环。
顶部按钮保持:进入“设置韶光”,“设置日期”,“启动秒表”或“设置闹钟”模式。
底部按钮按下:增加亮度。
底部按钮保持:进入“选择颜色”模式。
底部按钮始终卖力亮度和颜色调度,而与您所处的模式无关。
当用户进入颜色调度模式时,LED开始循环显示所有可能的RGB颜色。用户可以停息动画并选择该特定模式所需的颜色(赤色显示韶光,蓝色显示日期等)。
用户可以轻松自定义颜色来区分不同的模式。
现在代码已完成,是时候把它们上传到微掌握器了!
第9步:编程差不多到了焊接和组装的时候了,但在此之前,我们须要对微掌握器进行编程。
我遵照了这个教程。
Burn the bootloader to a ATmega328P-AU SMD[1]
关于如何利用常规的Arduino UNO烧录勾引程序和对微掌握器进行编程的信息。
第一步是通过上传"ArduinoISP"示例代码,将Arduino Uno 变成ISP烧录器。
我利用了一个带有编程接口的电路试验板,并将教程中的事理图连接起来。
之后,我只需在Arduino IDE中按下"Burn Bootloader",就可以将勾引程序烧录到微掌握器上。
一旦微掌握器有了勾引加载程序,我就大略地从Arduino UNO中删除了现有的微掌握器,并利用Arduino UNO板作为USB转串口适配器,将代码上传到编程接口的微掌握器。上传完成后,可以开始焊接过程。
下一步,我们网络所有组件并将它们焊接在一起。
步骤10:焊接焊接过程分为两部分。首先须要焊接底层,然后是顶层。
我利用胶带将腕表PCB固定在几个原型板之间。这确保了PCB在焊接过程中不会移动,这一点非常主要。
然后,我将焊接模板放在PCB上,并利用大量的焊锡膏覆盖所有的焊盘。接着,我开始利用镊子将所有组件放置在它们相应的焊盘上。然后,我用热风枪将所有组件回流焊接到位。
在焊接底层时,我进行了快速的目视检讨,来确保焊接成功。然后,我翻过电路板,在另一侧重复焊接过程,这一次是焊接所有的LED。
焊接顶层时,关键的一点是不要使电路板过热,由于这会让底层的所有元件有脱落的风险。
担保所有元件都留在原处,并利用烙铁将按钮焊接到位后,PCB板也完成了!
现在是末了组装时候了!
步骤11:组装组装非常大略。我将电池连接到PCB,并将电池和PCB放在3D打印外壳中。
之后,将四个螺钉拧入PCB各个角上的安装孔内。
末了,用18mm的弹簧条连接了表带,腕表就完成了!
落成
步骤12:结论和改进
这款腕表的表现完备符合预期,我非常满意。
到目前为止,我还没有碰着任何问题,利用了整整一周后,电池仍可以险些充满电。
未来,我将来可能会在腕表中添加其他功能。
由于USB端口连接到微掌握器,因此可以随时更新升级固件。
不过现在,我会连续利用这个“版本”的腕表,先不雅观察它在永劫光利用后的表现如何。
参考资料[1]Burn the bootloader to a ATmega328P-AU SMD: http://www.electronoobs.com/eng_arduino_tut6.php
文章来源:instructables
原文地址:https://www.instructables.com/id/The-Ultimate-Binary-Watch/
问题来了,这是几点钟?
反应超过5s不合格 : )