这是一款基于 ESP32 的 DIY 分瓣式显示器,经过优化,可轻松在家中小批量组装,但能够扩展到价格实惠的大型显示器。
最新自动生成(未经测试!)的工件
说明:v2 组装指南
模块尺寸:
最新自动生成(未经测试!)的工件
笔记
对于小型显示器(最多 3 个模块),您可以跳过自定义控制器板并使用插入 Arduino Uno 的现成 ULN2003A 驱动程序模块。这在 wiki 中有部分记录,但可能需要一些额外的修改才能使其正常工作。需要帮助:如果您想帮助改进这些说明,请在 Discord 服务器中联系,谢谢!
“Chainlink”电子系统旨在支持长链驱动板,以控制中型/大型显示器(最多 100 个以上分瓣模块)。由于其简单的 BOM 和表面贴装组件,它的设计还可以轻松且廉价地订购预组装或自行组装,尤其是大批量生产。
要构建显示器,您需要 3 种不同的电子设备:
每个模块都需要一个霍尔效应传感器来进行启动校准和故障监控。
v0.7 的旧传感器和旧激光切割硬件可以在标记的传感器版本中找到。
这些较旧的传感器与 v2 激光切割硬件不兼容。
适用于 v2 激光切割硬件的新传感器 - 这些传感器使用表面贴装元件,并针对 JLCPCB 的 PCB 组装进行了优化。这些新传感器与 v0.7 和较旧的激光切割硬件不兼容。
6 个传感器套装大部分在 Bezek Labs 商店中组装,并配有您需要的直角排针和磁铁。采购支持该项目的持续开发。
最新自动生成(未经测试!)的工件
主要特点:
Chainlink 驱动板大部分在 Bezek Labs 商店中组装,并配有您需要的附加连接器和带状电缆。采购支持该项目的持续开发。
有关构建和使用 Chainlink 驱动程序的更多信息,请参阅 Chainlink 驱动程序用户指南。
或者,如果您想直接从晶圆厂订购这些产品,该设计针对在 JLCPCB 进行组装进行了优化,并且会自动生成用于订购组装PCB 的文件。或者,如果您想自己组装该板而不是支付组装费用,您可以查看交互式 BOM/布局工具
根据 JLCPCB 的可用库存,您可能需要手动修改 BOM 文件以使用替代组件,或者使用export_jlcpcb.py
自行重新生成文件并指定一个或多个LCSC_ALT_*
字段名称以使用预选的替代部件编号。请参阅示意图以了解可用的预选替代方案(检查符号的属性/字段)。
最新自动生成(未经测试!)的工件
Chainlink Buddy [T-Display] 是将 T-Display ESP32 板(推荐的微控制器)连接到 Chainlink 驱动程序链的便捷方式。
主要特点:
Chainlink Buddy [T-Display] 板可在 Bezek Labs 商店购买,并附带您需要的其他连接器。采购支持该项目的持续开发。
最新自动生成(未经测试!)的工件
Chainlink Buddy [面包板] 可以轻松地将 Chainlink 驱动程序连接到面包板以进行原型设计。您可以使用 5 根杜邦线并有一个凌乱的老鼠巢,或者您可以使用单根带状电缆和这个光滑的分线板。
Chainlink Buddy [面包板] 板可在 Bezek Labs 商店购买,并附带您需要的其他连接器。采购支持该项目的持续开发。
最新自动生成(未经测试!)的工件
对于较大的显示器,您应该格外小心,以使硬件对潜在故障更加稳健。 Chainlink Base 是一种实验性(但不受支持)控制器设计,添加了一些附加功能。这已经过测试并且似乎可以工作,但不建议一般使用。
Chainlink Base PCB 是 Chainlink Buddy 的可选替代品,专为特别大的显示器而设计。它托管 ESP32,并添加了额外的连接选项(UART 和 RS485 串行终端)和配电(驱动板多个“区域”的独立监控电源通道)。
主要特点:
最新自动生成(未经测试!)的工件
经典驱动板已弃用且不受支持。
Classic 控制器板设计为像扩展板一样插入 Arduino,并且可以控制 4 个步进电机。最多 3 个驱动板可以链接在一起,由单个 Arduino 控制最多 12 个模块。
该驱动器使用 2 个 MIC5842 低侧移位寄存器驱动器(内置瞬态抑制二极管)来控制电机,并使用 74HC165 移位寄存器来读取 4 个霍尔效应磁性原位传感器的数据。有可选的 WS2812B RGB LED,可用于指示 4 个通道中每个通道的状态。
如果您想打印自己的襟翼,或切割自定义乙烯基字母贴纸,该项目包含一个脚本来生成高度可配置的矢量设计文件:
TODO:完成记录并渲染一些示例图像......
如果您想在多个模块之间共享一个正面(而不是每个模块都有自己的正面),该存储库包含一个脚本来生成用于激光切割或 CNC 铣削/铣削的组合前面板。
您可以修改:
对于 CNC 切割,该脚本支持渲染针对较厚材料(例如 6mm MDF)优化的矢量文件,其中只有螺栓孔将被贯穿切割。在此模式下,顶部/底部外壳部件的插槽可以切割为约 4 毫米的口袋,因此从正面看不到它们。该脚本会自动为这些口袋切口生成狗骨形状。
TODO:完成记录并渲染一些示例图像......
该项目还包括许多可选的 3D 打印设计,以使组装更容易。这些包括:
所有这些设计都是参数化的,并且可以在 OpenSCAD 中进行定制。要打印它们,请在 OpenSCAD 中打开相关文件,然后使用File -> Export -> Export as STL
将设计渲染为切片器的 STL 文件。
除非您计划制造数十到数百个 Chainlink 驱动器板,否则这不太可能有用,但 Chainlink 驱动器测试仪是 Chainlink 驱动器板的完整测试台,因为它们是由 PCBA 制造商组装的。
目前该项目正在积极开发中。
主要特点:
最新自动生成(未经测试!)的工件
驱动程序固件是使用 PlatformIO 和 Arduino 框架编写的,可从firmware/
获取。
该固件实现了一个闭环控制器,该控制器接受通过 USB 串行输入的字母,并使用预先计算的加速斜坡驱动步进电机以实现平稳控制。固件会在启动时使用霍尔效应磁性传感器自动校准阀芯位置,并且如果检测到阀芯位置不同步,则会自动重新校准。如果预计命令旋转将使阀芯越过“原位”位置,则它将确认传感器触发既不太早也不太晚;否则,它将搜索“起始”位置以保持同步,然后再继续查找所需的字母。
为了让计算机与 splitflap 进行通信,它显示为 USB 串行设备。
但是,严格禁止使用 Arduino 的Serial
,而是提供了logger
抽象来发送基本文本调试日志。其他数据以结构化方式传输,如下所述。
这使得通过串行传输的数据格式具有灵活性,事实上 splitflap 提供了 2 种不同的串行模式,用于不同的目的。
默认情况下,它以“纯文本”模式启动,这是开发人员友好的,如果您打开了连接 splitflap 的串行监视器,您可能会熟悉:
{"type":"init", "num_modules":6}
然而,这对于以编程方式配置或从 splitflap 接收更新来说并不是很好,因此固件提供了一个使用基于 Google 的 Protobuf 标准的二进制协议的编程接口。
基于 protobuf 的二进制串行模式是一种紧凑而灵活的方式,可将结构化数据从主机传输到 splitflap,反之亦然。
与 JSON 等其他编码机制相比,protobuf 具有多种优势:
这就是 splitflap 默认为纯文本模式的原因,以使基本验证/调试更容易。
Protobuf 消息被编码为其二进制有线格式并附加 CRC32 校验和。然后,整个二进制字符串被 COBS 编码到数据包中,并在通过串行发送时由 0 (NULL) 字节分隔/成帧。这提供了带有完整性检查的基于数据包的基本接口(而不是串行连接的原始的、基于流的接口)。
splitflap 在收到 0 字节时自动切换到二进制 protobuf 模式。
显示器可以由通过 USB 串口连接到 ESP32 的计算机控制。如果您已经构建了显示器并想要对其进行测试,请查看此处基于网络的演示,它将使用 USB 连接到您的显示器 - 无需应用程序/安装!
该固件支持明文串行模式(默认启用)以方便测试,以及软件库使用的基于 protobuf 的二进制模式以增强编程控制和反馈。
您可以在software/chainlink
文件夹中找到示例 Typescript 和 Python 库。
希望在本地计算机上进行一些修改或尝试该设计?直接跳进去!请注意,所有脚本和自动化都是为 Ubuntu 开发的。 Mac OS 支持已计划,但目前尚未实现(但如果您想提供帮助,请随时打开 PR!)。
主要设计文件是3d/splitflap.scad
您需要最新版本的 OpenSCAD(例如 2015-03),可能需要通过 PPA 安装: sudo add-apt-repository ppa:openscad/releases
一般来说,实体对象(例如外壳侧面或线轴组件)是根据 2D 图元构建的,然后挤压到适当的厚度以进行 3D 渲染,而不是使用 3D 图元。这样既简化了设计又不失表现力;无论如何,垂直激光切割光束不允许 Z 维度上发生变化的切割。
请注意,虽然设计是参数化的并且可以调整许多值,但目前没有对无效参数或参数组合进行错误检查。如果更改任何参数,请注意验证设计。例如,虽然大多数设计将调整为更改后的num_modules
值,但某些值可能会导致某些元素与其他元素相交或突出超出其预期尺寸。
通过运行3d/scripts/generate_2d.py [--panelize <number>]
可以将设计渲染为 2d 以进行激光切割,该命令输出为3d/build/laser_parts/combined.svg
。可选的--panelize
参数允许在单个 SVG 中渲染模块面板,以进行批量激光切割。
在内部,该设计使用projection_renderer
模块( 3d/projection_renderer.scad
),该模块采用子元素列表进行渲染,并根据render_index
一次渲染一个子元素。它还向每个形状添加材料,以解决将被激光切除的切口。
generate_2d.py
脚本与projection_renderer
模块进行交互,首先使用它来确定要渲染的子组件的数量,然后运行OpenSCAD 将每个组件导出到SVG 文件。它对 SVG 输出进行一些后处理(特别是在文档尺寸中添加“mm”),然后将所有组件合并到单个combined.svg
输出中。
生成combined.svg
文件后,您需要仔细检查是否存在由多个相邻部件共享的任何冗余切割线,以节省切割时的时间/成本。它们应该被自动检测到(并在上面的渲染中以红色突出显示),但仔细检查也没什么坏处。在 Inkscape 中,选择“按节点编辑路径”工具并选择要删除的边 - 端点应变为蓝色。然后单击“删除两个非端点节点之间的线段”,并对所有其他冗余切割线重复此操作。
通过运行3d/scripts/generate_gif.py
可以将设计渲染为旋转的 3D 动画 gif(如上所示),该文件输出为3d/build/animation/animation.gif
generate_gif.py
脚本并行运行多个 OpenSCAD 实例,将设计从 360 度渲染到各个 png 帧,然后组合成最终的 gif 动画。作为构建动画的一部分, generate_gif.py
通过设置render_enclosure
和render_flaps
变量,以多种配置(不透明外壳、透明外壳、无外壳和无襟翼)渲染设计。
该设计可以渲染为一系列 STL 文件(模型中使用的每种颜色一个),以便在基于 Web 的交互式 3D 查看器中显示。与用于渲染激光切割各个组件的projection_renderer
类似,ColoredStlExporter检测模型中使用的所有颜色并将它们一一渲染为单独的STL文件,以及将每个STL文件映射到其RGB颜色的清单。使用 Three.js 加载 STL 文件和清单,以使用 WebGL 在网站上显示交互式模型。有关导出和 Three.js 渲染器如何工作的更多详细信息,请参阅此博客文章:OpenSCAD 渲染技巧,第 3 部分:Web 查看器。
所有电子产品均使用 KiCad 5 开发。面板化由 KiKit 提供,gerber/BOM 生成由 KiBot 提供。
上面的机械和电气设计渲染图和链接会在每次提交时自动更新为最新渲染图。有关其工作原理的更多详细信息,请参阅此博客文章:使用 Travis CI 进行自动化 KiCad、OpenSCAD 渲染。
通过运行electronics/scripts/generate_svg.py file.kicad_pcb
,可以将 PCB 布局渲染为 svg 或 png(如上所示)。它使用 KiCad 的 Python 脚本 API 将多个图层渲染到各个 svg 文件,操作它们以应用颜色和不透明度设置,然后将它们合并到单个 svg。有关更多详细信息,请参阅此博客文章:编写 KiCad Pcbnew 导出脚本。
为了审查设计,可以通过运行electronics/scripts/generate_pdf.py file.kicad_pcb
生成包含铜、丝网印刷和钻孔信息的 pdf 数据包。
可以通过运行electronics/scripts/generate_gerber.py file.kicad_pcb
导出用于制造的 Gerber 文件。这会生成具有 Seeed Studio 命名约定的 gerber 文件和 Excellon 钻孔文件,并生成可发送用于制造的.zip
文件。
EESchema 不容易编写脚本,因此要导出原理图electronics/scripts/export_schematic.py
启动 X 虚拟帧缓冲区 (Xvfb) 并在该虚拟显示器中打开eeschema
GUI,然后通过xdotool
发送一系列硬编码按键与 GUI 交互并单击对话框。这是非常脆弱的,但目前看来工作正常。有关更多详细信息,请参阅此博客文章:使用 UI 自动化导出 KiCad 原理图。
我很想听听您对这个项目的想法和问题,并很乐意将您可能有的任何反馈纳入这些设计中!请随意(并鼓励)打开 GitHub 问题、直接给我发电子邮件、在 Twitter 上联系、参与开源开发,让我们继续聊天和共同构建!
该项目已获得 Apache v2 许可(请参阅 LICENSE.txt)。
Copyright 2015-2024 Scott Bezek and the splitflap contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.