2015/08/17

II - How I relived my Rapman with standard electronics (Firmware/Software).


FINAL STEPS

Hello everyone.

I describe the final steps to put in operation the printer.


FIRMWARE

As the electronics that I chose was designed as a replacement for Ultimaker 1 printer, I should be consistent and inquired about the firmware used and how to adapt your settings to the technical characteristics of Rapman 3.1 (which are a little different, but not much, really).

Marlin enables seamless compatibility between the newly installed electronic and the original printer.

Get the MARLIN firmware here (right click, save link as ...):

http://www.salgadodigital.com/Rapman_revival_files/Marlin-Stable.zip

Unzip the folder on your computer.


This is the original version of the firmware. You must be careful, because there are several "flavors" of Marlin on the Internet and may be incompatible with our printer.

ARDUINO IDE

Then you should get Arduino IDE, which allows:

- Communicate with the Arduino board via the USB port.
- Edit the Marlin configuration files, to program the Arduino microcontroller.
- Compiling and upload the firmware released on the Arduino board, to enable all mechanical, electrical and electronic components of the printer.

The Arduino IDE 0023 version works perfect in our situation. Download here (right click, save link as ...):

www.salgadodigital.com/Rapman_revival_files/arduino-0023.zip

You could install a newer version (v.g. 1.6.4), but you'll find many errors when trying to compile Marlin. And the goal is to make all the process simple and efficient, without complications.

Install Arduino IDE and run the application.

Select the Arduino Mega 2560 board (Tools / Board / Arduino Mega 2560):








CONFIGURATION

For a detailed explanation of the standard programation of the microcontroller for a 3D printer, please consult Solid Utopia website::

http://solidutopia.com/marlin-firmware-user-guide-basic

For our particular case, just download these three files, edited for optimum performance of the printer Rapman 3.1, and overwrite the three in the directory of Marlin (right click, save link as ...):

Configuration.h
http://www.salgadodigital.com/Rapman_revival_files/Configuration.h
Configuration_adv.h
http://www.salgadodigital.com/Rapman_revival_files/Configuration_adv.h
Pins.h
http://www.salgadodigital.com/Rapman_revival_files/pins.h


Open the file Marlin.ino Marlin-Stable / Marlin )

Open Configuration.h

If you edit Marlin, because you have a different configuration from the original that came with your Rapman, We will describe only the lines of code that change to the functioning of our printer (a single extruder).


General settings

Library for funcionality of LCD

    #include <U8glib.h>

Set the communication speed (in bauds)

  #define BAUDRATE 250000

Select the motherboard

  #define MOTHERBOARD BOARD_ULTIMAKER

Temperature sensor

  #define TEMP_SENSOR_0 2
The thermistor 2 corresponds to the original thermistor - 200k - ATC Semitec 204GT-2 (4.7k pullup).
On the other sensors, the second number - 0 - indicates it is not enabled.

Minimum temperature
  #define HEATER_0_MINTEMP 5
Temperature in ºC

Maximum temperature
  #define HEATER_0_MAXTEMP 240
Temperature in ºC, for ABS

Mechanical settings

End Stops
Pull-up resistances
#ifndef ENDSTOPPULLUPS
  // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
  #define ENDSTOPPULLUP_XMAX
  #define ENDSTOPPULLUP_YMAX
  #define ENDSTOPPULLUP_ZMAX
  #define ENDSTOPPULLUP_XMIN
  #define ENDSTOPPULLUP_YMIN
  #define ENDSTOPPULLUP_ZMIN
#endif

#ifdef ENDSTOPPULLUPS
  #define ENDSTOPPULLUP_XMAX
  #define ENDSTOPPULLUP_YMAX
  #define ENDSTOPPULLUP_ZMAX
  #define ENDSTOPPULLUP_XMIN
  #define ENDSTOPPULLUP_YMIN
  #define ENDSTOPPULLUP_ZMIN
#endif

Invert endswitch logic

const bool X_MIN_ENDSTOP_INVERTING = false;
const bool Y_MIN_ENDSTOP_INVERTING = true;
const bool Z_MIN_ENDSTOP_INVERTING = false;
const bool X_MAX_ENDSTOP_INVERTING = true;
const bool Y_MAX_ENDSTOP_INVERTING = false;
const bool Z_MAX_ENDSTOP_INVERTING = true;

