亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Equipment >> 工业设备

低成本精准航班追踪:Raspberry Pi Zero Wireless、SDR 与 FlightAware

本文展示两种利用 Raspberry Pi Zero Wireless 追踪区域航班的方法,并演示其控制 64×64 RGB 矩阵显示

Raspberry Pi Zero Wireless 是一款 10 美元微型计算机,功能强大。本文展示两种用它追踪区域航班的方法,并演示如何用它控制 64×64 RGB 矩阵显示航班号!

本文包含三个独立项目。项目 1:用 PiAware 创建飞机追踪设备。项目 2:收集上述飞机数据。项目 3:展示用 RPi Zero W 控制 64×64 RGB 矩阵。

项目 1:Raspberry Pi Zero Wireless 飞机追踪器

部件成本备注
Raspberry Pi Zero Wireless$10
SDR 接收机$21其他 USB SDR 接收机大概率也适用
4GB microSD 卡$6更大容量卡也可用
USB 转 MicroUSB 转接器$5
MicroUSB 集线器 (可选)$8Pi Zero 仅有 microUSB 口;接外设需集线器/转接器
宽带天线 (可选)$50天线须覆盖 1090 MHz
1090 MHz 带通滤波器 (可选)$20

资源

本实验用 Raspberry Pi Zero Wireless。但以下代码适用于树莓派 2 代及以上版本。若购买无无线版 Pi Zero,可加 USB 无线网卡补齐。

步骤 1:准备 SD 卡

下载最新 Raspbian Jessie 到电脑。

将镜像写入 SD 卡(此处有 Linux、Mac OS、Windows 指南)。

步骤 2:修改 SD 卡

在 SD 卡根目录创建名为 "ssh" 的文件。无扩展名、无内容。此文件启用 SSH,允许远程访问 Pi。

创建 "wpa_supplicant.conf" 文件,内容如下。将 YourWifiName 和 YourWifiPassword 替换为您连接 Wi-Fi 的名称和密码。

network={
        ssid="YourWifiName"
        psk="YourWifiPassword"
        key_mgmt=WPA-PSK
}

步骤 3:安装与启动

从电脑弹出 SD 卡并装入 Raspberry Pi Zero Wireless。用最靠板端的 MicroUSB 口供电。等待约一分钟 Pi 启动并连 Wi-Fi。有这些配置文件,无需键盘、鼠标、显示器。

步骤 4:定位您的 Pi

识别 Pi IP 地址——登录路由器查看连接设备,或用 IP 扫描器如 Look@Lan (Windows) 或 nmap (Linux/Mac)。若两三分钟未出现,断电、取出 SD 卡重插电脑复核 ssh 和 wpa_supplicant.conf 文件。

步骤 5:连接您的 Pi

Windows:用 Putty 等工具连接 Pi。下载运行,输入 Pi IP,点 "连接"。弹出安全证书窗口点 "是"。

Linux/Mac:打开终端输入 "ssh pi@raspberrypi.local" 或 "ssh pi@ipaddress" (如 "ssh pi@192.168.0.52")。

提示符下默认用户名 "pi"、密码 "raspberry"。

步骤 6:配置您的 Pi

输入 "sudo raspi-config" 回车。

修改密码、时区、本地化。

密码提示时当前密码 "raspberry";应改为更安全密码以增加黑客难度。旁注:应用证书认证而非密码,但本文不展开。

依次运行以下命令:

wget https://flightaware.com/adsb/piaware/files/packages/pool/piaware/p/piaware-support/piaware-repository_3.3.0_all.deb
sudo dpkg -i piaware-repository_3.3.0_all.deb
sudo apt-get update
sudo apt-get dist-upgrade -y
sudo apt-get install -y piaware fail2ban libio-socket-ssl-perl
sudo piaware-config allow-auto-updates yes
sudo piaware-config allow-manual-updates yes
sudo apt-get install dump1090-fa -y
sudo reboot

