Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Equipment >> Промышленное оборудование

Точный трекинг полетов на бюджете: Raspberry Pi Zero Wireless, SDR и FlightAware

Статья показывает два способа использовать Raspberry Pi Zero Wireless для трекинга полетов в вашем районе. Также демонстрируется, как он может управлять 64×64 RGB матрицей.

Raspberry Pi Zero Wireless — $10 микрокомпьютер, способный на многое. Статья показывает два способа использовать этот Pi для трекинга полетов в вашем районе. Также демонстрируется, как он может управлять 64×64 RGB матрицей для отображения номеров рейсов!

В этой статье я сделаю три отдельных проекта, используя Raspberry Pi Zero Wireless. В Проекте 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-to-MicroUSB адаптер$5
MicroUSB Hub (опционально)$8Pi Zero имеет только microUSB порты; для подключения аксессуаров нужен хаб/конвертер
Широкополосная антенна (опционально)$50Антенна должна покрывать 1090 МГц
1090 МГц полосовой фильтр (опционально)$20

Ресурсы

Этот эксперимент сделан с Raspberry Pi Zero Wireless. Однако следующий код должен работать на любом Raspberry Pi версии 2 или новее. Если вы покупаете Pi Zero без wireless, можете добавить его с wireless USB сетевым донглом.

Шаг 1: Подготовка SD карты

Скачайте последний Raspbian Jessie на ваш компьютер.

Запишите образ на SD карту (вот гайды для Linux, Mac OS и Windows).

Шаг 2: Модификация SD карты

Создайте файл с именем «ssh» в корневой директории SD карты. Без расширения файла, без содержимого. Этот файл включает SSH, позволяя удаленный доступ к Pi.

Создайте файл с именем «wpa_supplicant.conf» со следующим содержимым. Измените значения YourWifiName и YourWifiPassword на имя и пароль, которые вы используете для подключения к вашей Wi-Fi сети.

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

Шаг 3: Установка и загрузка

Извлеките SD карту из компьютера и установите в Raspberry Pi Zero Wireless. Подключите Raspberry Pi к источнику питания через MicroUSB порт, ближайший к краю платы. Подождите примерно минуту для загрузки Raspberry Pi и подключения к Wi-Fi. С этими конфигурационными файлами нет необходимости использовать клавиатуру, мышь или дисплей с вашим устройством.

Шаг 4: Найдите ваш Pi

Определите IP адрес вашего Pi — это можно сделать, войдя в роутер и посмотрев на подключенные устройства, или через IP сканер вроде Look@Lan (Windows) или nmap (Linux и Mac). Если устройство не появляется в течение двух или трех минут, отключите питание, извлеките SD карту из Pi и вставьте обратно в компьютер и дважды проверьте файлы ssh и wpa_supplicant.conf.

Шаг 5: Подключение к вашему Pi

Windows: Используйте инструмент вроде Putty для подключения к вашему Pi. Скачайте и запустите программу, введите IP адрес вашего Pi и нажмите «connect». Появится окно, спрашивающее о сертификате безопасности — нажмите «yes».

Linux и Mac: Откройте терминал и введите «ssh pi@raspberrypi.local» или «ssh pi@ipaddress» (например, «ssh pi@192.168.0.52»).

На промпте, имя пользователя по умолчанию «pi», пароль по умолчанию «raspberry».

Шаг 6: Настройка вашего Pi

Введите «sudo raspi-config» и нажмите enter.

Измените пароль, часовой пояс и локализацию.

Когда появится запрос пароля, текущий пароль «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

После завершения загрузки Raspberry Pi, откройте веб-браузер на вашем компьютере и перейдите на https://raspberrypi.local:8080 (или замените raspberrypi.local на IP адрес вашего устройства). Уменьшите масштаб, затем увеличьте в ваше местоположение, как самолеты начинают появляться и исчезать с вашего экрана.

Чтобы увеличить количество самолетов, возьмите ваш Pi, SDR и антеннную систему на улицу. Дальнейшие улучшения найдены добавлением 1090 МГц полосового фильтра и лучшей антенны.

Точный трекинг полетов на бюджете: Raspberry Pi Zero Wireless, SDR и FlightAware
Скриншот PiAware приемника, показывающий область восточнее Лос-Анджелеса, Калифорния, на 3/14/17 (День Пай!). Линейные треки сверху показывают самолеты, готовые к посадке в LAX. Также виден правительственный самолет, летящий кругами.

Наконец, создайте аккаунт FlightAware.com и ассоциируйте ваш приемник с вашим FlightAware.com аккаунтом.

ADS-B, PiAware и dump1090

Транспондеры, прикрепленные к самолетам, позволяют им вещать четырехзначный октальный идентификатор (Mode-A AKA "Squawk") идентификатор плюс высота (Mode-C), 24-битный уникальный ICAO номер (Mode-S) и 24-битный ICAO номер с дополнительной информацией (Mode S Extended Squitter). Последний режим также известен как ADS-B.