Disable axis

  #define DISABLE_INACTIVE_EXTRUDER false

Invert stepper motor direction

  #define INVERT_X_DIR true
  #define INVERT_Y_DIR true
  #define INVERT_Z_DIR false
  #define INVERT_E0_DIR true
  #define INVERT_E1_DIR true
  #define INVERT_E2_DIR true

Set home direction

  #define X_HOME_DIR -1
  #define Y_HOME_DIR 1
  #define Z_HOME_DIR -1

Does not allow the printer to go beyond the end stops limits
  #define min_software_endstops true
  #define max_software_endstops true

Printer area
  #define X_MAX_POS 260
  #define X_MIN_POS 0
  #define Y_MAX_POS 200
  #define Y_MIN_POS 0
  #define Z_MAX_POS 190
  #define Z_MIN_POS 0

Bed Auto Leveling
//#define Z_PROBE_REPEATABILITY_TEST

Movement settings

Homing feed rate

  #define HOMING_FEEDRATE {50*40, 50*40, 4*40, 0}

Axis steps per unit
  #define DEFAULT_AXIS_STEPS_PER_UNIT   {87.575,87.575,1280,1629}
Data obtained from Bits from Bytes technical documents, still hanging on the network.

Acceleration
  #define DEFAULT_MAX_ACCELERATION      {900,900,100,1000}
  #define DEFAULT_ACCELERATION     1000 
  #define DEFAULT_RETRACT_ACCELERATION     100 
  #define DEFAULT_XYJERK     10.0

Preheat Constants
  #define PLA_PREHEAT_HOTEND_TEMP 185
  #define PLA_PREHEAT_HPB_TEMP 0

LCD and SD support

All these items are enabled, in order that there works the LCD Controller Module.


  #define ULTRA_LCD
  #define SDSUPPORT 
  #define ENCODER_PULSES_PER_STEP 4 
  #define ENCODER_STEPS_PER_MENU_ITEM 1
  #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

#if defined (REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
 #define DOGLCD
 #define U8GLIB_ST7920
 #define REPRAP_DISCOUNT_SMART_CONTROLLER
 #define ENCODER_PULSES_PER_STEP 4
#define ENCODER_STEPS_PER_MENU_ITEM 1
#endif


Send the firmware to the 3D Printer

If you edit the file Configuration.h, in Arduino IDE, save the modification.

Now we perform the verification and compilation.


Verify the code



































If everything is fine, Arduino should say “Done uploading” otherwise you will get one or more error messages. If this happens, there is usually a mention about the line of the error. Check your code for a comments error //, dots or other special characters that may have been mistyped.


Once it is compiled properly you can connect the Arduino board to the computer with the USB cable.


NOTE: notes that the 18V power supply (preferably this voltage to achieve and sustain the working temperature) must only be connected to the board Ultimaker.

























Select the proper port (Tools menu / Serial Port / <port number>).

Upload the compiled code to the Arduino board.



































Now your printer is ready to function. Rapman revived!


LCD CONTROLLER MODULE

Remember the original LCD of Rapman 3.1 printer?

Marlin synchronizes an LCD in the same way and give autonomy to the printer through the controller module:

- Temperature control of each component
- Preheat the hot end
- Cooldown
- Coordinates of printing, in values X Y Z
- Movement distance of the extrusion head in decimals
- Sending the extrusion head to HOME
- Control of speed, acceleration, retraction, steps of the motors, etc.
- Select the file to print -SD card-
- Control file execution
- Pause printing or termination

- And much more

If you are correct electrical connections made in the first part of this tutorial and firmware you are installed correctly, and you will see the LCD:

























TOP
Left
Extruder #1 / Hot end working temperature and current temperature (thermistor)
Here appear all extruder you have configured
Right
Heated build plate / operating temperature and current temperature (thermocouple)
Fan

CENTER
Extruder coordinates in the cartesian plane printer

BOTTON
Left
SD card
Right
Execution rate of print file (Gcode)
Last line 
Displays printer status messages and other operation messages on the fly.

