Saltar a contenido

Software

Como hemos expuesto anteriormente al final de la sección Introducción, hemos creado nuestro propio software para recoger, procesar y visualizar los datos obtenidos desde la estación meteorológica.

Es importante mencionar que Sparkfun desarrolló un programa para la placa Arduino que utilizamos, el cual se encarga de recoger los datos de la estación y enviarlos a un ordenador en forma de texto reconocible para él mismo. Lo que sucede es que el formato es difícil de leer para una persona, ya que utiliza diversas palabras claves complicadas de entender.

Es por eso que, aprovechando el programa que Sparkfun creó para la placa Arduino Mega 2560, decidimos desarrollar una aplicación de escritorio que se encargase de procesar los datos en el formato mencionado anteriormente, y mostrarlo de forma que sean muy fáciles de entender para una persona. Resumidamente, nuestros objetivos de desarrollo son:

  1. Diseñar una aplicación con una interfaz de usuario moderna y fácil de usar.
  2. Permitir la recopilación de datos meteorológicos de forma local y remota.
  3. Mostrar gráficamente dichos datos para permitir un análisis visual de los mismos y ayudar a realizar predicciones meteorológicas.
  4. Conseguir que dicha aplicación sea compatible con múltiples sistemas operativos (principalmente Windows y Linux).
  5. Evitar al máximo el uso de herramientas propietarias y, especialmente, de pago, con la finalidad de fomentar el uso del software libre, económico y seguro.

Herramientas utilizadas

Para desarrollar una aplicación de escritorio que se ejecute dentro de un sistema operativo, hace falta programarla en un lenguaje de programación que dicho sistema sea capaz de entender. En nuestro caso, decidimos utilizar el lenguaje C++, ya que es muy rápido y compatible con otros sistemas operativos distintos de Windows. El principal inconveniente que tiene C++ es su complejidad, pero basándonos en nuestros conocimientos previos de programación en otros lenguajes como Java y C#, no nos resultó una tarea tan complicada como pensábamos.

Además, para ampliar la compatibilidad multiplataforma de nuestra aplicación, decidimos usar la plataforma de desarrollo y las bibliotecas Qt en su versión open source (la cual es completamente gratis y de código abierto), que ayudan en diferentes aspectos de la programación de C++, especialmente en la compatibilidad entre sistemas operativos (como Windows, MacOS y Linux), en el desarrollo de interfaces gráficas para el usuario y en la recolección de datos a través de USB.

Desarrollo de la aplicación

Poco a poco, y aprendiendo a usar Qt por el camino, fuimos desarrollando distintas versiones de nuestra aplicación. Cabe decir que la aplicación está únicamente disponible en inglés (con la finalidad de distribuir nuestro proyecto a un público más amplio), pero tenemos pensada una versión en español para las siguientes actualizaciones.

Las principales versiones con sus principales cambios son:

  • EMeteo 0.1.1:

    Imagen de EMeteo 0.1.1

    • Primera versión importante de EMeteo, con recogida de datos por USB, ciertas opciones de configuración y guardado de datos en hoja de cálculo.
  • EMeteo 0.1.4:

    Imagen de EMeteo 0.1.4

    • Rediseño de la interfaz de usuario (UI).
    • El monitor de serie ahora está oculto por defecto.
    • Mejoras en el guardado de datos.
    • Correcciones de errores y más mensajes de ayuda para el usuario.
  • EMeteo 0.2.4:

    Imagen de EMeteo 0.2.4

    • Rediseño de ciertos elementos de la interfaz de usuario (UI).
    • Nuevas opciones de configuración, como la posibilidad de guardar datos cada ciertos segundos, y no todos los datos recibidos.
    • Buscador de actualizaciones de la aplicación integrado.
    • Nuevo icono de la aplicación (por Leo Jiménez).
    • Otros cambios menores de rendimiento y estabilidad.
  • EMeteo 0.3.6:

    Imagen de EMeteo 0.3.6

    • Actualizador integrado en la aplicación, mostrando además un registro de cambios para cada nueva versión.
    • Corrección de errores, especialmente en el guardado de datos de la aplicación.
  • EMeteo 0.4.0:

    Imagen de EMeteo 0.4.0

    • Agregada una interfaz para importar datos de forma remota al dispositivo (desde la Raspberry Pi 3B en nuestro caso).
    • Corrección de errores durante el guardado de datos.
  • EMeteo 0.5.0 (actual):

    Imagen de EMeteo 0.5.0

    • Agregado un visualizador de datos integrado, el cual genera gráficos con los datos recibidos y muestra información relevante sobre ellos.
    • Eliminación (temporal) de la integración con Excel, ya que su principal uso era el de mostrar gráficos con la información proporcionada usando una hoja de cálculo preparada externa. Además, el nuevo formato usado es mucho más rápido de procesar por la aplicación que el archivo .xlsx.
    • Mejoras en el manejo de ciertas ventanas.
    • Mejoras del rendimiento de la aplicación.
    • Nuevo icono de aplicación (generado por Midjourney).

Se ha tenido en especial consideración los derechos de autor durante el desarrollo del proyecto. Todas las imágenes mostradas en las pestañas "Acerca de" han sido obtenidas desde la biblioteca de imágenes de Canva, excepto en la versión 0.5.0, que es de Pixabay (CC0). El antiguo logotipo de la aplicación fue diseñado por Leo Jiménez Pérez y utilizado de forma autorizada en el proyecto. El icono de la nube y el sol de las versiones 0.1.1 y 0.1.4 fue creado por OpenClipart-Vectors en Pixabay. El logotipo de la aplicación en la versión 0.5.0 ha sido generado por Midjourney. El icono de "refrescar" de la ventana de configuración fue obtenido de Wikimedia Commons (CC0).

Otro software creado

Además de la aplicación de escritorio expuesta anteriormente, hemos tenido que desarrollar el software necesario para permitir la conexión entre la Raspberry Pi y el ordenador mediante una conexión inalámbrica.

Creamos dos pequeñas aplicaciones para lograr dicho objetivo, las cuales se ejecutan directamente en la Raspberry Pi:

  • La primera se encarga de recibir los datos a través del puerto USB del Arduino Mega 2560 y almacenarlos en un documento de texto. Esta aplicación se desarrolló utilizando C++ y Qt, al igual que la de escritorio, pero ésta no contiene una interfaz de usuario.
  • La segunda se encarga de enviar los datos mediante WiFi al ordenador que corresponda. La aplicación se conectará a la red inalámbrica que corresponda (por ejemplo, la del instituto) y creará una simple página web (servidor) la cual será responsable de proporcionar a la aplicación de escritorio expuesta anteriormente los datos meteorológicos que solicite. Este programa se desarrolló utilizando el lenguaje Python y la biblioteca flask, ya que construir esta aplicación utilizando C++ sería mucho más laborioso.