当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]游戏很简单。有三个鼓,分别是红色、绿色和蓝色。其中任意一个会随机被激活,地上的灯光会朝它移动,并持续动画显示最多4秒。玩家有这段时间来击打这个鼓,但停留的时间越长,下一位玩家获得的时间就越少。如果某位玩家未能及时击打,就会播放失败音效,游戏重新开始。如果成功击打,就会播放“成功”音效,然后由另一个鼓(或可能是同一个鼓)继续轮到下一个玩家。

这款互动游戏和艺术作品部分灵感来源于看到孩子们在玩我另一件互动作品时的快乐,也部分源于发现了一套损坏的摇滚乐队鼓。

游戏很简单。有三个鼓,分别是红色、绿色和蓝色。其中任意一个会随机被激活,地上的灯光会朝它移动,并持续动画显示最多4秒。玩家有这段时间来击打这个鼓,但停留的时间越长,下一位玩家获得的时间就越少。如果某位玩家未能及时击打,就会播放失败音效,游戏重新开始。如果成功击打,就会播放“成功”音效,然后由另一个鼓(或可能是同一个鼓)继续轮到下一个玩家。

没有计分,也没有游戏时间限制。它旨在为所有观看者带来视觉上的享受,无论玩家的节奏快慢如何,都能获得回报。虽然设计初衷是作为团体活动,但在测试过程中我发现,独自游玩也能带来乐趣。

如果你想了解我所创作的内容,这里就有。本页面底部有一段带有声音的项目运行视频。

针对一些显而易见的问题……

问:为什么戴帽子?

答:为什么不呢?

问:为什么穿实验服?

答:因为是科学!

设计概览

这个构建项目是我迄今为止在Hackster上记录的最复杂的项目,而且与以往不同的是,它并不是一个我会看到别人完全复制的项目。所有带注释和文档的源代码都包含在此处,本节可作为一套构建说明使用,但我将尽量保持内容简洁易懂,避免深入细节。如果今后需要更多信息,欢迎随时联系我。

该项目分为两个部分。核心控制系统由一块搭载DMX控制器的树莓派5、蓝牙扬声器系统以及用于管理通信的ESP8266微控制器组成。此外,还有每台鼓机,均由ESP8266微控制器驱动运行。

游戏的控制由树莓派集中管理,但由于每轮游戏的时间安排至关重要,因此每个活跃鼓组都本地进行控制。一个随机的鼓会收到启动指令,并以设定的速度开始运行,随后该鼓接管游戏并返回结果。如果通信鼓出现故障,系统会设置超时机制,但在正常运行中并不需要此功能。

通信

为了避免电线在房间内乱缠,造成绊倒隐患,我决定采用无线通信。虽然有多种选择,但为了简化操作,我选择了ESP-Now,这是一种内置在ESP微控制器中的基于数据包的无线协议。

虽然无线通信存在一些潜在问题,但对本项目而言已完全足够。不过,对于更复杂的安装,我建议采用有线连接方案。代码已为此考虑编写,并可根据需要通过RS-485或CAN进行保护。此外,需要注意的是,该实现方案并未包含任何加密或身份验证功能。

空中数据报的完整结构在鼓的固件源代码第66行处有详细说明,但在此我将进行简要总结。数据包开头包含一个头部信息,以便我们能识别出哪些是我们的数据,哪些来自使用相同通道的其他项目。接着是发送方和接收方字段,用于确定数据包的来源及目的地。此外,还有一个速度标志位,用于指定下次操作的目标速度,以及一个命中字段,供鼓向中央控制器报告播放器是否成功在同一时间击中了鼓。

鼓组 - 硬件

如前所述,这些鼓是来自一款旧的摇滚乐队游戏的复制品,但实际上它们只是底部粘有压电换能器的橡胶圆盘。当你敲击它们时,会产生一个微小的电压,微控制器可以检测到。你可以看到我用各种木头和管道碎片制作的外壳,但你很可能没有相同的材料,因此我的建议是不要复制我的设计,而是以它为灵感,做出更好的作品。

至于电子部分,这是你可以轻松复现的,直接使用我的固件即可。你可以选择使用电路图,或者按照这些制作说明和图片进行组装。

首先你需要一个微控制器模块、一个降压转换器、一根12V LED灯带和一个电池连接器。我使用鳄鱼夹来连接电池,你也可以用5V LED灯带和5V电源,但我选择12V,因为大多数LED霓虹灯带的电压都是12V。

接下来,我们需要将降压转换器的输出电压设置为5V(±0.5V)。现在可以按照照片所示进行组装。如果希望从原理图开始操作,记得该原理图也已列在清单中;引脚分配也在代码中有所说明。

