Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Equipment >> Equipamento industrial

Rastreamento de Voo Preciso com Orçamento: Raspberry Pi Zero Wireless, SDR e FlightAware

Este artigo mostra duas maneiras de usar um Raspberry Pi Zero Wireless para rastrear voos em sua área. Também demonstra como ele pode controlar uma matriz RGB 64×64.

O Raspberry Pi Zero Wireless é um microcomputador de $10 capaz de muitas coisas. Este artigo mostra duas maneiras de usar este Pi para rastrear voos em sua área. Também demonstra como ele pode controlar uma matriz RGB 64×64 para exibir números de voo!

Neste artigo, farei três projetos separados usando o Raspberry Pi Zero Wireless. No Projeto 1, criarei dispositivo de rastreamento de aviões usando PiAware. No Projeto 2, coletarei dados dos ditos aviões. No Projeto 3, mostrarei como usar o RPi Zero W para controlar matriz RGB 64×64.

Projeto 1: Rastreador de Aviões com Raspberry Pi Zero Wireless

Peça Custo Notas
Raspberry Pi Zero Wireless $10
Receptor SDR $21 Muitos outros receptores USB SDR provavelmente funcionarão
Cartão microSD 4GB $6 Cartões maiores funcionarão
Adaptador USB-para-MicroUSB $5
Hub MicroUSB (opcional) $8 Pi Zero só tem portas microUSB; para anexar acessórios, precisa hub/conversor
Antena wideband (opcional) $50 Antenas deve cobrir 1090 MHz
Filtro band-pass 1090 MHz (opcional) $20

Recursos

Este experimento foi feito usando Raspberry Pi Zero Wireless. No entanto, o seguinte código deve funcionar em qualquer Raspberry Pi versão 2 ou posterior. Se você comprar Pi Zero sem wireless, pode adicioná-lo com dongle USB wireless network.

Passo 1: Preparar cartão SD

Baixe o último Raspbian Jessie para seu computador.

Grave a imagem no cartão SD (aqui estão guias para Linux, Mac OS e Windows).

Passo 2: Modificar cartão SD

Crie arquivo chamado "ssh" no diretório raiz do cartão SD. Sem extensão, sem conteúdo. Este arquivo habilita SSH, permitindo acesso remoto ao Pi.

Crie arquivo chamado "wpa_supplicant.conf" com o seguinte conteúdo. Altere valores para YourWifiName e YourWifiPassword para nome e senha que você usa para conectar à sua rede Wi-Fi.

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

Passo 3: Instalar e Boot

Ejetar cartão SD do computador e instalar no Raspberry Pi Zero Wireless. Conecte Raspberry Pi a fonte de potência usando porta MicroUSB mais próxima à extremidade da placa. Aguarde aproximadamente um minuto para Raspberry Pi bootar e conectar ao Wi-Fi. Com estes arquivos de configuração, não há necessidade de usar teclado, mouse ou display com seu dispositivo.

Passo 4: Localize Seu Pi

Identifique endereço IP do seu Pi — isso pode ser feito logando no roteador e olhando dispositivos anexados, ou através de IP scanner como Look@Lan (Windows) ou nmap (Linux e Mac). Se seu dispositivo não aparecer dentro de dois ou três minutos, desconecte potência, remova cartão SD do Pi, reinsira no computador e verifique novamente arquivos ssh e wpa_supplicant.conf.

Passo 5: Conecte ao Seu Pi

Windows: Use ferramenta como Putty para conectar ao seu Pi. Baixe e rode o programa, digite endereço IP do seu Pi, clique "connect". Janela aparecerá perguntando sobre certificado de segurança — clique "yes".

Linux e Mac: Abra terminal e digite "ssh pi@raspberrypi.local" ou "ssh pi@ipaddress" (ex.: "ssh pi@192.168.0.52").

No prompt, username padrão é "pi" e senha padrão é "raspberry".

Passo 6: Configure Seu Pi

Digite "sudo raspi-config" e aperte enter.

