Skylight: uma antena na janela e outro jeito de olhar o céu

Eu queria projetar no teto da sala o céu que passava sobre a casa. Comecei com um notebook parado e uma antena na janela. A projeção não ficou como eu esperava, mas o projeto encontrou outros caminhos: hoje acompanho aeronaves em diferentes telas e recebo um aviso quando a Estação Espacial Internacional passa.
Entre a ideia e o uso diário, houve uma imagem sem nitidez, um receptor que esquentava, problemas de conexão e algumas soluções simples. Houve também espaço para acrescentar coisas que me interessavam: guardar as passagens, destacar determinadas aeronaves e ouvir um aviso sem precisar acompanhar a tela o tempo todo.
Este é o registro dessa montagem, das escolhas que fiz e do que ainda quero experimentar.
O céu que eu queria trazer para casa
A ideia tomou forma quando encontrei o Skylight (abre em nova aba), um projeto de código aberto criado por Cameron Paczek. Ele reúne informações de aeronaves e uma representação do céu, com Sol, Lua, estrelas, planetas e satélites, a partir da localização e do horário do observador.
O projeto permite desenhar esse movimento no teto usando um projetor. Foi essa possibilidade que quis experimentar em casa: acompanhar, de dentro da sala, o que estava passando lá fora.
O Skylight e sua proposta visual são do Cameron. Parti dessa base para montar minha instalação, adaptar o funcionamento ao que tinha disponível e acrescentar recursos. O histórico de aeronaves, os destaques visuais e os avisos descritos aqui fazem parte desse trabalho de adaptação.
A visualização acompanha posições reais de aeronaves e anima o movimento entre as atualizações recebidas. Companhia, modelo e rota aparecem quando há dados disponíveis. O que se vê na tela tem uma relação com o tráfego captado naquele momento, dentro dos limites de alcance da antena e das informações recebidas.
Para mim, o ponto de partida era esse encontro entre uma montagem doméstica e algo que acontece fora dela. O computador teria uma função concreta: ajudar a acompanhar o céu a partir de casa.
Uma antena na janela, um notebook reaproveitado
Parte das informações usadas nessa montagem já é transmitida pelas próprias aeronaves. O sistema se chama ADS-B: aeronaves equipadas com ele enviam por rádio dados como identificação, posição e altitude. Na minha instalação, uma antena recebe esses sinais e um pequeno receptor USB os entrega ao computador.
A antena é telescópica e fica presa por ventosa no vidro da janela. O receptor é um RTL-SDR Blog V3, ligado diretamente à lateral do notebook. O posicionamento da antena e os obstáculos ao redor influenciam o que consigo captar.

O caminho, em termos simples, é este: a aeronave transmite, a antena recebe, o computador interpreta os sinais e o Skylight apresenta as posições. Outras informações, como companhia e rota, são consultadas em bases públicas.
A ISS aparece por outro caminho. O Skylight calcula sua posição a partir de dados orbitais; ela não é captada por essa antena como os aviões. As duas informações se encontram na visualização, mas vêm de fontes diferentes.
Para rodar tudo, reaproveitei um Dell Inspiron que estava parado. Troquei o disco por um SSD, instalei Linux e organizei os programas para trabalhar no mesmo computador. O notebook passou a ficar ligado o dia todo, de tampa fechada.
Essa escolha deu uma função diária a uma máquina que eu já tinha. Com o tempo, ela também passou a guardar o histórico e a executar os serviços de apoio ao projeto. Os detalhes da configuração estão nas notas de montagem, ao fim do texto.

