Tabla de contenido:
- Paso 1: requisitos
- Paso 2: creación y actualización del firmware del sensor
- Paso 3: configurar la nube
- Paso 4: configurar AWS Lambda
- Paso 5: configurar el flujo de datos de AWS Kinesis Firehose
- Paso 6: configurar la función de IAM para Kinesis
- Paso 7: configurar AWS EC2
- Paso 8: configurar el rol de seguridad de IAM para EC2
- Paso 9: Acceda a su instancia EC2
- Paso 10: recuperar la API de Google Maps
- Paso 11: Inicie el servidor
- Paso 12: Realice la integración HTTP en la red de Things
- Paso 13: procesamiento de datos
- Paso 14: Visualización
- Paso 15: Créditos y enlaces externos
Video: Monitoreo vial: 15 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
Hoy le mostraremos cómo configuramos un sistema de monitoreo de anomalías en las carreteras basado en acelerómetros, LoRaWAN, Amazon Web Services y Google Cloud API.
Paso 1: requisitos
- Placa DISCO-L072CZ-LRWAN1
- Módulo de expansión X-NUCLEO-IKS01A2 (para el acelerómetro)
- X-NUCLEO-GNSS1A1 (para localización)
- Una cuenta de AWS
- Una cuenta de Google Cloud Platform
Paso 2: creación y actualización del firmware del sensor
Conecte el IKS01A2 y GNSS1A1 en la parte superior de la placa a través de los pines GPIO. Descargue el código del firmware de GitHub. Cree (si aún no tiene una) una cuenta en ARM Mbed e importe el código en el repositorio en el compilador en línea. Configure la plataforma de destino en DISCO-L072CZ-LRWAN1 y guarde el proyecto. Ahora diríjase a The Things Network y cree una cuenta si aún no la tiene. Cree una aplicación, cree un nuevo dispositivo dentro de la aplicación y configure el modo de conexión en OTAA. Tome los parámetros apropiados para completar los siguientes campos en el archivo mbed_app.json: "lora.appskey", "lora.nwkskey", "lora.device-address".
El sensor registrará periódicamente los datos del acelerómetro y GNSS y los enviará a través de la conexión LoRa a la puerta de enlace más cercana, que los reenviará a nuestra aplicación en The Things Network. El siguiente paso es configurar un servidor en la nube y una integración HTTP en TTN.
Paso 3: configurar la nube
Ahora estamos listos para configurar la infraestructura en la nube que recopilará y agregará los datos de todas las placas implementadas. Esta infraestructura se muestra en la siguiente figura y está compuesta por:
- Kinesis, para manejar el flujo de datos entrantes;
- Lambda, para filtrar y preprocesar los datos antes de almacenarlos;
- S3, para almacenar todos los datos;
- EC2, para analizar datos y alojar nuestro front-end.
Paso 4: configurar AWS Lambda
Ilustraremos los pasos necesarios para configurar esta infraestructura, comenzando con Lambda.
- Inicie sesión con su cuenta de AWS y desde la página principal de la consola y vaya a Lambda
- Haga clic en Crear función
- En la parte superior de la página se debe seleccionar Autor desde cero. Luego complete los otros campos como en la imagen y luego haga clic en Crear función
- Ahora que ha creado una función de AWS Lambda, vaya a https://github.com/roadteam/data-server y copie el contenido del archivo aws_lambda.py en el editor que se encuentra en la segunda mitad de la página. Su función Lambda ya está lista:)
Paso 5: configurar el flujo de datos de AWS Kinesis Firehose
- Regrese ahora a la página principal de la consola de AWS y, a Servicios, vaya a Kinesis.
- Ahora estás en la página principal de Kinesis. A la derecha de la página, en "Flujos de entrega de Kinesis Firehose", seleccione "Crear un flujo de entrega nuevo".
- En "Nombre de la transmisión de entrega", escriba "road-monitoring-stream". Deje los otros campos por defecto y haga clic en siguiente
- Ahora, en "Transformar registros de origen con AWS Lambda", seleccione Activado y, como función Lambda, haga clic en el "road-monitoring-lambda" recién creado. No se preocupe si aparece una advertencia sobre el tiempo de espera de la función, ya que la operación que estamos haciendo no es computacionalmente costosa. Deje los otros campos por defecto y haga clic en siguiente
- Como destino, seleccione Amazon S3 y como destino S3 seleccione Crear nuevo. Como nombre del depósito, ingrese "road-monitoring-bucket" y luego vaya. Ahora deje los otros campos por defecto y haga clic en Siguiente
- Es posible que desee establecer el tamaño del búfer en 1 MB y el intervalo del búfer en 60 segundos. El búfer se vaciará a S3 siempre que se cumpla una de las dos condiciones. No abandone la página, consulte el siguiente paso
Paso 6: configurar la función de IAM para Kinesis
Ahora configuramos los permisos de seguridad para Kinesis, ya que debe llamar a la función Lambda para el preprocesamiento y luego escribirá en S3
- En la parte inferior de la página en la que se encuentra en "función de IAM", seleccione "Crear nuevo o elija", cree una nueva función de IAM como se muestra en la imagen y haga clic en Permitir.
- Ahora ha vuelto a la página anterior, haga clic en siguiente. Ahora es posible que desee volver a verificar todos los parámetros. Cuando termine, haga clic en "Crear flujo de entrega".
¡La canalización Kinesis-Lambda-S3 está en funcionamiento!
Paso 7: configurar AWS EC2
Ahora configuraremos una instancia EC2 con algunas API que nos permitirán empujar y extraer datos de la nube de AWS y también del servidor donde alojar la interfaz de nuestra aplicación. En el entorno de producción, es posible que desee publicar la API utilizando AWS API Gateway, que es más escalable.
- Desde la página principal de la consola de AWS, vaya al servicio EC2
- Haga clic en Iniciar instancia
- En la barra de búsqueda superior pegue este código: "ami-08935252a36e25f85", que es el código identificativo de la máquina virtual preconfigurada que se utilizará. Haga clic en Seleccionar a la derecha
- Seleccione t2.micro en la columna "Tipo" y haga clic en "Revisar e iniciar". No inicie la instancia todavía, vaya al siguiente paso
Paso 8: configurar el rol de seguridad de IAM para EC2
- Antes de lanzar queremos modificar el grupo de seguridad de nuestra instancia. Para hacer esto, en el extremo derecho de la sección "Grupos de seguridad", haga clic en "Editar grupos de seguridad". Configure un nuevo grupo de seguridad de la siguiente manera. Básicamente, esto configura el firewall de su instancia exponiendo el puerto 22 para la conexión SSH y el puerto 80 para los servicios
- Vuelva a hacer clic en "Revisar y lanzar". Ahora verifique que todos los parámetros estén configurados. Cuando termine, haga clic en Iniciar
- Al hacer clic, aparecerá una nueva ventana para configurar un par de claves para la conexión ssh a la instancia. Seleccione "Crear nuevo par de claves" y, como nombre, introduzca "ec2-road-monitoring". Haga clic en Descargar par de claves. Es extremadamente importante que este archivo se pierda o (peor) se almacene de forma insegura: no podrá volver a descargar la clave. Una vez descargada la clave.pem, la instancia está lista para ser lanzada
Paso 9: Acceda a su instancia EC2
Su nueva instancia EC2 está en la nube de AWS. Puede conectarse a él con el archivo de clave descargado antes (para este tutorial asumimos que conoce los conceptos básicos de ssh). Puede recuperar la IP de la instancia seleccionándola en el panel de control en la sección "Descripción" de la siguiente manera: Puede usar tanto su IP pública como su DNS público, es lo mismo. Con un cliente ssh ahora ingrese el comando:
ssh -i ec2-road-monitoring.pem ec2-user @ YOUR-IP-ADDR-OR-DNS
donde ec2-road-monitoring.pem es su clave generada antes.
Ahora proceda a extraer el código del lado del servidor
git clone --recursive
Paso 10: recuperar la API de Google Maps
Ya casi hemos terminado. Ahora tenemos que configurar la API de Google Maps en nuestra página html para mostrar el mapa con los puntos de referencia al usuario:
- Inicie sesión en su cuenta de Google y vaya a
- Haga clic en "Comenzar" a la izquierda de la página.
- Seleccione "Mapas" en el menú y luego haga clic en continuar.
- Como nombre del proyecto, ingrese "monitoreo de carreteras" y haga clic en Siguiente
- Ingrese sus detalles de facturación y haga clic en Continuar
- Ahora su proyecto está listo y obtendremos la clave API haciendo clic en API y servicios -> Credenciales
Paso 11: Inicie el servidor
Y ahí está tu clave API. Lo último que tienes que hacer es ir a data_visualization / anomalies_map.html y copiar tu clave al final del archivo así, sustituyendo "YOUR-KEY-HERE"
¡Ahora todo está listo y listo para funcionar! Para que comience a ejecutarse en la instancia EC2: "cd data-server" "python flask_app.py"
Ingrese en su navegador la dirección ip o dns de su instancia EC2, debería ver el mapa de anomalías con algunos datos ficticios
Paso 12: Realice la integración HTTP en la red de Things
Ahora que tenemos toda la infraestructura de backend en funcionamiento, podemos procesar para realizar la integración
- Cree una nueva aplicación y registre su dispositivo. Asumimos conocimientos básicos de TTN, si no, consulte la guía de inicio rápido
- En el menú de su aplicación, seleccione "Integraciones" y luego "agregar integración"
- Seleccione la integración
- Ingrese los campos que siguen a la imagen y reemplácelos con su IP de EC2 o DNS público
Paso 13: procesamiento de datos
Para cada tupla de datos T recopilados del sensor, debe realizar los siguientes pasos:
- Obtenga el conjunto de tuplas que tienen coordenadas GPS que caen en el área local de T. El área local son todas las tuplas que están a 100 metros alrededor de T.
- Para cada tupla N más cercana, calcule la media cuadrada del eje Z del acelerómetro en N. En pseudocódigo: mean = sum ([x. Z_accel ** 2 for x in near]) / near.size
- Calcule la desviación estándar al cuadrado. En pseudocódigo: std = sum ([(x. Z_accel ** 2 - mean) ** 2 for x in near])
- Salida en este formato: lat, long, Z_accel ** 2, mean, std
Para calcular el área local, use la distancia GPS en metros. En C ++:
#define D2R (M_PI / 180.0)
#define EARTH_RAY 6371 doble distancia (doble lat1, doble long1, doble lat2, doble long2) {double dlong = (long2 - long1) * D2R; doble dlat = (lat2 - lat1) * D2R; doble a = pow (sin (dlat / 2.0), 2) + cos (lat1 * D2R) * cos (lat2 * D2R) * pow (sin (dlong / 2.0), 2); doble c = 2 * atan2 (raíz cuadrada (a), raíz cuadrada (1-a));
Ahora, usando los datos intermedios generados en el paso anterior, detecta las anomalías y haz una clasificación ingenua usando este recorte aplicado a cada línea:
línea = mapa (float, line.split (","))
v = línea [2] mean = línea [3] std = línea [4] if v (mean + std * 3): if v (mean + std * 2): if v (mean + std): o.append ([1, línea [0], línea [1]) else: o.append ([2, línea [0], línea [1]) else: o.append ([3, línea [0], línea [1])
Las anomalías se clasifican utilizando la regla 68–95–99.7
Ahora tienes una colección con este formato [tipo, lat, largo].
El significado del tipo es el siguiente:
- Ligera anomalía, probablemente irrelevante
- Anomalía media
- Anomalía crítica
Paso 14: Visualización
Para comprender y tal vez cambiar la parte de visualización, debemos aprender a usar marcadores personalizados, una función de la API de Google Maps
En primer lugar, el mapa debe iniciarse en una devolución de llamada:
function initMap () {
datos = queryData (); map = new google.maps. Map (document.getElementById ('map'), {zoom: 15, center: {lat: data [0] [1], lng: data [0] [2]}}); observación(); }
Especifique el nombre de esta devolución de llamada en la URL (que insertamos aquí antes de nuestra clave API) en una etiqueta HTML:
script async defer src = "https://maps.googleapis.com/maps/api/js?key=[KEY]&callback=initMap"
Se puede insertar un marcador en el mapa cuando se crea el objeto:
new google.maps. Marker ({position: {lat: LATITUDE, lng: LONGITUDE}, map: map, icon: “/path/to/icon.png”})
Puede ver en el código que para cada dato en el conjunto de datos de las anomalías se inserta un marcador (ver la función comentario ()) y el icono se basa en la clase de la anomalía. Al ejecutar esto en el navegador, podemos explorar un mapa en el que se pueden filtrar las anomalías usando casillas de verificación, como se ve en la imagen.
Paso 15: Créditos y enlaces externos
Este proyecto fue realizado por Giovanni De Luca, Andrea Fioraldi y Pietro Spadaccino, estudiantes de primer año de Maestría en Ingeniería en Ciencias de la Computación en la Universidad Sapienza de Roma.
-
Diapositivas que los autores utilizaron para presentar esta prueba de concepto:
www.slideshare.net/PietroSpadaccino/road-m…
-
Repositorios de GitHub con todo el código:
github.com/roadteam
Recomendado:
Ubidots + ESP32- Monitoreo predictivo de máquinas: 10 pasos
Ubidots + ESP32- Monitoreo predictivo de la máquina: análisis predictivo de la vibración y la temperatura de la máquina mediante la creación de eventos de correo y un registro de vibración en la hoja de Google utilizando Ubidots.Mantenimiento predictivo y monitoreo del estado de la máquinaEl surgimiento de la nueva tecnología, es decir, Internet de las cosas, ind
Sistema de monitoreo visual basado en LoRa para agricultura Iot - Diseñar una aplicación frontal usando Firebase y Angular: 10 pasos
Sistema de monitoreo visual basado en LoRa para agricultura Iot | Diseño de una aplicación frontal usando Firebase y Angular: En el capítulo anterior hablamos sobre cómo los sensores están trabajando con el módulo loRa para poblar la base de datos Firebase Realtime, y vimos el diagrama de muy alto nivel de cómo está funcionando todo nuestro proyecto. En este capítulo hablaremos sobre cómo podemos
Arduino, monitoreo de apertura de puertas a través de Gmail: 6 pasos
Arduino, monitoreo de apertura de puerta a través de Gmail: en este tutorial, le mostraré cómo detectar el evento de apertura de puerta y enviar una notificación a través de Gmail usando Arduino Uno.Si es un principiante, puede aprender sobre wifi y sensor en Arduino - WiFi y Arduino - Tutoriales de sensores de puerta
Sistema de control y monitoreo del clima interior Raspberry Pi: 6 pasos
Sistema de control y monitoreo del clima interior Raspberry Pi: las personas quieren estar cómodas dentro de su casa. Como el clima de nuestra zona puede no ser adecuado para nosotros, utilizamos muchos electrodomésticos para mantener un ambiente interior saludable: calentador, enfriador de aire, humidificador, deshumidificador, purificador, etc. Hoy en día, es común
Sistema inteligente de monitoreo distribuido del clima IoT usando NodeMCU: 11 pasos
Sistema inteligente distribuido de monitoreo del tiempo IoT usando NodeMCU: Todos ustedes pueden estar al tanto de la estación meteorológica tradicional; pero ¿alguna vez te has preguntado cómo funciona realmente? Dado que la estación meteorológica tradicional es costosa y voluminosa, la densidad de estas estaciones por unidad de área es muy inferior, lo que contribuye a