Foam cutter

From The Munich Maker Lab's Wiki
Jump to: navigation, search
Foam Cutter

Release status: beta [box doku]

Description t.b.d.
Author(s)  Tobi, eax

Brief description

The foam cutter is connected to our internal network aka Intranet. It is three independently movable axis. Currently, it is only possible to cut in 2d-projection. It can cut foam blanks to a thickness of up to 100mm. The foam cutter needs G-Code files to cut your templates. To generate G-code files compatible with the foam cutter, you should use the slicing software installed on the foam cutter. Doing so is discussed in the section below.

using the foam cutter

To use the foam cutter, please follow the following instructions.

Connect to the foam cutter via SSH with X11 forwarding: ssh -Y mk@IP_OF_FOAMCUTTER

  • Connection parameters:
  • username: mk
  • password: ask Tobi for guidance
  • Address: FIXME

When you are connected with the foam cutter, start linux_cnc. This is the software package for operating the foam cutter. Use the following command to do so from within a terminal: ./launch_linuxcnc &

Load your G-Code file and use linux CNC to operate the foam cutter.

Activate the CNC with the red buttons in the top left corner.

Place your foam blank on the bench, lock it in place (e.g. with sticky tape on the bottom). Then make the CNC head move to the starting position (zero point). Click "Antasten". This sets the zero-point of the CNC with respect to the foam blank. Perform the "Antasten" for both axis (X and Y) of the CNC.

When you are done, you can almost start the cutting process. Make sure the hot wire is connected to a power supply. Use the constant current mode of the power supply. 1A current is fine for thick foam. Trial-and-error will help you find your best settings for your blank foam.

Before starting the CNC routed cutting, make sure that the starting position of the CNC is correct (i.e. outside of the blank foam) and that the zero-points were correctly set. Then start cutting.

Generating G-code for the foam cutter

From the command line start dxf2gcode. dxf2gcode is a GUI program which assists in generating G-Code files from DXF files.

Load your dxf file. Move the zero-point to the edge of your object (Options-Move Zero Point). Click Auto, this will move the zero-point to the best lower left corner. Then click Export-Optimize-Path-and-Export to obtain the Gcode file. If you prefer to scale your model, use the Options-Scale-All setting in the menu.

Once the file is generated, it needs some handy tweaking to become suitable for our linux CNC version. We will only remove lines from the Gcode file, we need not add additional lines to the file.

Open the Gcode file: Remove the header section and the line with the command "G0 Z"

Also remove the lines containing the following commands:

  • T1, S6000
  • M3
  • G0 Z
  • F150
  • G1 Z
  • M9
  • M5

That's it.

You can now open your new Gcode file in LinuxCNC.


  1. Load a DXF file with a closed border
  2. if it is necessary scale the drawing (Options)
  3. Move the work piece zero offset (Options)
  4. Export-> Export and optimize and export the shapes

DXF2GCode Postprocessor configuration

# Configuration file for styrofoam cutter output:
# * no movement in Z-Axis
# * 
# by Robert Lichtenberger, 2014

#  Section and variable names must be valid Python identifiers
#      do not use whitespace in names

# do not edit the following section name:
    # do not edit the following value:
    config_version = 6

    output_format = .ngc
    output_text = styrofoam cutting G-CODE for LinuxCNC
    output_type = g-code
    abs_export = True
    cancel_cc_for_depth = True
    cc_outside_the_piece = False
    export_ccw_arcs_only = False
    max_arc_radius = 10000.0
    code_begin_units_mm = G21 (Units in millimeters)
    code_begin_units_in = G20 (Units in inches)
    code_begin = G90 (Absolute programming) G64 (Default cutting) G17 (XY plane) G40 (Cancel radius comp.) G49 (Cancel length comp.) M3 M8 M0 (turn on heat then pause)
    code_end = M9 M5 (turn off heat) M2 (Program end)
    code_begin_prog_abs = G90 (Absolute programming)
    code_begin_prog_inc = G91 (Incremental programming)

    pre_decimals = 4
    post_decimals = 3
    decimal_seperator = .
    pre_decimal_zero_padding = False
    post_decimal_zero_padding = True
    signed_values = False
    decimal_separator = .

    use_line_nrs = False
    line_nrs_begin = 10
    line_nrs_step = 10

    tool_change = T%tool_nr M6%nlS%speed
    feed_change = F%feed%nl
    rap_pos_plane = G0 X%XE Y%YE%nl
    rap_pos_depth = ""
    lin_mov_plane = G1 X%XE Y%YE%nl
    lin_mov_depth = ""
    arc_int_cw = G2 X%XE Y%YE I%I J%J%nl
    arc_int_ccw = G3 X%XE Y%YE I%I J%J%nl
    cutter_comp_off = G40%nl
    cutter_comp_left = G41%nl
    cutter_comp_right = G42%nl
    pre_shape_cut = ""
    post_shape_cut = ""
    comment = %nl(%comment)%nl