Laser Engraver DVD

On instructables I found an interesting project - a low cost laser engraver. The workspace is a bit small but none the less it works and comes so cheap that most will be able to replicate the result.

You can buy a laser engraver on the basis of 2 DVD chassis for about 70 EUR on ebay. But it is more fun to build one yourself.

I am not the first one to describe such a unit, but I want to document mainly what other people left out.

The laser PWM (Pulse Width Modulation) electronics is home made (1 NPN Transistor, a 1 KOhm resistor, and a 470 uF/16 V capacitor). All other parts used are however easy to find (modules, wires, screws). The small engraver size (38 x 38 mm) and low power (200 mW) is a bit limiting, but the motivation is the fun of controlling such a machine.

/!\ A H-bridge driver like the popular L293 chip is not usable for the grbl CNC milling controller. Because of the time critical micro stepping for a better mechanical resolution, a hardware implementation like in the a4988 chip is better suited.

/!\ A word of warning is in place . This instructable is using a ~200mW laser. It might nut cut through chunks of wood but it will make you go blind if you are not careful. Never look into the beam, even reflections can be dangerous if focused. Please be careful, and use a safety goggle.

/!\ Enlarge the pictures by a mouse click on the picture.


Mechanical part

I followed mainly those instructions.

Two DVD burner units are salvaged, to give the basic mechanic and the chassis for 38 mm movement in X/Y direction via bipolar stepper motor and lead screw.



Electric part

/!\ Power supply for the Arduino UNO is the USB port. The stepper motor shield is fed with 5 V. The LASER is also fed with 5 V.

The electric connection of the Arduino UNO depends very much to the stepper motor shield use. In the reccomended case (Arduino UNO clone, CNC shield, 4 x a4988 modules with heat sink, Nr. 381839921150) and the software grbl the following connections can be made:


Laser setup


The usual case is to use the dismantled red laser diode from the DVD drive. According to this site the following assumptions can be made:


Another assumption is to calculate laser power from the current flow trough the diode, e.g. 100 mA is about 100 mW optical power.

Because the power loss of about 2.5 to 4 times the optical power is converted to heat, you need to use a housing (Aixiz module) and heat sink for the laser diode (5.6 mm diameter TO-18 standard housing), like the:

Because that is not enough to lower the temperature in the diode to an aceptable level an additional heat sink with mounting capabilities is needed:

Another aspect of the laser diode housing is a collimating lens with adjustable distance to the laser diode, in order to focus the beam to a small spot. Please see the picture on the right for a good focused spot (distance laser front to material = 6 cm).

I am using a blue/violet (405 nm) laser module ( Product ID: 1092171, housing 12 mm diameter x 45.5 mm length, about 22 EUR) with a specified optical power of 1 W.

/!\ The supply voltage must be 5 V only.

When I look at the datasheet of a comparable laser diode, I see an electric power of about 5 W for 1 W optical power.

That is about 1/3 of the promised optical power.


From the CAD design to the engraving process you need some software. Because I am working with MacOS, I will describe mainly the software versions for this operating system. What I have selected for practical use:

grbl laser

It is now possible to compile and programm in the ATmega chip with the Arduino IDE (Integrated Development Environment). Before, you had to use several tools, which is more time consuming and error prone.

The documentation can be found in the grbl wiki.

# Check for Arduino UNO present:
$ ls -ls /dev/cu.w*
0 crw-rw-rw-  1 root  wheel   19,  17 15 Okt 19:53 /dev/cu.wchusbserial14210

The software installation works as follows:

  1. Download the archiv

  2. Unpack the archiv
  3. Copy folder grbl to the path Arduino/libraries/

  4. Exchange in libraries/grbl/ the file config.h with grbl-config.h (remove file prefix "grbl-")

  5. Exchange in libraries/grbl/ the file defaults.h with grbl-defaults.h (remove file prefix "grbl-")

    1. All changes in config.h and defaults.h are marked with CHANGE9

  6. Create folder Arduino/grblUpload

  7. Copy file Arduino/libraries/grbl/examples/grblUpload/grblUpload.ino to Arduino/grblUpload/

  8. Now you can start the Arduino IDE and load program grblUpload.ino

  9. Compile the program and upload into the Arduino UNO ATMega flash ROM

With the Arduino Serial Monitor (115200 baud) you can already enter some g-codes and machine codes:

# set grbl paramter $32 to Laser mode:

# set home direction inverse (X, Y):

# check paramters

# Laser Focus adjust with GRBL 1.1f and PWM (Pulse Width Modulation, 1 KHz)
$HX          # Home X
$HY          # Home Y
S1000        # Intensity 100%
M3           # Laser always ON
G1 X0.1 F50  # Laser ON (move +0.1 mm with speed 50 mm/min)
S10          # Intensity 1%
S100         # Intensity 10%
M5           # Laser OFF

