本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于Arduino 的二进制手表

发布时间:2021-09-20
分享到:

基于Arduino 的二进制手表

发布时间:2021-09-20
分享到:

我最近了解了二进制手表的概念,并开始做一些研究,看看我是否可以为自己构建一个。但是,我无法找到既实用又时尚的现有设计。所以,我决定完全从头开始创建自己的设计!

补给品
此项目的所有文件:Arduino 代码的库可以从这里的 GitHub 下载:

第1步:设计建立标准

  • 二进制RGB接口
  • 时间显示(具有非常准确的计时)
  • 日期显示
  • 秒表功能
  • 报警功能
  • 电池寿命至少 2 周
  • USB充电
  • 用户可轻松定制的软件
  • 干净简洁的设计

这些标准成为整个项目的基础。下一步是弄清楚我希望手表如何运作!

第 2 步:一些二进制观察理论

计划很简单。除了接口是二进制的,特别是 BCD(二进制编码的十进制)外,二进制手表的操作就像普通手表一样。BCD 是一种二进制编码,其中每个十进制数字由固定位数表示。我需要 4 位才能表示 0-9 的数字。对于标准hh:mm时间格式,我需要其中的 4 个数字。这意味着我总共需要 16 位,由 16 个 LED 表示。

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

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

手表上的其他功能也遵循这一原则。使用 RGB LED 将有助于区分使用不同颜色的不同功能和模式。颜色由用户选择,可以轻松调整为他们喜欢的任何调色板。这使用户可以轻松浏览功能而不会感到困惑。

下一步是创建一个框图!

第 3 步:开始工作

与任何典型的电子项目一样,框图是早期设计阶段的重要组成部分。使用这些标准,我设法将上面的框图放在一起。图中的每个块代表电路中的一个功能,箭头表示功能之间的关系。整个框图很好地概述了电路将如何工作。

下一步是开始为框图中的每个模块的各个组件做出决策!

第 4 步:选择组件
结果证明这个电路中有相当多的组件。下面,我挑选了一些最重要的,并解释了我为什么选择它们。

LED
对于二进制接口,选择相当简单。我知道我想使用 LED 进行显示,并发现我需要其中的 16 个(在 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 的电流要求,我选择的电池仅限于 LiPo 电池。我发现了一个“Turnigy纳米技术300mAh的1S”电池Hobbyking,我决定使用。

充电IC
除了需要兼容1S LiPo电池外,对充电控制器没有特别要求。我发现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 的非常传统、经典的手表设计而设计的。我为表带使用了标准的 18 毫米间距,以使手表与各种其他表带兼容。PCB 的切口设计为比 PCB 本身大 0.4 毫米,以适应任何制造误差。我包括了一些用于安装 PCB 的螺丝柱和一个用于放置 PCB 的小边缘。我确保将 PCB 从顶部凹进一毫厘,以避免 LED 的锋利边缘卡在衣服上。外壳的高度仅由电池的厚度决定。外壳的其余部分旨在通过圆润的边缘和抛光的边角看起来很好看。我确实必须保持设计的 3D 打印友好性,以便我可以在家里 3D 打印它而无需任何支撑材料。

现在硬件已经完成,是时候开始开发软件了!

第 8 步:代码

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

睡眠模式由所有 LED 逐渐消失直至完全关闭来指示。使用睡眠模式可大大延长电池寿命,并在不使用时保持 LED 关闭。用户可以通过按下上按钮来唤醒手表。唤醒后,手表会检查电池电量以确保不需要充电。如果需要充电,LED 会在显示时间之前闪烁几次红色。如果电池电量低于临界水平,则它根本不会开启。

剩下的时间编程是让其他模式尽可能直观。我认为在所有模式下使用相同的按钮负责相同的功能将是最直观的。经过一些测试,这是我想出的按钮配置:

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

底部按钮始终负责亮度和颜色调整,与您所处的模式无关。当用户进入“选择颜色”模式时,LED 开始循环显示所有可能的 RGB 颜色。用户可以暂停动画并为该特定模式选择他们喜欢的颜色(显示时间为红色,显示日期为蓝色等)。用户可以轻松自定义颜色,以帮助他们区分不同的模式。

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

第 9 步:编程

几乎是焊接和组装的时间,但在此之前我需要对微控制器进行编程。我跟着这个教程

将引导加载程序刻录到 ATmega328P-AU SMD

关于如何使用常规的 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 的每个角的安装孔中拧入四个螺钉。之后,我使用 18 毫米弹簧条连接表带,手表就完成了!

第 12 步:结论和改进

手表按预期工作,我对它的结果感到非常满意。到目前为止,我没有遇到任何问题,并且在使用整整一周后,电池几乎保持充满电。

将来我可能会为手表添加其他功能。由于 USB 端口连接到微控制器,固件可以随时更新新功能。不过现在,我将继续使用这个版本的手表,看看它在长期使用后如何保持。

如果您对此项目有任何想法、意见或问题,请在下方留言。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论 (1)
讨论区
Bellagt ·  2021-10-12
电路城噜咔 ·  2021-10-12

你好,该内容为国外大神开源内容,上文为目前全部内容了~

展开