¿Por qué la transformada de Fourier?
La transformada de Fourier se aplica para convertir una señal en el dominio del tiempo a una señal en el espectro de frecuencia caracterizada por funciones seno o coseno. Con esto en mente, la transformada de Fourier se puede utilizar para analizar y descomponer las formas de onda (esta descomposición depende de la fase y la magnitud). Hay una gran variedad de aplicaciones para esto en el campo de la ingeniería, como el procesamiento de señales, el análisis de señales, el mantenimiento predictivo, etc.
Podrías graficar la Transformada Rápida de Fourier. Así, puedes obtener información relevante sobre el espectro. Por ejemplo, este es el gráfico obtenido por el sensor de vibración triaxial NCD para el eje X.
En este artículo, presentaremos el uso del plugin de transformada de Fourier en Ubidots para tu sensor de mantenimiento predictivo NCD.
Requisitos:
Un sensor NCD PR55-61PM conectado a un IoT Edge Computer o gateway NCD equivalente.
Una cuenta activa de Ubidots (licencia industrial y superior).
1. Instalación del plugin NCD en tu cuenta de Ubidots
Paso uno: Inicia sesión en tu cuenta de Ubidots y luego ve a dispositivos → plugins.
Paso dos: Haz clic en el botón "+" ubicado en la esquina superior derecha de la pantalla.
Paso tres: Busca el plugin NCD como se ve a continuación, una vez que hagas clic en él, verás una descripción del plugin y su versión actual, luego haz clic en continuar.
Paso cuatro: Configura el plugin seleccionando el token del dispositivo de la cuenta.
Paso cinco: Ingresa la frecuencia de muestreo (debe coincidir con la tasa de salida configurada en el sensor).
Paso seis: Ingresa un nombre y una descripción para tu plugin, luego haz clic en continuar.
Paso siete: Ve a Decoder. Ten en cuenta que se te proporcionará una URL de endpoint utilizada para ejecutar la función de decodificación (el plugin).
NOTA: Calculará la transformada rápida de Fourier, luego devolverá las magnitudes y frecuencias.
2. Programa tu función de decodificación.
Se te proporcionará un entorno de desarrollo donde podrás programar y decodificar los datos del sensor utilizando Python 3.7 y devolver un JSON compatible con Ubidots.
Este entorno de programación se divide en 2 secciones
Test Payload: Allí ingresas una carga útil de muestra que simula los datos entrantes del sensor en formato JSON, al hacer clic en "Test run", la función de decodificación se ejecutará utilizando la carga útil de prueba como entrada. La salida se mostrará en la consola.
Code Editor: Contiene un código prellenado que se puede editar a voluntad. Haz clic en el botón "SAVE & MAKE LIVE" para guardar y desplegar el código.
3. Configura el gateway NCD para enviar los datos al plugin FFT.
En este punto, ya deberías haber configurado el IoT Edge Computer. Si aún no has configurado tu IoT Edge Computer, consulta esta guía primero, luego configura tu sensor de mantenimiento predictivo para que envíe datos en bruto siguiendo este artículo.
Para configurar el gateway para enviar los datos del dispositivo al plugin. Para ello, crearemos un flujo personalizado que se verá así:
Paso uno: Abre la Interfaz de Usuario (UI) de NCD escribiendo en cualquier navegador la dirección IP predeterminada 192.168.3.1 o la dirección IP que se muestra en la pantalla del IoT Edge Computer.
Paso dos: Ve a la pestaña Node Red, luego localiza el flujo donde se configuró el nodo del sensor.
Paso tres: Importa los siguientes nodos al flujo actual.
[{"id":"3ac4cea9.817802","type":"function","z":"aa57ceec.2a8708","name":"Setup Request","func":"var data = msg.payload.data;\nvar payload = {};\n\npayload[\"data\"] = data\npayload[\"deviceLabel\"] = msg.data.addr\nmsg.payload = payload;\nmsg.headers = {};\nmsg.headers[\"Content-Type\"] = \"application/json\";\nmsg.headers[\"X-Auth-Token\"] = \"<YOUR_UBIDOTS_TOKEN>\";\nmsg.method = \"POST\";\n\nreturn msg;\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":500,"y":260,"wires":[["343e37bb.5bf6d8"]]},{"id":"d3b29713.930378","type":"debug","z":"aa57ceec.2a8708","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":890,"y":340,"wires":[]},{"id":"343e37bb.5bf6d8","type":"http request","z":"aa57ceec.2a8708","name":"Function Call","method":"use","ret":"obj","paytoqs":"ignore","url":"<YOUR_PLUGIN_URL>","tls":"","persist":false,"proxy":"","authType":"","x":710,"y":260,"wires":[["d3b29713.930378"]]}]
Paso cuatro: Conecta el nodo del sensor inalámbrico con el nodo de Setup Request.
Paso cinco: Abre el nodo "Setup request"
Paso seis: Asigna tu token de Ubidots en el encabezado "
X-Auth-Token
"Paso siete: Finalmente, edita el nodo de solicitud HTTP y cambia la URL a la URL de endpoint proporcionada en la pestaña Decoder de tu plugin.
NOTA: El flujo completo sería algo como esto:
[{"id":"5fd5ef48.5b593","type":"ncd-gateway-node","z":"aa57ceec.2a8708","name":"","connection":"837142ce.132b28","unknown_devices":false,"outputs":1,"x":170,"y":140,"wires":[["d31847c3.cbcb88"]]},{"id":"d31847c3.cbcb88","type":"debug","z":"aa57ceec.2a8708","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":390,"y":140,"wires":[]},{"id":"d3d7fe08.c95e1","type":"ncd-wireless-node","z":"aa57ceec.2a8708","name":"Sensor de Mantenimiento Predictivo","connection":"837142ce.132b28","config_comm":"837142ce.132b28","addr":"00:13:a2:00:41:ee:32:a8","sensor_type":"82","auto_config":true,"node_id_delay_active":"","node_id":0,"delay":300,"destination":"0000FFFF","power_active":"","power":4,"retries_active":"","retries":10,"pan_id_active":"","pan_id":"7FFF","change_enabled":"","change_pr":"0","change_interval":"0","cm_calibration":"60.6","bp_altitude":"0","bp_pressure":"0","bp_temp_prec":"0","bp_press_prec":"0","amgt_accel":"0","amgt_mag":"0","amgt_gyro":"0","impact_accel":"0","impact_data_rate":"4","impact_threshold":25,"impact_duration":1,"activ_interr_x":1,"activ_interr_y":2,"activ_interr_z":4,"activ_interr_op":8,"force_calibration_co2_auto_config":"","force_calibration_co2":400,"filtering":0,"data_rate":5,"time_series":0,"reading_type":1,"mode_80_active":"","mode_80":"1","measurement_mode_80_active":"","measurement_mode_80":0,"on_request_timeout_80_active":"","on_request_timeout_80":0,"deadband_80_active":"","deadband_80":0,"filter_80_active":"","filter_80":0,"output_data_rate_p1_81_active":"","output_data_rate_p1_81":0,"output_data_rate_p2_81_active":"","output_data_rate_p2_81":0,"sampling_duration_p1_81_active":"","sampling_duration_p1_81":0,"sampling_duration_p2_81_active":"","sampling_duration_p2_81":0,"current_calibration_82":"","current_calibration_82_active":false,"output_data_rate_101_active":"","output_data_rate_101":0,"sampling_duration_101_active":"","sampling_duration_101":1,"sampling_interval_101_active":true,"sampling_interval_101":"4","full_scale_range_101_active":"","full_scale_range_101":1,"x_axis_101":"","y_axis_101":"","z_axis_101":"","x":190,"y":260,"wires":[["13a982fb.2b80cd","3ac4cea9.817802"]]},{"id":"13a982fb.2b80cd","type":"debug","z":"aa57ceec.2a8708","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":160,"y":340,"wires":[]},{"id":"3ac4cea9.817802","type":"function","z":"aa57ceec.2a8708","name":"Setup Request","func":"var data = msg.payload.data;\nvar payload = {};\n\npayload[\"data\"] = data\npayload[\"deviceLabel\"] = msg.data.addr\nmsg.payload = payload;\nmsg.headers = {};\nmsg.headers[\"Content-Type\"] = \"application/json\";\nmsg.headers[\"X-Auth-Token\"] = \"BBFF-2f34RG8mr78GW1T68jR8Ui5R4xx8iT0\";\nmsg.method = \"POST\";\n\nreturn msg;\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":480,"y":260,"wires":[["343e37bb.5bf6d8"]]},{"id":"d3b29713.930378","type":"debug","z":"aa57ceec.2a8708","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":870,"y":340,"wires":[]},{"id":"343e37bb.5bf6d8","type":"http request","z":"aa57ceec.2a8708","name":"Function Call","method":"use","ret":"obj","paytoqs":"ignore","url":"http://dataplugin.ubidots.com/api/web-hook/hhytyDUIL-C_k!5U7Y85F88CFJw=","tls":"","persist":false,"proxy":"","authType":"","x":690,"y":260,"wires":[["d3b29713.930378"]]},{"id":"837142ce.132b28","type":"ncd-gateway-config","name":"","comm_type":"serial","ip_address":"","tcp_port":"2101","port":"/dev/ttyS1","baudRate":"115200","pan_id":"7FFF","rssi":true}]
4. Comienza a recibir la amplitud y frecuencia de tu señal
En este caso, el dispositivo acelerómetro NCD es un dispositivo triaxial porque mide la vibración en los ejes X, Y y Z. La carga útil JSON entrante del gateway NCD se envía de la siguiente manera:
{"deviceLabel":"machine_one","data":{ "dot1": { "X":"value_of_axis_x", "Y":"value_of_axis_y", "Z":"value_of_axis_z" }, "dot2":{ "X":"value_of_axis_x", "Y":"value_of_axis_y", "Z":"value_of_axis_z" } }}
Si todo está configurado correctamente, la función debe devolver un diccionario que contenga tres arreglos NumPy de puntos compuestos de N muestras, por ejemplo:
#{{"axis_X":"[X1,X2,X3,X4...Xn]"},{"axis_Y":"[Y1,Y2,Y3,Y4...Yn]"},{"axis_Z":"[Z1,Z2,Z3,Z4...Zn]"}}
Al final, la función calcula la Transformada Rápida de Fourier para cada vector en el diccionario para dar las N amplitudes y frecuencias que se almacenarán como vectores NumPy en el contexto de una nueva variable. Además, los valores máximos de amplitud y frecuencia se establecen por defecto en el campo "value".
{ {"amplitude":{"value":"amplitudeMax","context":"amplitude":" [a1,a2,a3...an]"}, {"frequency":{"value":"frequencyMax","context":"frequency":"[f1,f2,f3...fn]"} }
En este punto, los datos se transformarán al espectro de frecuencia con la Transformada Rápida de Fourier. Además, el usuario tendrá la posibilidad de analizar el espectro con la amplitud y frecuencias generadas por Ubidots. Así, una vez que se haya recibido una carga útil entrante correcta por parte de Ubidots, se crearán estas variables en el dispositivo creado: frequency-x, frequency-y, frequency-z, max-amplitude-x, max-amplitude-y y max-amplitude-z, en estas variables es posible visualizar los datos transformados por la Transformada Rápida de Fourier (FFT).
Luego, se crearán las respectivas variables y el usuario podrá ver los datos en la UI. Estos datos muestran el valor máximo para todos los ejes, y en el contexto se almacenará la amplitud o frecuencia, que depende de la variable elegida, las variables se establecerán de la siguiente manera:
Variable de frecuencia para el eje Y:
Variable de amplitud para el eje Y:
4. Verifica los resultados.
A partir de ahora, podrás graficar tus datos transformados con la FFT en Ubidots. Podrías usar un High Frequency Widget para representar los datos de todos los ejes.
Artículos relacionados: