Conectando sensores con Signal K

En esta entrada vamos a conectar mediante el protocolo Signal K, el aforador de combustible capacitivo que diseñamos en la entrada anterior a openplotter. Para ello vamos a explicar algunos detalles del protocolo y cómo debemos implementarlo en Arduino.

Quizás sea un a entrada un poco técnica, pero intentaremos que sea lo más amena posible.

Signal K

Empecemos explicando qué es la señal K. Signal K es un protocolo de de intercambio de datos para equipos electrónicos marinos, universal, gratuito y de código abierto. Qué significa esto, que es un código que permite comunicar distintos equipos náuticos (GPS, Sonda, AIS,..), que no es propietario, que es libre y abierto para quien quiera utilizarlo. Fue diseñado para uso marino  basándose en tecnologías web tipo JSON.

En los años 80, empezaron a surgir movimientos de generación de software libre como alternativa a los software propietarios de las grandes empresas. Empezaron a surgir comunidades alrededor del mundo que se juntaban para desarrollar código abierto para que cualquiera pudiera hacer uso de él y modificarlo. Signal K pertenece a este tipo de software. Al ser un código abierto, cualquiera (en este caso nosotros), puede hacer uso de él, modificarlo y adaptarlo a su necesidad. Nosotros, en esta entrada, vamos a utilizarlo para comunicar el aforador capacitivo que hemos diseñado, con la raspy y openplotter, de modo que dejemos accesibles los datos del aforador para su monitorización, envío de alarmas,…

Con Signal K se puede compartir información entre equipos a través de distintos canales de comunicación (WiFi, serie,…). Si me lo permitís, es como la versión náutica del internet de las cosas. Con Signal K podremos conectar nuestros equipos electrónicos náuticos y dejarlos accesibles para poder disponer de ellos para lo que queramos, monitorización remota, mostrarlos en un display, cruzarlos,…

Os dejamos el link de la página oficial de Signal K de donde hemos sacado la información y donde nos hemos apoyado para desarrollar la aplicación. LINK

Signal K

Deltas y json

En el estándar de Signal K publicado en la comunidad anteriormente citada, se definen dos formatos o dos maneras de representar y enviar los datos. Estos se pueden enviar en formato FULL o DELTA. Simplificando mucho, FULL es la información completa y DELTA solo la actualización de los datos de la información que cambia. Si lo resumo mas, formato completo o simple.

Este información se comparte como JSON, un formato de texto simple, con una estructura de datos concreta que sirve para comunicar distintos lenguajes de programación. Signal K, al utilizar este formato simple de texto, facilita el poder programar un traductor en equipos electrónicos, Arduino en nuestro caso. Vamos a generar un código dentro del Arduino al cual está conectado el aforador (esto ya lo hicimos en la entrada anterior), que convierta los datos en formato JSON para el protocolo Signal K (espero que se haya entendido)

Ya que la información de nuestro sensor es unidireccional, de Arduino a Openplotter, vamos a implementar el formato simple, el DELTA.

Un mensaje tipo DELTA tiene esta estructura:

{
  "context": "vessels.urn:mrn:imo:mmsi:234567890",
  "updates": [
    {
      "source": {
        "label": "N2000-01",
        "type": "NMEA2000",
        "src": "017",
        "pgn": 127488
      },
      "timestamp": "2010-01-07T07:18:44Z",
      "values": [
        {
          "path": "propulsion.0.revolutions",
          "value": 16.341667
        },
        {
          "path": "propulsion.0.boostPressure",
          "value": 45500
        }
      ]
    }
  ]
}

Esta estructura se puede simplificar más aún, y de hecho es lo que vamos a hacer para las primeras pruebas, y se puede enviar simplemente la siguiente información:

{
  "updates": [
    {
      "values": [
        {
          "path": "tanks.fuel.0.currentLevel",
          "value": 18.341667
        }
      ]
    }
  ]
}

Como se puede apreciar, es una agrupación de arrays y listas de datos y variables. En nuestro caso, como solo queremos enviar un solo dato, con la estructura anteriormente citada, es suficiente para que el servidor de Signal K de openplotter lo entienda.

