Introduction: The MicroSlice V1 | a Tiny Arduino Laser Cutter

About: A passionate make of things. I spend my time developing new ideas and looking for ways to improve old ones!

A few years ago I saw an Instructable where Groover had used a pair of DVD-RW drives to make a pocket laser engraver. Inspired by the idea, driven by the recent purchase of a full-sized 50 watt CO2 laser cutter, and roused by the launch of the Microcontroller contest I took the decision to have a crack at making my own mini laser engraver.

I have called the project the MicroSlice.

What are the features of the MicroSlice?

  • The MicroSlice has a work area of 50mm x 50mm (2" x 2"). The V2 is now 100mm x 100mm (4" x 4").
  • It can cut paper and engrave wood & plastic.
  • Open Hardware.
  • Uses the Arduino UNO R3.
  • All the software used by the MicroSlice, including the graphics program, is Open Source, and free to use!
  • There is a 300mw 635nm Red Laser Diode, like you'd find inside a DVD-RW drive, which does the cutting & engraving.
  • It comes as a kit to build at home, at a Hackspace, or with your local Maker group.
  • There are 97 Laser-Cut parts in the kit!
  • It will work with your Raspberry Pi.

The MicroSlice won the Grand Prize in the 2013 RadioShack Microcontroller Contest!

Massive thanks to everyone who voted, and of course to Radioshack for the super prizes :)

The MicroSlice V2.6 is now available here |

Please help support my work here on Instructables and on Thingiverse

by using the following affiliate links when making purchases. Thanks :) | | |

Love 3D printing? Love T-Shirts?

Then you need to check out!

It is loaded with a huge range of wearable Parts & Components.

Step 1: To Begin

The basis for Groover's axis was the two mini stepper motors from the DVD-RW drives. The motors drive the DVD head mechanism which either moved the laser cutting head, or the cutting table. My first starting point was to find a similar set of motors, and a reclaimed laser diode.

However I wanted a slightly different design. Where Groover has the cutting table move on the Y Axis, I wanted a fixed cutting table. To do this I took my inspiration from a gantry crane.

As the cutting table would be fixed, the cutting head must move along the Y Axis instead, but it must also accommodate the X Axis. So the whole cutting head, and the X Axis, must move along the Y Axis. Like a gantry crane moves up and down the dockside.

So I need two stepper motors with threaded shafts. The longer the shaft the larger the potential work-area for the cutting head. I'd also need a pair or runners for the Y Axis gantry to move along.

To cut a long story short I couldn't find what I wanted from the DVD-RW drives I found. The stepper motors had no threaded bolts which could move along the threaded shafts and the laser diodes were firmly pressed into their housings that I was unable to remove them from the DVD-RW without causing damage. So in the end I turned to old faithful eBay to find the parts.

1 x Arduino UNO R3
1 x X Axis Motor
1 x Y Axis Motor
1 x Dual Relay
2 x Easydriver
2 x 5v LDO
1 x 3.3V LDO
2 x Heat-Sinks
1 x 45x45x10 Fan (12v)
4 x Stop Switches
9 x Magnets
4 x Rubber Feet
5 x Thumb Screws
1 x Laser DiodeAlternative
1 x Laser Module
1 x Laser Driver
1 x Laser Lens
1 x 4mm Aluminium Tube
2 x 3mm x 150mm Steel Rod
1 x 3mm x 100mm Steel Rod
17 x M3 Microbarbs
6 x M2 Countersunk (6mm)
6 x M2 Nuts
6 x M2 Pan-head (6mm)
8 x M2 Pan-head (8mm)
4 x M3 Nylon Screws (6mm)
4 x M3 50mm Standoffs
7 x M3 Cap-Head Screw (8mm)
8 x M3 3mm Nylon Spacers
97 x Laser-cut parts!

The Microslice parts have been arranged to be laser cut out of two 3mm x 400mm x 300mm sheets of plywood or acrylic. The MicroSlice plans are attached as a zip file below.

The MicroSlice uses a 300mw 635nm Laser Diode. It will hurt you if you are not careful. Please take care when handling the laser. Do not look at the beam, do not point it at yourself or anyone else. Do not be an idiot.

Step 2: The First Steps

Where do we start? Well firstly we need to establish a datum; a point at which all other measurements are made. I'll be using the X Axis motor's range of motion, the distance between each end of the stepper motor's shaft, as our datum. I have picked this as we'll need to position the middle of the range inline with the centre of the cutting table. From there we can measure the location of the three bolts holes for the stepper motor, and we'll also be able to set a height above the cutting table.

