View
3
Download
0
Category
Preview:
Citation preview
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
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 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.
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.
Recommended