If the command HOME will show in the Status field an Alarm, just clear the Alarm with the command $X and try again.

grbl pen

If you want to use a ball pen for writing, the easiest way from the software point of view is to use the Z-axis with stepper motor. Usually you have an Arduino motor shield with 4 modules A4988 driver, so it is easy to use a third channel for the Z-axis. Just the software has to be changed.

# set grbl paramter $32 to pen mode:

# set home direction inverse (X, Y, Z):

# check paramters



The Python program bCNC is the Swiss army knife :-) for CNC handling with g-code.

The documentation can be found in the bCNC wiki.

The program is started with a double click on the command file start_bCNC.command.

It is an advanced fully featured g-code sender for GRBL. bCNC is a cross platform program (Windows, Linux, Mac) written in python.

The sender is robust and fast able to work nicely with old or slow hardware like Rasperry PI (As it was validated by the GRBL maintainer on heavy testing).

For manual control, you can jog the laser in steps, and send g-codes in a virtual terminal, which logs the text of both data directions.


/!\ Regarding the X/Y coordinates, there is a convention that on machines which adds material you use the first quadrant in the XY coordinate system (+X, +Y). On machines which remove material, like mills, you use the third quadrant in the XY coordinate system (-X, -Y).

A useful feature is the Control->scan function, which moves the laser along the red frame, which surround the drawing.

The feature Editor->Statistic will show the statistics of the data file, e.g. maximum dimensions, path length, etc.

When you are sending the g-code file to the Arduino UNO (program grbl) bCNC will show the estimated time for engraving, and what is the actual completion status in time and percent.



Inkscape is a professional vector graphics editor for Windows, Mac OS X and Linux. It's free and open source.

The documentation can be found here.

For installation of inkscape under MacOS Sierra you should look here. I did not manage to install inkscape version 0.92 with macports. Therefore I installed version 0.91.

/!\ The start of X-Quarz and Inkscape is really slow, so have patience.

In order to export a g-code file you need the Laser Tool Plug-in, see next chapter. In order to use it in inkscape, make a line drawing and export it with menu Extensions->Generate Laser Gcode.


plugin Laser Tool

The Inkscape Laser Tool Plug-in (version 1.7, Python) was developed by Aaron Spike in 2005, and extended in 2015 by Jay Johnson of J Tech Photonics.

The documentation can be found on this page.

You can download the archiv and expand it in path ~/.config/inkscape/extensions/. There is an dxf import converter and the Laser Tool Plug-in.

For laser engraver use there is a little problem with the G04 Pxxx time delay command. On G04 Pxxx the "xxx" is defined in milli seconds, while on it is defined in seconds, like gbrl does so. The default value in the Laser Tool Plug-in is unfortunately 100, so in grbl a 100 ms time delay will show up with a 100 s delay time. The fix is easy:

# file laser.inx edit line 13 from (ms or s) in (ms)

# file edit line 3165 from "self.options.power_delay" in "str(int(self.options.power_delay)/1000.0)"


As an example I provide for download the example file The engrave speed ist set to F30 (30 mm/min).


If you use thin paper (about 0.08 mm thick) it is possible to cut the paper with a speed of F200 (200 mm/min). Then a cut run needs just about 4 minutes instead of 16 minutes with speed F30, see the picture below.

Another example is the aircraft Spitfire, cut out from a 'foam rubber plate, 2 mm thick, see the picture in chapter #inkscape. This plate can be obtained from a local hobby shop, in several colors and thickness. I selected dark brown as color, because you need less laser power to cut, the darker the material is and the color away from the laser color (about 650 nm to 405 nm).

  1. Pocket laser engraver

  2. DVD-to-Laser-Engraver

  3. Stepper motor with lead screw data sheet

  4. g-code reference from Linux, G4 Pxx in seconds

  5. g-code reference from reprap, G4 Pxx in milli seconds

  6. inkscape installation on MacOS

  7. Inkscape Laser Tool Plug-in

  8. DIY CNC Laser Cutting: what *doesn’t* work, and more about Lasers

  9. CNC files for 38 mm table

  10. An Intro to G-code and How to Generate It Using Inkscape

  11. Prototype PCB using CNC Laser Engraver

  12. grbl - error list

List of pages in this category:

-- RudolfReuter 2017-02-05 16:14:11

Go back to CategoryHowTo or FrontPage ; KontaktEmail (ContactEmail)

LaserEngraverDVD (last edited 2017-10-26 20:21:15 by RudolfReuter)