Altere sua senha, timezone e localização.

Quando prompt de senha aparecer, senha atual é "raspberry"; você deve mudá-la para algo mais seguro para tornar pelo menos marginalmente difícil hackear seu dispositivo. Em nota lateral, em vez de senhas, você deveria usar certificados para autenticação, mas isso não será discutido neste artigo.

Então digite os seguintes comandos e permita que rodem:

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

Após Raspberry Pi terminar processo de boot, abra navegador web no seu computador e navegue para https://raspberrypi.local:8080 (ou substitua raspberrypi.local pelo endereço IP do seu dispositivo). Dê zoom out e depois zoom in na sua localização conforme aviões começam a aparecer e desaparecer da tela.

Para aumentar número de aviões, leve seu Pi, SDR e sistema de antena para fora. Melhorias adicionais encontradas adicionando filtro band-pass 1090 MHz e antena melhor.

Rastreamento de Voo Preciso com Orçamento: Raspberry Pi Zero Wireless, SDR e FlightAware

Screenshot do PiAware receiver mostrando área a leste de Los Angeles, California, em 3/14/17 (Pi Day!). Trilhas lineares no topo mostram aviões prontos para pousar em LAX. Também visível avião governamental voando em círculos.

ADS-B, PiAware e dump1090

Transponders afixados a aeronaves permitem broadcast de identificador octal de quatro dígitos (Mode-A AKA "Squawk") identificador mais altitude (Mode-C), número ICAO único de 24-bit (Mode-S), e número ICAO 24-bit com informação adicional (Mode S Extended Squitter). O último modo também é conhecido como ADS-B.

Automatic Dependent Surveillance-Broadcast (ADS-B) pega posição de aeronave (conforme determinado por GPS, GLONASS, etc.), combina com informação identificadora e broadcast em 1090 MHz. Diferente dos outros códigos transponder, que são apenas transmitidos como resposta a interrogação por sinal radar, ADS-B é transmitido aproximadamente duas vezes por segundo.

PiAware e dump1090 usam Software Defined Radio (SDR) sintonizado a 1090 MHz para receber e decodificar broadcasts de todas aeronaves na vizinhança e enviá-los aos servidores FlightAware. A informação é exibida em página web hospedada no Raspberry Pi na porta 8080.

Rastreamento de Voo Preciso com Orçamento: Raspberry Pi Zero Wireless, SDR e FlightAware

Ilustração por John Macneil, www.aopa.org.

Todas aeronaves devem ser equipadas com transponders ADS-B Out até 1 de janeiro de 2020. Mas, até lá, FlightAware usa multilateração para determinar localização de aviões que não broadcast sua latitude e longitude. Multilateração usa posição conhecida de pelo menos três receptores e tempos de recepção de mensagem para calcular posição de avião.

Projeto 2: Usando Pi Zero Wireless para Coletar Dados de Aviões do FlightAware.com

FlightAware.com tem duas Application Program Interfaces (API) que permitem dados serem minerados e utilizados: FlightXML e Firehose. Escolha entre as duas baseada no tipo de informação que você precisa e quantas queries precisa por mês. Para este projeto, All About Circuits foi concedido acesso gratuito por um mês. Para seguir junto, você precisará contatar FlightAware.com para chave API.

Recursos:

Passo 1: Testar Conectividade

Conecte ao seu Pi Zero via SSH e teste conectividade à API Firehose.

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

Se você ver página ou duas de detalhes de certificação, tudo funcionou corretamente.

Passo 2: Obter Arquivos e Dados de Exemplo

FlightAware hospeda arquivos de exemplo no GitHub. Comece baixando e editando arquivos de exemplo com seu username e API key.

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

Altere campos username e apikey para combinar com sua informação, então saia ([Ctrl]+[x]) e salve.

perl example1.pl

Você deve ver dados em formato 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'
};

Passo 3: Configure Seu Pi para Coletar Dados