ROTARY ENCODER
Additionally, all actions such as calibration, axis movements and other functions can be made simply by using the rotary encoder (potentiometer).
It pressing, access to all printer functions is obtained:

PREPARE
Disable steppers
Auto home
Set home offset
Preheat ABS or PLA -->sets a reference value in ºC and verifies the physical heating hot end and the temperature rise in the LCD.
Move axis --> press the rotary encoder and select the required movement in mm. Move the motors, rotating it to verify motor connections and functionality of the end stops as well as the actual dimensions of displacement in mm.
and much more

CONTROL
To switch on the fly default settings in Marlin.

PRINT FROM SD
Total autonomy to print our 3D designs without PC connection.

Obviously, with this controller module are some differences in operation, but is closest to the operation experience we were used in our Rapman 3.1

This way our printer would stay with the replacement electronics Ultimaker + Arduino:







































It can improve some performance characteristics, better knowing the programming that allows Marlin. This is a new field for me, and there will be some bugs that can be solved with the correct parameters. We are reliving a printer that was developed with a very different firmware.

We receive suggestions and improvements!

As we can see, after assembly, the components are "dumped" at the bottom of the printer.

We could make a box containing the board and the LCD controller module, printed by ourselves in PLA, or pieces made with transparent acrylic (similar to the original printer).

But that's another story, which we will discuss in this blog another day.

------------

SOFTWARE

We can continue using the slicer of our choice to generate the Gcode, in my case, Skeinforge 0041 (with modifications in some parameters in Dimension module, which explain further down) without loss of quality or printing performance of our designs 3D . The user experience is the same we had, because this electronic is perfectly compatible with your printer:





If you already work with Skeinforge, you should replace the Dimension module. You can download it here (right click, save link as ...):

http://www.salgadodigital.com/Rapman_revival_files/dimension.py

This version fixes a couple issues that can cause small pauses in your prints. DO NOT DO THIS if you're using skeinforge 43 or later - those already contains these fixes.

Navigate to the craft_plugins folder within your skeinforge directory: skeinforge_application/skeinforge_plugins/craft_plugins.

Rename the dimension.py in there to dimension_backup.py (or something similar, in case you want to go back to the original version).

Copy and paste the downloaded dimension.py into this folder.

Start Skeinforge.

In the module Dimension / Activate Dimension
and Activate Absolute Extrusion Distance
Filament diameter: 3.0
Filament Packing Density: 0.97 0.97 (for PLA)

And ready.

The resulting Gcode have some differences with Gcode we were used to, because Marlin just run Absolute Extrusion Distance and other operations are coded differently:
































There is a phenomenal way to synchronize Skeinforge with control software Repetier from the PC:

- Have an awesome Gcode viewer, in real time.
- Generate Gcode at a rate 3 times higher, very useful for making quick Changes in the supporting structures or not to invest much time in complex models.

That's our next topic in this blog.

Good luck!

2015/08/15

II - Cómo reviví mi Rapman con electrónica estándar (2a. parte. Firmware/Software).


PASOS FINALES

Hola a todos.

A continuación describo los pasos finales para poner a funcionar la impresora.


FIRMWARE

Como la electrónica que escogí fue diseñada como reemplazo para la impresora Ultimaker 1, debí ser consistente e investigué sobre el firmware utilizado y cómo adaptar su configuración a las características técnicas de Rapman 3.1 (que son un poco diferentes, aunque no mucho, realmente).

Marlin permite una perfecta compatibilidad entre la electrónica recién instalada y la impresora original.

Obtén el firmware MARLIN aquí (botón derecho, guardar enlace como...):

www.salgadodigital.com/Rapman_revival_files/Marlin-Stable.zip

Descomprime el directorio en tu computador.

Esta es la versión original del firmware. Debes ser precavido, porque hay varios "sabores" de Marlin en internet, y pueden ser incompatibles con nuestra impresora.

ARDUINO IDE

A continuación, se debe obtener Arduino IDE, que permite:

- Comunicarse con el board Arduino a través del puerto USB.
- Editar los archivos de configuración de Marlin, para programar el microcontrolador Arduino.
- Compilar y grabar el firmware editado en el board Arduino, para habilitar todos los componentes mecánicos, eléctricos y electrónicos de la impresora.

