DESARROLLO DE UN SISTEMA CENTRALIZADO DE …

29
DESARROLLO DE UN SISTEMA CENTRALIZADO DE MANTENIMIENTO Y CONTROL DE IMPRESORAS 3D Rodrigo José Peón Gómez Trabajo de fin de grado Escuela de Ingeniería de Telecomunicación Grado en Ingeniería de Tecnologías de Telecomunicación Tutor Francisco Poza González Cotutor Victor Manuel Caiña Ballina Curso 2019-2020

Transcript of DESARROLLO DE UN SISTEMA CENTRALIZADO DE …

DESARROLLO DE UN SISTEMA CENTRALIZADO DE MANTENIMIENTO Y

CONTROL DE IMPRESORAS 3D

Rodrigo José Peón Gómez

Trabajo de fin de grado

Escuela de Ingeniería de Telecomunicación

Grado en Ingeniería de Tecnologías de Telecomunicación

Tutor

Francisco Poza González

Cotutor

Victor Manuel Caiña Ballina

Curso 2019-2020

Escola de

Enxeñaría de

Telecomunicación

Grao en Enxeñaría de

Tecnoloxías de

Telecomunicación

Mención:

Sistemas Electrónicos

Desarrollo de un sistema centralizado de

mantenimiento y control de impresoras 3D Autor: Rodrigo José Peón Gómez

Tutor: Francisco Poza González

Cotutor: Victor Manuel Caiña Ballinas

Curso: 2019/2020

I. Introducción

Desde la empresa Imagina Ingenio S.L se busca optimizar tiempos de producción, específicamente en

el área de producción de carcasas para módems, para así agilizar la fabricación de estos dispositivos.

Estas piezas plásticas son impresas con ayuda de impresoras 3D que posee la empresa para esa finalidad

(véase Anexo II). Teniendo en cuenta que solo un operario se encarga del mantenimiento y puesta a

punto de estas máquinas, y que este no dedica todas sus horas de trabajo a las impresoras, se precisa

pensar una manera de automatizar estas funciones.

Es en este punto donde entra un sistema capaz de informar sobre el estado de las máquinas, que indique

en base a información del pasado cuando estas puedan pararse, de manera que el operario pueda saber

con cierta exactitud cuando hacer un trabajo sobre dicha máquina y así resultar más eficiente, a la vez

que se minimizan los tiempos de parada de producción. En este ámbito no existe una solución especifica

de un software que realice esta labor, de manera que es interesante estudiar una solución dedicada de un

servicio de mantenimiento predictivo para las impresoras 3D de la empresa.

Por otra parte, también es importante generar una solución centralizada para el control de las impresoras,

especialmente en lo referente a las impresiones remotas, producción de piezas, cantidad de material

gastado y sobre todo el poder tener indicadores de productividad que puedan dar una información

importante del estado de la línea de producción, ya que, en teoría, esta sería una pequeña línea de

producción.

En cuanto a este aspecto existen distintas herramientas genéricas de control de impresoras 3D (Véase

Anexo I), sin embargo, el registro de producción y los indicadores derivados es una funcionalidad que

no se ve en estas aplicaciones. Además, un punto clave es que solo se podría enviar un archivo de manera

remota a una impresora a la vez, y no a todas. Por consiguiente, se ve clara la necesidad de crear una

solución particular para esta finalidad.

En definitiva, es necesario desarrollar una solución dedicada para las impresoras 3D de Imagina Ingenio

que incluya los dos aspectos explicados con anterioridad: servicio de mantenimiento predictivo y control

de las impresoras.

II. Objetivos

El objetivo general del presente trabajo es el desarrollo de un sistema centralizado de control y

mantenimiento predictivo para las impresoras 3D. A su vez el trabajo se subdivide en dos aplicaciones

claramente diferenciables:

• Control de las impresoras: eficiencia total de todas las máquinas, la cantidad de piezas que se

imprimen, la cantidad de material que se consume, la función de poder imprimir a distancia de

manera centralizada desde una interfaz gráfica y la administración de los dispositivos.

• Mantenimiento predictivo: analíticas de los datos de mantenimiento y fallos, modelo predictivo

capaz de correlacionar distintos factores que pudieron causar un fallo en el pasado con nuevos

datos, y de esta forma poder saber cuándo hacer un trabajo de mantenimiento sobre esa

impresora.

Así, se pueden identificar cinco objetivos específicos, que se enlistaran a continuación:

• Implementación de una base de datos en Mysql para la persistencia de la información y el uso

de esta.

• Desarrollo del backend del sistema, con el diseño de una API REST que sirva como interfaz

entre la base de datos y el frontend, con la inserción y consulta de datos. Aunado a lo anterior,

respecto a la información de la producción, esta puede ser usada por la empresa para lograr un

nivel superior de centralización en esta área, con la consulta, al endpoint correspondiente, de

los datos a través de la aplicación de Odoo.

• Diseño y desarrollo de un modelo de datos coherente que sirva para predecir, con cierta

probabilidad, cuando puede ocurrir un fallo desde el último día que se hizo mantenimiento a la

máquina, con el uso de un algoritmo supervisado de Machine Learning en Python [1].