树莓派启动完成后,电脑浏览器访问 https://raspberrypi.local:8080 (或替换为设备 IP)。缩放至您位置,飞机开始在屏幕出现又消失。

带着 Pi、SDR、天线系统到室外可增加追踪飞机数。加装 1090 MHz 带通滤波器和更好天线可进一步改善。

低成本精准航班追踪:Raspberry Pi Zero Wireless、SDR 与 FlightAware

PiAware 接收机截图,显示 2017/3/14 (Pi Day!) 加州洛杉矶东部区域。顶部线性轨迹为准备降落 LAX 的飞机。也可见政府飞机盘旋。

最后,创建 FlightAware.com 账号并关联您的接收机。

ADS-B、PiAware 与 dump1090

飞机应答机广播四位八进制标识符 (Mode-A 即 "Squawk")、高度 (Mode-C)、24 位唯一 ICAO 编号 (Mode-S)、含额外信息的 24 位 ICAO 编号 (Mode S Extended Squitter)。最后模式即 ADS-B。

自动相关监视广播 (ADS-B) 取飞机位置 (GPS/GLONASS 等确定),结合识别信息,在 1090 MHz 广播。与仅回复雷达询问的其他应答机代码不同,ADS-B 约每秒广播两次。

PiAware 和 dump1090 用调谐 1090 MHz 的软件定义无线电 (SDR) 接收解码周围所有飞机广播,发送至 FlightAware 服务器。信息显示在树莓派 8080 端口托管的网页上。

低成本精准航班追踪:Raspberry Pi Zero Wireless、SDR 与 FlightAware

John Macneil 插画,www.aopa.org。

所有飞机须在 2020 年 1 月 1 日前装备 ADS-B Out 应答机。在此之前,FlightAware 用多边定位确定不广播经纬度飞机位置。多边定位用至少三个已知位置接收机和消息接收时间计算飞机位置。

项目 2:用 Pi Zero Wireless 从 FlightAware.com 收集飞机数据

FlightAware.com 提供两个应用程序接口 (API) 供数据挖掘利用:FlightXML 和 Firehose。根据所需信息类型和月查询数选择。本项目 All About Circuits 获免费一个月访问权。跟进需联系 FlightAware.com 申请 API 密钥。

资源:

步骤 1:测试连通性

SSH 连接 Pi Zero 测试 Firehose API 连通性。

openssl s_client -host firehose.flightaware.com -port 1501 -tls1

若见一两页证书详情,连通正常。

步骤 2:获取样本文件和数据

FlightAware 在 GitHub 托管样本文件。下载编辑样本文件填入用户名和 API 密钥。

git clone https://github.com/flightaware/firehose_examples.git
cd firehose_examples/perl/example1
sudo nano example1.pl

修改 username 和 apikey 字段匹配您信息,退出 ([Ctrl]+[x]) 保存。

perl example1.pl

应见 JSON 格式数据:

$VAR1 = {
          'aircrafttype' => 'B738',
          'heading' => '105',
          'pitr' => '1490038420',
          'gs' => '334',
          'clock' => '1490038413',
          ....
          'hexid' => 'A44591',
          'ident' => 'DAL751'
          'alt' => '25100',
          'lon' => '-117.38051',
          'lat' => '33.53288'
        };

步骤 3:配置 Pi 收集数据

Firehose 名副其实,极短时间可产生海量数据 (~1 GB/天)——填满磁盘并增加账户费用。所以创建收集脚本时应定期检查,否则极快填满磁盘耗尽费用。

视 MicroSD 卡大小和收集目标,可能需加存储或回 raspi-config 扩展文件系统 (选项 7、选项 A1)。

示例中我收集 2°×2° 地理区域数据,含 LGB、LAX、ONT、SNA 等 (34° N ±1°、118° W ±1°)。选此区域因接收范围近似。

低成本精准航班追踪:Raspberry Pi Zero Wireless、SDR 与 FlightAware

关注区域范围 33° N 至 35° N、117° W 至 119° W。

