开源“拆分襟翼”机械显示

2021-04-19 22:13:21

目标是进行低成本显示,'在家里的小/单数量易于制造(例如,可以从PONOKO或类似物品订购定制材料)。

3D模型在3D / SplitFlap.Scad中使用OpenSCAD构建,驱动板在KICAD中设计为Electronics / SplitFlap.pro,并且驱动程序固件使用Arduino / SplitFlap / SplitFlap / SplitFlap / SplitFlap / SplitFlap中使用Arduino(具有平台支持)编写。 ino。

发布已测试并用于生产工作单元,但由于这是一个DIY项目,可能总是有次要问题和/或不完整的文档。

我喜欢听听你的想法和关于这个项目的思想和问题,很乐意纳入您可能进入这些设计的任何反馈!请随时打开GitHub问题,直接给我发电子邮件,伸出推特,并参与开源开发,让'继续聊天和建造!

重要提示:下面链接的文件是实验性的,并已从最新提交中自动生成。它们可能包含未经测试或彻底损坏的变化。除非你积极改变项目,否则不要使用这些,并知道你的'再做。否则,使用最新的稳定版本。

ChainLink基础PCB PCB BOM(对于手动组装)LINKIF您有兴趣构建显示屏,我建议使用其中一个稳定版本。

便宜,广泛可用的28byJ-48步进电机(比NEMA-17电机便宜,而且不需要昂贵的高速步进驱动器)

这是构建分型襟翼显示模块所需的耗材所需的耗材,以获得粗略的整体成本。Many物品具有最小封装尺寸,因此当由于需求而使单位更少,因此每单位价格将更高Tobuy比实际使用更多的物品。

每个部分包括基于构建4个模块的小计,这是一个相对经济的折衷,后行成本和MoQ不再占据成本。

激光切割的外壳/力学可以从PONOKO(高质量,美国)或电池订购。或者你可以自己切割它,如果你有一个能够切割3mm mdf或丙烯酸的激光切割机。

每张卡都需要切成两半,然后用两侧冲压两件。每个显示单元需要每单位40个襟翼或20张卡。 100张牌足以理论上的5个单位,但在实践中有4个,因为错误的错误没有备件。

总计:每单位7.00美元(4个单位)+打孔工具前期9.17美元+很多时间和精力

这些专业的模切襟翼专为该项目而制造(无需手动切割/冲压),并进入白色和哑光黑色。由Bezek Labs LLC出售,因此收益有助于支持该项目的继续发展。

电路板可从Bezek Labs LLC商店少量提供,或者从PCB制造商如SeeedStudio等散装。

总计:每单位6.25美元(4个单位),或低至每单位0.32美元(80股)

总计:每单位5.00美元(电机,传感器元件,电缆)+每4单位$ 14.00(控制器组件)+每显示$ 11.00(最多12个单位)

您可以找到更详细的电子产品&#39的突破;物料清单(BOM)在订购说明中。

您' ll需要最近版本的openscad(例如2015-03),可能需要通过PPA:Sudo Add-APT-Repository PPA:OpenSCAD /版本

通常,诸如外壳侧面或阀芯组件的固体物体由2D基元构建,然后挤出到适当的3D渲染的厚度,而不是使用3D基元。这简化了设计而不会失去表现力;垂直激光切割光束无论如何,允许在Z维度中变化的切口。

请注意,虽然该设计是参数化的,但可以调整许多值,但目前没有错误检查无效参数或参数组合。如果更改任何参数,请注意验证设计。例如,虽然大多数设计将适应变化的Num_modules值,但某些值可能导致一些元素与其他元件相交或者突出超过其预期尺寸。

通过运行3D / scripts / generate_2d.py [-panelize< number>],可以将设计呈现为2D以进行激光切割,以输出到3D / Build / Laser_Parts / Companced.svg。可选的-Panelize参数允许在单个SVG中呈现模块面板,用于散装激光切割。

在内部,设计使用Proinjection_Renderer模块(3D / ProIngnes_Renderer.Scad),该模块将呈现子元素列表呈现,并且根据render_index一次呈现单个子项。它还将材料添加到每个形状中以解释将由激光切除的kerf。