The motor comes fixed to a backing plate which will be removed and disposed of. The gantry must have several features; it must be able to have the X Axis motor attached to it, it must provide a cross-bar to steady the slider, somewhere for the laser module, and it must also have runners for the Y Axis.

As I'll be cutting the parts from 3mm plywood I'll be using vector graphics to design the parts. There are several programs available to help you with this part. Inkscape is an Open Source vector graphics editor, it works on several platforms including Linux and the Raspberry Pi.

The gantry is to run along two 3mm x 150mm ground steel rods. There will be two sections of 4mm aluminum tube pressed inside the gantry which the rods fit down. The steel rods will take the weight of the assembly meaning that the motors only have to handle position changes and don't have to battle the weight.

There are a total of ten different revisions of the gantry, with the tenth being part of the final build. To begin I kept it simple; mount the motor, get the correct heigh above the cutting table, and make sure it was wide enough to manage the full length of the X Axis.

Each new iteration of the gantry added something new, or corrected an error, or was most often the case it did both; improve, and add to the design.

Version 1 : Added the motor, set the height & width.

Version 2 : Reduced weight with cut-outs.

Version 3 : Corrections.

Version 4 : Increased the depth of the lower cross-bar from 15mm to 30mm to increase stability. The weight of the laser module was causing the gantry to tip forward and bind on the runners.

Version 5 : Added space & boltholes for the X Axis end-stops.

Version 6 : Corrections.

Version 7 : Added space & boltholes for the Y Axis end-stops.

Version 8 : Cut-outs made to the lower cross member allowing clearance for the Y Axis stepper motor.

Version 9 : Added brackets for the cables. This was used in the first dry-run of the MicroSlice.

Version 10 : Corrections made. Final version.

Step 3: Gantry Platform

The gantry platform had to serve two main purposes; support the runners for the gantry, and mount the Y Axis motor. The design constraints were limited to the width of the gantry, and to the length of travel of the Y Axis. I wanted a lightweight platform for the gantry, I also needed to fit the cutting table.

Step 4: The Cutting Table

Everyone loves a honeycomb cutting table on their laser cutter, and I though the MicroSlice should have one.

For extra strength I used two layers of 3mm sheet glued together. There are two teeth at each end which interlock with two sockets on the Gantry Platform preventing the cutting table from moving.

I've pressed some neodymium magnets into the cutting table to help keep any paper secure while engraving / cutting. The area exposed to the laser has been covered with thick aluminium foil. This will protect the table from the laser's heat.

Step 5: Heat-Sinks

The heat-sinks for the two LDOs come from a single reclaimed BGA heat-sink.

1 | Remove the heat-sink from the old BGA.

2 | Add 2.54mm pins to the two LDOs.

3 | File down the pins on the underside of the PCB.

4 | Cut the heat-sink into strips. I measured the width of the LDOs and cut a strip along the line with the screw hole. We'll later use the screw holes to mount the LDOs to the MicroSlice.

5 | Shorten the strip to match the LDO.

6 | Clean up the edges, and remove the black from the surface where the LDO will be attached.

7 | Glue the LDOs to the heat-sinks using thermally conductive adhesive.

8 | Allow the glue to set.

You could also use thermal adhesive tape to attach the LDOs.

I have since found a source for new heat-sinks, check the parts list at the beginning of this instructable.

Step 6: The Lower Deck

The lower deck contains the electronics, and holds up the Gantry Platform.

On the bottom plate goes the Arduino and the dual relays for the fan & laser. On the upper plate sits a 5v LDO to power the fan, and a 3.3v LDO to drive the laser. In front of the LDOs are two EasyDriver motor controllers, they will manage the stepper motors.

The Arduino and the dual relays sit on 3mm M3 spacers. I found that the screw-hole near the reset switch on the Arduino was too close to the connectors to take a screw! I attached the M£ spacer with some double-sided sticky tape, both to the Arduino and the base-plate.

I'll demonstrate how it all goes together during the final assembly.

Step 7: Test Wiring

Before I commit to a final version I wanted to make sure everything worked; so I assembled all the parts, fitted the electronics and set about wiring it all together.

I have used ribbon cable and DuPont connectors for the cabling. I amde sure to label all the wires with little strips of masking tape so I wouldn't forget where all the wires go.