La versión 0023 de Arduino IDE funciona perfecto en nuestra situación. Lo puedes descargar aquí (botón derecho, guardar enlace como...):

www.salgadodigital.com/Rapman_revival_files/arduino-0023.zip

Podrías instalar alguna versión más reciente (v.g. 1.6.4), pero vas a encontrar muchos errores al intentar compilar Marlin. Y el objetivo es hacer todo el proceso lo más sencillo y eficiente posible, sin complicaciones.

Instala Arduino IDE y ejecuta la aplicación.

Selecciona el board Arduino Mega 2560 (Tools / Board / Arduino Mega 2560):








CONFIGURACIÓN

Para una explicación detallada de la programación del microcontrolador Arduino para una impresora 3D, consulta el sitio Solid Utopia:

http://solidutopia.com/marlin-firmware-user-guide-basic

Para nuestro caso en particular, simplemente descarga estos 3 archivos, ya editados para el funcionamiento óptimo de la impresora Rapman 3.1, y los sobre-escribes en el directorio de Marlin (botón derecho, guardar enlace como...):

Configuration.h
http://www.salgadodigital.com/Rapman_revival_files/Configuration.h
Configuration_adv.h
http://www.salgadodigital.com/Rapman_revival_files/Configuration_adv.h
Pins.h
http://www.salgadodigital.com/Rapman_revival_files/pins.h



Abre el archivo Marlin.ino Marlin-Stable / Marlin )

Abre la pestaña Configuration.h

Si vas a editar Marlin, porque tienes una configuración diferente a la original que viene con tu Rapman, vamos a describir solamente las líneas de código que cambian para el funcionamiento óptimo de la impresora (un solo extrusor).

Ajustes generales

Librería para habilitar el LCD
    #include <U8glib.h>

Definir la velocidad de comunicación con la impresora (en baudios)
  #define BAUDRATE 250000

Seleccionar el board
  #define MOTHERBOARD BOARD_ULTIMAKER
Si tienes otro board (Ramps, por ejemplo) selecciona el nombre desde boards.h que coincida con tu configuración.

Sensor de temperatura
  #define TEMP_SENSOR_0 2
El termistor 2 corresponde al termistor original - 200k - ATC Semitec 204GT-2 (4.7k pullup). 
En los otros sensores, el segundo número - 0 - indica que no está habilitado.

Temperatura mínima
  #define HEATER_0_MINTEMP 5
Temperatura en ºC

Temperatura máxima
  #define HEATER_0_MAXTEMP 240
Temperatura en ºC, para ABS

Ajustes mecánicos

End Stops
Resistencias Pull-up
#ifndef ENDSTOPPULLUPS
  // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
  #define ENDSTOPPULLUP_XMAX
  #define ENDSTOPPULLUP_YMAX
  #define ENDSTOPPULLUP_ZMAX
  #define ENDSTOPPULLUP_XMIN
  #define ENDSTOPPULLUP_YMIN
  #define ENDSTOPPULLUP_ZMIN
#endif

#ifdef ENDSTOPPULLUPS
  #define ENDSTOPPULLUP_XMAX
  #define ENDSTOPPULLUP_YMAX
  #define ENDSTOPPULLUP_ZMAX
  #define ENDSTOPPULLUP_XMIN
  #define ENDSTOPPULLUP_YMIN
  #define ENDSTOPPULLUP_ZMIN
#endif

Invertir la lógica de los interruptores de fin de recorrido (End Stops)
const bool X_MIN_ENDSTOP_INVERTING = false;
const bool Y_MIN_ENDSTOP_INVERTING = true;
const bool Z_MIN_ENDSTOP_INVERTING = false;
const bool X_MAX_ENDSTOP_INVERTING = true;
const bool Y_MAX_ENDSTOP_INVERTING = false;
const bool Z_MAX_ENDSTOP_INVERTING = true;

Inhabilitar Ejes
  #define DISABLE_INACTIVE_EXTRUDER false

Invertir dirección steppers motor
  #define INVERT_X_DIR true
  #define INVERT_Y_DIR true
  #define INVERT_Z_DIR false
  #define INVERT_E0_DIR true
  #define INVERT_E1_DIR true
  #define INVERT_E2_DIR true