Generate_2d.py脚本通过首先使用它来确定要呈现的子组件数量,然后运行openscad以将每个组件导出到SVG文件。它对SVG输出进行了一些后处​​理(显着添加" mm"到文档尺寸),然后将所有组件组合到单个组合。

一旦生成了组合的文件,您将' ll想要逐渐仔细检查任何由多个相邻件共享的任何冗余切割线,以在切割时节省时间/成本。它们应该自动检测(并在上面的渲染中以红色突出显示),但它不会仔细检查。在Inkscape中,选择"通过节点&#34编辑路径;工具并选择要删除的边缘 - 端点应变为蓝色。然后单击"删除两个非端点节点&#34之间的段;为所有其他冗余切割线重复此操作。

通过运行3D / scripts / generate_gif.py,可以将设计呈现给旋转3D动画GIF(上面看到的),其输出到3D / Build / Animation / Animation.gif

generate_gif.py脚本并行运行多个openscad实例,以使设计从360度到单个PNG帧,然后将其组合成最终的GIF动画。作为构建动画的一部分,Generate_Gif.py通过设置render_enclucherure和render_flaps变量来使设计具有多种配置(不透明机箱,透视机箱,无机箱,无挡板)。

该设计可以呈现为一系列STL文件(模型中使用的一个颜色),以便在基于交互式Web的3D查看器中显示。类似于用于呈现用于激光切割的各个组件的ProIngnes_Renderer,RightSlexporter检测模型中使用的所有颜色,并逐一将其分隔STL文件,以及将每个STL文件映射到其RGB颜色的清单。使用three.js加载STL文件和清单,以在网站上显示使用WebGL的交互式模型。有关出口和三个.JS渲染器的更多详细信息,请参阅此博客文章:OpenSCAD渲染技巧,第3部分:Web查看器。

该项目还包括许多可选的3D印刷设计,以使装配更容易。这些包括:

用于在襟翼的两侧制作销切断时将打孔对准打孔的襟翼

所有这些设计都是参数和可自定义的OpenSCAD。要打印它们,请在OpenSCAD中打开相关文件并使用文件 - >出口 - >导出为STL,使设计作为SliCer的STL文件。

当前推荐的方法是经典的控制器板,它插入Arduino UNO,因为盾牌可以控制多达4个模块。最多2个额外的经典控制器板可以使用带状电缆来链接,总共通过单个Arduino UNO控制的最多12个模块。

对于小型显示器(最多3个模块),您可以跳过自定义控制器板,并使用插入Arduino UNO的货架ULN2003A Drivermodules。这部分记录在Wikibut中可能需要一些额外的滋补来使其工作。帮助通缉:如果您' d喜欢帮助改进这些说明,请在闲置集团中伸出援手,谢谢!

目前正在开发新的设计(ChainLink),这允许通过将Moremodules链接在一起并使用更强大的微控制器(ESP32)来实现更大的显示器。这也增加了WiFi和Blecontrol的可能性,虽然这一是目前在固件中实现的。对于最新的ChainLink系统,加入TheSlack组。

每个模块都需要一个用于启动校准和故障监控的霍尔效应传感器。这可以以不同的方式安装,但推荐的人是使用小型PCB,带有AH3391Q(或类似)的传感器和连接器,该连接器用单个螺钉安装在主机侧,并且可以轻松调整以精确校准。

这些板很小(约16mm x 16 mm),设计可用作镶板PCB,可以是SNapeApart。拼盘配置可配置(请参阅Generate_Panelize_Config.py),并在SeeedStudio进行优化。

经典的驱动板旨在插入像屏蔽等Arduino,并且可以将4个步进电机控制到3个驱动板可以链接在一起,最多12个由单个Arduino控制的模块。控制器的设计可以是在Electronics / Splitflap.pro(kicad 4项目)下发现。现在,一切都是通孔组件而不是SMD,所以它非常易于手工焊接。

驾驶员使用2个MIC5842低侧移位寄存器驱动器,内置瞬态抑制二极管,控制电机,74HC165移位寄存器,以读取4个霍尔效应磁性定位位置传感器。有可选的WS2812B RGB LED可用于指示4个通道中的每一个的状态。

PCB布局是10cm x 5cm,它使得使用低成本PCB制造商生产相当便宜(例如,已查找的Studio)。

