K40 Laser Cutter Rebuild (12x24in)

Converting a cheap K40 CO2 laser cutter from its stock Moshi board to open-source GRBL, expanding the cutting bed to 12x24 inches, and rebuilding the mechanics with V-slot extrusion.


Intro

If you are reading this post, you most likely already know about the cheap 40-Watt CO2 lasers available from China, commonly referred to as K40s. There are several sub-variants of the K40 but generally they come in a white/blue or red steel case with a cutting area of about 12×8 in (300×200mm). The original Chinese manufacturers state they are for making stamps and as such the machine comes with a very weird set of features and mechanics “optimized” (very generous term) for that function.

The stock machine is capable of basic laser operations at reasonable speeds but is hamstrung by a proprietary controller board called a Moshi Board, which communicates with a computer running Corel Draw. Most K40s ship with an illegal or trial copy of Corel Draw — not something I wanted as a permanent solution. I decided right out of the gate to replace the electronics with open hardware and open software. Even after the electronics rework, I quickly became tired of the sub-par mechanics: binding and unreliable motion. After some tinkering I decided to rip the old mechanics out entirely and see how large a cutting area I could get.

Please note: the STP file (Fusion 360) is on Thingiverse — use this for reference as this guide, being done from memory, may miss a few items.

BEFORE / AFTER

K40 rebuild before and after K40 rebuild — finished


Get The Files

Most of the parts required for this conversion will be 3D printed. The rest can be ordered through Amazon or Openbuilds.com. Links to many of the items used are in the Bill of Materials below.

The 3D printed parts are available on Thingiverse (Thing 3401855). I printed everything in PETG at 0.2mm layer height on an Ender 3.

The Tear Down

To start, empty the case of everything.

⛔ WARNING: This project involves high voltage, cutting tools, and lasers. Proceed at your own risk. Always disconnect mains power and allow the power supply to discharge overnight before working inside the machine.

  1. Take a picture of your wiring before disconnecting anything. There is a wiring diagram below, but your PSU may differ from mine.
  2. Unscrew all wires and remove all switches, gauges, and components from the right-hand side first.
  3. If your machine is like mine, there will be a RED wire running from the PSU (blue box) through the case to the back of the laser tube. You can follow online guides for changing the laser tube to disconnect it — or cut the wire halfway between the PSU and tube. The wire appears thick but has very thin conductors inside with a lot of insulation. Keep that in mind when splicing it back together.
  4. Remove both lids: raise them up, find the spring-loaded pin on one side of each lid, pull the pin back, and they come right off.
  5. Disassemble/remove the X-Y mechanism as one piece.
  6. Cut out the center divider and front support shelf using a grinder or rotary tool to cut the tack welds. Those I couldn’t reach I bent back and forth until they snapped.

Inside the case after teardown

Use an orbital sander to knock down metal burrs and get the bottom of the case smooth.

Preparation for New Install

Mask everything you don’t want painted. Then give the interior of the case a good coat of Rust-Oleum primer (Amazon).

Primed case interior

The bottom of the case is not flat or rigid — and the manufacturer added two large holes to the bottom of a laser cutter, for some reason.

To solve this, cut a piece of 1/2 in MDF to 29.75 × 18.5 in. Cut a thin piece of aluminum sheet to the same dimensions and laminate the aluminum to the MDF.

Laminated MDF base MDF base detail

Apply several layers of Rust-Oleum satin topcoat (Amazon) to the primed case and laminated board.

Painted components

Before placing the laminated board into the case, attach two horizontal pieces of 2020 V-slot (both 29.75 in long) — one along the front edge, one along the back. Drill and countersink 4 holes along each from the bottom and attach with M5 screws and T-nuts.

V-slot base installation V-slot base detail

Place the board inside the case but do not secure it yet — leave flexibility until everything else is installed.