• Desarrollo del frontend, de manera que sea una interfaz intuitiva donde se puedan insertar datos,

observar errores de las impresoras, poder contar con notificaciones de mantenimiento predictivo

según los datos recibidos, analítica de estos y graficas de los datos de producción.

• Programación de un código en Python para las Raspberrys conectadas a las impresoras capaz

de captar los errores de la máquina, y que se mantenga en estado de escucha para recibir un

archivo de impresión y enviarlo a la impresora.

III. Desarrollo

El orden de la lista de los objetivos específicos, mencionados con anterioridad, es el orden en el que se

realizó el trabajo. Es decir, en primera instancia se diseñó e implementó la base de datos en MySQL

para luego desarrollar el backend en Python, y así sucesivamente. Se explicará claramente cada una de

las decisiones tomadas en cada uno de los cinco puntos.

A. Base de datos

Como se ha dicho antes, se ha realizado la base de datos en MySQL instalando el cliente para Python y

así poder conectarlo con el framework en el cual se desarrolló la API. En la Figura 1 se puede observar

un esquema generado por la herramienta MySQL Workbench, donde se ven las distintas tablas y la

forma en la que el sistema guarda la información.

Figura 1: Esquema de la base de datos del sistema

B. API REST

Se ha desarrollado una API RESTful en el lenguaje de programación Python con el framework Django

y la aplicación Django REST framework [2]. Se ha tomado la decisión de usar Django puesto que posee

mucha documentación online y con un paradigma fácil de entender y usar, además que está escrito en

Python lo cual es adecuado para el procesado de datos, que será explicado en el apartado siguiente.

Esta API REST tiene un acceso sencillo a sus datos a través de peticiones HTTP a los endpoints

correspondientes usando métodos como GET, POST, DELETE, PUT, entre otros. Los endpoints son las

distintas URLs con las cuales la API interactúa con otros sistemas, de manera que puedan consultar,

modificar, crear y eliminar datos de forma fácil y en un formato estándar bastante popularizado en los

últimos años, el formato JSON. En la Tabla I se muestran los endpoints correspondientes a cada tipo de

información y/o función.

Para guardar los datos de un archivo de impresión, la API persiste la URL donde el servidor guarda dicho

archivo y el ID de la máquina a la cual va dirigido, luego el cliente, es decir, la Raspberry de la impresora

a la que corresponda dicha impresión, se encargará de consultar si hay una impresión para ella, la

imprime e inmediatamente después manda una petición DELETE al endpoint dedicado para dicho fin y

para dicha impresora, para así indicarle al backend que elimine el archivo de la cache del sistema.

Luego también se ha implementado el procesado de datos de mantenimiento del lado del servidor, de

manera que la API estregue toda la información del modelo de datos, es decir, que entregue el resultado

del algoritmo de Machine Learning empleado para la predicción de los días que transcurren desde el

último mantenimiento hecho hasta el fallo, además de la puntuación del mismo que indica el rendimiento

del algoritmo y toda la información para que funcione correctamente. De esta forma, el cliente no solo

dispondrá del dato predicho, sino que también tendrá una medida que indique cuan acertada es la

herramienta además de los datos de entrenamiento y de prueba de la misma.

Tabla I: Endpoints de la API RESTful creada

/Impresoras Lista de impresoras registradas

/ {int: id_impresora} Impresora asociada al id

especificado

/archivo de impresión Lista de las URLs con los archivos de impresión

/ {int: id_impresora} Archivo de impresión especifico de

la impresora con id_impresora

/produccion Datos de producción de todas las impresoras por jornada de trabajo

/ {int: id} Dato especifico de producción

/material Datos de gasto de filamento para impresión 3D

/ {int: id} Dato especifico de cambio de

material

/atasco Lista de atascos graves o leves de las impresoras

/ {int: id} Atasco especifico con esa id

/error Lista de errores de las impresoras

/ {int: id} Error especifico con esa id

/mantenimiento Lista de mantenimientos hechos

/ {int: id} Dato de mantenimiento especifico

/descalibracion Lista de descalibraciones de la impresora

/ {int: id} Descalibración especifica con esa id

/machineLearningData Lista de cada impresora con su respectivo modelo de datos, dato a predecir

y dato predicho

C. Modelo de Machine Learning para mantenimiento predictivo

Como se mencionó anteriormente, el predecir cuándo va a ocurrir un fallo de la máquina, entiéndase

como fallo aquel que ocurre por un atasco que requiere mantenimiento correctivo (para saber más de los

tipos de fallos que pueden tener las impresoras 3D de la empresa Imagina Ingenio véase Anexo II), es

fundamental para poder disminuir en la medida de lo posible los tiempos de parada de producción.

Viendo la necesidad de encontrar una forma de hacer mantenimiento predictivo a las impresoras, se ha

tomado la decisión de usar herramientas de Machine Learning (ML) para la predicción de los días que

transcurren desde los últimos mantenimientos hasta los atascos graves de cada máquina.

Un modelo de Machine Learning ayuda a resolver problemas donde se quiera automatizar la toma de

decisiones en base a, por una parte, datos del pasado, entradas y salidas, hablando de esta forma de un

