3d Printer Supervisor

Desde hace un año que tengo una impresora 3d. Estoy muy contento con ella, y ya veis que le saco mucho partido, pero uno de los puntos a mejorar en la impresión 3d actual es la velocidad de impresión. El contador geiger que me diseñé y me imprimí tardó cerca de 24 horas en terminar. Esto implica que no vas a estar las 24 horas de impresión pegado a la impresora: o te vas a hacer la comida o te vas a dormir, o sales a dar un paseo, pese a que recomiendan no dejarla desatendida. Para intentar quedarme un poco más tranquilo y, a mayores, no tener que levantarme por la noche para apagar la impresora, se me ha ocurrido diseñar un supervisor de la impresora, que será el encargado de apagarla cuando termine, o cuando detecte humo o temperatura alta. A este proyecto lo llamé 3d printer supervisor.

3dPrinter Supervisor

3dPrinter Supervisor

La arquitectura hardware de este proyecto consta de:

  • LCD 16×2 I2C para mostrar los menús. (https://www.ebay.com/itm/New-Blue-IIC-I2C-TWI-1602-16×2-Serial-LCD-Module-Display-for-Arduino/272322518267?epid=690018472&hash=item3f67afdcfb:g:8bgAAOSwXrhXmbCY:rk:8:pf:0)
  • Buzzer para alertar de fin de impresión o de evento extremo.
  • Sensor de temperatura DHT-11 (https://www.ebay.com/itm/Digital-Temperature-Relative-Humidity-Sensor-DHT11-Module-for-Arduino/282151509959?epid=14010378921&hash=item41b18a5fc7:g:hEcAAOSwPgxVRb9b:rk:1:pf:0)
  • Sensor de humo: https://www.ebay.com/itm/Useful-MQ-135-Smoke-Air-Quality-Sensor-Module-Detection-Module-For-Arduino-CA/372184232157?hash=item56a7e8b0dd:g:5WEAAOSw6VRaTeUd:rk:3:pf:0. 
  • Módulo de rele para arduino: https://www.ebay.com/itm/5V-1-Channel-Relay-Board-Module-Optocoupler-LED-For-Arduino-PIC-ARM-AVR-HU/222931306050?hash=item33e7bdc642:g:Ud0AAOSwMqVavIxU:rk:12:pf:0
  • Botonera (hecha a mano con estos switchs: https://www.ebay.com/itm/Momentary-Tactile-Push-Button-Switch-Vertical-SMD-Horizontal-Mini-Micro-PCB/263284557976?hash=item3d4cfb8898:m:mKye4z5VT-e_vs8wA2tZYcw:rk:1:pf:0).
  • Fin de carrera: https://www.ebay.com/itm/20Pcs-Mechanical-End-Stop-Endstop-Limit-Switch-For-CNC-RAMPS-Arduino-3D-Printer/153216362530?hash=item23ac682822:g:unYAAOSwQg9bvxkQ:rk:2:pf:0

El Supervisor controlará por tanto el encendido de la impresora. Para ello, es necesario que la impresora tenga una alimentación independiente del supervisor. Yo estoy alimentando la impresora con una vieja ATX de ordenador. Para el supervisor, utilizo una fuente normal de 9 voltios y al menos, medio amperio, para que sea capaz de mantener el relé funcionando.

Para arrancar la ATX, simplemente tenéis que poner el pin verde a masa (hacer un corto entre el cable verde y masa en la fuente). Hay muchísimos tutoriales en internet que dicen cómo arrancarlas (https://www.instructables.com/id/How-to-power-up-an-ATX-Power-Supply-without-a-PC/). Con lo cual, el supervisor sólo tiene que cortocircuitar esos dos terminales. Con un relé lo hacéis de sobra.

Para detectar el final de la impresión, el supervisor se aprovecha de que por defecto, el gcode que genera el sliz3r y la mayoría de los programas de impresión, terminan moviendo el extrusor a la posición x=0. Así que, para no ser invasivo, simplemente coloqué el final de carrera del supervisor encima del fin de carrera de la impresora.

Por tanto, para operar con él:

  • Arrancaremos el supervisor. Éste activará el relé que iniciará la impresora. En este momento, podemos configurar los umbrales de temperatura y humo del supervisor.
  • Pondremos a imprimir la pieza en la impresora.
  • Una vez que la impresora empiece a imprimir y veamos que va todo ok, podemos pulsar el botón set. En este momento, el supervisor comenzará a monitorizar el estado de los sensores. Si alguno de los sensores (humo o temperatura) supera el umbral, el supervisor entrará en modo emergencia: comenzará a sonar el buzzer y, transcurrido un tiempo (configurable en el menú de configuración), apagará la impresora.
  • Si queremos abortar la supervisión, podremos pulsar la tecla de abajo para ir al menú inicial (la impresora no se reiniciará).
  • En el menú de configuración podremos:
    • Configurar el umbral de temperatura.
    • Configurar el umbral de humo.
    • Configurar tiempo de apagado en caso de emergencia.
    • Configurar tiempo de apagado al finalizar impresión.
    • Desactivar buzzer.
    • Guardar las preferencias en la EEPROM.

Todas las preferencias se pueden guardar en la EEPROM interna del micro. De esta misma manera, al iniciar el supervisor, las preferencias se leen desde la EEPROM interna.

He implementado también un “factory Reset”: presionando Set +  Config a la vez en el inicio, se cargarán los valores por defecto (umbral de 25 grados, smoke de 100… etc).

En el código hago uso de librerías de terceros (LCD, DHT-11), las he adjuntado en el proyecto de gitlab.

Como arquitectura software, he creado una clase supervisor que hará las funciones de wrapper e interfaz con los otros módulos software y con el hardware:

3dPrinterSupervisor swArchitecture

El resultado lo podéis ver en este vídeo:

Y el código lo podéis descargar de la página del proyecto en mi gitlab:

https://gitlab.com/mcarpacho/3dprintersupervisor

 

Como colofón: he de decir que es una mejora muy recomendable para la impresora. Es una gozada no tener que levantarme a las tantas para apagarla y me quedo un tanto más tranquilo sabiendo que me debería de avisar si prende fuego la impresora (otra cosa es que prenda fuego el supervisor… para lo que tengo que desarrollar el supervisor del supervisor… proyecto todavía pendiente de “time budget”…).

 

 

 

 

 

 

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *