Balão estratosférico ESIC
Sobre o projeto Sobre nós Construção Software Dados
Sobre o projeto Sobre nós Construção Software Dados

Desenvolvimento do software

Todo o software desenvolvido por nós é Open Source está disponível na nossa página do Github.

Computador de bordo - Comunicação

Antes de qualquer trabalho ser feito no Raspberry Pi 2 (RasPi), houve diversos problemas em simplesmente estabelecer a ligação entre o computador de trabalho e o RasPi. Este tem 2 saídas de vídeo, HDMI e vídeo composto analógico, e o monitor do computador de trabalho apenas tem entrada VGA. Testámos várias alternativas diferentes até conseguirmos programá-lo de forma estável e eficiente.

Usar adaptador HDMI-VGA

Esta solução foi rapidamente descartada, uma vez que o adaptador não funcionava corretamente (e mesmo que funcionasse, teríamos de programar diretamente no RasPi, o que tornava o processo lento e isso não era desejado).

Ligar por rede usando SSH (secure shell)

Esta alternativa parecia a mais correta a seguir mas quando já se preparava a ligação por SSH, percebemos duas coisas:

  1. Sem monitor ligado ao RasPi, não havia maneira fácil de saber o IP address para fazer a ligação. Ainda assim, pensámos em usar ARP, ver os DHCP requests ou simplesmente ver no router qual o IP, o que nos leva ao ponto seguinte
  2. Na escola existe uma firewall empresarial a estragar-nos os planos! No entanto não desistimos e depois de algumas dores de cabeça, chegámos a outra alternativa

Fazer ligação ethernet direta ao computador principal

Depois de alguma pesquisa, chegámos a este site que nos explica como ligar diretamente o computador principal ao RasPi! E, para além de já ser uma boa solução assim só, ainda tivemos um bónus: como o computador estava ligado por wifi à rede, pudemos partilhar essa ligação e ter internet no RasPi.

Quando finalmente tivemos uma maneira eficaz de comunicar com o computador de bordo, pudemos começar a programar!

Computador de bordo - Configuração do Linux e bases

Para esta parte é sempre preciso um bocadinho de magia negra! Usámos a distribuição Jessie Lite do Raspbian e apenas instalámos os mínimos para se obter ganhos no consumo de energia. Seguidamente, tivemos de configurar tudo! Usámos o systemd para iniciar o nosso programa mal o RasPi iniciasse e configurámos o NTP (Network Time Protocol) para não tentar ir buscar as horas a lado nenhum pois não há internet na estratosfera (e se não fizéssemos isto, iríamos ter horas bem configuradas durante os testes pois tínhamos internet). Também ativámos o watchdog para fazer restart do RasPi na eventualidade de ele bloquear.

Depois de termos o sistema operativo configurado, começámos a trabalhar no nosso programa. Começámos por fazer um sistema de logging para podermos saber de tudo caso alguma coisa falhasse e depois começámos a pensar em maneiras de conseguir perceber o que se está a passar no RasPi sem termos contacto direto (no lançamento não há monitores nem ligação ethernet para ninguém!). Chegámos à conclusão que, uma vez que vamos ter transmissão de vídeo em direto, podíamos usar a faixa de áudio para comunicar! E como? Com um speech synthesizer! Sim, temos um sintetizador de voz que comunica eventuais erros que aconteçam e, para além disso, está constantemente a dizer as coordenadas provenientes do GPS! Assim, na altura do lançamento, sabemos quais são os sitemas que falharam e os que iniciaram e podemos simplesmente ouvir as coordenadas para não estarmos sempre a ler.

Computador de bordo - Sensores de temperatura e pressão

A ligação ao sensor de temperatura/pressão foi fácil de fazer apesar de termos um problema inicial. Utilizámos o BMP180 e como ele ainda não estava soldado, a ligação falhava às vezes, mas quando percebemos que era esse o problema, foi uma questão de adicionar o código de leitura do sensor ao script principal.

Computador de bordo - Câmara digital

Apesar de termos uma câmara analógica para transmissão de vídeo em direto, também temos uma câmara digital ligada ao RasPi para gravarmos o vídeo da viagem. Esta parte também foi muito simples de fazer, uma vez que apenas usámos a câmara oficial do RasPi. Criámos uma thread que grava vídeos para o cartão de memória regularmente e ficou a funcionar.

Uma parte engraçada da câmara é a luzinha que ela tem quando está a gravar. Depois de olharmos para isso, pensámos "Ela tem de ir desligada para não fazer reflexo no vidro, e já agora podíamos aproveitar e fazer alguma coisa com ela..."; e foi precisamente isso que fizemos! Quando o RasPi liga, para termos mais um fator de confirmação, a luz pisca 5x e depois desliga-se. Assim sabemos quando o RasPi começa a correr o nosso software!

Computador de bordo - GPS

Esta parte foi a mais difícil porque estávamos a ter erros aleatórios sem os conseguirmos reproduzir e muito estranhos. Depois, de muitas tentativas e erros, descobrimos que o nosso GPS estava localizado no /dev/ttyACM0 e usámos essa localização para inicar o gpsd. Também descobrimos que por vezes tínhamos de reiniciar o sistema de GPS e por isso adicionámos lógica para fazer isso regularmente.

Finalmente, para sincronizar as horas com o relógio do GPS usámos várias alternativas. Começámos por usar o NTP, pois este supostamente tem em conta os delays e corrige a hora, mas acabámos por usar uma simples configuração manual das horas no código, porque o NTP estava cheio de problemas e mais de metade das vezes não funcionava.

Como uma imagem vale mais que mil palavras, então o código utilizado é muito melhor para descrever a solução utilizada, por isso dêem uma vista de olhos!

Momento engraçado: tivemos de reduzir o cabo do GPS para não ficar tanto cabo no meio da caixa... e por momentos pensámos que tínhamos estragado tudo! Dentro do cabo USB há 4 cabos mais pequenos e, ao soldar duas pontas de dois cabos diferentes, estava a ficar um desastre! A solução foi soldar à parte metálica final diretamente e não soldar as duas pontas de dois cabos.

Website

E para finalizar, ainda tivemos de fazer este site para o projeto! O interessante é que, como queríamos fazer um projeto 100% desenvolvido por nós, foi precisamente isso que fizemos: não usámos framework nenhuma e desenvolvemos tudo de raiz! E sim!, este site também é Open Source como o resto do projeto e está disponível no branch gh-pages do nosso repositório.

Para além de ter sido feito todo por nós, foi feito num curto espaço de tempo! Como podem verificar no log do repositório, começou a ser desenvolvido a 5 de maio e tinha de estar pronto a tempo do lançamento (20 de maio)! É a cereja no topo do bolo deste projeto!