几年前,我看到了Thomas Watson的精彩演讲,他在演讲中谈到了他是如何构建AirplaneJS的,这是一个网络应用程序,可以从飞机上接收ADS-B无线电信号,并在浏览器的地图上实时绘制它们。我不知道这在 JavaScript 中是可能的,所以我开始研究它。
我玩弄了这个项目,并开始想知道是否有办法可以将它推得更远一些。考虑到 AirplaneJS 在服务器上使用 Node.js,我决定进行实验,看看是否可以使用 Web USB 使其工作,从而将其变成仅前端的项目。几周前我终于让它工作了🥳所以决定写下来。
我还在学习很多关于 USB 协议以及如何解码 ADS-B 信号的知识,所以这篇文章不会深入探讨这个主题。
在我开始之前,这里有一个演示:
动图
这是演示站点的链接
RTL-SDR 加密狗
该项目的主要组件包括Web USB API、RTL-SDR 加密狗 + 天线和一些 JavaScript 代码。
如今,大多数飞机都广播 ADS-B 数据,即自动相关监视广播。这是一种监视技术,允许飞机在不被询问的情况下广播其飞行状态,这意味着它不需要飞行员的输入。
此数据指示飞机的位置、纬度、经度、速度、代码等。
他们会定期将此数据传输给空中交通管制员,但是,使用带有天线的软件定义无线电加密狗,您可以拦截这些消息以制作您自己的飞机雷达系统📡。
您可以购买或制造不同类型的天线,但我个人使用的是偶极天线。
由于数据以 1090 MHz 的频率广播,因此偶极子的大小需要使用以下公式计算:
<span style="color:#171717"><span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-name-color)">In</span> <span style="color:var(--syntax-name-color)">feet</span><span style="color:var(--syntax-text-color)">:</span>
<span style="color:var(--syntax-name-color)">Total</span> <span style="color:var(--syntax-name-color)">length</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-literal-color)">468</span> <span style="color:var(--syntax-error-color)">/</span> <span style="color:var(--syntax-name-color)">Frequency</span> <span style="color:var(--syntax-declaration-color)">in</span> <span style="color:var(--syntax-name-color)">MHz</span> <span style="color:var(--syntax-comment-color)">// Gives the total lengh of the dipole</span>
<span style="color:var(--syntax-name-color)">Length</span> <span style="color:var(--syntax-declaration-color)">of</span> <span style="color:var(--syntax-name-color)">each</span> <span style="color:var(--syntax-name-color)">branch</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">Total</span> <span style="color:var(--syntax-name-color)">length</span> <span style="color:var(--syntax-error-color)">/</span> <span style="color:var(--syntax-literal-color)">2</span>
<span style="color:var(--syntax-error-color)">---</span>
<span style="color:var(--syntax-name-color)">In</span> <span style="color:var(--syntax-name-color)">cm</span><span style="color:var(--syntax-text-color)">:</span>
<span style="color:var(--syntax-name-color)">Total</span> <span style="color:var(--syntax-name-color)">length</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-literal-color)">14264</span> <span style="color:var(--syntax-error-color)">/</span> <span style="color:var(--syntax-name-color)">Frequency</span> <span style="color:var(--syntax-declaration-color)">in</span> <sp