algoritmo supervisado, y por otra, tomando en cuenta los datos que se van recopilando al momento, y a

la vez, en tiempo real, se va extrayendo información de los mismos, con esto se habla de algoritmos no

supervisados, ya que no requieren de que alguien los entrene con pares de entradas y salidas.

Analizando la solución a la problemática que se plantea en el presente proyecto, se empleará un

algoritmo supervisado, el cual va a ir entrenándose en base a la información anterior y a la que se le

vaya suministrando. Adicionalmente a la elección anterior, gracias a la información empírica

proporcionada por el encargado de mantenimiento de las impresoras, se ha encontrado una correlación

entre el suceso de fallo y otros sucesos, ya que ha indicado que existen varios indicios de haber una

dependencia evidente entre factores que se repiten en varias ocasiones antes de que ocurra un fallo, tales

factores son los siguientes: error de temperatura máxima en la impresora y atascos leves, así como

también señaló que las máquinas, usualmente, tardaban en presentar un fallo por atasco en torno a un

mes desde el último mantenimiento.

Debido a que existen múltiples opciones de algoritmos de ML, donde se puede elegir una u otra de

acuerdo a las necesidades que se tengan, es decir, en torno a la información de entrada que se posea y al

tipo de salida, por ejemplo: si es discreta o continua, acotada o no. Por ello cabe definir qué tipos de

algoritmos se pueden utilizar para la naturaleza del conjunto de muestras creado y para ello hay que

tener en cuenta las siguientes definiciones clave.

Un datapoint o muestra es la entrada del sistema, el cual se compone de una lista de características que

pueden tener un patrón común con otros puntos, donde cada uno de ellos tiene una salida asociada, y,

juntos, con sus respectivas salidas, forman un dataset. Por ejemplo: si se tiene un conjunto de muestras

de flores y se desea que un algoritmo diga que tipo de flor es, teniendo como información el color de

los pétalos y la longitud de la flor, entonces un datapoint sería (rojo, 45cm) y una salida sería una rosa,

de manera que si se tiene un dataset más completo se pueda entrenar a un algoritmo para que prediga

un datapoint nuevo en base a la información anterior.

Las características de un datapoint son las informaciones que se pueden extraer de diversas partes y que

tengan una relación con la salida, en el caso de interés para este estudio son los referentes a los factores

mencionados anteriormente: al error de temperatura y al atasco leve, y a partir de ellos se extraen las

características.

La elección de las características expuestas en la Tabla II tiene como base el encontrar una relación entre

los factores y las fechas del mantenimiento hecho, tomando como eventos todos aquellos atascos leves

y errores entre una fecha de mantenimiento y una fecha de fallo, y luego extrayendo las características.

De esta forma, un dato a predecir sería la última fecha de mantenimiento de una impresora hasta el día

actual, y, para tener el datapoint bien acomodado, se tendrían que extraer los factores entre esas dos

fechas y luego calcular sus características, para luego insertarlo en el algoritmo, y que este, según sea

su tipo, prediga cuando ocurrirá un fallo en base al dataset de entrenamiento. El algoritmo dispondrá de

una medida que indica cuan acertado es, con la ayuda de un juego de entradas y salidas de prueba, con

ello se puede ver que tan cerca está de una predicción perfecta. Otra cosa a remarcar es que el tipo de

datapoint utilizado es un vector compuesto por el número de características.

Tabla II: Características de un datapoint

1 Número de atascos leves (desde último mantenimiento)

2 Días entre último mantenimiento y primer atasco leve

3 Días de diferencia mínimos entre dos atascos leves

4 Número de errores de temperatura (desde último mantenimiento)

5 Días entre último mantenimiento y error de temperatura

6 Número de veces en que ocurre el suceso de error de temperatura seguido de un atasco

leve

7 Días entre error de temperatura y atasco leve

Conocido ya el tipo de datos de entrada y salida que tendrá el sistema hay que decidir un algoritmo de

ML que se adecue a los mismos, para ello se explicarán tres tipos y se justificará al final porque se

prefiere uno frente a los otros. También, más adelante, en el apartado de resultados aparecerá la

puntuación de cada uno para compararlos cuantitativamente.

Sin embargo, vale hacer la acotación de que a veces la puntuación no dice cuan acertado sea el algoritmo

para cualquier tipo de punto pues cabe la posibilidad de que ese modelo de datos este ajustado para un

tipo concreto de entradas y si siempre son las mismas siempre serán las mismas salidas, por lo que tendrá

un porcentaje de acierto muy alto para entradas a la medida, pero para entradas nuevas no podrá predecir

de forma veraz. En estos casos se habla de un modelo, sobreajustado (Overfitting) a los datos de

entrenamiento, es decir, un modelo complejo poco acertado. En caso de ser un modelo con pocos datos

de entrenamiento, muy simple, se habla de un modelo desajustado (Underfitting). Se debe llegar a una

compensación entre las dos partes para poder tener un modelo generalizado que prediga siempre un

nuevo dato de la manera más acertada posible. Todas estas definiciones se pueden entender mejor con

la ayuda de la Figura 2.

Figura 2: Curva de compensación entre complejidad y precisión del modelo de datos [3]