En en el array de variables “values” se incluyen los datos que se quieren enviar. Signal K tiene predefinida una lista de datos donde recoge todas las variables de información que se podría enviar. En nuestro caso hemos seleccionado la variable: tanks.fuel.0.currentLevel. Con esta variable estamos informando del nivel actual del tanque de combustible. Existen variables de todo tipo, simplemente tendríamos que cambiar el valor de “path” y estaríamos enviando la información correspondiente. El valor a enviar, se indica en “value”.

Os dejamos el link donde se recogen y se explican las posibles variables que se pueden utilizar para las posibles aplicaciones que se os ocurran. Nosotros ya tenemos preparadas las de temperatura, humedad, agua de sentina, nivel de batería, nivel de agua potable,….

Aunque no queremos entrar en detalle del código para que no se haga demasiada pesada la entrada, si alguien está interesado, que se ponga en contacto con nosotros, se lo compartiremos encantadisimos!!! El anterior código del aforador ya lo compartimos con varias personas. Simplemente comentar que la librería que hemos utilizado para crear la estructura Delta de JSON en Arduino es “ArduinoJson.h” y que el envío de información se hace cada minuto. Cuando lo instalemos en el barco, la información se enviará en intervalos mayores para optimizar el consumo de batería.

Configuracion Openplotter

Una vez tenemos el Arduino con el aforador configurado, ahora toca configurar openplotter y el servidor Signal K. En nuestro caso, la comunicación entre raspy y Arduino sera USB. Hemos intentado hacerlo a través de los pines TX y RX del arduino, pero no es posible. Estos pines son comunicación TTL y la raspy necesita de un conversor usb-TTL que no disponemos. Es verdad que la raspy dispone de puertos TTL, pero para poder habilitarlos, además de tener que toquetear la electrónica, se debe deshabilitar el bluetooth y demomento, es una opción que no contemplamos.

Para ello lo primero que debemos hacer es configurar una comunicación serie con el protocolo Signal K. Para ello accedemos al menú de openplotter y seleccionamos Serial. Y en la pantalla de Serial pulsamos sobre actualizar para que se muestre la conexión USB entre arduino y raspy. La seleccionamos y en la parte inferior de la pantalla, asignaremos un alias a esta conexión (“aforador” en nuestro caso), seleccionaremos el protocolo signal K y pulsamos sobre aplicar.

En la pestaña de conexiones, seleccionaremos la conexión de USB configurada en el paso anterior (identificarlo por el alias) y pulsaremos sobre Añadir s Signal K. De esta forma, estaremos redirigiendo la información de nuestra conexión USB, es decir, de nuestro arduino, al servidor Signal K. En la pantalla emergente, seleccionaremos la velocidad, en nuestro caso 1200 (hemos seleccionado esta velocidad tan baja porque la rapidez no es importante en nuestro caso y reducimos la posibilidad de fallo por ruido) y pulsamos sobre automatico. Debemos esperar a que reinicie el servidor (se muestra el temporizador en la parte inferior de la pantalla).

Una vez realizado los pasos anteriores, accederemos al servidor Signal K y comprobaremos que nuestra conexión (identificarlo en la lista de conexiones mediante el alias) tiene tráfico de datos.

VISUALIZACIÓN

La visualización en el servidor de Signal K es de lo más fácil que nos podemos imaginar. Como el propio protocolo permite el envío de los datos etiquetados, es decir, que cuando llegan al servidor el dato tiene un significado, no tenemos más que seleccionar de la lista de webapps del servidor Signal K, el panel de instrumentos y automáticamente, al estar enviando ya datos a través del puerto USB, se nos mostrará un panel con la información de nuestro aforador.

Así de sencillo.

Ya tenemos la información en nuestro servidor. Ahora a traves del boton de configuracion del panel, podremos hacer modificaciones a nuestro gusto sobre maximos y minimos, formato del indicador (analogico o digital), limites de la zona roja, nombre, tamaño, posición,…..

Esto lo dejamos a vuestro gusto

En las próximas entregas, continuaremos incluyendo más sensores a nuestro arduino y llevándolos a openplotter.

Nos queda ajustar los límites de la medida, pero esto lo dejaremos para cuando lo instalemos en el barco, ya que igualmente habrá que calibrarlo en la instalación y ubicación definitiva. El objetivo de esta entrada, era aprender a comunicar el arduino con la raspy con Signal K

Esperemos que os haya gustado, para cualquier duda, contactarnos! Estaremos encantado de ayudar en lo que podamos.

Un comentario sobre “Conectando sensores con Signal K

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s