当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]这个项目是为我物理计算课程中的数据可视化项目而设计的。其核心理念是通过 LED 灯带来展示飞机在天空中的位置,每盏 LED 灯都代表着一个位置。这些灯光会随着飞机的活动而移动并改变颜色。

这个项目是为我物理计算课程中的数据可视化项目而设计的。其核心理念是通过 LED 灯带来展示飞机在天空中的位置,每盏 LED 灯都代表着一个位置。这些灯光会随着飞机的活动而移动并改变颜色。

我为这个项目使用了 Particle Photon 2,因为它非常出色,而且能非常轻松地将这个微控制器连接到互联网。这绝对是一款出色的微控制器,我会强烈推荐(我还买了另外两个)。

所有跑道均以芝加哥奥黑尔国际机场(ORD)为参照标准。

Webhook/ API

查询

这是通过使用 OpenSky 网络及其 REST API 来完成的,该 API 的详细文档可在此处查阅。

这个 API 如何运作的最简单且最易于演示的例子,可以通过一个匿名的 API 请求来实现,该请求遵循基本的查询设置,并将其输入到网络浏览器中。例如,要查找位于 28C/10C 圆形区域内所有飞机的查询,其格式应如下所示:

树莓派继电器

理想情况下,应该能够将该内容以 GET 请求服务的形式(比如使用 Particle 的服务)提交出去。但对我来说,这似乎从未奏效。无论我尝试何种身份验证方式,无论使用何种访问令牌,无论设置何种参数、头信息还是响应模板,都无法让我摆脱“ETIMEDOUT”错误(即当 API 回复时间过长时出现的 Particle 错误)。我把它发到了 OpenSky 的 Discord 和 Particle 论坛,但都没有效果。如果您找到了解决办法,请告知我;那样会让这一切变得简单得多。

为了解决这个问题,我使用了我手头有一台旧的 Raspberry Pi 3 来从 OpenSky API 获取数据,然后使用 Particle.publish() 函数将这些数据推送到我的 Particle 设备上。该代码可以在本项目的“代码”部分中查看。

一个优点是这种接力方式确实可行。另一个优点是它能为我提供 OAuth2 客户端凭证,这样我每天就能获得 4000 个 API 信用额度。但有一个缺点是,如果我想要更改跑道的地理围栏,我就得进入树莓派并自行修改代码。

“光子 2 编程”

这就是一切精彩内容的开始。我将为大家展示每个步骤的具体操作过程,并且不会深入讲解编程本身的内容。如需了解更多详情,请查看下面这个项目的“主”代码部分。我用内嵌注释对其进行了详细的记录,这样您就可以跟着实际的代码一起操作了(如果您愿意的话)。我会标注行号,以便于您更好地理解。

解析数据

首先,OpenSky API 返回的 JSON 文件包含了整个虚拟区域内所有的飞机信息。所有的飞机。在空中飞行的、起飞的、在地面的……所有内容都在其中。所以首先我们必须对其进行排序!我用这个来获取每个数据值,还用这个便捷的工具让我的工作变得轻松些。下面是我是如何操作的(第 45 行):

需要指出的是,当我确定这架飞机正是我想要的那一架后,我会获取其所有数据并将其存储到一个“飞机”对象中,这样我就再也不需要再接触 JSON 数据了。这个飞机对象的结构如下:

这些对象被添加到一个数组中,这样我就能方便地对其进行存储和排序了。

整理飞机停放位置

我不太清楚 OpenSky API 在返回 JSON 数据时是依据什么标准对飞机进行排序的,但可以肯定的是,它并非依据距离奥尔德姆机场的远近来进行排序。因此,我必须将这些混乱的对象数组整理成一个能触发警报的数组。

需要指出的是,存储混乱排列的飞机对象的数组长度总是会小于表示灯光的数组长度。我有 8 个灯,所以它由一个 7 个索引的数组来表示。每个灯代表 1.5 英里的空域。所以它看起来是这样的:

飞机的数量绝不会超过 4 架,因为如果超过了,那一定是空中交通管制员搞错了。因为根据美国联邦航空局的 JO 7110.65 5-5-4 规定,飞行器之间必须保持 3 英里的间隔。这意味着最多每 3 个间隔才能有一架飞机。

那么如何对其进行排序呢?其实很简单。这个过程发生在第 100 行到第 156 行之间,通过一系列“if”语句来实现。每架飞机都会被检查其经度,并被放置到相应位置的正确数组槽中。如果没有飞机在那里,就会创建一个假飞机,其高度设为 -1000 米,以便于更容易地识别出来。这就是您能得到的所有解释了:)

打开灯

很简单。首先,关闭所有没有对应飞机的灯。然后,如果这个灯有对应的飞机,就将其打开,并将颜色设置为代表飞机所处高度的样式。我使用了 switch-case 结构,因为我是个酷家伙(第 182 行至 219 行)。

结论

就是这样啦!如果拆解开来的话,其实挺简单的,但从零开始进行编程可不是一件容易的事!虽然仍有几处关于神秘飞机和奇怪的地理围栏错误的问题,但总体来说这个项目已经达到了 98% 的功能性。

根据 Raspberry Pi 代码的最后一行设定,数据每 10 秒更新一次,而灯也会随之相应地变化,因为“光子”始终处于循环状态。即便以这样的频率运行,我每天 4000 个 API 信用额度也需要大约 12 个小时的持续使用才会用完。我的 Pi 电脑连接到一个智能插座,这样我就可以从家里远程开关它,而且在我不需要它的时候它也不会消耗我的信用额度。

本文编译自hackster.io

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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