O que precisei mudar
O primeiro plano era usar um mini projetor HY300, ligado ao notebook por HDMI, para desenhar o céu no teto da sala. Na prática, a imagem ficou sem nitidez suficiente para ler as informações dos voos. A saída de ar também esquentava bastante, o que me deixou pouco à vontade para mantê-lo ligado durante muitas horas.
Esse foi o resultado com a minha unidade, naquele local e naquela posição. Não tenho como estender essa experiência a todos os aparelhos do mesmo modelo. O aprendizado que ficou foi mais específico: antes de organizar a montagem em torno da projeção, vale testar se a imagem pode ser lida no lugar onde será usada.
A tentativa no teto ficou em aberto. Como o Skylight funciona no navegador, continuei usando o projeto em outras telas, pela rede da casa.
Outro problema apareceu na recepção. Depois de algum tempo ligado, o sistema começou a mostrar quase nenhum avião. Um teste indicava falha de sintonia, e a decodificação estava em cerca de uma mensagem por segundo, sem posições de aeronaves.
Desconectei o receptor, deixei-o esfriar, reajustei a antena e voltei a conectá-lo. Depois disso, a taxa chegou a cerca de 22 mensagens por segundo, com cinco aeronaves posicionadas ao mesmo tempo.
O calor era uma das minhas suspeitas. Como resfriei o aparelho, mexi na antena e reiniciei a conexão na mesma intervenção, não consegui separar o efeito de cada mudança. Ainda assim, o receptor quente me preocupava, e resolvi melhorar a ventilação.
Coloquei um ventilador de computador sobre ele. Na montagem que usei, o ventilador gira devagar e mantém o receptor frio ao toque. Também instalei pés dobráveis na base do notebook, criando espaço para o ar circular por baixo. São ajustes pequenos, mas passaram a fazer parte do funcionamento diário.


Esses episódios mostram uma parte da montagem que os painéis prontos não revelam. Uma instalação que fica ligada o dia inteiro depende também de posição, ventilação e conexões. Foi nesses detalhes que precisei voltar várias vezes.
Quando o céu ganhou voz
Hoje abro o Skylight na TV e no tablet. No navegador do relógio, consigo consultar informações sobre o voo. Cada tela atende a uma forma de uso, e o projeto continuou funcionando mesmo sem a projeção que o motivou.
Acrescentei cores para destacar categorias de aeronaves que me interessam e um indicador de temperatura e condição do céu. São mudanças que me ajudam a perceber determinadas informações na visualização.
Os avisos por voz mudaram a forma de acompanhar o sistema. Quando aparece um voo de interesse, o computador envia o áudio para uma Echo Dot. Ela funciona como caixa de som Bluetooth; nessa montagem, não há integração com a Alexa.
O Bluetooth interno do notebook apresentou instabilidades. Um pequeno adaptador USB assumiu essa conexão. Depois desse ajuste, pude manter o áudio como mais uma forma de receber as notificações, sem depender de estar olhando para uma tela.

Configurei também um aviso separado para a Estação Espacial Internacional. A passagem calculada da ISS não garante que ela esteja visível: isso depende da iluminação e das condições do céu. Em uma passagem favorável, porém, é possível vê-la a olho nu, pela luz do Sol que ela reflete.
É nesse aviso que o projeto mais se aproxima da ideia de observar. A informação chega pelo sistema, mas a possibilidade que ela oferece está do lado de fora. Posso conferir a passagem e olhar para o céu.
A memória do céu
A visualização mostra o que acontece naquele momento. Para guardar as passagens e poder consultá-las depois, criei um serviço separado, o flight-history.
Ele registra aeronaves com posição, calcula a distância até a localização de referência e identifica as passagens dentro do raio que defini. Com o tempo, esse registro ganhou um painel com filtros e comparações.
Na captura original usada para ilustrar este artigo, havia 1.382 aeronaves distintas registradas em pouco mais de cinco semanas, com 215 nas últimas 24 horas. Esses números contam aeronaves identificadas pelo sistema no período, dentro da cobertura da instalação. Não equivalem necessariamente ao número de voos, nem indicam que todas passaram diretamente sobre a casa.
Na distribuição por companhia, a TAM aparecia com a maior participação, seguida de Gol e Azul. Havia também registros da Força Aérea Brasileira, da United e da Delta. O painel permite escolher períodos, filtrar companhias, comparar resultados e exportar os registros.

