Blog

Componente de Software

17 de Junho de 2025


A parte de software do projeto está finalizada e operacional. Foi desenvolvido o código principal em Arduino C++, usando um ESP32, e está dividido em várias partes-chave que funcionam em conjunto para recolher, guardar e enviar os dados obtidos pelo sensor de pressão MS5803-14BA.

O sistema começa por inicializar todos os módulos: sensor de pressão, cartão SD, Wi-Fi e o serviço de tempo (NTP). Depois disso, entra num ciclo de leitura de dados ambientais (temperatura, pressão e cálculo da profundidade com base nesses valores), guarda esses dados num ficheiro CSV no cartão SD (/dados.csv), e tenta enviá-los posteriormente para uma base de dados InfluxDB — tudo isto de forma automática.

No código (ver imagens abaixo), destaque para os seguintes pontos:

  • Leitura de sensor: Uso da biblioteca oficial do MS5803 com uma oversampling de 512. O sensor fornece a pressão em mbar e a temperatura em ºC. A profundidade é calculada com base na diferença entre a pressão absoluta e a pressão atmosférica padrão (1013.25 mbar), considerando a densidade da água do mar (1025 kg/m³).
  • Guardar dados em CSV: Os dados são guardados no cartão SD com um timestamp obtido via NTP, para garantir uma referência temporal precisa.
  • Condição de envio de dados: Quando a profundidade é igual ou inferior a 5 cm (assumindo que o sensor já está fora da água), o sistema espera 5 segundos e volta a verificar. Se ainda estiver fora de água e com Wi-Fi ligado, os dados são enviados via HTTP para a InfluxDB.
  • Gestão de energia e Wi-Fi: O código está preparado para lidar com falhas de Wi-Fi (não tenta enviar se não estiver conectado) e limpa o ficheiro CSV após o envio para evitar duplicações.

A ideia é que este sistema funcione de forma autónoma e segura, mesmo que não haja ligação à internet no momento da recolha dos dados – garantindo assim a sua persistência local no SD.

print codigo
print codigo