以下代码为 example1.pl 修改第 18 和 45 行。全行展示供读者无需下载文件即可跟进。复制 example1.pl 为 position.pl 并用 nano 编辑 position.pl。

cp example1.pl position.pl
sudo nano position.pl

作必要修改,[Ctrl]+[x] 退出。

 1 #!/usr/local/bin/perl
 2 
 3 use strict;
 4 use IO::Socket::SSL;
 5 use JSON::PP;
 6 use IO::Uncompress::Inflate qw($InflateError);
 7 use Data::Dumper;
 8
 9 my $username = 'allaboutcircuits';
10 my $apikey = 'allaboutcircuitsreallylongapikey';
11 my $compression = 0;
12 
13 # 打开到 FlightAware 的 TLS 套接字连接。
14 my $sock = IO::Socket::SSL->new('firehose.flightaware.com:1501') or die $!;
15 # print "Connected!\n";
16 
17 # 向未压缩套接字发送初始化命令。
18 my $initcmd = "live version 8.0 user $username password $apikey events \"position\" latlong \"33 -117 35 -119\"";
19 if ($compression) {
20 $initcmd .= " compression compress";
21 }
22 binmode $sock;
23 print $sock "$initcmd\n";
24 
25 # 如请求启用压缩。
26 my $zsock;
27 if ($compression) {
28 $zsock = new IO::Uncompress::Inflate $sock
29 or die "IO::Uncompress::Inflate failed: $InflateError\n";
30 } else {
31 $zsock = $sock;
32 }
33 
34 # 主循环,读取服务器 JSON 行。
35 my $i = 1;
36 while (my $line = $zsock->getline()) {
37 #print "LINE $i\n";
38 #print "LINE $i: ", $line, "\n";
39
40 my $data = eval { decode_json $line };
41 die "Failed to decode JSON: $line" if !defined($data) || $@;
42 
43 print $data->{ident}." \t".$data->{lat}." \t " . $data->{lon} . " \t". $data->{alt}." \n";
44 
45 last if ($i++ >= 10);
46 }
47 close $sock;
48 
49 # print "All done.\n"; 

第 18 行限制请求 117° W 至 119° W 间飞机 (用 -117 和 -119 表示)。第 43 行修改演示仅输出关注字段:航班号、纬度、经度、高度。第 45 行请求服务器 10 架飞机 (最终脚本可注释此行)。

下两命令执行程序并监控进度:

sudo perl position.pl >> position.txt &
tail -f position.txt

第一行用超级用户权限跑 perl 运行 position.pl 并追加 (>>) 输出至 position.txt,& 符号使程序后台运行。

第二行用 tail 跟踪 (-f) position.txt 变化,允许监控完成。完成用 [Ctrl]+[c] 退出 tail。不再收集数据时,用 fg 将 position.pl 调前台停止或 [Ctrl]+[c] 中断。

下方 .zip 含修改程序和输出,演示语法微调如何聚焦不同信息,含程序样本输出。

这些文件基于 FlightAware 提供的 example1.pl 微调。要制作仅捕获感兴趣数据的脚本,用 FlightAware Firehose API 文档请求 JSON 格式适当信息,再在文件内用正确语法仅输出所需信息。

项目 3:用 Pi Zero Wireless 控制 64×64 RGB 矩阵

部件成本备注
(2) 2×32×32 RGB 显示矩阵 + 电源$75 ($150)需四块 32×32 RGB 矩阵组成 64×64 像素显示
Adafruit RGB 矩阵 HAT + RTC 时钟$25数据手册
20-pin IDC 线缆 (Hub75)$7-$13长度取决于面板配置和到 Pi 距离
0.1" 公排针 (40-pin, 2×20)$12.54 mm

步骤 1:Adafruit 矩阵 HAT 准备

按 Adafruit.com 指南焊接公/母排针到 Adafruit HAT。然后在引脚 4 和 18 间焊线或接跳线。本项目不需接 DC 筒型插座或螺丝端子。