Guardar os dados abre outras perguntas: quais companhias aparecem com mais frequência na minha recepção? Em que horários há mais movimento? O que muda entre um dia e outro?
Ainda há diferença entre formular essas perguntas e encontrar respostas consistentes. O histórico permite investigá-las com o tempo. A posição da antena, as condições de recepção e os intervalos em que o sistema funciona também precisam entrar nessa leitura.
Essa é a utilidade que vejo no registro: poder voltar ao que passou e comparar. A tela acompanha o movimento; o histórico dá a esse acompanhamento uma continuidade.
O que continua em aberto
Ao redor do Skylight, organizei outros serviços no notebook: monitoramento, avisos de indisponibilidade, acesso pela rede e cópias de segurança. Eles ajudam a manter a instalação e a preservar o que fui construindo.
Aprendi também a mudar menos coisas de uma vez. Passei a implementar melhorias em lotes pequenos, de no máximo três itens, testando cada um. Quando uma alteração produz um problema, esse cuidado facilita entender o que aconteceu.
O plano é migrar o conjunto para outra máquina e incluir um serviço para organizar minhas fotografias. Preparei cópias de segurança e um script de restauração para apoiar essa mudança; verificar a recuperação dos dados faz parte do trabalho de migração.
Também quero tentar novamente a projeção no teto, com outro equipamento. Dessa vez, o teste da imagem no ambiente será uma das primeiras etapas. Quando fizer isso, volto ao texto para registrar o resultado.
Enquanto esse plano não acontece, a antena na janela e o notebook reaproveitado já permitem acompanhar o que passa nas proximidades. O projeto encontrou um uso entre as telas, o áudio e o histórico, com espaço para continuar mudando.
Quando chega o aviso da ISS, ele cumpre uma função simples: indicar a hora de olhar para cima.
Notas de montagem
Estas notas reúnem os equipamentos e as configurações da minha instalação. Alguns comportamentos dependem da versão dos programas e da forma de implantação. O repositório do Skylight continua evoluindo; esta é a descrição do conjunto que usei para o relato.
Equipamentos e sistema
O computador é um Dell Inspiron 5448, com processador i7-5500U, 12 GB de memória e SSD no lugar do HD. Fiz os primeiros testes com Pop!_OS e depois passei para Linux Mint XFCE, com BTRFS e snapshots do Timeshift. Uso Docker para executar os serviços e Portainer para administrá-los.
O receptor é um RTL-SDR Blog V3, conectado a uma antena dipolo telescópica, instalada na vertical. O readsb decodifica os sinais ADS-B em 1090 MHz; o tar1090 oferece um mapa para conferir a recepção. O Skylight utiliza esses dados e os complementa com informações públicas do adsbdb.com.


Na ventilação, usei um cooler de 120 mm, nominalmente de 12 V, alimentado a 9 V na minha montagem. Ele gira mais devagar nessa condição e mantém o receptor frio ao toque. Isso descreve o resultado observado nesse conjunto; não fiz uma avaliação de vida útil do ventilador.