LED霓虹灯带的焊接比大多数LED灯带稍有难度,我确实犯过几个错误。因此,建议你在焊接后对电线进行裁剪。此外,我建议先将灯带按需要的位置预弯好,再进行裁剪,以避免剪出错误长度,从而清楚知道两端的连接点。另一个小技巧是,在灯带底部剪一个固定口,这能大大帮助在安装后更好地布置电线。

The Drums - 固件

固件已附带,并主要通过注释进行说明。它是一个非阻塞循环,利用反应时间来判断当前发生的情况,可将其视为一种基于时间的状态机。

当中央控制器想要将控制权交给鼓并开始演奏时,会发送一条消息。该消息设定起始时间,并存储用于运行此轮的转速。动画将根据从起始时间以来的持续时间继续进行;如果超过指定时间,系统会向中央控制器发送失败消息以继续游戏。如果玩家在该时刻击打鼓,系统会返回成功消息;若在其他时间击打鼓,则仅发送一个播放音效的消息,不作其他处理。

您只需配置三个正在使用的鼓的MAC地址即可。上传软件后,如果尚未知道MAC地址,系统会将新模块的MAC地址发送到串行端口。

中央控制器 - 硬件

这就像一个树莓派一样基础,通过USB端口连接了一个USB DMX控制器和一个ESP8266。在我的搭建中,我下载并打印了树莓派和ESP8266的保护壳。此外还有一个DMX灯,我将在下面详细说明。这里没有任何复杂之处,只需将所有设备连接起来即可。

中央控制器 - 软件

树莓派运行的是 Raspberry Pi OS,Python 3 已默认安装。我建议使用 Thonny 来快速上手,如果你已经超越了这个阶段,那么你可能不需要我的帮助。Q Light Controller Plus(QLC+)也需要安装,但相关内容我将在下文详细说明。

源代码通过注释在代码中进行了说明,因此我这里仅提供一个高层次的概览。设置完成后,软件会选择一个鼓的颜色,然后发送一个UDP数据包来控制DMX灯光,并向ESP6266网关发送消息,将控制权交给选定的鼓(调用startRandomGame())。接着进入循环,等待来自各鼓的响应,当听到声音时播放相应音效,当条件合适时退出循环(调用readGameResponce())。

在Python代码中,您可能需要修改的唯一设置是GATEWAY_PORT(第16行),如果您电脑上还有其他串口设备。根据您使用的DMX控制器,这个设置可能会显示为一个。如果ttyUSB0无法使用,请尝试ttyUSB1。

中央控制器 - 网关固件

由于我们使用的是ESP-Now而非Wi-Fi,因此需要借助ESP微控制器作为桥梁/网关。我采用的方案是保持简单:网关固件仅监听串口上的消息并将其通过ESP-Now发送出去,而通过空中接收到的任何数据则会回传到串口。所有与消息相关的处理均在Python代码中完成。

值得注意的是,基于ESP8266的微控制器模块性能出色,但有时也存在一些限制。其中一个问题是,我们需要检测鼓声击打时的模拟信号读取,这会同时影响无线通信。我对此的解决方法是仅在每6毫秒时采样一次模拟输入。这意味着我们不会错过任何输入信号,因为所有脉冲都比这个时间长;但可能会错过无线消息。为了简化处理,我直接在8毫秒内向鼓发送三次消息。这样即使在最坏的情况下,也能至少接收到其中一条消息。

中央控制器 - 音效

由于版权原因,我无法在此处分发音效,您可能需要使用自己的音效,但我所使用的音效均可从Pixabay免费获取。直接链接为:背景、击中、成功和失败。

这些声音使用 PyGame 库播放。背景音无限循环,其他声音则由鼓声消息触发。

你可能会注意到,我在 Python 代码的第 123 行捕获了 KeyboardInterrupt 异常。这样当按下 Ctrl+C 时,我就能关闭 DMX 灯光并停止背景音效。这是个巧妙的设计,能在开发过程中保护我的理智,因为如果没有这个机制,程序中断后声音会继续播放。

中央控制器 - DMX

使用DMX灯光追踪下一个鼓点对游戏体验并非必需,但算是个不错的附加功能。我这次的时机很幸运,所用的设备是35英镑翻新过的二手货,不过全新购买的价格也低于120英镑。

由于DMX控制器种类繁多,且已有多种软件解决方案可驱动它们,我决定使用免费开源的Q Light Controller Plus(QLC+)来实现硬件接口。我的代码根据Art-Net协议向QLC+发送UDP数据包。

安装很简单。从树莓派终端运行……

然后从菜单中启动 Q Light Controller Plus。