As I'll be using the Arduino with Grbl I can use their guide to help me correctly wire the MicroSlice.

Mid-way through the build I ran into a problem; The EasyDrivers were too close to the Arduino below. I had to move the PCB further out to make space. Rather than put it all back together again, and in anticipation of further complications I left all the electronics from the top plate free from their mountings.

The EasyDrivers need a higher voltage than the USB can provide. I'm using a 12v PSU plugged in to the DC jack on the Arduino. There is then a Vin pin-out on the board where I can take power out to the EasyDrivers and the two LDOs.

The EasyDrivers need to be configured for Microstepping. Put simply Microstepping cuts standard step into smaller steps. With the MS1 & MS2 pins on the EasyDriver connected to the on-board 5v supply we can set Microstepping to 8. This means instead of a lowly 20 steps a revolution we now get 160. For more details on the EasyDriver visit

Step 8: The Final Build

I put some masking tape over the wood to cut down on laser burn and flaring. It does mean that I have to spend a few extra minutes peeling it all off after it has been cut.

I have used PVA glue, and held it together with clamps where I can. The Gantry Frame has to be done pretty much all at once before the glue drys so it can be laid flat to stop it distorting.

I screw some 50mm M3 bolts through the lower plate and used them as guides to assemble the uprights. It also keeps everything square while the glue drys.

The cutting table is covered with some thick aluminium foil. The magnets are pressed in, a strip of masking tape is stuck over the area where there will be no foil. The aluminium is then pressed onto the table and a knife cuts off the excess.

Step 9: The Wiring Loom

Keep the wires short, make sure there are no short circuits.

I've picked a 12v fan and will powered it with the 5v LDO. We want a large slow-moving volume of air rather than a fast low-volume. Keeping the wind-speed low helps things stay on the cutting table.

I followed the Connecting Grbl section on the Grbl Wiki to wire up the MicroSlice. The fan relay was connected to the Coolant pin (A3), and the laser diode relay to the Spindle On / Off pin (12).

Step 10: Software & Setup

The MicroSlice uses Grbl v0.8 for motion control. Grbl converts G-Code into commands that the EasyDriver stepper motor controllers understand. We need another program to send the G-Code to Grbl, for this I'll be using Zapmaker's Grbl Controller v3.0.

Before you can begin you will need the Arduino IDE, available from the Arduino website.

Make sure your Laser Diode is not connected to the power lines while you are configuring your MicroSlice. The Laser will power on & off during the setup & configuration process if it is connected. Only connect the Laser Diode when you are ready to cut or engrave.

Grbl's wiki shows you how to flash the pre-compiled Grbl hex file onto your Arduino.

For those of you who have a Raspberry Pi, as I do, you'll be pleased to know that you can control the MicroSlice using your Pi! Zapmaker has a step-by-step guide to install Grbl Controller on a Raspberry Pi.

We'll need to generate some G-Code. The best way to do this is to use Inkscape combined with a laser engraver plug-in. An Open Source vector graphics editor, with capabilities similar to Illustrator, CorelDraw, or Xara X, using the W3C standard Scalable Vector Graphics (SVG) file format. I've been using the same plug-in Groover made for his engraver, he has done a short video detailing its use.

Before we can use our new G-Code we'll need to configure Grbl to use the stepper motors and end-stops.

You can use either the Arduino IDE Serial Terminal (CTRL + Shift + M) to send commands to Grbl. Sending $$ to Grbl displays the configuration settings (yours might look differently);

$0=755.906 (x, step/mm)
$1=755.906 (y, step/mm)
$2=755.906 (z, step/mm)
$3=30 (step pulse, usec)
$4=500.000 (default feed, mm/min)
$5=500.000 (default seek, mm/min)
$6=28 (step port invert mask, int:00011100)
$7=25 (step idle delay, msec)
$8=50.000 (acceleration, mm/sec^2)
$9=0.050 (junction deviation, mm)
$10=0.100 (arc, mm/segment)
$11=25 (n-arc correction, int)
$12=3 (n-decimals, int)
$13=0 (report inches, bool)
$14=1 (auto start, bool)
$15=0 (invert step enable, bool)
$16=0 (hard limits, bool)
$17=0 (homing cycle, bool)
$18=0 (homing dir invert mask, int:00000000)
$19=25.000 (homing feed, mm/min)
$20=250.000 (homing seek, mm/min)
$21=100 (homing debounce, msec)
$22=1.000 (homing pull-off, mm)