O áudio sai por uma Echo Dot, conectada por Bluetooth ao computador com um adaptador USB da Orico. O projetor usado na tentativa de projeção foi um HY300, ligado por HDMI.
Registro de aeronaves
O flight-history foi desenvolvido em Node.js. A cada 30 segundos, consulta os dados do Skylight e registra aeronaves com posição. Os dados também seguem para o InfluxDB e podem ser explorados em painéis do Grafana.
No painel, a indicação de passagem dentro do raio permanece por 10 minutos após uma passagem registrada. Essa janela mantém as passagens recentes na contagem; não significa que a aeronave permaneça fisicamente dentro do raio durante todo esse tempo. A consulta periódica também tem limites: ela não garante o registro de toda passagem entre duas atualizações.
Serviços de apoio
| Ferramenta | Função na minha instalação |
|---|---|
| Skylight | Apresentar aeronaves e a representação do céu. |
| readsb e tar1090 | Decodificar os sinais e conferir a recepção em um mapa. |
| flight-history | Guardar registros e consultar o histórico. |
| InfluxDB e Grafana | Armazenar séries temporais e explorar os dados em painéis. |
| Docker e Portainer | Executar e administrar os serviços. |
| Nginx Proxy Manager | Organizar o acesso aos serviços por nomes e HTTPS. |
| AdGuard Home | Filtrar consultas de DNS na rede doméstica. |
| Beszel | Acompanhar recursos e temperatura do servidor. |
| Uptime Kuma | Monitorar a disponibilidade e enviar avisos pelo WhatsApp. |
| Homarr | Reunir os atalhos dos serviços. |
| RustDesk | Permitir acesso remoto ao computador. |
| rclone | Enviar as cópias de segurança para o Google Drive. |
A rede doméstica usa uma malha TP-Link Deco S7, e o servidor tem endereço fixo. Para acessar os serviços por nomes com HTTPS dentro de casa, usei um domínio próprio, Cloudflare e Nginx Proxy Manager. O acesso externo é feito por uma VPN WireGuard, sem expor diretamente os painéis administrativos à internet.
Configurações que exigiram atenção
No editor web do Portainer que usei, precisei construir as imagens pela linha de comando e referenciá-las com image: nas stacks. A definição com build: não funcionou naquele fluxo. Para imagens locais, atualizar a stack e solicitar uma nova busca em um registro de imagens são operações diferentes; a tentativa de baixar novamente uma imagem disponível apenas localmente falhou.
Também precisei definir as variáveis de ambiente na interface do Portainer. O uso de env_file não teve o comportamento que eu esperava naquela implantação. Essa é uma observação sobre a configuração utilizada, não uma regra para todas as formas de executar Docker Compose.
No Skylight, a lista ALLOWED_HOSTS está relacionada aos nomes e às origens usados para acessar o servidor. Não é um cadastro de aparelhos. Na minha configuração, a remoção de um nome utilizado pelo serviço de histórico resultou em erro 403. A documentação atual descreve permissões padrão para acesso local e entradas adicionais para nomes personalizados.
Para os horários locais no SQLite, precisei instalar tzdata na imagem utilizada, além de definir a variável TZ para o fuso adotado na instalação. A variável de ambiente, sozinha, não resolveu o problema naquele ambiente.
Cópias de segurança e migração
Toda madrugada, um script interrompe os contêineres por alguns instantes antes de copiar os volumes, o código-fonte com minhas alterações e as configurações das stacks. Essa pausa foi adotada para evitar copiar os bancos enquanto os serviços escrevem neles. Depois, os arquivos são enviados ao Google Drive.
Uso rclone copy porque ele não exclui do destino os arquivos que deixaram de existir na origem. Isso ajuda a evitar que uma exclusão local se propague como ocorreria em uma sincronização que remove arquivos no destino. Entretanto, o comando pode atualizar arquivos existentes: essa escolha, sozinha, não equivale a manter versões históricas de cada arquivo.
Preparei um script para apoiar a restauração. A recuperação precisa ser verificada antes de depender dela para uma migração ou uma falha de disco; a existência da cópia e do script não substitui esse teste.
A máquina planejada para a próxima etapa tem processador i5-4670K. Pretendo usar Debian 13 com um ambiente gráfico mínimo e acrescentar o Immich para organizar as fotografias. Essa mudança ainda faz parte dos próximos passos.
Créditos e referências
- Cameron Paczek, pela criação do Skylight (abre em nova aba), sua proposta visual e o código que serviu de base para esta instalação. A documentação do projeto explica as fontes de dados, o cálculo das posições dos satélites e as regras de acesso ao servidor.
- adsbdb.com (abre em nova aba), pelas informações públicas usadas para complementar os dados de aeronaves.
- RTL-SDR Blog e as comunidades que mantêm readsb, tar1090 e as demais ferramentas utilizadas.
- NASA, pelas informações sobre a observação da ISS (abre em nova aba), incluindo as condições de iluminação para vê-la a olho nu.
- rclone, pela documentação do comando copy (abre em nova aba), que explica seu comportamento em relação aos arquivos de origem e destino.
Por privacidade, não informo a localização exata da instalação neste relato. A foto da antena e as duas imagens de interface receberam edição com IA para publicação, identificada nas legendas. O entorno externo e as referências espaciais ou de identificação foram removidos das versões correspondentes. As imagens incluídas no artigo foram reexportadas sem metadados EXIF ou XMP.