Installing the Y Axis

  1. Assemble the Left Y Axis. Cut two lengths of 2040 V-slot to fit (mine were 17.75 in each). All screws M5. Use full-size V-bearings with eccentric bushings for the top two bearings, fixed spacers for the bottom two.

    Left Y axis assembly Left Y axis detail

  2. Assemble the Right Y Axis the same way.

    Right Y axis

  3. Place both assemblies into the case, lining the brackets up with the front and rear 2020. Install M5 bolts with T-nuts but leave them loose for now.

    Y axes placed in case

  4. The left and right Y carriages are driven by a single motor connected in the back with a piece of 5/16 in threaded rod. Install the motor-to-shaft coupler on the left. Cut the rod to length (mine was just under 28 in — long enough to reach through the right carriage bearing mount, short enough to install with the available play). Install the right pulley.

    Y axis drive rod

  5. Attach the belts on both carriages. I zip-tied one end of the belt to an M5 bolt on the carriage, routed it around the pulley and idler, then zip-tied the other end. Loosen the pulley slightly before routing the belt, then tension it by pulling the pulley back and securing.

    Belt routing detail

Installing Lighting

I picked up an LED strip light (Amazon) and wrapped it along the top inner lip. USB-powered, super easy, and a great addition — especially when working inside.

LED lighting installed Lighting view 2 Lighting view 3

Installing the X Axis

  1. Cut a piece of 2040 V-slot to length (mine was 29.3 in).
  2. Assemble the X carriage using 3 large V-bearings with an eccentric spacer on the rear bearing. Slide onto the rail.
  3. Attach the motor mount (with stepper motor), pulley, mirror mount, and end stop (M3 screws).
  4. Attach the stock K40 Mirror Holder.
  5. Route and attach the belt the same way as the Y carriage — loosen the pulley to route, then tension.

X axis assembly view 1 X axis assembly view 2

The X carriage laser head is not stock — I picked up a solid aluminum aftermarket head with an adjustable-height lens and air-assist assembly. This allows ±10mm height adjustment and means I can use a static cutting bed that never needs to move.

Place the X axis assembly into the case and attach it to the Y carriages with M5 screws.

X axis installed

The Bed

I thought about the cutting bed for a long time. My first iteration used a metal grate from the hardware store — it worked but left burn marks where the laser cut through. Professional machines use aluminum honeycomb, so I found some at a reasonable price on Amazon. Even at 1 in thick, it still flexed slightly and needed support on all sides.

Solution: four lengths of 1 in aluminum angle iron:

  • 2 × 22.9 in
  • 2 × 18 in with a 45° cut off one end

3D print the corner pieces, use them as a drill guide, tap the aluminum, and secure with #4-40 × 0.25 in screws (or M3 / M2.5). The whole assembly slides into the case and secures in the front with M5 bolts; the back rests on the rear 2020 V-slot.

Cutting bed assembly Bed detail drawing

Secure the Assembly

Slide the assembly all the way forward, then as far left as possible — leaving about 1/4 in clearance between the outer case wall and the X-axis motor. Run the head around by hand to verify the position makes sense, then use self-tapping screws up through the bottom of the case into the 1/2 in MDF sheet. (This is why I assembled on sawhorses — I anticipated needing to work from below.)

Lid

Reinstall the lids and bolt the two halves together using an existing center hole. Cover the now-exposed holes in the lid with leftover aluminum sheet, secured with aluminum tape.

Lid installed Lid detail

Electronics

There is no longer any room for the electronics inside the case, so I used a salvaged metal enclosure mounted to the right side of the machine (visible in the photos above).

New face plate: I cut a face plate from sheet plastic by hand, adding an ammeter, a main power switch, and a laser power switch. The switches were salvaged from the original unit. The ammeter was an Uxcell 0–20mA Analog DC Current Panel Meter (Amazon).

Front panel / electronics enclosure

Drill a 1 in hole in the upper right corner of the enclosure into the laser tube area to route the laser power wires. Drill another hole in the lower right corner for the motor and end-stop wires. Secure the PSU (I removed the blue film — now silver) and the Arduino Uno with GRBL shield.

Electronics mounted

Wiring (many thanks to Don’s Things for his extensive research on these units):

Wiring diagram

Wiring Diagram

GRBL Shield wiring