ChainLink系统是一种即将到来的经典控制器/驱动器的替代方案,其设计成更容易和更便宜,尤其是由于其简化的BOM和表面安装部件而更高的量。它' s alsodesigned,支持较长的驾驶板链条以控制大型显示器(思考100多个拆分模块)。

这种电子设计仍处于非常积极的开发,而不是推荐,除非您知道您'重新做到了。

每个ChainLink驱动板接受数据和电源,并连接到6个单独的分型襟翼模块。 Chainlinkdriver板可以被链接在一起以构建大显示屏。

ChainLink基板将微控制器(ESP32带有USB,WiFi,BLE功能),COMPRORTOW管理/分发,并将数据发送到链式驱动板。

这目前正在积极发展。它已经过测试并似乎工作,但尚未推荐用于一般使用。尚未使用。

控制每个电路板的6个分型襟翼模块而不是4 - 较少的PCB意味着更低的成本和更少的接线

主要是SMD和所有组件(销钉和电机连接器除外)可在JLCPCB' S零件库中提供Easy SMD / THT组装

Neopixels通过每个模块的换档寄存器驱动的单色LED取代(链条所需的一个数据线,降低电流绘制和3.3V IO友好)

2位环回(输出移位寄存器上的2个备用输出位为2个备用输入)允许控制erto向上和向下验证数据完整性

TPL7407L MOSFET低侧驱动器代替ULN2003A / MIC5842(较低的导通电阻意味着驾驶员中的电压降低=更大的扭矩,较少的浪费,较少的总电流消耗)

模块顺序从左右转到,因为它旨在从模块后面安装和访问

此设计在JLCPCB上进行了优化,为订购组装PCBS自动生成文件,如果您希望自己组装此板,可以查看交互式BOM / PLAIMENT工具

这目前在非常积极的发展中。它是未经测试的,也没有固件。

TTGO T-Display ESP32模块作为控制器,包括USB-C,Color IPS LCD显示器和按钮

12V PSU控制的可选主继电器输出(5V继电器,最多〜500mA线圈电流)未来固件将在启动自检之后对12V PSU电源,如果发生故障,则关闭PSU

5独立监控的12V交换机的通道,用于供电的Chainlink驱动板组(每通道6-8A最大),具体取决于您使用的电机,每个通道都可以电源大约5个CloughLink驱动板,这是30个分流模块

未来固件将在启动自检后对每个频道电源,并在任何故障时关闭频道

灵活的控制器输入功率USB电源从T显示器工作默认工作,尽管建议使用外部电源以用于更大的显示器

如果您在没有主继电器的始终开启12V PSU,则可以使用7-28V螺钉端子从12V安装降压模块并从电路板供电

除非您组装非常大的显示器,否则这不太可能是有用的,但是ChainLink驱动程序测试仪是一个完整的TestbeBeLink驱动板,因为它们由PCBA制造商组装。

这目前在非常积极的发展中。它是未经测试的,也没有固件。

Chainlink驱动器板上的所有连接器的Pogo-PIN - 测试(螺钉端子,传感器销销和电机连接器)

12V开关向电机电源供电到电路板上,采用汽车保险丝和INA219电压/电流监控(基于Chainlink基本通道开关设计)

用Polyfuse保护的电路板的电源分开3.3V电源,应避免在3.3V短路的情况下避免测试仪和#39; S MCU

电机和传感器连接从Pogo-PIN出发出完整的闭环硬件测试

将另一个ChainLink驱动程序(未进行测试)的螺钉终端验证,验证链接输出在电路板上的测试

大型切口允许条形码扫描仪或相机瞄准电路板的底部,以跟踪序列号。

上面的机械和电气设计渲染和链接在最新渲染中自动更新。有关其工作原理的更多详细信息,请参阅此博客文章:使用Travis CI的自动KICAD,OpenSCAD渲染。

通过运行电子设备/脚本/生成_svg.py file.kicad_pcb.this可以将PCB布局呈现为SVG或PNG(上面看)。使用kicad' s python脚本向呈现多个图层到各个svg文件,操纵它们申请颜色和不透明度设置,然后将它们合并到单个SVG。有关其他详细信息,请参阅此博客文章:脚本kicad pcbnnew导出。