Con la ayuda del módulo de Python llamado scikit-learn se plantea usar los siguientes algoritmos: K-

Nearest Neighbors regresor o la variante continua del método de los K-Vecinos más próximos,

Regresión lineal y regresión lineal selectiva Lasso (Least Absolute Shrinkage and Selection Operator)

con regularización L1 [4].

a. Regresión K-Vecinos más próximos

El algoritmo de K-Nearest Neighbors es el algoritmo más simple de Machine Learning que se puede

considerar. Consiste en entrenar al algoritmo y este se encarga de hacer la predicción de un nuevo punto

buscando los K puntos vecinos que existan y sus respectivas salidas, quedándose en caso de la regresión

con la media de los vecinos más relevantes.

Este algoritmo tiene especial interés por su sencillez, es fácil de entender y de aplicar con el único ajuste

paramétrico de la cantidad de vecinos que se elige, parámetro que se ajusta de acuerdo al dataset que se

tenga. Sin embargo, es un algoritmo que falla cuando se tiene que las características de los datapoints

son cero en muchos de los casos, lo cual ocurre con el estudio actual, y también falla cuando son muchas

las características que posee el dataset.

b. Regresión lineal

El modelo lineal es utilizado para predecir una salida a partir de una entrada con una relación de

dependencia aparente, en este caso particular se plantea la siguiente formula lineal:

𝑦 = 𝑊[0] ∗ 𝑋[0] + 𝑊[1] ∗ 𝑋[1] + ⋯ + 𝑊[6] ∗ 𝑋[6] + 𝑏

Donde 𝑦 es la salida del sistema y las variables de 𝑋[0] a 𝑋[6] denotan las características de un

datapoint, mientras que las variables de 𝑊[0] a 𝑊[6] son las pendientes de cada una de las

características, es decir la ponderación que se le da a cada una de ellas, finalmente la 𝑏 es el corte con

el eje 𝑦 del plano. De manera que al tener siete características estamos hablando de un plano de siete

dimensiones, al ser siete las variables independientes.

El algoritmo de la regresión lineal utiliza el método más simple, que es el método ordinario de mínimos

cuadrados OLS (Ordinary least squares). De manera que encuentra la W y la b que minimiza el error

cuadrático medio entre las predicciones y las verdaderas muestras del dataset de entrenamiento. El error

cuadrático medio mide el promedio de los errores al cuadrado, es decir, la diferencia entre la predicción

y los valores reales.

El principal problema de este algoritmo es que no se puede controlar la complejidad del mismo, ya que

se va sobreajustando a medida que se insertan datos, y no se pueden ponderar de manera distinta aquellas

características que usualmente son cero, por lo tanto, se usan alternativas para poder solventar esta

problemática por medio de las regularizaciones L2 (Ridge) y L1 (Lasso)

c. Regresión lineal selectiva (Lasso)

Esta variante de la regresión lineal utiliza la regularización L1 que consiste en ponderar las variables

con unos coeficientes 𝑊 más bajos, haciendo que sean lo más bajas posibles, donde muchas pueden ser

exactamente cero, de acuerdo a la cantidad de información que estas características aporten para predecir

la salida. Esto implica que algunas características son ignoradas por el algoritmo, lo cual resulta de

especial interés si algunas de ellas no aportan nada de valor en alguna impresora.

Luego ajustando 𝛼 se pueden configurar estas restricciones, donde 𝛼 es un parámetro propio de las

regresiones lineales selectivas, en este caso particular del algoritmo Lasso, para controlar cuan estricto

es el algoritmo al ponderar los coeficientes, de manera que un 𝛼 muy pequeño elimina toda restricción

y termina siendo una regresión normal y corriente. Por consiguiente, modificando este parámetro se

puede controlar la complejidad del modelo, de acuerdo al dataset que se posea, teniendo así mayor

control sobre el algoritmo.

Por todo lo expuesto anteriormente, se ha llegado a la conclusión de utilizar este algoritmo en la

aplicación de mantenimiento predictivo del sistema.

D. Aplicación web

Para que el usuario pueda interactuar con el sistema se requiere de una interfaz gráfica que sirva para

recoger, a través de formularios sencillos, los datos de mantenimiento, atascos, producción y cambios

de filamento de impresión. Además de la recolección y consulta de datos, el frontend también se diseñó

para servir de ayuda con el servicio de mantenimiento predictivo, teniendo un panel de notificaciones

que indique cuando hacerle un trabajo preventivo a la impresora antes de que ocurra un fallo, además

de mostrar gráficos y analíticas.

Al lado de cada formulario hay un historial de los últimos movimientos insertados en la base de datos y

estos pueden ser filtrados según que impresora interese, y editados o eliminados ante cualquier posible

error al momento de insertar la información, de manera que se pueda tener control sobre lo que se está

registrando.

Por lo tanto, es de notar que se necesita una aplicación para tablets o una Web app sencilla y dinámica

que sea intuitiva de cara al usuario encargado de hacer el mantenimiento, que tenga una interfaz gráfica

amigable para ser usada de forma rutinaria como modo de registrar los eventos que ocurren en la

impresora, a la vez que la web vaya entregando los datos de predicción, e indicadores de eficiencia de