接下来我们需要设置一些数值,以便控制器知道灯光应朝向何处。为此,从窗口底部的选项卡中选择“简易桌面”标签,然后移动滑块,直到灯光指向红色鼓的正确方向、颜色正确且亮度合适。不同调光器的作用取决于所使用的DMX灯光及其工作模式,但这些信息会在灯光设备的说明书中有详细说明。当灯光显示正常后,请记录下当前设置,并重复操作蓝色和绿色鼓。

现在在与Python程序相同的目录下创建一个名为dmxvals.csv的文件。这个以逗号分隔的文件需要四行内容:第一行是当前未使用的默认位置,因此将其设为“0”即可;接着是红、绿、蓝三色的设置值。请记得填写所有数值,包括中间可能未使用的数值,但任何尾部多余的数值都会自动被设为0,因此无需额外填充。

现在在 QLC+ 中,选择“输入/输出”选项卡,将输入设置为“ArtNet 1:127.0.0.1”,输出设置为“DMX USB 1:FT232R”(如果使用其他 DMX 控制器,请使用对应的名称)。这意味着我们从 Python 代码发送的任何命令都会被映射到 DMX 硬件上。

如果你仔细查看源代码,我使用的是IP6目标地址(“::1”),而不是IP4地址(“127.0.0.1”)。这是因为当前版本的QLC+存在一个漏洞,导致Art-Net接收器绑定到IP6本地主机地址,而非软件所显示的IP4地址。虽然有解决方法,而且这个问题未来肯定会被修复,但目前这个方案可以暂时使用。我已在代码中添加了检查地址类型(IP4或IP6)的功能,这样你以后就可以直接更改地址,或者如果想在不同机器上运行QLC+,或使用硬件兼容Art-Net的控制器,也可以硬编码另一个IP地址。


本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

主打高端充电器、电源适配器、平板电视机电源、 LED灯具驱动

关键字: 控制器 充电器 电源适配器

黑胶唱片的物理仪式感有一种无可替代的魅力——手中唱片的重量,放置时的刻意动作,以及音乐开始前那份期待。数字音乐为我们提供了无限的选择,却也夺走了这种仪式感。

关键字: Wi-Fi 蓝牙 扬声器 ESP32

人体工学哨兵的灵感源于对一场无声流行病的观察。我们注意到,从流水线上的熟练工人到办公室的职员,许多人并非因突发事故而患上慢性疼痛,而是由于每天成千上万次微小且未被纠正的动作持续累积所致。

关键字: AI Raspberry Pi 5 扬声器

但没有一款是“恰到好处”的。有些在夜间太亮,有些戴眼镜时从床上看不清,有些会发出刺耳的警报,而另一些则只允许在接下来24小时内设置闹钟。因此,我决定动手自己制作一个,以解决这些问题,并在此过程中加入一些新的智能功能。

关键字: ESP 控制器 LED

这是我在五年前制作的原始矩阵时钟的升级版本。此版本进行了大幅改进:在LED数量相同的情况下,体积比原版小约35%,不再需要依赖Home Assistant进行控制,因为它拥有独立的网页界面。此外,还支持使用备用控制器,并...

关键字: LED 控制器 矩阵时钟 WS2812b

在工业控制、智能硬件、车载电子及通信设备等嵌入式系统设计中,DC/DC开关电源是电能转换的核心单元。传统分立器件搭建的DC/DC电路,普遍存在高频噪声大、轻重载能效失衡、PCB布局容错率低等痛点,极易导致系统EMC超标、...

关键字: 电源模块 芯片 控制器

为室内配送任务构建自主无人地面车辆(UGV)面临两大主要挑战:在嵌入式硬件上实现实时同时定位与建图(SLAM),同时不超出计算预算;以及在缺乏特征的环境中,如医院病房、仓库等,生成可靠的地图。

关键字: 配送机器人 激光雷达 树莓派5

在新能源汽车产业向高端化、普及化深度迭代的当下,HEV混合动力汽车与EV纯电动汽车已成为交通电动化转型的核心载体。作为整车动力系统的“大脑”,电机控制器直接决定车辆的动力输出、能耗效率、驾乘体验与安全性能。随着市场对新能...

关键字: 电机 新能源 控制器

与许多语音控制系统不同,所有语音识别功能均完全在设备自身运行。无需将音频发送至外部服务器,也无需云端处理,即使没有网络连接,系统也能持续运行。

关键字: 麦克风 扬声器 ESP32-C6

近期,运动与控制技术领域的先行者——派克汉尼汾公司宣布扩展旗下SensoControl产品组合,此次推出的新一代控制器和开关产品将进一步巩固公司在流体动力、工业应用智能监测与控制领域的领先优势,产品广泛适用于汽车制造、农...

关键字: 控制器 IO-Link 数字温度开关
关闭