The settings we are interested in are $0 & $1. These two setting configure the A & Y Axis. We'll need to calculate the number of steps to move the cutting head 1mm in either direction.

We calculate it thus;

Number of Steps = Number of steps per rotation x Microsteps / Thread Pitch

20 Steps-a-Turn (18 Degrees a step) x 8 Microsteps (MS1 & MS2 Connected to +5v on the EasyDrivers) / 3mm Thread pitch (3mm of travel per rotation).

(20 x 8) / 3 = 53.333333333

So type $0=53.333 and $1=53.333 into the terminal to setup the axis. You will need to do a soft reset for the changes to take effect ($X).

Or you can use Zapmaker's Grbl Controller to adjust Grbl. You can access the Grbl Settings via the advanced tab. You'll still need a soft reset after clicking apply.

You should also set;

$4=200 This sets the default speed the cutting head moves at while working.

$5=200 This sets the default speed the cutting head moves at while moving between jobs.

$16=1 This enables the end-stops.

$17=1 This enables homing ($H), mine locks up when I try to run the homing cycle. To enable this function you will need to edit the source code for Grbl and recompile the .hex file. Instructions showing how to do this are at the bottom of this Step.

$18=69 This will make the cutter zero in the lower left of the cutting table when the $H homing command is executed. For an in-depth explanation of this function see the Grbl Wiki.



$22=2.000 This sets the distance the Axis moves away form the end-stops after the homing cycle.

There are in-depth explanations for each of Grbl's settings on the Grbl Wiki.

Check your configuration is correct by typing $$ into the terminal. You should see something like this;

$0=53.333 (x, step/mm)
$1=53.333 (y, step/mm)
$2=53.330 (z, step/mm)
$3=10 (step pulse, usec)
$4=200.000 (default feed, mm/min)
$5=200.000 (default seek, mm/min)
$6=28 (step port invert mask, int:00011100)
$7=50 (step idle delay, msec)
$8=100.000 (acceleration, mm/sec^2)
$9=0.050 (junction deviation, mm)
$10=0.100 (arc, mm/segment)
$11=25 (n-arc correction, int)
$12=3 (n-decimals, int)
$13=0 (report inches, bool)
$14=1 (auto start, bool)
$15=0 (invert step enable, bool)
$16=1 (hard limits, bool)
$17=1 (homing cycle, bool)
$18=69 (homing dir invert mask, int:00000000)
$19=200.000 (homing feed, mm/min)
$20=200.000 (homing seek, mm/min)
$21=100 (homing debounce, msec)
$22=2.000 (homing pull-off, mm)

The final step is to focus the laser. I loaded a small test sample, in this case it was an X, and let the sequence run.

You can power the Laser Diode On & Off using the tick box labelled Spindle On on Zapmaker's Grbl Controller.

The first time there was nothing there, but are a few turns of the lens I managed to get a mark on some paper. After that all it needed was a bit of fine tuning and the laser was correctly focused on the cutting table.

I made some 3mm spacers to go under the lase module to lift it up for when I wanted to engrave some 3mm plywood. Doing so meant I didn't have to refocus the lens each time I wanted to swap materials.

Editing The Source Code.

During testing I found that Grbl would hang on the $H (homing) command. I suspected this was a problem with the Z Axis as the MicroSlice does not have one.

To fix the probem we must remove the Z Axis options from the Homing Cycle. The commands are contained within the config.h file in the source code.

1 | Download the source code from Grbl (link).

2 | Unpack the archive.

3 | Open config.h in your favourite text editor.

4 | Locate the following code

#define HOMING_SEARCH_CYCLE_0 (1< #define HOMING_SEARCH_CYCLE_1 ((1<

5 | Replace the code with

// #define HOMING_SEARCH_CYCLE_0 (1<

#define HOMING_SEARCH_CYCLE_0 ((1<

6 | Locate the following code


7 | Replace the code with


6 | Save

7 |Recompile the grbl.hex file. I used my Raspberry Pi to recompile the hex. In case things go wrong I have included the modified hex file for you below. You'll need to flash your Arduino with the new hex.

If everything has worked, and all the settings are configured correctly you should be able to run the homing cycle ($H) and see the MicroSlice zero itself and then you should be ready to go create!

Microcontroller Contest

Grand Prize in the
Microcontroller Contest