作为一名即将毕业的电气工程师,我想为毕业做一些特别的事情。开派对或做一些有趣的事情通常不是我的首选,所以我决定开始一个项目。这不仅仅是任何项目。这将是一个带 LED 的毕业帽!
现在,这个前提有点蹩脚。任何人都可以在毕业帽上添加 LED 以显示漂亮的颜色或图案。考虑到这一点,我决定帽子需要是一个能够显示图像和文本的 LED 矩阵。虽然这已经是一个很酷的项目,但需要在项目中添加另一层。一些混乱和辛辣的东西。所以,就像互联网上的其他人一样,我转向社交媒体寻求想法,你瞧,我有完美的混乱元素要添加!
然后决定人们应该能够在我的毕业帽上播放信息。这些消息可以很容易地从一些社交媒体网站上抓取,并且帽子会自动检索、格式化,然后在毕业典礼期间实时显示这些消息。最后,人们可以说出他们在毕业时的真实感受,并将其显示在一个小小的毕业帽上,让少数人看到。
对该项目的要求相当简单。我希望帽子完全独立工作,不受我的监督。这意味着帽子必须检索和显示消息,而无需我检查社交媒体或担心帽子的内容。
为了使其易于使用,我希望系统能够使用我裤子口袋中的 5 伏电池组。使用 28500mAh 电池组为设备供电,我不太关心电源效率,但我想将系统设计为不浪费电力,以便系统无需充电即可运行整整 8 小时。
最后,我不想在这方面花太多钱,因为我是一个贫穷的大学生,有一张花哨/昂贵的纸,还买不起好东西。这意味着我不能使用花哨的 LED 矩阵解决方案,而是选择将整个项目保持在 50 美元以下。
对于那些从未见过的人来说,毕业帽是一个黑色方形头饰,尺寸为 9.5 英寸 X 9.5 英寸。我为毕业买的帽子用一块纸板形成方形底座,一块黑布覆盖并固定在纸板方形上。然后将另一块布材料固定在纸板底座上,这次是在帽子下面,这样帽子就可以贴合并留在头上。
通常,这些头饰上饰有油漆或可以固定在帽子上的东西。在我的情况下,我需要将盖子剥离到底座纸板上,添加 LED,然后更换顶部的黑布并重新组装盖子。为了使整个过程更容易,可寻址 LED 灯条将用于创建 LED 矩阵和微控制器,在帽的中心下方,将连接以控制帽的功能。
在购买了 16 英尺的 WS2812B LED 灯条后,我将灯条切割成每条 14 个 LED 的长度。这个长度是通过尝试将尽可能多的 LED 排成一排来决定的,同时在两侧留出空间用于布线。
切割 14 条 LED 灯条后,我标记了灯罩,以指示灯罩两侧每个 LED 灯条的中心点。这使所有 LED 灯条彼此平行,提供了美观且均匀的显示效果。
现在开始将所有 LED 连接焊接在一起。为了使焊接更容易,我连接了 LED 灯条,使接线在灯条之间曲折,这意味着我必须在编程中每隔一行反转一次,但这降低了电线电阻并使焊接变得轻而易举。
此时,我使用产品随附的 LED 灯控制器测试了生成的矩阵。连接好所有东西后,我运行了一个基本例程,在 LED 灯串上显示不同的颜色。该测试成功运行,点亮了我固定在纸板上的每个 LED 段。
现在一切正常,是时候看看重新装上黑布后帽子会是什么样子了。在这一点上,我担心 LED 不能很好地透过黑色织物发光。在将织物放置到位的帽子上运行相同的测试程序后,这种担心被证明是没有根据的。如果有的话,LED 太亮了,并且在全亮度下消耗大约 2.5 安培,开始变热,我担心它会开始融化一些东西。
随着项目的所有机械部件工作正常,我用胶带和热胶重新连接了布套,然后开始研究控制电子设备。
为了控制 WS2812B LED 灯条,使用 5V 数据线通过单线控制接口传输数据。LED 灯条需要 5V 和 GND 连接,使用的电线/电路可以处理最大 3 安培的电流(最好是越过然后越过)。这些条带的电源直接来自用于为项目供电的 5V 电池组。
ESP32 被选为这个项目的主要微控制器,因为我想要一个可以轻松连接到 Internet 网络的设备。由于 ESP 内置了 Wi-Fi 收发器,因此它是用于该项目的理想芯片。ESP 使用 3.3V 电源并输出 3.3V 逻辑电平,因此我需要确保 LED 可以使用 3.3V 逻辑。数据表显示逻辑高阈值为 3.5V,但经过测试,证明这些 LED 可以与 3.3V 逻辑一起使用。理想情况下,应该使用电平转换器将 3.3V 逻辑转换为 5V,但这是不必要的,因为这是一个不需要 100% 可靠的 DIY 爱好项目(尽管我仍然尝试满足该可靠性指标)。
这导致了如下所示的电路。AMS1117-3.3V 芯片用于创建一个干净(尽管效率低下)的 3.3V 电源,并且各种引脚连接到公水平连接器。
为了把所有东西都装进一个小而薄的包装中,我将组件布置在一个 1.5 英寸 x 2 英寸的电路板上。使用了粗迹线和通孔,因此我可以轻松地在我的 CNC 机器上制造电路板,并注意确保所有迹线都能处理所需的最大电流值。
然后必须组装和焊接电路板。由于第一次电路板迭代中的错误,图中的 PCB 与上图所示的成品 PCB 不匹配。成品板和盖子如下所示:
该项目中使用的所有部件都包含在以下 BOM 中。总体而言,该项目的成本为 30.70 美元,不包括 5V 电池电源或毕业帽。
对 ESP32 进行编程允许在该项目中使用多种编程语言。为了简化字符串数据的处理,我选择了 Micropython 固件语言来完成我的所有开发工作。虽然 C 和 Lua 可以更有效地处理内存和程序操作,但软件效率并不是最重要的。相反,我想确保连接到互联网很简单,并且我想在不使用 SD 卡接口的情况下将数据记录到设备上。Micropython 请求库允许轻松的 HTTPS 连接,python 具有动态内存分配的优势,允许 HTTPS 请求具有不同的有效负载大小,而不会过度分配 RAM。最后,Micropython 文件系统允许直接在闪存中创建和修改文件,
第一个挑战是用自定义图像点亮 LED 矩阵。为此,我修改了在 Internet 上找到的 WS2812B Micropython 模块,并添加了一个“ display_sprite() ”函数来生成一个 196 索引数组,该数组将传递给 WS2812B 模块。这具有显示填充了颜色值的 14x14 数组中的图像的结果。因为我在 LED 灯条中使用了锯齿形布线模式,所以我必须每隔一行反转一次才能准确显示图像。如果没有这种反转,精灵本身将需要每隔一行反转,这使得格式化/精灵创建更加困难,因此只要程序为 WS2812B 模块生成数组,就会处理反转。下图中可以看到其中一个精灵:
第二个挑战是在 LED 矩阵上创建滚动文本。我在 WS2812B 模块中或通过 Internet 上的模块无法找到任何功能来显示文本,因此我不得不创建自己的功能。这涉及创建我自己的 6x3 和 7x4 像素字体模块(使用我在网上找到的像素字体,我没那么有创意)以及将像素向左移动一位的缓冲协议,从而创建滚动文本效果。矩阵被分成 7x14 像素的部分,因此滚动文本可以从下半部分开始,并在滚动到屏幕外之前继续滚动到上半部分。为了正确开发此功能,我在一个数组中创建了 14 个二进制数,并使用位移和一些 if-else 逻辑来有效地在显示器上滚动文本。
该项目的最大挑战是将微控制器连接到社交媒体。我没有让任何人通过 Twitter 或 Facebook 等平台发布消息,而是决定使用我大学内大多数本科电气工程师用来相互交流的 Discord 频道。这样做的好处是限制了人们发布信息的能力,防止随机喷子到处投掷炸弹,同时还允许那些将在开始时参与的人。
为了让这个功能发挥作用,我必须创建一个 Discord 机器人,它可以访问 Discord API 以从 Discord 组的“General”频道获取消息。该机器人能够通过分配给机器人的特殊令牌访问 API,该令牌用于授权机器人具有正确的凭据。向 Discord API 发出 HTTPS GET 请求,使用授权令牌作为标头字段,并发回消息的 JSON 响应。然后程序遍历所有接收到的消息,寻找与机器人的 Discord ID 对应的整数代码。如果在消息中找到 ID,表明提到了机器人(“@GradCapBot”),则消息将保存到局部变量中,程序将完成对所有消息的检查。
现在程序有一些消息要显示,程序格式化它将显示的文本,然后以新文本作为参数调用“ display_7x4_text()” 。程序继续显示所有消息,直到显示所有消息。此过程循环运行,因此程序始终在寻找要显示的新消息。如果没有要显示的新消息,我不希望帽子闲置而没有显示任何内容。因此,如果没有要显示的新消息,程序会显示编程到闪存中的 10 个图像之一。然后每个图像显示 5 秒钟,然后程序再次检查新消息。
创建了一个基本的文本过滤器来过滤掉 75 个“坏词”,尽管这个列表不是很全面。过滤掉明显的脏话和诽谤就足够了,所以我不会表现出完全令人反感的东西。虽然这个过滤器可能很容易绕过,但我还包括一个将消息详细信息保存到闪存中的功能,这样我就可以查看显示的消息文本以及发送消息的人。
当 ESP32 连接到串口监视器时,可以通过 REPL 提示符控制程序。使用“串行 USB 终端”Android 应用程序,我的手机可以充当串行监视器,直接与 ESP32 接口,只需按一下按钮即可运行一些预编程的功能。此方法还允许我显示非格式化文本或显示特定精灵。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !