En más de una ocasión me han preguntado, con mayor o menor delicadeza, si, además de para jugar y hacerse el artista, el Arduino podía servir para algo serio, como ser una aplicación industrial, algo profesional, etc., algo “de verdá”. Naturalmente, la respuesta es afirmativa, pero antes que entrar en la justificación teórica de tal aserto, me gustaría mostrarles un hermoso proyecto que me tocó desarrollar, con una aplicación concreta en la industria lanera.
Mi socio trabaja en una lanera en la ciudad de Florida, en la que venían teniendo problemas con un regularímetro. El regularímetro –me enteré oportunamente– es un instrumento de laboratorio usado en la industria textil, dentro de lo que son los controles de calidad de hilos y fibras, más concretamente, para analizar las variaciones de masa de éstos, de acuerdo a unos índices de regularidad estándar. Es un aparato bastante vital, y obviamente muy caro.
El equipo que tenían allí les estaba dando algunos dolores de cabeza, y entonces los técnicos del establecimiento tuvieron una interesante idea: “hackear” el aparato, aprovechar el sistema de transporte y el sensor, y sustituir únicamente la “computadora” que procesa los datos. Veámoslo más claramente en el siguiente esquema:
–
–
Como vemos, hay un sistema de transporte movido por un motor, que se encarga de hacer pasar el hilo –en nuestro caso, una mecha de lana– por adentro de un sensor capacitivo, y una computadora que recoge los datos, los procesa y muestra los resultados en una pantalla. Algo conceptualmente sencillo, pero que, tratándose de un equipo aplicado a la industria, debe cumplir ciertas exigencias y garantizar un funcionamiento “a prueba de balas”. Tiene que ser sólido, no puede fallar, no puede mentir.
–
Primera versión
En la primera versión, el sistema de captura y procesamiento era independiente del sistema de transporte, exactamente como aparece en la figura. Dentro del Arduino se ejecuta un programa muy simple, que muestrea la entrada analógica a una frecuencia de 83,3Hz y envía cada lectura –de 10 bits– a través de Serial/USB hacia una PC. En la PC, una aplicación hecha en Java toma esos valores y los guarda en la memoria, para luego calcular con ellos el promedio, el coeficiente de variación (C.V.) y el valor “Uster” (U). Este último no es más que otra manera de medir la irregularidad, muy usada en la industria textil.
–
–
Dentro de la aplicación Java, una sub-ventana de Processing muestra la gráfica de masa en función de distancia, y permite interactuar con ella (achicarla, agrandarla, inspeccionar el valor de cada muestra, cambiar el rango de muestras, etc.). Finalmente, gracias a las bibliotecas de Processing, es posible también exportar la ventana en formato gráfico, o exportar los valores en un archivo binario o de texto.
El programa implementa, además, dos rutinas de calibración que este sistema necesita: “ajuste del 0” que se efectúa midiendo la entrada con la pinza vacía (la “pinza” es el sensor capacitivo) e “ingresar peso real” que permite ajustar los valores mostrados en la gráfica a la realidad (el coeficiente de variación y el valor “U” son, de cualquier manera, independientes del peso absoluto de la mecha).
–
–
Algunos detalles técnicos
- El sistema de transporte y el sensor capacitivo son los originales, de la máquina Uster Tester 3. Gracias a esto nos ahorramos buena parte del trabajo, justamente la parte delicada del mismo.
- La frecuencia de muestreo de 83,3Hz está en sincronía con la velocidad del motor, de modo que el sistema efectúa, en teoría, exactamente 1 muestra por centímetro de mecha. El total de muestras que se procesan es 12.500, o sea 125 metros de mecha.
- Entre la pinza Uster y el Arduino, existe un preamplificador hecho con amplificadores operacionales, que acondiciona la señal del sensor a la escala de 0-5V. Su diseño estuvo íntegramente a cargo de los técnicos de la lanera.
- Asimismo, es de suma importancia el filtro pasa-bajo que actúa en el dominio analógico, cortando más o menos a 40Hz, para evitar que se produzca aliasing en el muestreo. Su diseño también estuvo a cargo de la gente de la lanera, concretamente su técnico, Gabriel.
- Para desarrollar la aplicación, usé una técnica que ya había empleado en otros casos: creé un interfaz gráfico con NetBeans y luego exporté el código y seguí programando en Eclipse. La parte de la gráfica la hice con Processing, usándolo como una clase más de Java, aprovechando la enorme facilidad que brinda este entorno (originalmente pensado para artistas).
–
Segunda versión
La primera versión estuvo pronta en marzo de 2012. Me llevó poco tiempo desarrollar mi parte, que era, por demás, muy sencilla. Durante los siguientes 8 meses, el personal de la lanera lo fue probando, fueron perfeccionando la electrónica analógica y armando una prolija carcasa para albergar el sistema, a la vez que seguían intentando, sin mucho éxito, arreglar la máquina original. Poco a poco, este regularímetro “hackeado” fue sustituyendo al original en los ensayos de laboratorio, hasta finalmente reemplazarlo por completo. Una vez alcanzado este punto, la empresa decidió continuar con la segunda etapa del desarrollo.
–
–
Para esta nueva versión, los cambios fueron los siguientes:
- El arranque y detención del motor se controlan desde el software, mediante unos relés conectados al Arduino.
- El muestreo está gobernado por un encoder acoplado al sistema de transporte; de esta manera se logra obtener exactamente 1 muestra por centímetro, con independencia de la velocidad concreta del motor, la cual ahora puede fluctuar libremente sin afectar al muestreo.
- Se puede configurar la parada automática del motor al cabo de cierta cantidad de muestras (12.500 por defecto).
- Diversas mejoras en el programa, más opciones a nivel del interfaz usuario, mejor gestión de la comunicación serial –con la biblioteca serialcomm.jar–, etc.
- Y lo más interesante de todo: el espectrograma.
–
El espectrograma
El espectrograma fue la parte más interesante de todo el proyecto, ya que me permitió poner en práctica algunas nociones elementales de DSP, un tema que me apasiona, no obstante las grandes lagunas teóricas que me limitan en su abordaje.
El espectrograma es otra de las funciones del Uster Tester; se trata de un gráfico que muestra las variaciones de masa distribuidas según su periodicidad, lo que permite diagnosticar fallas mecánicas en el proceso de la lana. Por ejemplo, un cilindro gastado en la maquinaria, puede hacer que aparezca en la mecha una irregularidad periódica, cuyo período sea justamente la circunferencia de ese cilindro, etc.
Debido a esta relación entre el período de la variación y su posible causa mecánica, es que en el espectrograma del regularímetro Uster, el eje de las abscisas está en unidades de distancia, y no de frecuencia. Vale decir que se trata de una escala de períodos, o sea de 1/f. De hecho, para complicar un poquito más las cosas, es una escala logarítmica de períodos. Como ya veremos, esto vino a generar una pequeña dificultad, debido a que la resolución en frecuencia que brinda la herramienta matemática elegida –la FFT–, resulta ser distinta para distintas zonas de esta escala.
–
–
Para resolver el espectrograma acudimos, primero que nada, a la Transformada de Fourier Discreta, calculada con el algoritmo FFT, de lo cual se encarga la excelente biblioteca libre JTransforms. Antes de hacer la FFT directa, aplicamos una ventana Hamming al conjunto de muestras, para reducir los artificios inherentes al enventanado. Luego de hacer la FFT, escalamos y convertimos los valores a su representación polar (de la cual nos interesa únicamente la magnitud). Utilizamos la FFT real, lo más simple en materia de FFT.
La parte complicada del proceso, como dije antes, fue convertir la escala lineal de frecuencias que devuelve la FFT, en una escala logarítmica de períodos igual a la del espectrograma Uster, con 17 barras por década. La clave es, ante todo, interpretar correctamente lo que la FFT nos está entregando. Nótese, por ejemplo, que en nuestra aplicación el llamado dominio del tiempo es, en realidad, la distancia. Los períodos son distancias, y las frecuencias se miden en ciclos/cm en lugar de ciclos/segundo (Hz). A la izquierda de la gráfica se encuentran las distancias cortas, es decir las frecuencias altas, cuyo extremo es la mitad de la frecuencia de muestreo (frecuencia Nyquist), o sea 0,5 ciclos/cm o 2 cm de período. En el extremo derecho, sin contar el componente DC, cuyo período es infinito, la frecuencia más baja que nos devuelve la FFT es Fs/N, o sea, la frecuencia de muestreo dividida por la cantidad de muestras procesadas. El período correspondiente, en nuestra escala, es N cm, es decir, la distancia de mecha total introducida en el algoritmo.
Una vez resuelta la matemática que permite mapear cada barra del espectrograma (o “chimenea”, como se las conoce en la jerga especializada) a las correspondientes bandas de la FFT –lo que a mí me llevó varios días aunque en realidad se trataba de algo sencillo– tuve que enfrentarme al problema de que cada una de estas barras recibe información de un número distinto de bandas de la FFT. En la zona izquierda (altas frecuencias, períodos cortos) la resolución de la FFT es mayor que la de la gráfica, mientras que en la parte derecha ocurre exactamente lo contrario.
–
–