Automatic Dependent Surveillance-Broadcast (ADS-B) берет позицию самолета (как определено GPS, GLONASS и т.д.), комбинирует с идентифицирующей информацией и вещает на 1090 МГц. В отличие от других транспондерных кодов, которые передаются только в ответ на допрос радарным сигналом, ADS-B передается примерно дважды в секунду.

PiAware и dump1090 используют Software Defined Radio (SDR), настроенный на 1090 МГц, для приема и декодирования вещания всех самолетов в окрестностях и отправки их на серверы FlightAware. Информация отображается на веб-странице, хостятся на Raspberry Pi на порту 8080.

Точный трекинг полетов на бюджете: Raspberry Pi Zero Wireless, SDR и FlightAware
Иллюстрация John Macneil, www.aopa.org.

Все самолеты должны быть оснащены ADS-B Out транспондерами к 1 января 2020. Но до тех пор FlightAware использует мультилатерацию для определения местоположения самолетов, не вещающих свою широту и долготу. Мультилатерация использует известную позицию минимум трех приемников и времена приема сообщения для расчета позиции самолета.

Проект 2: Использование Pi Zero Wireless для сбора данных самолетов с FlightAware.com

FlightAware.com имеет два Application Program Interfaces (API), позволяющих добывать и использовать данные: FlightXML и Firehose. Выбирайте между ними на основе типа информации, который вам нужен, и сколько запросов вам нужно в месяц. Для этого проекта All About Circuits получил бесплатный доступ на один месяц. Чтобы следовать, вам нужно связаться с FlightAware.com для API ключа.

Ресурсы:

Шаг 1: Проверка связности

Подключитесь к вашему Pi Zero через SSH и проверьте связность с 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

Вы должны увидеть данные в JavaScript Object Notation (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 ГБ/день) — заполняя ваш диск и увеличивая расходы на ваш аккаунт. Поэтому когда вы создаете скрипт для сбора информации, вы должны проверять его на регулярных интервалах, так как вы можете очень быстро заполнить диск и опустошить счет расходов.

В зависимости от размера вашей 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
 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 # Открытие TLS сокет соединения к FlightAware.
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 файл содержит модифицированные программы и вывод, который надеемся демонстрирует, как незначительные изменения в синтаксисе могут привести разную информацию в фокус, вместе с примером вывода программ.

Эти файлы сделаны с незначительными модификациями example1.pl, предоставленным FlightAware. Чтобы сделать свой, захватывающий только данные, которые вас интересуют, используйте 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 matrix HAT + RTC часы$25Datasheets
20-pin IDC кабель (Hub75)$7-$13Необходимая длина зависит от конфигурации панелей и расстояния до Pi
0.1" male хедера (40-pin, 2×20)$12.54 мм

Шаг 1: Подготовка Adafruit Matrix HAT

Припаяйте male и female хедера на Adafruit HAT согласно инструкциям на Adafruit.com. Затем припаяйте провод или присоедините перемычку между пинами 4 и 18. Для этого проекта вам не нужно прикреплять ни DC barrel jack, ни screw terminal коннекторы.

Шаг 2: Подготовка Raspberry Pi

Припаяйте 2×20 male хедера на месте.

Шаг 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.

После того как все электрические соединения сделаны, включите Raspberry Pi. После примерно одной минуты попытайтесь войти на Pi с Putty или SSH.

После входа введите следующее для отключения звука на Pi (документация указывает на конфликт аппаратной подсистемы со звуком и RGB матричным железом).

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

Затем используйте apt-get для установки Python и imaging файлов.

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-пиксельном дисплее, или на HDMI выходе Raspberry Pi Zero W.

Что вы сделаете с этим ограничено только вашим воображением.

Поскольку эта статья только вводит инструки, первый шаг, который я рекомендую — прочитать документацию для дисплея и FlightAware и затем открыть примерные программы обоих для лучшего понимания их возможностей.

И не забывайте, что ваш Raspberry Pi Zero — функционирующая Linux установка, завершенная с часто используемыми командами вроде Cron, Grep и Awk. Все, что еще не на вашем Pi, всего в одном коротком apt-get install вдали.

Посмотрите видео ниже, чтобы увидеть кульминацию этих проектов!

Попробуйте этот проект сами! Получите BOM.

Промышленное оборудование

  1. Pixus Technologies: передовые закаленное SDR для миссионно-критических сред
  2. Подключение нескольких DS18B20 1-Wire датчиков к Raspberry Pi для точного мониторинга температуры
  3. Эффективный мониторинг температуры серверных с Raspberry Pi и Nagios
  4. Домашний энергетический центр: мониторинг солнечных панелей, тепловых коллекторов и температуры комнат на Ra…
  5. Создание умного домашнего контроллера 433 МГц с Sensorflare и Raspberry Pi
  6. Чтение аналоговых датчиков с Raspberry Pi и Zabbix: пошаговое руководство
  7. Создайте свой первый IoT-проект с Raspberry Pi, DHT11 и ThingSpeak
  8. Создайте автоматизированную аэропоническую систему с Raspberry Pi и датчиком влажности
  9. Сборка LoRa-шлюза на модуле RAK831 и Raspberry Pi 3 — пошаговое руководство
  10. Создание робота на Raspberry Pi и Python: полное руководство