Firehose é apropriadamente named no sentido que pode produzir quantidade avassaladora de dados em período muito curto (~1 GB/dia) — enchendo seu disco e aumentando cobranças à sua conta. Então quando você criar script para reunir informação, deve checá-lo em intervalos regulares pois poderia muito rapidamente encher seu disco e esvaziar sua conta de despesas.

Dependendo do tamanho do seu cartão MicroSD e o que espera coletar, você pode precisar adicionar armazenamento adicional ou voltar ao raspi-config e expandir filesystem (opção 7, opção A1).

Para meu exemplo, vou coletar dados para área geográfica 2° × 2° que inclui LGB, LAX, ONT, SNA, etc. (34° N ± 1°, 118° W ± 1°). Escolhi esta região porque aproxima minha área de recepção.

Rastreamento de Voo Preciso com Orçamento: Raspberry Pi Zero Wireless, SDR e FlightAware

Área de interesse varia de 33° N a 35° N e 117° W a 119° W.

O código seguinte é example1.pl, com mudanças nas linhas 18 e 45. Todas linhas mostradas abaixo para leitores seguirem junto sem baixar arquivo. Crie cópia de example1.pl chamada position.pl e use nano para editar position.pl.

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

Faça edições necessárias e saia com [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 # Open the TLS socket connection to FlightAware.
14 my $sock = IO::Socket::SSL->new('firehose.flightaware.com:1501') or die $!;
15 # print "Connected!\n";
16
17 # Send the initiation command to the uncompressed socket.
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 # Activate compression, if requested.
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 # Main loop, reading lines of JSON from the server.
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"; 

Linha 18 limita requisição a aviões na região geográfica entre 117° W e 119° W (denotado por -117 e -119). Linha 43 modificada para demonstrar método para alvejar apenas campos de interesse. Neste caso, alvejaremos número de voo, latitude, longitude e altitude de avião. Linha 45 requisita 10 aviões do servidor (esta linha pode ser comentada em script final).

Os próximos dois comandos executam o programa e permitem monitorar progresso do programa:

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

Primeira linha tem superuser usar programa perl para rodar programa position.pl e append (>>) output ao arquivo position.txt e símbolo & causa programa rodar em background.

Segunda linha usa programa tail para seguir (-f) mudanças no arquivo position.txt, permitindo monitorar comando para conclusão. Quando pronto, use [Ctrl]+[c] para sair tail. Se não estiver mais interessado em coletar dados, use fg para trazer programa position.pl ao foreground e pará-lo ou quebrá-lo com [Ctrl]+[c].

O arquivo .zip abaixo contém programas modificados e output que esperançosamente demonstram como pequenas mudanças na sintaxe podem trazer diferentes informações em foco, junto com output de exemplo dos programas.

Estes arquivos foram feitos com pequenas modificações ao example1.pl fornecido pela FlightAware. Para fazer seu próprio que captura apenas dados que interessam, use documentação FlightAware Firehose API para requisitar informação apropriada em formato JSON, e então use sintaxe correta dentro do arquivo para apenas output informação que você precisa.

Projeto 3: Usando Pi Zero Wireless para Controlar Matriz RGB 64×64

Peça Custo Notas
(2) 2× 32×32 RGB display matrix + power supply $75 ($150) Requer quatro total 32×32 RGB matrix para criar display 64×64 pixel
Adafruit RGB matrix HAT + RTC clock $25 Datasheets
Cabo IDC 20-pin (Hub75) $7-$13 Comprimento requerido depende de configuração de painéis e distância ao Pi
Headers macho 0.1" (40-pin, 2×20) $1 2.54 mm

Passo 1: Preparação Adafruit Matrix HAT

Solde headers macho e fêmea no Adafruit HAT de acordo com instruções em Adafruit.com. Então solde wire ou anexe jumper entre pinos 4 e 18. Para este projeto, você não precisa anexar nem jack barrel DC nem conectores screw terminal.

Passo 2: Preparação Raspberry Pi

Solde headers macho 2×20 no lugar.

Passo 3: Preparação Matriz RGB

Oriente matrizes RGB para que setas na fileira inferior apontem para baixo e setas na fileira superior apontem para cima (veja imagem aqui). Use cabo IDC 2×10 para conectar output do Adafruit HAT ao input do primeiro board. Então conecte output do primeiro board ao input do segundo, output do segundo ao input do terceiro, etc.

Rastreamento de Voo Preciso com Orçamento: Raspberry Pi Zero Wireless, SDR e FlightAware

Verso do painel matriz RGB. Sinal viaja board-to-board em formato "C".

Se você tiver sorte de ter laser cutter ou máquina CNC à disposição, incluí drawings para back plate que pode segurar todas quatro placas matriz RGB usadas. Furos de montagem são substituídos com slots para permitir alinhamento de ponto central comum.

Rastreamento de Voo Preciso com Orçamento: Raspberry Pi Zero Wireless, SDR e FlightAware

Template para montar quatro painéis 32×32 para fazer painel grande 64×64; Vários arranjos de painel são possíveis.

Hughes_4x4RGBMatrix.zip

Documentação Completa e Código Fonte por Hennen Zeller.

Uma vez que todas conexões elétricas tenham sido feitas, ligue Raspberry Pi. Após aproximadamente um minuto, tente logar no Pi com Putty ou SSH.

Uma vez dentro, digite seguinte para desabilitar som no Pi (documentação indica conflito de subsistema hardware com som e hardware RGB matrix).

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

Então use apt-get para instalar Python e arquivos de imaging.

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

Obtenha arquivos necessários para rodar matriz RGB e compile-os.

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

Opcionalmente, se você também tem câmera conectada ao seu Pi, pode capturar imagem 64×64 pixel e alimentá-la ao display.

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

As duas linhas anteriores capturam imagem 64×64 para o display e usam programa led-image-viewer (compilado na seção anterior) para exibi-lo no Large display (-L) forever (-f).

E Agora?

Você agora tem computador de $10 que pode rastrear (seja com antena e receptor SDR ou com API call) aeronaves ao seu redor e exibir qualquer informação sobre aquelas que você quer em seu display 64-pixel por 64-pixel, ou na saída HDMI do Raspberry Pi Zero W.

O que você faz com isso é limitado apenas pela sua imaginação.

Como este artigo apenas introduz as ferramentas, primeiro passo que recomendo é ler documentação para display e FlightAware e então abrir programas de exemplo de ambos para melhor entender suas capacidades.

E não esqueça que seu Raspberry Pi Zero é instalação Linux funcionando completa com comandos often-used como Cron, Grep e Awk. Qualquer coisa que não esteja já no seu Pi é apenas um curto apt-get install away.

Confira vídeo abaixo para ver culminação destes projetos!

Experimente este projeto por si mesmo! Pegue o BOM.

Equipamento industrial

  1. Pixus Technologies: SDRs Software-Defined Radios Ruggedized de Ponta para Ambientes Mission-Critical
  2. Conecte Múltiplos Sensores DS18B20 1-Wire ao Raspberry Pi para Monitoramento Preciso de Temperatura
  3. Monitoramento Eficiente de Temperatura de Salas com Raspberry Pi e Nagios
  4. Home Energy Centre: Monitoramento Solar PV, Painéis Térmicos e Temperaturas de Ambientes com Raspberry Pi e Moteino
  5. Construa um Controlador Doméstico Inteligente 433 MHz com Sensorflare e Raspberry Pi
  6. Leitura de Sensores Analógicos com Raspberry Pi e Zabbix: Guia Passo a Passo
  7. Crie Seu Primeiro Projeto IoT com Raspberry Pi, DHT11 e ThingSpeak
  8. Construa um Sistema Aeropônico Automatizado com Raspberry Pi e Sensor de Umidade
  9. Construa um Gateway LoRa com Módulo RAK831 no Raspberry Pi 3 – Guia Passo a Passo
  10. Construa um Robô com Raspberry Pi e Python: Guia Completo