Definir dirección HOME
  #define X_HOME_DIR -1
  #define Y_HOME_DIR 1
  #define Z_HOME_DIR -1

No permite ir a la impresora más allá de los límites de los End Stops
  #define min_software_endstops true
  #define max_software_endstops true

Área de impresión (real)
  #define X_MAX_POS 260
  #define X_MIN_POS 0
  #define Y_MAX_POS 200
  #define Y_MIN_POS 0
  #define Z_MAX_POS 190
  #define Z_MIN_POS 0
Autonivelación de la cama de impresión
//#define Z_PROBE_REPEATABILITY_TEST

Ajustes de Movimiento

Velocidad al punto HOME
  #define HOMING_FEEDRATE {50*40, 50*40, 4*40, 0}

Pasos de motor por unidades
  #define DEFAULT_AXIS_STEPS_PER_UNIT   {87.575,87.575,1280,1629}
Datos obtenidos de documentos técnicos de Bits from Bytes, aún colgados en la red.

Aceleración
  #define DEFAULT_MAX_ACCELERATION      {900,900,100,1000}
  #define DEFAULT_ACCELERATION     1000 
  #define DEFAULT_RETRACT_ACCELERATION     100 
  #define DEFAULT_XYJERK     10.0

Temperatura de precalentamiento
  #define PLA_PREHEAT_HOTEND_TEMP 185
  #define PLA_PREHEAT_HPB_TEMP 0

LCD y soporte para tarjeta SD

Todos estos items se habilitan, para que funcione el Módulo de Control LCD

  #define ULTRA_LCD
  #define SDSUPPORT 
  #define ENCODER_PULSES_PER_STEP 4 
  #define ENCODER_STEPS_PER_MENU_ITEM 1
  #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

#if defined (REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
 #define DOGLCD
 #define U8GLIB_ST7920
 #define REPRAP_DISCOUNT_SMART_CONTROLLER
 #define ENCODER_PULSES_PER_STEP 4
#define ENCODER_STEPS_PER_MENU_ITEM 1
#endif


Enviar el firmware a la impresora 3D

Si editaste el archivo Configuration.h, in Arduino IDE, guarda las modificaciones.

Ahora, vamos con la verificación y compilación.

Verificar el código































Si todo está correcto, Arduino dirá “Done uploading” (subida realizada); de otra manera, se obtendrán uno o varios mensajes de error. Si esto sucede, por lo general hay una mención sobre la línea del error. Verifica tu código por si se encuentra un error de comentarios: //, puntos u otros caracteres especiales podrían haberse digitado incorrectamente.

Una vez esté compilado correctamente,  puedes conectar el board Arduino al computador con el cable USB.

NOTA: observa que la fuente de poder de 18V (preferible este voltaje, para alcanzar y sostener la temperatura de trabajo) sólo se debe conectar al board Ultimaker.























Selecciona el puerto apropiado (Tools menu / Serial Port / <port number>).

Sube el código compilado al board Arduino.
































Ahora, tu impresora está lista para funcionar. Rapman revivió!


MÓDULO DE CONTROL LCD

Recuerdas la pantalla original de la impresora Rapman 3.1?


Marlin permite sincronizar un LCD de la misma manera y darle autonomía a la impresora a través del módulo de control:

- Control de la temperatura de cada componente
- Precalentamiento del hot end
- Cooldown
- Coordenadas de la impresión en valores X Y Z
- Movimiento por pasos del extrusor, en decimales
- Envío del extrusor al punto HOME
- Control de velocidad, aceleración, retracción, pasos de los motores, etc. 
- Selección del archivo a imprimir -tarjeta SD-
- Control de ejecución del archivo
- Pausa o finalización de impresión
- Y mucho más

Si son correctas las conexiones eléctricas realizadas en la primera parte de este tutorial y el firmware está correctamente instalado, verás así la pantalla:























ARRIBA
Izquierda
Extrusor #1 / temperatura de trabajo Hot end y temperatura actual (termistor)
Aquí aparecen todos los extrusores que tengas configurados
Derecha
Cama caliente / temperatura de trabajo y temperatura actual (termocupla)
Ventilador

CENTRO
Coordenadas del extrusor en el plano cartesiano de la impresora