la línea de producción, en el caso de la aplicación de control.

Como añadido, con la aplicación de impresión a distancia se puede mandar un archivo de impresión a

una o más máquinas, de manera que se pueda centralizar esta función que se hace de manera manual y

que resulta tediosa, repetitiva y en ocasiones difícil, por el mal funcionamiento de la mayoría de los

encoders de las impresoras que hacen perder tiempo seleccionando el archivo de impresión.

Por las necesidades anteriormente expuestas se tomó la decisión de utilizar Vue.js, un framework para

la creación del frontend potente, en el sentido de proporcionar todas las herramientas necesarias para

implementar el diseño planteado, y a la vez tener una facilidad a la hora del aprendizaje, al ser una

alternativa simple y flexible con respecto a otros frameworks como Angular.js o React.js [5]

E. Conexión con las impresoras y programa de la Raspberry

Cada una de las impresoras de la empresa utiliza un Arduino Mega 2560, cuyo puerto serie va a estar

conectado en todo momento a una Raspberry pi 3, como se puede ver en el esquema de la Figura 3, la

cual tendrá un programa que logré capturar los errores que envié el firmware de las impresoras,

denominado Marlin, como, por ejemplo: error al calentar extrusor, error al calentar la cama caliente,

error de temperatura máxima, entre otros errores.

A su vez, las raspberrys van conectadas por Ethernet a un switch para tener conexión a la red y de esta

manera el error capturado será enviado mediante el protocolo HTTP al backend para así ser almacenado

en la base de datos.

Figura 3: Conexión del Arduino con la raspberry pi

Otra función sería la de impresión de un archivo, donde la Raspberry estará en espera activa, haciendo

peticiones al servidor hasta que tenga respuesta, para seguidamente descargar el archivo y que este sea

enviado por el puerto serie al Arduino para que la maquina lo detecte y sea impreso. Al final se envía

una petición para que se elimine el archivo del servidor y vuelva a su estado de espera activa. Cabe

señalar que si ocurre un error durante la impresión el programa podrá ser capaz de detectarlo y enviarlo

a la base de datos.

Todo lo explicado en este apartado de desarrollo del sistema, sin contar los matices hechos, se puede

resumir en la Figura 4, que pretende servir de generalización de todo el proyecto, de manera que sea una

herramienta de guía para entender todo el trabajo realizado.

Figura 4: Esquema del sistema completo, las tecnologías empleadas y las conexiones con las

impresoras

IV. Resultados

Para poder exponer los resultados se harán tres distinciones, la primera las capturas explicadas de la

aplicación web desarrollada e implementada, la segunda parte serían los estudios de los distintos

algoritmos de Machine Learning explicados con el uso de diferentes datasets de entrenamiento, y, por

último, hacer las pruebas pertinentes para determinar el correcto funcionamiento de la impresión remota

y de la captura de errores enviados por las impresoras.

A. Aplicación web

Se ha logrado implementar la aplicación como se esperaba, quedando así un sitio web dinámico y con

un diseño minimalista. Para demostrar que la aplicación se ha realizado con éxito se emplearán distintas

capturas de pantalla para poder enseñar, de esta manera, el trabajo realizado. En este apartado solo

aparecerán las capturas que se consideren más importantes, en el Anexo III aparecen todas las capturas

de pantalla restantes de la aplicación.

En la Figura 5 se puede observar una imagen del panel de control de producción donde se muestra un

indicador muy importante para la producción de carcasas que es la eficiencia tanto individual de cada

modelo, representado por los colores, como total. Además, cuenta con dos botones, uno para acceder al

formulario de inserción de datos de producción y de cambio de material (Figura 20, Anexo III), y el otro

para acceder a las gráficas de producción (Figura 21, Anexo III).

Figura 5: Panel de producción de la aplicación de control del sistema y pantalla principal de la

aplicación

En la Figura 6 se puede observar el panel de control de la aplicación de mantenimiento predictivo del

sistema. En su parte derecha, aparece un listado de notificaciones de acciones a tomar de acuerdo a las

predicciones del algoritmo de ML, en la otra parte de la pantalla se encuentran, en el orden respectivo,

los botones de registro de fallos (véase Figura 22, Anexo III), registro de mantenimiento (Figura 23,

Anexo III) y analíticas (Figura 7). Esta última tiene: el tipo de algoritmo y su puntuación, una gráfica

con cada uno de los datapoints tomados para el dataset de esa impresora y una tabla con el historial de

errores que va enviando la máquina.

Figura 6: Panel de mantenimiento predictivo de la aplicación

Figura 7: Herramienta de mantenimiento predictivo

Por último, se tiene la pantalla de gestión de impresiones, la que se muestra en la Figura 8. Donde se

pueden seleccionar múltiples impresoras.

Figura 8: Pantalla de envío de impresiones a las maquinas

B. Algoritmos de Machine Learning

El diagrama de flujo del código desarrollado para el modelo de datos diseñado se puede observar en el

Anexo IV junto con una breve explicación del mismo.

En la Tabla III se puede ver una comparación entre los distintos algoritmos expuestos con anterioridad

con el dataset mostrado en la pantalla de la Figura 7, donde para el Lasso y el K-Nearest Neighbors se

varían los parámetros 𝛼 y 𝑘 respectivamente. La puntuación negativa indica una correlación inversa.

La tabla indica que, como se ha comentado antes, el algoritmo de los K-Vecinos más próximos no es

adecuado para un dataset con muchas características, en este caso siete. Además, se puede observar que

mientras más pequeño sea el 𝛼 menos restrictivo será el algoritmo, por lo tanto, su desempeño se va

acercando a una regresión normal, incluso el de 𝛼 = 0.001 tiene una puntuación menor que la regresión.

El de 𝛼 = 1 es el que tiene mayor puntuación dentro de todas las pruebas hechas para estos datos de

entrenamiento, específicamente el algoritmo tiene un 82% de posibilidades de predecir bien.

Tabla III: Comparativa entre los distintos algoritmos de Machine Learning

Algoritmo (Parámetro) Puntuación

KNeighborsRegressor (𝐾 = 1) -1.84

KNeighborsRegressor (𝐾 = 2) -0.43

KNeighborsRegressor (𝐾 = 3) -0.17

Regresión lineal -13.94

Lasso (𝛼 = 0.001) -21.29

Lasso (𝛼 = 0.01) -9.04

Lasso (𝛼 = 1) 0.82

Lasso (𝛼 = 10) 0.65

C. Programa de impresión y captura de errores en la Raspberry

En el Anexo V se muestra el diagrama de flujo del código que se ha programado en Python para las

Raspberrys de las impresoras, donde con una breve explicación se logra exponer el trabajo realizado en

cuanto a la función de impresión remota y la captura de errores.

Se han hecho una serie de pruebas de impresión de una pieza de soporte de sensor del eje Z de la

impresora desde el sistema central desarrollado y estas se han conseguido llevar a cabo con éxito.

Comprobándose de este modo el buen funcionamiento de la función de impresión a distancia, y la

conexión entre la app web, la API, el programa de la Raspberry de la impresora y la impresora.

Por otra parte, se han detectado errores al calentar los extrusores y la cama caliente desconectando los

sensores de temperatura al momento de calentar estos componentes de la impresora 3D. Dando

evidencia de un buen funcionamiento en el código de captura de errores.

V. Conclusiones

Los objetivos del proyecto se alcanzaron con éxito, se pudo desarrollar un sistema centralizado y

dedicado para la empresa Imagina Ingenio capaz de controlar las impresoras 3D, además de establecer

un servicio de mantenimiento predictivo capaz de dar un valor añadido al sistema.

Se logró diseñar e implementar una aplicación web dinámica y minimalista, con un interfaz gráfico

intuitivo para el usuario a la hora de registrar cualquier eventualidad que pueda ocurrir en las máquinas,

exceptuando el registro de errores que se hace de forma automática.

Se concluye que el algoritmo de Machine Learning usado trabaja de manera adecuada, sin embargo,

habría que controlar el parámetro de configuración de restricciones de la regresión lineal selectiva, según

sea el dataset del modelo de datos la impresora, por tanto, queda pendiente el poder hacer que el sistema

adecue este parámetro de manera automática según la puntuación que vaya recibiendo.

Como líneas futuras se tiene en mente implementar un sistema de videovigilancia de las impresoras con

cámaras conectadas a las raspberrys, además se podrá hacer un procesado de imagen para saber cuándo

una pieza está en la cama caliente, colocando filtros según el color del filamento y detectando si dentro

de un área preestablecida hay pixeles diferentes al negro para asegurar que una pieza está presente. De

esta forma se puede automatizar el conteo de la producción.

VI. Bibliografía

[1] Andreas C. Müller and Sarah Guido, Introduction to Machine Learning with Python,

Gravenstein: O’Reilly Media, Inc, 2018

[2] William S. Vincent, REST APIs with Django: Build powerful web APIs with Python and

Django, Independently published: 2018

[3] Andreas C. Müller and Sarah Guido. (2018). Trade off of model complexity against training and

test accuracy [Gráfico]. En Introduction to Machine Learning with Python. Gravenstein:

O’Reilly Media, Inc

[4] Jaime Durán. (2019, oct, 29). A Quick Guide on Basic Regularization Methods for Neural

Networks. [online]. Disponible: https://medium.com/yottabytes/a-quick-guide-on-basic-

regularization-methods-for-neural-networks-e10feb101328

[5] Shaumik Daityari (2020, ag, 9) Angular vs React vs Vue: Which Framework to Choose in 2020.

[online]. Disponible: https://www.codeinwp.com/blog/angular-vs-vue-vs-react/

Anexo I: Estado del arte

A. Tipos de impresoras 3D

Existen diversos tipos de impresoras 3D que se pueden clasificar en función de las tecnologías de

impresión 3D que existen.

Impresoras 3D por estereolitografía (SLA). Se considera la primera técnica en utilizarse para

impresiones 3D y consiste en usar el principio de fotopolimerización para crear piezas a partir de resinas

sensibles a rayos ultravioleta, con la aplicación de un haz de luz UV se solidifica la resina capa por capa,

dotando así de mayor calidad a los modelos hechos con esta tecnología. Mientras que la base que soporta

la pieza se va hacia abajo o arriba, dependiendo del modelo, de manera que la luz irradie sobre un nuevo

baño de resina líquida. La impresora 3D SLA de la empresa se puede observar en la Figura 9 mientras

que la Figura 10 muestra diversas piezas de prueba impresas con esta máquina.

Figura 9: Impresora 3D SLA de Imagina Ingenio

Figura 10: Piezas impresas con la impresora SLA

Las impresoras 3D de sinterización selectiva por láser (SLS) usa al igual que la SLA el láser para

imprimir los objetos en 3D, sin embargo, esta permite utilizar una gran cantidad de materiales en polvo

(cerámica, cristal, nylon, poliestireno, entre otros). El láser impacta en el polvo, funde el material y lo

solidifica como se puede ver en la Figura 11.

Figura 11: Pieza impresa mediante la técnica SLS

Las impresoras 3D por inyección son las más parecidas a una impresora habitual, pero en lugar de

inyectar tinta sobre papel, inyectan capas de fotopolímero líquido que se curan en la bandeja de

construcción. En este sentido, se conoce la impresora Projet X60 una nueva línea de impresoras 3D que

lanza 3D System que destaca por la incorporación entre sus propiedades de la tecnología de impresión

Colorjet que optimiza la fabricación multicolor de forma automatizada, permitiendo así diseños a

medida con una más alta precisión en los resultados, obtenidos con mayor calidad. En la Figura 12 se

puede observar un ejemplo de una pieza impresa con este tipo de impresora 3D.

Figura 12: Pieza impresa mediante la técnica de inyección 3D

Por último, existen las impresoras 3D que usan la técnica de impresión por deposición de material

fundido o como se le conoce comúnmente FDM del inglés Fused Deposition Modelling, técnica que

consiste en depositar polímero fundido sobre una base plana caliente, capa por capa. El material que

inicialmente se encuentra en estado sólido en bobinas (de material PLA y ABS), se funde y se expulsan

minúsculos hilos por la boquilla del extrusor de la máquina que se van solidificando a medida que se va

formando la capa. Un ejemplo de una impresora 3D FDM de la empresa Imagina Ingenio se puede

detallar en la Figura 13.

Figura 13: Impresora 3D FDM de Imagina Ingenio con un solo extrusor

B. Programas de control de impresoras 3D

Se han encontrado dos aplicaciones de código abierto dedicadas al control de una impresora, se tiene

primero de un software no remoto de conexión directa por puerto serie que se denomina Printrun 3D o

Pronterface, y luego se halla OctoPrint que ya sería una interfaz web completa de control remoto de la

impresora 3D.

Por una parte, Pronterface es más una aplicación usada para calibrar y poner a punto a la maquina ya

que solo necesita tener al microcontrolador de la impresora conectado por puerto serie al ordenador para

poder funcionar, tiene opciones básicas de enviar ordenes de movimiento a la máquina, control de

temperatura, envió de impresión, previsualización del archivo 3D, cargar en la tarjeta SD de la impresora

el archivo de impresión, ordenes de temperatura, entre otras opciones como se puede observar en la

Figura 14.

Figura 14: Software de control de impresoras 3D Pronterfac

Por otra parte, OctoPrint es una aplicación que requiere tener conectada una Raspberry pi a la impresora,

tal y como se tiene contemplado hacer en el estudio presente. Al estar conectado a la red se tiene acceso

a ella de forma remota, además cuenta con cámara web para poder ver como está el estado de la

impresión si ha ocurrido algún fallo o si va de forma correcta, dispone de múltiples opciones remotas,

sin embargo, solo se puede conectar a una impresora a la vez, haciendo de este punto la principal

diferencia al proponer una solución dedicada. Se pueden ver una captura de esta aplicación en la Figura

15 donde se observan las distintas características que tiene esta interfaz web.

Figura 15: Software de control remoto de impresoras 3D OctoPrint

Anexo II: Impresoras de Imagina Ingenio S.L

La empresa posee impresoras 3D FDM montadas a la medida, están basadas en el modelo de la maquina

Prusa que vende Orballo printing. Sin embargo, solo la estructura es de esta impresora, pues luego se

adapta para que tenga dos extrusores (Véase Figura 16) y así sea el doble de productiva a la hora de

imprimir carcasas de módems. La empresa tiene un total de siete impresoras operativas.

Son impresoras usadas para la producción de carcasas para módems de comunicación para el desarrollo

de soluciones de IoT especialmente en máquinas de vending (Véase Figura 17). Aunado a lo anterior,

también se usan para el prototipado de nuevos proyectos desarrollados por la empresa.

Su electrónica está basada en un Arduino mega 2560, con un microcontrolador basado en el

ATMEGA2560, montado sobre un shield o placa base especializada llamada RAMPS 1.4, desde el cual

se conectan los sensores, las resistencias térmicas, los motores de los ejes, la pantalla y el encoder, entre

otros componentes.

El firmware que utilizan estas impresoras es el Marlin 1.0.2, mientras que a la impresora usada para las

pruebas se le instaló una versión más actual la 2.0. Este código es totalmente configurable para el tipo

de impresora que se tenga, por ejemplo: la velocidad de los ejes, la cantidad de extrusores, los tipos de

drivers que usan los motores, entre otros parámetros.

Los principales fallos por los que se detiene la máquina son debidos a los atascos en el extrusor, pues

generalmente se daña el teflón que guía al filamento y hay que hacer mantenimiento correctivo para que

pueda volver a funcionar. Muchas veces los atascos se generan por daños en los componentes bien sea

el termistor NTC que va en el cabezal del extrusor o la resistencia térmica del mismo. Siendo estas las

principales anomalías que se traducen en paradas de producción.

Otro fallo de estas impresoras es a la hora de la calibración, ya que se descalibran muy fácilmente

teniendo así que actuar manualmente para poner la impresora a punto y que esta pueda imprimir.

Figura 16: Impresora de Imagina Ingenio con dos extrusores

Figura 17: Ejemplo de carcasa impresa

Anexo III: Capturas aplicación web

Figura 18: Barra de navegación entre funcionalidades de la app

Figura 19: Pestaña de administración de impresoras

Figura 20: Formulario de datos de producción

Figura 21: Gráficas e indicadores de producción

Figura 22: Formulario de datos de atasco

Figura 23: Formulario de datos de mantenimiento

Figura 24: Alerta de registro de dato

Figura 25: Alerta de impresión

Anexo IV: Código de Machine Learning

Para poder usar las herramientas del módulo de Python Scikit-learn es necesario tener un dataset con

las características de interés y los datapoints suficientes para entrenar al algoritmo. Se precisa tener un

número mínimo de datapoints el cual se fijó a 4 de manera que 3 sean para el set de entrenamiento y 1

para el set de prueba, sin embargo, la puntuación con tan pocos puntos será baja.

Para obtener los datos de mantenimiento predictivo de cada impresora se requiere, del lado del servidor,

el procesado de los datos de mantenimiento, fallos, atascos y errores, para lograr dicho fin se desarrolló

un programa en Python cuyo diagrama de flujo se puede observar en la Figura 26.

Este código consiste en almacenar en listas los datos de mantenimiento y luego filtrarlos de manera que

solo queden los correctivos y ordenarlos por fecha de incidencia de manera decreciente, del mismo modo

se filtran los datos de atasco grave y leve en dos listas distintas, finalmente se hace lo mismo filtrando

los errores por temperatura máxima que corresponden al código de error número 4. Seguidamente, se

busca un número de entradas de fechas de mantenimiento igual al número de fechas de fallo, quedando

así el dato a predecir que se ha denominado datapredict.

Teniendo ya números de entradas iguales en las dos listas se procede a iterar sobre ellas y a buscar

extraer la información que se desea, filtrando de nuevo los atascos leves y errores de temperatura

máxima entre la fecha de mantenimiento y la fecha de fallo correspondiente.

Seguidamente se obtiene el dato de salida que se saca con la diferencia entre la fecha de fallo y la fecha

de mantenimiento, luego la información relacionada con los atascos leves: número de atascos, días entre

último mantenimiento y primer atasco leve y los días de diferencia mínimos entre dos atascos leves, así

como también la información relacionada con los errores de temperatura: número de errores de

temperatura, días entre último mantenimiento y error de temperatura, número de veces que ocurre el

suceso de error de temperatura seguido de un atasco leve y días entre error de temperatura y atasco leve.

De esta manera se obtiene el dataset que luego será utilizado en el algoritmo de regresión lineal selectiva

(Lasso) para predecir, con cierta exactitud, cuantos días pasaran para que ocurra un fallo desde la fecha

de datapredict.

Figura 26: Diagrama de flujo del código del modelo de datos de Machine Learning

Anexo V: Programa para las Raspberrys

El código que va en las Raspberrys de las impresoras es un programa que está continuamente enviando

peticiones GET al servidor, en busca de que haya un archivo para imprimir, as su vez también está

verificando, cada cierto tiempo, cuando la maquina envía un mensaje de error, el timeout es un

temporizador que va disminuyendo cuando se mantiene leyendo por el puerto serie sin recibir nada en

él, al completarse se sale de la lectura y rompe con ese bucle, liberando de este modo el puerto serie

para usos futuros. El diagrama de flujo del código se puede observar en la Figura 27.

Lo que se omite en el diagrama es la gestión de la excepción de cuando el servidor está offline, se crea

una excepción y revisa si hay errores normalmente, de manera que el programa sigue ejecutándose sin

ningún percance, hasta que vuelva a estar online el servidor y se mantenga a la escucha de una respuesta

HTTP de código de estado 200, indicando así que hay un archivo para imprimir.

Una vez sabido que hay archivo, se hace una petición GET a la URL que se obtuvo con anterioridad y

posteriormente se descarga el archivo para luego enviarlo a la impresora vía puerto serie, a la vez está

detectando con un timeout de 10ms si hay respuesta de error de la máquina, si la hay, la captura y envía

al backend, y si no, continúa imprimiendo, cuando no haya más líneas envía una petición DELETE para

pedir eliminar el archivo y vuelve al comienzo del programa.

Figura 27: Diagrama de flujo del código de las Raspberrys de envío de impresión y captura de errores