1. Introducción
A través de los años, el desarrollo de nuevas tecnologías hizo posible la aparición de un nuevo concepto denominado como el Internet de las Cosas o IoT (Internet of Things) que hace referencia a la interconexión de los objetos del mundo físico a través de Internet y que están equipados con sensores, actuadores y tecnología de comunicación (Bonilla Fabela, et al., 2016); según Cisco Internet Business Solutions Group (IBSG) el Internet de las Cosas surgió entre los años 2008 y 2009, tiempo en el cual habían más cosas conectadas a Internet que personas (Cisco Internet Business Solutions Group, 2018). Con el pasar de los años esta idea se ha hecho más popular, siendo utilizada en la industria de producción en masa, control de infraestructura urbana, control ambiental, seguridad y el sector salud (Sanmartín Mendoza, et al., 2016).
La clave del IoT yace en la operación remota (Zhang, et al., 2012), pues cada uno de los dispositivos conectados a Internet posee una IP única que permite, mediante diversos protocolos de comunicación, ser accedido para recibir instrucciones e información, con el fin de ser almacenada o realizar alguna tarea específica (Alcaraz, 2014). Con el pasar de los años se han desarrollado diversos trabajos cuyo propósito es solucionar problemáticas, utilizando tecnologías relacionadas al Internet de las Cosas, orientados al rastreo, posicionamiento, supervisión de vías de transporte o servicios de emergencia como es presentado en la propuesta de Zapata Murillo & Baldoquin (2018).
En su trabajo, Escobar Amado, et al. (2016), hicieron uso del Internet de las Cosas para la supervisión de un proceso mediante una aplicación móvil utilizando como servidor un sistema embebido Raspberry Pi, en el cual se implementó un servidor DHCP con el fin de monitorizar una intersección semafórica en la ciudad de Cúcuta.
Asimismo, en India, Singla & Bhatia (2015) propusieron un sistema de rastreo para buses basado en GPS utilizando una aplicación Android para visualizar la ruta del vehículo así como las posiciones del usuario y el bus en donde se instaló el sistema.
Por otra parte, en Sri Lanka, Haleem SL & Sam-sudeen (2016) desarrollaron un sistema en tiempo real para el rastreo de buses e itinerario utilizando sensores inalámbricos y tecnología móvil, obteniendo alta precisión de identificación a un bajo costo.
Además, Morales Valenzuela, et al. (2015) implementaron un sistema de monitorización para pacientes de alto riesgo utilizando módulos GPS, GSM/ GPRS y Zigbee, comprobando que la tecnología utilizada es idónea debido a su robustez, rapidez y de fácil interpretación para el receptor.
Usando tecnologías GPS/GSM/GPRS, Lee, et al. (2014) desarrollaron un sistema de rastreo de vehículos mediante una aplicación móvil, demostrando la efectividad del dispositivo con respecto a la localización del vehículo, así como un diseño accesible y de bajo costo.
Incluso el uso del IoT es extendido a sectores agrarios. En este campo Lomillos-Pérez, et al (2016) realizaron un estudio de reses mediante el uso de tecnología GPS-GPRS, evidenciando la eficacia del método para el estudio de su comportamiento en el pastoreo y la obtención de datos del vínculo diferenciado y permanente entre animales emparentados.
Del mismo modo, el internet de las cosas puede ser aplicado a la seguridad y las ciencias forenses, Conti, et al. (2018) destacan un método potencialmente prometedor para solucionar problemas de seguridad y análisis forense en entornos de IoT.
En su investigación, Liu (2017) llevó a cabo la optimización de un sistema de transmisión inalámbrico basado en GPRS, obteniendo un sistema con gran expansibilidad y que puede ser usado en control industrial y en el campo de seguridad.
Otro campo del IoT está encaminado a la localización de personas extraviadas; Padilla, et al. (2015) desarrollaron un sistema basado en Arduino y GSM/GPRS para la monitorización de personas seguro y de bajo costo.
Finalmente, Satyanarayana, et al. (2012) desarrollaron un sistema para la tele-monitorización del transporte de emergencia de pacientes, utilizando tecnología GPS y GPRS. En su investigación se realizó un sistema médico integrado de adquisición de datos con un bajo costo, instalado en ambulancias encargadas para el transporte de pacientes.
Los sistemas de información geográfica tienen aplicaciones tales como: descripción del terreno en función de coordenadas espaciales, caracterización de asentamientos humanos, definición de uso de suelo, diseño de mapas de riesgo específico, y muchas otras (Sosa Pedroza & Martínez Zúñiga, 2009). Por consiguiente, es común la aplicación de sistemas cuyo propósito principal es la localización y rastreo. La implementación de dichos dispositivos y procesos hace imprescindible conocer, en tiempo real, datos como: longitud, latitud, velocidad y curso, que son elementos necesarios para establecer la ubicación y trayectoria de un objeto; asimismo, de poderse aplicar e integrar con software que permita manipular, tratar y mostrar los datos obtenidos. Este trabajo propone la realización de un sistema de posicionamiento utilizando la tarjeta Arduino UNO la cual obtiene y envía la información de la ubicación a través del protocolo TCP/IP empleando un módulo GPRS SIM900 a un servidor web operando en el sistema embebido Raspberry Pi 3.
El artículo se encuentra estructurado de la siguiente manera, comenzando con los materiales y métodos para el desarrollo del prototipo, cuya función es captar y enviar las coordenadas por medio de Internet hacia el servidor; luego se presentan los resultados obtenidos una vez implementado el prototipo; finalmente las conclusiones y recomendaciones para futuras implementaciones de sistemas del mismo tipo.
2. Materiales y métodos
El sistema ha sido diseñado para la recepción y almacenamiento de las variables de posiciona-miento en tiempo real, utilizando el estándar TCP/ IP (Transmission Control Protocol/Internet Protocol) para el envío de las variables desde el dispositivo a la base de datos alojada en el servidor.
Los dispositivos que hacen posible el funcionamiento del sistema se enuncian y explican a continuación: primeramente, el proceso de obtención de datos se realiza por medio de un módulo GPS L80, cuyo propósito es obtener la información sobre la ubicación del vehículo, por medio de la triangulación con los satélites a los cuales se conecta el dispositivo; una tarjeta Arduino UNO, encargada de tratar la información proporcionada por el GPS para transmitirla a través de Internet y un módulo GPRS SIM900, que a través de datos móviles e instrucciones programadas mediante comandos AT es usado para enviar las coordenadas geográficas a través del protocolo TCP/ IP por medio de una petición GET utilizando HTTP.
Por su parte, la información transmitida se recibe en un servidor web, el cual funciona bajo Apache 2.4, que es un servidor web libre desarrollado por Apache Server Project (Proyecto Servidor Apache) cuyo objetivo es la creación de un servidor web fiable, eficiente y fácilmente extensible con código de fuente abierto (Márquez Díaz, et al., 2002). Asimismo, se utilizó el sistema Raspberry Pi 3 como host, éste aloja una base de datos y un aplicativo en PHP encargado de la inserción de los valores en la base de datos. En la Figura 1 se muestra la arquitectura del sistema de posicionamiento previamente mencionado, donde se detalla cada uno de los componentes que hacen parte de la arquitectura del sistema y el papel que desempeña cada uno para llevar a cabo las tareas de obtención, tratamiento, envío y almacenamiento de datos de posición y movimiento.
Los datos de posicionamiento geográfico dentro del globo terrestre, necesarios para la localización de un objeto son la longitud y la latitud, las cuales son medidas teniendo en cuenta el meridiano de Greenwich y la línea del Ecuador respectivamente, tal como se detalla en la Figura 2. A su vez, para garantizar la monitorización en tiempo real del movimiento, posición y trayectoria son necesarios como mínimo el curso, la velocidad, la fecha y la hora del dispositivo en cada lectura realizada.
La obtención de los datos de posicionamiento se realizó por medio del GPS L80 haciendo uso del estándar NMEA, que determina la señal eléctrica, el protocolo y la hora de transmisión de la información para un bus de datos en serie de 4.800 baudios; a su vez, la secuencia que se usó para capturar los datos fue la $GPRMC, que es la mínima recomendada para la correcta localización (QUECTEL, 2014); un ejemplo de esta se presenta a continuación:
$GPRMC,195726.000,A,3324.9257,S,07036.3 802,W,1.08,183.58,151210,,*0E
El valor "195726.000" representa la hora del dispositivo GPS, el tiempo en UTC; el valor "A" representa la intensidad de la señal de los satélites (A activo, V de otro modo); la latitud es el cuarto valor y representa la distancia actual al norte o al sur del Ecuador; el siguiente dato hace referencia a la posición respecto a la línea del Ecuador donde "S" corresponde al sur y "N" al norte; el sexto valor representa la distancia actual al Este o al Oeste del Meridiano de Greenwich; el séptimo carácter, la longitud, contiene hacia qué lado del meridiano de Greenwich se midió esa distancia, siendo "E" el este y "W" el oeste; asimismo la cadena "1.08" indica la velocidad actual (en Nudos); el valor "183.58" indica la dirección actual en la que se mueve el dispositivo, medido como un "azimut"; el penúltimo valor se refiere a la fecha y hora del dispositivo, calculada a partir de las señales de los satélites GPS; por último, el valor "0E" es la suma de control que se utiliza para identificar los errores en los datos producidos durante la transmisión.
La tarjeta Arduino UNO fue usada para procesar los datos del GPS, debido a que la información correspondiente a las coordenadas no es recibida de forma directa sino en formato $GPRMC, lo que hace necesario decodificar cada uno de estos datos y mostrarlos de forma clara y eficiente para que puedan ser leídos con normalidad y manipulados con facilidad; para este caso, se utilizó la librería TinyGPS++ desarrollada para el sistema Arduino la cual permite la obtención de los datos desde el GPS de forma sencilla y óptima, brindando la posibilidad de adquirir los valores por medio de objetos y métodos declarados dentro de la librería.
La segunda función de la tarjeta Arduino es la de configurar el módulo GPRS SIM900 para enviar los datos a través del protocolo TCP/IP mediante una petición GET al servidor. Este módulo funciona por medio de comandos AT, que permiten controlar el encendido, apertura del canal, asignación de IP y APN, configuración de datos, protocolo, método de envío, transmisión de información y finalmente el cierre del canal.
Tanto el módulo GPS como el GPRS funcionan por medio de transmisión serial a una tasa de 19.200 Baudios; sin embargo, la tarjeta Arduino cuenta con solo un par de pines seriales (TX y RX, digitales 0 y 1), esto se remedió mediante la librería SoftwareSerial desarrollada por Arduino, la cual permite la configuración de cualquier par de pines digitales de la tarjeta como puerto serial; de este modo se habilitó la utilización de ambos dispositivos al mismo tiempo.
El algoritmo que describe de forma general el funcionamiento del programa en Arduino se presenta en la Figura 3, donde se realiza el encendido del GPRS por medio de pulsos digitales, luego de verificar si éste se encuentra apagado, para proseguir con la asignación de IP y APN para luego obtener los datos del GPS y enviarlos por medio de una petición GET a través de Internet.
Como se mencionó con anterioridad, el servidor utilizado para la gestión de la información fue Apache 2.4 junto con PHP. Se diseñó una base de datos con funcionalidad en tiempo real generada a través de un servicio desarrollado en PHP, el cual permite la consulta de los registros en formato JSON (JavaScript Object Notation). JSON es un formato compacto basado en ASCII y compuesto por objetos los cuales son conformados por los datos y el valor (Silva Pinto & Silva Centeno, 2012).
Para la obtención de los valores almacenados en el servidor, a través de un servicio web, se desarrollaron scripts en PHP para consulta de información teniendo en cuenta filtros como: los últimos datos consultados o identificadores del dispositivo, todo esto por medio del puerto 80 y peticiones realizadas por los métodos GET y POST
En cuanto a la base de datos, se utilizó el gestor MySQL debido al respaldo dentro de la comunidad de desarrolladores, su compatibilidad con Apache, su robustez, y su capacidad para permitir un número indefinido de registros y su facilidad e integración con PHP para el manejo de variables en cuanto a la consulta e inserción de datos en las tablas.
La base de datos realizada para la recepción de los valores de posición se denominó GPSService que contiene la tabla GPSTracker (Tabla 1), la cual se encarga de almacenar los valores obtenidos desde el GPS. A continuación se describen los campos definidos dentro de la tabla.
Id: Identificador de la trama de datos recibida (llave primaria auto-incremental).
Tag: Valor predeterminado para identificar el dispositivo desde el cual se están enviando los datos.
Lng: Dato correspondiente a la longitud geográfica del dispositivo (en grados).
Lat: Valor referente a la latitud geográfica del dispositivo (en grados).
Speed: Rapidez a la cual se está moviendo el vehículo (km/h).
Date: Fecha en el cual se envió el dato.
Time: Hora a la cual se generó el envío.
Card: Rumbo del vehículo (Sur - Norte - Este - Oeste).
El sistema Raspberry Pi es accesible remotamente mediante la IP local, sin embargo durante cada reinicio de éste, la dirección IP cambiaba de forma dinámica, haciendo necesario configurarla manualmente para que siempre se asignara la misma por el enrutador; esta opción se modificó en el directorio "/etc/dhcpsd.conf encontrado en los archivos de configuración de Apache. La IP estática se estableció al puerto Ethernet de la Raspberry como se muestra en la Figura 4, en la cual se eligió la dirección IP "192.168.0.50" que perduraría durante cada reinicio de la tarjeta.
En la Figura 4 se observan los diferentes ajustes que se realizaron para la configuración de la IP:
Interface eth0: Hace referencia al puerto Ethernet de la Raspberry que se configuró.
Static ip_address: Dirección IPv4 que se estableció. Además cabe resaltar que al final de esta se encuentra el sufijo "/24" la cual es una abreviatura de la máscara subred 255.255.255.0.
Static Routers: Es la dirección IP del Router.
Static domain_name_servers: Es la dirección IP del Router y DNS.
Static domain_search y Static domain_name: Nombre con el que se encontrará a la Raspberry en la red.
3. Resultados y discusión
Se realizaron pruebas constantes para verificar el envío de datos desde el Arduino hacia el servidor en la Raspberry Pi con un intervalo entre cada petición de 15 segundos. El tiempo entre cada uno de los envíos de datos fue configurado dentro del algoritmo desarrollado en Arduino.
Respecto al servidor, se obtuvo la información de la posición del prototipo en formato JSON a partir de la tabla GPSTracker, que hizo más sencilla la consulta de los datos a través de PHP para después mostrarlos en un sitio web. El vector JSON está compuesto por los valores descritos en la Tabla 1; y es compuesto por el nombre, la clave y el número, el valor del array.
El prototipo desarrollado fue expuesto a diversas pruebas de funcionamiento así como a un estudio en el cual se comparó la información obtenida desde el GPS con datos adquiridos a través de la función de geolocalización de HTML5. Un ejemplo de esto puede verse reflejado en la Figura 5, donde se observan los datos geográficos suministrados por el navegador.
En la Tabla 2 se muestran algunas de las pruebas de precisión realizadas con el prototipo. Las primeras columnas corresponden a los datos obtenidos desde el GPS, mientras que las siguientes hacen referencia a las coordenadas adquiridas mediante el navegador web. Los valores de longitud (-72,518055) y latitud (7,911825) presentados en la Figura 5, junto a los valores obtenidos mediante pruebas de funcionamiento se observan en la primera fila de la Tabla 2.
Para el cálculo de la distancia entre dos puntos sobre la superficie terrestre, obtenidos mediante los valores de longitud y latitud (ver Tabla 2), se utilizó como primera opción la Ecuación (1), que corresponde a la fórmula de la ley de cosenos para trigonometría esférica (Antúnez Romanuel & Hernández Montero, 2014), en la cual se emplea el radio terrestre en kilómetros y los valores de latitud y longitud de los dos puntos geográficos en radianes.
Donde:
φ1, φ2 →Latitudes de los puntos 1 y 2 en radianes.
λ1, λ2 →Longitudes de los puntos 1 y 2 en radianes.
d → Distancia entre dos puntos geográficos relacionados en el plano esférico (ver Figura 2).
r → Radio de la tierra en km (6.367,4 km)
Sin embargo, aunque la Ecuación (1) es matemáticamente exacta, es poco fiable para el cálculo de distancias pequeñas, debido a que el arco coseno puede introducir errores considerables. Para solventar lo anterior, se realizó la transformación de la Ecuación (1) a otra expresión que permitiera utilizarse de forma general; a la expresión resultante se le conoce como la fórmula de Haversine (Alam, et al., 2016), la cual proporciona resultados exactos para cualquier distancia; y es calculable mediante propiedades trigonométricas.
En la Figura 6 se presenta la ley de estados Haversinos, en donde se considera un triángulo en la superficie esférica con vértices u, v y w; mientras que a, b y c corresponden a las distancias a ser calculadas con la aplicación de las leyes de Haversine. Para el caso de la Tierra, las longitudes de a, b y c son iguales a su ángulo central multiplicado por el radio terrestre. La Ecuación (2) muestra la relación entre las distancias y ángulo delimitados por el triángulo u, v, w.
A su vez, la Ecuación (2) no es completamente aplicable para obtener la distancia entre dos puntos geográficos. Para obtener la fórmula de Haversine, utilizada para tal fin, se considera el caso especial donde u es el polo norte, mientras que v y w son los puntos cuya separación d es determinada. Esto es: a y b son es igual a Δλ y c es la distancia deseada Adicionalmente se utilizó la Ecuación (3), que corresponde a una diferente representación de la ley de cosenos para trigonometría esférica (Obuhuma, et al., 2018).
Desarrollando la Ecuación (2) para las condiciones descritas y haciendo uso de (3), se deriva finalmente la ley de Haversine presentada en la Ecuación (4).
Utilizando la Ecuación (4) se estimó la distancia existente entre los puntos proporcionados por el GPS y los obtenidos mediante la localización por HTML5. Como se observa en la Tabla 2, se presentó una diferencia promedio de 6,50 m con respecto al servicio de geolocalización que ofrecen los navegadores web, probando así la eficacia del sistema de posicionamiento ante la alternativa de geolocalización ofrecida a través de HTTPS por la API de HTML5.
Por último, el consumo de datos por parte del sistema de geolocalización, se calculó de la siguiente forma: se tuvo en cuenta un funcionamiento al día de 10 horas diarias con un intervalo de 15 segundos entre el envío de cada dato, es decir, 4 por minuto. Lo anterior se desarrolló como se muestra a continuación:
de 157 caracteres, es decir 157 Bytes. Para calcular la cantidad de información enviada al día se multiplicó el valor de peticiones diarias por los Bytes correspondientes a la información, esto es:
157Bytes*2.400=367,96875 kB
De este modo, el sistema presenta un consumo de datos de 367,96875 kB por día o de 10,78 MB por mes. Para efectos de comparación, de acuerdo con Cisco, el tráfico promedio mensual de un usuario móvil en el 2016 fue de 977 MB a nivel mundial (Cisco Systems Inc., 2018).
4. Conclusiones
La comparación entre los datos obtenidos por el GPS L80 y las coordenadas adquiridas mediante el servicio de georreferenciación provisto por navegadores con HTML5, arrojó un desfase de 6,50 m. Este desfase evidencia la precisión del prototipo propuesto para ubicar un vehículo en tiempo real en el globo terrestre.
El uso de la Raspberry Pi 3 como servidor web dedicado brinda al proyecto portabilidad y disminución de costos de mantenimiento debido a las dimensiones y consumo energético de la misma. Adicionalmente, esto brinda escalabilidad al proyecto haciendo más sencilla la integración del servidor en cualquier punto.
El uso de Arduino facilita la realización de proyectos relacionados con el Internet de las cosas, pues esta plataforma permite la integración de diversos dispositivos, como por ejemplo módulos GPS y GPRS, así como librerías establecidas para manejar las tareas de una forma más sencilla.
El consumo de datos del prototipo desarrollado fue de 10,78 MB mensuales, lo que representa el 1,1 % del consumo promedio mensual de un usuario a nivel mundial.
Se comprobó la capacidad de procesamiento del sistema Raspberry Pi en el tratamiento de los datos recibidos desde Internet, como servidor web y dispositivo de almacenamiento de información en tiempo real a través del protocolo TCP/IP y el puerto 80.