GRBL Shield

Note: In GRBL 1.1 the PWM signal is on the End Stop -Z pin, not Spindle Direction or Spindle Enable. I also tied the Laser Fire pin straight to ground to reduce complexity — I keep the laser switch off until just before running a program and always turn it off before opening the lid. Consider adding a lid-open safety interlock as an upgrade.

End stops and motors are wired per the GRBL shield markings. Install stepper drivers in the X and Y axis slots and tune accordingly.

Software and Firmware

GRBL is open-source firmware for Arduinos that controls a CNC via serial port. Download from GitHub (gnea/grbl). The wiki has extensive configuration documentation.

GRBL runs on an Arduino Uno; the GRBL Shield sits on top of the Uno to simplify wiring. Any G-code sender will work; my two favorites are:

Configuration is refreshingly simple compared to Marlin — most 3-axis setups need very few source changes. I only modified the homing cycles since my machine has only X and Y axes:

// Changed from:
#define HOMING_CYCLE_0 (1<<Z_AXIS)
#define HOMING_CYCLE_1 ((1<<X_AXIS)|(1<<Y_AXIS))

// To:
#define HOMING_CYCLE_0 ((1<<X_AXIS)|(1<<Y_AXIS))
//#define HOMING_CYCLE_1 ((1<<X_AXIS)|(1<<Y_AXIS))

After uploading the firmware via Arduino IDE, enter the following settings via the Arduino Serial Monitor (type each as $N=value, e.g., $0=10). Type $$ to verify all values afterwards.

GRBL Configuration Settings

SettingDescriptionValue
$0Step pulse, µs10
$1Step idle delay, ms255
$2Step port invert mask0
$3Direction port invert mask0
$4Step enable invert0
$5Limit pins invert0
$6Probe pin invert0
$10Status report mask16
$11Junction deviation, mm0.010
$12Arc tolerance, mm0.002
$13Report inches0
$20Soft limits0
$21Hard limits0
$22Homing cycle1
$23Homing dir invert mask3
$24Homing feed, mm/min100.000
$25Homing seek, mm/min750.000
$26Homing debounce, ms100
$27Homing pull-off, mm1.000
$30Max spindle speed (laser %), RPM1000
$31Min spindle speed, RPM0
$32Laser mode1
$100X steps/mm80.000
$101Y steps/mm80.000
$102Z steps/mm34.000
$110X max rate, mm/min1500.000
$111Y max rate, mm/min1500.000
$112Z max rate, mm/min300.000
$120X acceleration, mm/sec²300.000
$121Y acceleration, mm/sec²300.000
$122Z acceleration, mm/sec²10.000
$130X max travel, mm609.000
$131Y max travel, mm304.000
$132Z max travel, mm300.000

For full documentation on each parameter see the GRBL v1.1 Configuration Wiki.

Bill of Materials

The following is as complete a BOM as I can generate. My build was completed mostly with parts I had on hand from other projects — I spent a total of about $5 in new hardware.

Electronics BOM

ItemQty
CHENBO Endstop Mechanical Limit Switches2
TecUnite 3-Pin Stepper Motor Extension Cables1 set
Usongshine NEMA 17 Stepper Motor 17HS4401S2
Uxcell 0–20mA DC Panel Ammeter1

Mechanical BOM

ItemQty
OpenBuilds V-Slot Gantry Plate / Hardware Kit1
Aluminum Honeycomb Core Grid — 12×24 in1
NINDEJIN M5 Screws & Washers Assortment1 set
TOPINSTOCK V-Slot T-Nuts (M5, European profile)1 bag
OpenBuilds V-Slot 2040 Aluminum Extrusion, 1500mm1
ExcelFu Polycarbonate V-Wheel Pulley w/ Bearings9 of 10
K40 Laser Mirror Mounts & Lens Holder Set1
ECO-WORTHY 3” Inline Blower — Fume Extraction Fan1
GT2 Timing Belt, 6mm width — 5 metres1
GT2 20-Tooth Aluminum Idler Pulley, 3mm bore3 of 5