Picture of Arduino Laser Engraver
I started this project because I wanted to make something that had mechanical, electrical and software components. After looking around on Instructables, I figured that an Arduino based laser engraver would be an interesting machine to make, and that the machine itself could make interesting things. Laser diodes have also advanced quite a lot in the last few years, allowing reasonably powerful DIY laser engravers to be made without the hassles of laser tubes.

This machine can engrave wood and cut paper. I haven't tried other materials yet because there is no fume extraction capability - plastics generally create toxic gases when burnt.

SAFETY WARNING - Please be safe when using lasers. The laser used in this machine can cause permanent eyesight damage, and probably even blindness. When working with powerful lasers (>5mW), always wear a pair of laser safety glasses designed to block your laser's wavelength.

For a quick overview of the guts of the machine, have a look at the video below
(Note: The machine runs slightly faster now, and also has a different laser heatsink to the one in the video)

For pictures of engravings, skip to the end, or visit my website's gallery:

A spreadsheet containing the parts list is below.

Also, for any Aussies unsure about the laser import laws, I've attached the current rules (at Dec 2013) below. Laser diodes and laser modules (such as the one in this machine) are legal, however laser pointers are prohibited.
This is a pdf version of the following webpage: http://www.customs.gov.au/site/page4372.asp

Step 1: Frame Design

Picture of Frame Design
Before starting construction, I made a CAD model of the machine to make sure that everything would fit, and to figure out the dimensions of the parts. Some screenshots of the machine's CAD model are above.