ABAJO
Izquierda
Tarjeta SD
Derecha
Porcentaje de ejecución del archivo de impresión (Gcode)
Última línea 
Muestra el estado de la impresora y otros mensajes de funcionamiento, sobre la marcha.

CODIFICADOR ROTATORIO
Adicionalmente, todas las acciones como la calibración, movimientos de los ejes y otras funciones se pueden hacer simplemente usando el codificador rotatorio (potenciómetro).
Presionándolo, se obtiene acceso a todas las funciones de la impresora:

PREPARE
Disable steppers
Auto home
Set home offset
Preheat ABS or PLA -->coloca un valor de referencia en ºC y verifica el calentamiento físico del hot end y el aumento de temperatura en el LCD.
Move axis --> presiona el codificador rotatorio y selecciona el movimiento requerido en mm. Mueve los motores girándolo, para verificar las conexiones  de los  motores  y la funcionalidad de los end stops, así como las dimensiones reales de los desplazamientos en mm.
y mucho más

CONTROL
Para cambiar sobre la marcha la configuración predeterminada en Marlin.

PRINT FROM SD
Total autonomía para imprimir nuestros diseños 3D sin conexión al PC.

Obviamente, con este módulo de control hay algunas diferencias de operación, pero es la experiencia más cercana al funcionamiento al que estábamos acostumbrados en nuestra Rapman 3.1

Así quedaría nuestra impresora con la electrónica de reemplazo Ultimaker + Arduino:





























Se pueden mejorar algunas características de funcionamiento, conociendo mejor la programación que permite Marlin. Este es un campo nuevo para mí, y habrá algunos bugs que se pueden resolver con los parámetros correctos. Estamos reviviendo una impresora que se desarrolló con un firmware muy diferente.

Se reciben sugerencias y mejoras!

Como podemos ver, después del ensamble, los componentes quedan "tirados" al pie de la impresora.

Podríamos elaborar una caja que contenga el board y el módulo de control LCD, impresa por nosotros mismos en PLA, o elaborada con piezas de acrílico transparente (similar a la impresora original).

Pero esa es otra historia, que abordaremos otro día en este blog.

------------

SOFTWARE

Podemos seguir usando el sofware de nuestra preferencia para generar los Gcode, en mi caso, Skeinforge 0041 (con modificaciones en algunos parámetros del módulo Dimension, que explicaré un poco más abajo), sin pérdida de calidad o rendimiento en la impresión de nuestros diseños 3D. La experiencia de usuario es la misma que teníamos, porque esta electrónica es perfectamente compatible con nuestra impresora:




Si ya trabajas con Skeinforge, debes reemplazar el módulo dimensión. Puedes descargarla acá (botón derecho, guardar enlace como...):

Esta versión corrige algunos problemas que pueden causar pequeñas pausas en la impresión. 

NO BAJAR ESTE ARCHIVO si estás usando Skeinforge 0043 o posterior - que ya contiene estas correcciones.

Vamos al subdirectorio craft_plugins dentro del directorio de Skeinforge: skeinforge_application/skeinforge_plugins/craft_plugins

Renombra el archivo dimension.py como dimension_backup.py (o algo similar, en caso de que necesites volver al archivo original).

Copia el archivo dimension.py en el subdirectorio.

Ejecuta Skeinforge.

En el módulo Dimension marca Activate Dimension
y también Activate Absolute Extrusion Distance
Filament diameter: 3.0
Filament Packing Density: 0.97  (si haces tus diseños en PLA)

Y listo.

El Gcode resultante tendrá algunas diferencias con el Gcode al que estábamos acostumbrados, porque Marlin solo ejecuta Distancia Absoluta de Extrusión y otras operaciones están codificadas de manera diferente:
































Hay una manera sensacional de sincronizar Skeinforge con un software de control llamado Repetier (instalándolo en el PC):

- Impresionante visualizador Gcoder, en tiempo real.
- Generación de Gcode a una velocidad 3 veces mayor, muy útil para hacer cambios rápidamente en las estructuras de soporte o en modelos sencillos o complejos.

Con todas las características de Skeinforge, repotenciado.

Ese es nuestro próximo tema en este blog.

Buena suerte!