步骤 2:树莓派准备

焊接 2×20 公排针到位。

步骤 3:RGB 矩阵准备

调整 RGB 矩阵使底行箭头朝下、顶行箭头朝上 (见此图)。用 2×10 IDC 线缆连 Adafruit HAT 输出到第一块板输入。再连第一块输出到第二块输入、第二块输出到第三块输入,以此类推。

低成本精准航班追踪:Raspberry Pi Zero Wireless、SDR 与 FlightAware

RGB 矩阵面板背面。信号按 "C" 形板间传递。

若有激光切割或 CNC 设备,我附带可容纳四块 RGB 矩阵板的背板图纸。安装孔改为长槽,允许从公共中心点对齐。

低成本精准航班追踪:Raspberry Pi Zero Wireless、SDR 与 FlightAware

四块 32×32 面板组装成大 64×64 面板模板;多种面板排列可能。

Hughes_4x4RGBMatrix.zip

Hennen Zeller 完整文档和源代码。

所有电气连接完成后,给树莓派上电。约一分钟后,尝试用 Putty 或 SSH 登录 Pi。

登入后输入以下禁用 Pi 声音 (文档指示声音子系统与 RGB 矩阵硬件冲突)。

cat << EOF | sudo tee /etc/modprobe.d/blacklist-rgb-matrix.conf
blacklist snd_bcm2835
EOF
sudo update-initramfs -u

然后用 apt-get 安装 Python 和成像库。

sudo apt-get install -y build-essential libconfig++-dev python-dev python-imaging libgraphicsmagick++-dev libio-socket-ssl-perl

获取运行 RGB 矩阵必要文件并编译。

git clone https://github.com/hzeller/rpi-rgb-led-matrix
cd rpi-rgb-led-matrix
HARDWARE_DESC=adafruit-hat-pwm make -C examples-api-use
sudo examples-api-use/demo -L -D0
cd utils/
HARDWARE_DESC=adafruit-hat-pwm make

可选:若 Pi 连摄像头,可捕获 64×64 像素图像送显示。

raspistill -w 64 -h 64 -o myimg.png
sudo ./led-image-viewer -L -f myimg.png

前两行捕获 64×64 图像到显示,用前节编译的 led-image-viewer 在大显示器 (-L) 永久 (-f) 显示。

下一步?

您现在拥有一台 10 美元计算机,能追踪周围飞机 (天线+SDR 或 API 调用),在 64×64 像素显示器或 Raspberry Pi Zero W HDMI 输出上显示任意飞机信息。

能做什么只受想象力限制。

既然本文仅介绍工具,建议第一步读显示器和 FlightAware 文档,再打开两者示例程序更好理解能力。

别忘了 Raspberry Pi Zero 是功能完整 Linux 安装,常用 Cron、Grep、Awk 等命令。Pi 上没有的东西只需短 apt-get install 即可获取。

查看下方视频见项目最终效果!

亲自尝试项目!获取 BOM。

工业设备

  1. 8 种经验证实的数字化维护软件降本增收策略
  2. 树莓派多路DS18B20 1-Wire温度监测:接线与编程全指南
  3. 树莓派+Nagios高效监控机房温度
  4. 家庭能源中心:树莓派与 Moteino 监测光伏、光热与室温
  5. 基于 Sensorflare 与树莓派的 433 MHz 智能家居控制器构建指南
  6. 树莓派配合 MCP3008 ADC 与 Zabbix 监控模拟传感器:分步指南
  7. 树莓派 + DHT11 + ThingSpeak:打造你的第一个物联网项目
  8. 树莓派自动化气雾栽培系统:湿度传感器智能控制
  9. 基于 RAK831 模块与树莓派 3 构建 LoRa 网关:分步指南
  10. 树莓派与Python构建机器人:完整指南
  11. Arduino与树莓派构建互联网控制视频流机器人完整指南
  12. Pixus Technologies:面向任务关键环境的尖端坚固化软件定义无线电