The y-axis is on the bottom of the machine, and provides a moving base for the engraved piece. The x-axis is on the top, and moves the laser assembly (the laser isn't shown in the model).
1-40 of 119Next »

hi,thank you so so much for nice job.i make it and now i have a
problem.i can not Conversion my picture to g code .please give me a
softwar for Conversion any picture to g code and sending g code to my

please tell me how i can conversion text to g code with inkscap softwar.

my email:kambiz3221@gmail.com

getburnt (author)  kambizdehghani9 days ago

Hi, if you just want to engrave a picture, you can try the software on Step 8. This includes an Arduino sketch, a Processing sketch and a C# program. There are some detailed steps for using this software in the comments below - it doesn't involve G code.

If you want to use Gcode (with GRBL), I have read that Inkscape can be used, but I've never used it myself, so unfortunately I can't offer any Inkscape advice. Otherwise, there are some paid programs which can do it, such as "PicEngrave".

ArnabM24 days ago

Hello,Can it be used for cutting balsa wood?

getburnt (author)  ArnabM23 days ago

I haven't tried it, but it should be able to cut thin balsa wood. More powerful diodes are available now (2W or higher), and if configured to run at a higher current than my machine (eg 1.7A), they should be able to cut thin balsa wood reliably.

Hello, sorry for my english :D

I watched the video " vector mode with grbl " and I have done it . But in raster engraving, I can't do it. Can you guide me can do it like your car carved above does not .or you can make a video about the creation process and file for engraving machine not, like his video above vector mode. Thank you very much!

getburnt (author)  phungduchiep1 month ago

Hi, here are some detailed steps
for raster mode


Upload "cncmotors_driver3.ino"
to the Arduino through the Arduino IDE (sketch editor).

You may need to change the
"LASER" pin assignment - I used an Arduino Mega, so it is pin 51 in
the Arduino sketch. You can also edit parameters such as time delays and the "scalefactor" variable to match your
machine, then upload to the Arduino.

To check that the sketch is working
properly, you can manually drive your machine using the Arduino Serial Monitor.
For example, sending the text "11111" should move the laser 5 steps
to the right. Sending a "9" should turn on the laser, and sending a
"0" should turn the laser off.


Download and install the Processing
IDE (link is on step 8). I used version 2.0.1 32-bit, with the Serial library,
but there might be a newer version now.

The Processing sketch streams the
text file to the Arduino. Try the steps below to get it working:

Copy the
"textfilestreamer2.pde" file to a location on your computer. As an
example, I'm going to use "C:\"

Open the
"textfilestreamer2.pde" file. If Processing has been installed
correctly, a popup message will appear, and tell you that the file needs to be
inside a sketch folder. Click ok, to create the folder.

You will now have the folder

Create the folder

Generate a "cncinstructions.txt"
file from an image:

Run the "CNC Image
Program.exe" program

In the program's text box, enter the full path to your bitmap file. There is a
sample bitmap (arduino.bmp) included with the program that you can try first.
The path would be something like "C:\CNC Image Program\arduino.bmp"
(depending on where you put the folder)

Click "OK" and after a while, the image should be displayed by the
program. The file "cncinstructions.txt" should have been created in
the folder (eg C:\CNC Image Program\cncinstructions.txt)

(If you need to run the program again, clear all .txt files in the folder)

Put the txt file in the correct

Copy the text file you generated
and paste it into


In Processing, click

It should start sending data to
your Arduino - the Rx/Tx status LEDs on your Arduino should start flashing.

Note: The Processing sketch has been
configured to use "COM3" to talk to the Arduino. If your Arduino is
on a different COM port, you can either change it to COM3 in Windows Device
Manager, or edit the sketch to match your configuration.

Setting Start Position:

You can use the serial monitor in
the Arduino

IDE (sketch editor), to send manual user inputs and set the start position.

Click "Tools" ->
"Serial Monitor". Then, you can enter the numbers 1,3,5 or 7 to move
the X/Y position. For example, sending the text "1111111111" will send
instructions to make the laser move 10 steps (1mm) to the right.

If you get stuck, you can send me an email (getburnt1@gmail.com)

ok, thanks, i will try it

Hi, I have everything up and running, motors work and can be controlled. However, I am unsure which hole in the arduino the npn transistor should be wired to, and which transistor you used (Im using a c1815 gr331). Additionally, I want to use a battery power source for the laser instead of the breakout box, do you think that will cause me problems?


getburnt (author)  Bruce_Iverson1 month ago

Hi. I used pin 51 for the laser (I used an Arduino Mega). You can change it to any pin you want, by modifying the "LASER" variable in the Arduino sketch.

The transistor I used is a TIP102 NPN Darlington Transistor. The main criteria for choosing the transistor is how much current it can handle. The laser driver circuit is designed for 0.2A to 1.25A, so the transistor needs to support at least that much - the TIP102 is good up to 8A, but the c1815 GR331 can only do 0.15A.

A battery should be ok, as long as the voltage is 10-12V, and it can supply a current of at least 1.5A. It may be better to get a 12V plug-pack / wall-wart power supply instead, such as:


I'd recommend a power supply that is 10-12V, that can supply a current of 1.5A or higher. (A higher voltage supply will just heat up the circuit)

Thanks for the prompt reply!

What feed rate were you using for the vector car drawing? I have an CNC z,y table and I'm trying to pick out a laser for it.
getburnt (author)  Dr. Jerryrigger1 month ago

I think I used 400mm/min, with the laser power turned down a little bit. With the laser at full power, it could probably go faster, but I was worried about the laser getting too hot (since it can be on continuously for 30 sec+). It's probably best to get a powerful laser, and adjust the power down as required.

Thanks! That's about three times the speed I'm running at now with a 70watt soldering iron.
DanieleZ1 month ago

Hi I really love this project, can you explain what you mean by image processing?

I want to engrave photos like yours, thank's in advance.

getburnt (author)  DanieleZ1 month ago

Thanks! By image processing, I just mean editing the bitmap file so that it is compatible with the C# program. This generally involves adjusting brightness / contrast, changing it to a black and white dithered image (using GIMP or Photoshop), then saving it as a 24-bit bitmap file.

E1024d4 months ago
i don't know about electronic.but i really want this machine.now i am working on it.
can you be more specific to the electrinics controling the laser.
1.the schematic above shows three resister(R1,R2,R3).what are their values?
2.what kind of NPN should i order
can you please send me a mail
getburnt (author)  E1024d4 months ago

Hi, I've sent you an email with more info about the components I used.

E1024d getburnt4 months ago


I can not get Rectifier Diode you told me to use .can I replace them with 1N4007 diode


getburnt (author)  E1024d3 months ago

The 1N4007 diode can only do 1.0A, which isn't enough. You should try to look for a diode that can support 2A or higher

E1024d getburnt3 months ago
ok.thank you
jithints4 months ago

thank you very much...

jithints4 months ago


i want to do the same laser engraver, but the image to text converter is not working

pls help me on dis

thanks in advance...

getburnt (author)  jithints4 months ago

Hi, I've sent you an email

Can I engraver about a .3mm height of characters that small?

getburnt (author)  sam.nguyen.1695 months ago

0.3mm is very small! Do you mean 0.3cm / 3mm? The smallest I've tried is 2mm character height, and that is still very sharp and readable.

MircoSlepko6 months ago

Hello, sorry for my english ..

I can with Arduino + grbl change the laser power such as using the gcode G97 spindle RPM?

or do you have other ideas?

thanks for the reply

getburnt (author)  MircoSlepko6 months ago

I haven't tried it, but it looks like Grbl 0.9 has PWM output for spindle RPM. So, you should be able to control laser power if you use that output pin (D11). You might need to edit your gcode files manually, to set the correct values.

(My machine doesn't have software control for laser power - I just use a potentiometer)

thank you very much.

I installed grbl 0.9 and I was able to use the 11-pin PWM.


TimSwift6 months ago

What was the total cost of the project?


getburnt (author)  TimSwift6 months ago

About $1200 - $1300 Australian Dollars. The ballscrews and their mounting parts and were the most expensive items (about $400 total), and the steppers/drivers were also a big cost ($200 total). There are some approximate part costs in the spreadsheet on the first page

johnnyBOY3147 months ago

Belt speed should be faster.

pierreh18 months ago

hi my gcode sender does not work why would that be and how do i know if the engraver is on how does the on/off work on the arduino plz reply ASAP plz thax

getburnt (author)  pierreh18 months ago

The Gcode sender is only needed for vector mode (Step 9) - is that the mode you want to use? For vector mode, you'll need to install GRBL on the Arduino. You might need to check your serial port settings if the Gcode sender doesn't communicate with GRBL

pierreh1 getburnt7 months ago
Hi. Not one of the sketches work on the arduino
getburnt (author)  pierreh17 months ago

Are there any error messages? Are you able to upload the arduino sketch to your arduino? If you're not using an arduino Mega, you'll have to change the "LASER" pin to a different pin number. Also, what motor hardware are you using? The sketch assumes that the stepper drivers accept step/direction pulses.

pierreh1 getburnt8 months ago
Hi. How do i install GRBL on the arduino?? And. On the arduino. How do i wire pin 1 and pin 0. For on/off. That part im struggling with. Thax for your reply. And thax for a
great project
getburnt (author)  pierreh18 months ago

If you're just trying to get your machine working, I'd suggest using raster mode (Step 8) instead. It is easier to troubleshoot with my Arduino sketch (you might need to modify the pin assignments because I used an Arduino Mega). Once you have uploaded the sketch, you can use the Arduino IDE Serial monitor to manually drive the machine. You can send it instruction characters such as 1, 3, 5 or 7 (move right, left, down or up), and check if your motors move correctly. The laser is turned on/off by the instruction characters 9 and 0. If you need further guidance, send me an email - my address is getburnt1@gmail.com

TrueHybridX8 months ago

How were you swapping between the vector and raster modes?

With reading the instructable I logically think during raster mode it seems the machine would be jumpy as it goes from pixel to pixel, is that not the case?

getburnt (author)  TrueHybridX8 months ago

Hi, I used different software on the Arduino. For raster mode, I used my Arduino sketch. For vector mode, I installed an unmodified version of GRBL on an Arduino Uno.

(Note: GRBL 0.8c didn't work on an Arduino Mega. I'm not sure if the current version of GRBL supports the Mega).

Would it be possible to get a copy of the code for your desktop app? Or maybe post it on github? I want to give a go at getting it working on my Linux box
1-40 of 119Next »