用于查看设计,可以通过运行电子/脚本/生成_pdf.py file.kicad_pcb来生成带铜,丝网屏,钻孔信息的PDF数据包。

Gerber文件用于制造,可以通过运行电子设备/脚本/ generate_gerber.py file.kicad_pcb.this生成gerber文件和exculton钻取文件,其中包含的studio'命名约定,并生成可以发送的.zip。

Eeschema' t易于编写脚本,因此导出原理图和材料账单电子/脚本/ export_schematic.py和export_bom.py启动x虚拟帧缓冲区(xvfb)并在该虚拟显示中打开Eeschema GUI,然后打开Eeschema GUI通过XDOTOOL发送一系列硬编码键按压,以与GUI进行交互,然后单击对话框。这是非常脆弱的,但现在似乎正常工作。有关其他详细信息,请参阅此博客文章:使用UI自动化导出KICAD原理图。

固件实现一个闭环控制器,该控制器接受字母为USB串口的输入,并使用预先计算的加速斜坡驱动步进电机,以便平稳控制。使用霍尔效应磁传感器,固件自动校准启动时的阀芯位置,如果它检测到阀芯位置已经退出了Sync,则会自动重新校准本身。如果预计指挥的旋转会带来"家庭"位置,它将确认传感器既没有太早触发,也不太晚;否则它将搜索"家庭"在继续到所需的信件之前,职位进入同步。

显示屏可以通过连接到Arduino的计算机通过USB串行来控制。用于与Arduino接口的基本Python库和显示随机单词的演示应用程序可以在软件目录中找到。

显示显示的命令以基本的纯文本格式发送,并且来自显示器的消息是单行JSON对象,始终使用类型条目,描述它是哪种类型的消息。

显示屏将自动校准所有模块,并且完成时,它将发送状态更新消息:

{"类型":"状态""模块":[{"状态":"正常"&#34 ;,&# 34;襟翼":" &#34 ;," count_missed_home":0," count_unexpected_home":0},{"状态":" sensor_error&#34 ;,&#34 ;襟翼":" e"" count_missed_home":0," count_unexpected_home":0},{"州":&# 34; Sensor_Error&#34 ;,"襟翼":" e"" count_missed_home":0," count_unexpected_home":0},{& #34;州":" sensor_error&#34 ;,"翻拍":" e&#34 ;," count_missed_home":0," count_unexpected_home":0}]}

(注意:这是作为单行发送的,但已在上面的可读性重新格式化)

在这种情况下,Arduino被编程为支持4个模块,但只连接了1个模块,所以其他3最终" Sensor_Error"状态。更多关于下面的状态更新。

此时,您可以命令显示屏显示一些字母。为此,请向arduino发送消息,如下所示:

=表示移动命令,然后是任意数量的字母,后跟换行符。你不必发送确切数量的模块 - 如果你发送的字母比模块更少,那么只有第一个n个模块将被更新,其余的返回' t移动。例如,您可以将= a \ n发送= a \ n,以仅设置第一模块(即使有12个模块连接)。任何可以显示的字母都被视为该模块的一个no-op。

每当所有模块都停止时,Arduino将发送状态更新消息(就像初始化之后的那样,如上所示)。这里'每个模块中的字段意味着什么' s状态条目:

状态 - 正常表示它和#39; s' sensor_error指示模块可以' t找到原始位置并已放弃尝试(直到被告知要重新校准,它将不再响应移动命令 - 见下文)。恐慌表示固件检测到一个编程错误并进入故障安全模式(它将不再响应移动命令,并且需要完全重置Arduino以恢复 - 永远不会发生)。

count_missed_home - 模块预期通过原始位置但无法检测到它的次数。如果这是非零,则它表示片状传感器或电机可能会卡住。当模块都会自动尝试重新校准,只要它错过原始位置,所以如果此数字是非零,并且模块仍处于正常状态,则表示从问题中成功恢复模块。但是,如果该号码继续持续使用,则可能表明认证调查的经常性瞬态问题。

count_unexpected_home - 模块在&#39所在时检测到主位置的次数。这是罕见的,但会表示在错误的时间绊倒的片状/破碎传感器。就像错过的家庭错误一样,意外的家里

......