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

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).


<p>Some time ago I built a Laser Engraver with this GearBest Kit.</p><p>Unfortunately I have not found a software acceptable and easy to use, so I wrote my own.</p><p>My software allows to load a picture and send it to the laser engraver quickly and easily.</p><p>My software is written in a generic way for almost all machines with standard GCode firmawre.</p><p>At the moment the software is WORK IN PROGRESS currently, in ALPHA testing.</p><p>As I needed to modulate the laser power (I have a 5500 mW one) I used GRBL firmware version 0.9 (other versions are ON / OFF, 0.9 is PWM)</p><p>Here the Robot Laser Project page : http://www.robot-eyes.com/en/RobotLaser/</p><p>I will update soon the page (for now very rough).</p><p>Please send an email at robotlaser@robot-eyes.com with your opinion, thanks.</p>
<p>Hi there....first of all...great project..I build my own 2 axis laser engraver... with belt drive and I used DRV8825 Stepper driver... mechanic and electronic works fine..i used gbrl and was able to make perfect circles. I rather use your setup with processing and got everything working...the only problem is my pic's come out oval instead of round...I tried changing the arduino parameters but nothing changes...any ideas...</p><p>Thanks ...Marc </p>
<p>Hi,</p><p>Maybe you solved it and maybe i'm too late, but it might help someone :</p><p>If your step/mm are not the same on X and Y ($100 and $101 in grbl), get the ratio between steps/mm X and step/mm Y.</p><p>Then you can go in the arduino program, change const float stepsPerPixel; into :</p><p>const float stepsPerPixelX = 8;<br>const float stepsPerPixelY = 10; </p><p> Here 8/10 match my X over Y steps/mm ratio, but you will have to change accordingly<br>.</p><p>At the end of the document, put your stepsPerPixelX or stepsPerPixelY where you see stepsPerPixel written (use ctrl+f).depending on the kind of move. You will now have a scaled X and Y :)</p>
<p>Hi,</p><p>Maybe you solved it and maybe i'm too late, but it might help someone :</p><p>If your step/mm are not the same on X and Y ($100 and $101 in grbl), get the ratio between steps/mm X and step/mm Y.</p><p>Then you can go in the arduino program, change const float stepsPerPixel; into :</p><p>const float stepsPerPixelX = 8;<br>const float stepsPerPixelY = 10; </p><p> Here 8/10 match my X over Y steps/mm ratio, but you will have to change accordingly<br>.</p><p>At the end of the document, put your stepsPerPixelX or stepsPerPixelY where you see stepsPerPixel written (use ctrl+f).depending on the kind of move. You will now have a scaled X and Y :)</p>
<p>Hi Marc,</p><p>Do the X and Y axes for your machine have the same &quot;steps/mm&quot;? My Arduino code assumes they are the same, so if your machine has different &quot;steps/mm&quot; for X / Y, you'll need to modify the code and use a different &quot;scalefactor&quot; value for each axis.</p><p>If your machine is supposed to have the same &quot;steps/mm&quot; for both axes, maybe double check the microstep settings on your stepper drivers - if they are accidentally mismatched, that might explain the ovals.</p>
Hi there, amazing project, really liked ur explainations as well. I need some help. I am currently working on making a similar project, but instead of a laser im using a camera. However, the precision I need for the X and Y direction is 20 microns with minimal backlash. I am planning to use a 0.9 deg/step stepper motor and also a stepper driver for microstepping. However, I am not sure if this motor would be correct for this project and which stepper driver to get. I would love some help. Thanks!
<p>Hi, 20 microns is very small! I think it should be possible if you pick a ballscrew with a small pitch/lead. If you use a motor with 0.9 deg / step, it has 400 full steps / revolution. Then, if you pick a ballscrew with a pitch of 1mm, each full step results in a linear movement of 1mm / 400 = 0.0025mm = 2.5 microns. So theoretically, you will need 8 full steps to move 20 microns. This provides higher precision than my machine (1.8 deg / step, 5mm pitch -&gt; 1 full step = 0.025mm = 25 microns). </p><p>I think the main requirement when choosing a stepper motor is torque - if the motor doesn't provide enough torque, you won't get reliable motion. You might need to experiment with a few different motors to find the sweet spot, (or just get very overpowered motors like me haha). Note: stepper motors have high torque when rotating slowly, and low torque when rotating at high speed.</p><p>Regarding the stepper driver, the main feature to look at is the current that it can provide for the motor. You need to be sure that the driver can provide more current than the motor requires. Half-stepping / micro-stepping is also nice to have.</p>
<p>What is the transistor that you used, it surely must handle all the current that is passing through the ld. </p>
<p>I used a TIP102 NPN transistor as a switch - it can handle collector currents up to 8A</p>
<p>Hi again</p><p>Thanks for the fast reply...So...I'm using NEMA-17 steppers with 200 steps and 1.8 degrees on both X and Y axes. My drivers are set to 1/32 step resolution and the pulley's have 18 teeth. Your setup is 200 steps per rotation....18 rotation per in. and 25.4 mm per in. and no matter which setting I change it does not seem to make a difference.</p><p>I hope this helps....because i'm lost...LOL</p><p>Marc</p>
<p>What type of bitmap files are you using? The C# program is expecting 24-bit bitmaps, so if it receives a bitmap with a different colour depth (eg 32-bit), it could explain the strange results. </p><p>Try engraving the &quot;arduino.bmp&quot; file that was included with the C# program (but remember to delete &quot;cncinstructions.txt&quot; and &quot;imagearray.txt&quot; before you generate the new instruction file).</p><p>If the arduino logo engraves at the correct aspect ratio, then you only need to change your image files to 24-bit bitmaps to get normal engravings.</p>
Hi all, i have a similar laser (2.8 w, 450nm) engraver but I'm slightly worried about the safety. It came with goggles but im not sure whether they suffice. <br>Is an indirect beam of this laser dangerous? <br>Which type of material wouldn serve as a good safety screen for such a laser? <br>Thank you! *<br>Joris
<p>Hi, your laser is a lot more powerful than mine! I'd recommend that you have a look at the laserpointerforums website (http://laserpointerforums.com/f53/) to see which safety goggles are suitable. As long as you're wearing suitable eye protection for your laser, your eyes should be safe.</p><p>I didn't install a safety screen for my machine, but I made sure no one else entered the room whenever the laser engraver was running.</p>
<p>Hello,</p><p>Congratulations for your project ! I need some help... I assembled the driver as you suggested and I tried it to the same diode . It brings out light, but only for some seconds ... Any ideas ? Had you ever the same problem ?</p><p>Thanks !</p>
<p>Hi, I haven't seen that problem before. Have you checked the max current of your power supply? If you used the same resistor values as me, it needs to supply at least 1.25A - if the power supply isn't strong enough, it might be shutting off automatically after a few seconds.</p>
<p>My power supply is an AC Adapter that supplies output current up to 3A and voltage 12V. It is approximately like this :</p><p><a href="http://www.sfcable.com/AD-ASUS-07.html" rel="nofollow">http://www.sfcable.com/AD-ASUS-07.html</a></p><p>Do I need another one ?<br></p><p><br></p>
<p>That type of power supply should be ok. Have you checked the circuit with a multimeter? For example, connect a multimeter in series with the laser diode to see what happens to the current going through the laser. You could also do continuity checks to make sure the components are connected the correct way. The only other thing I can suggest is trying a different power supply, if you have a spare one.</p>
<p>Help, please.</p><p>The xloader uploaded 0.8 grbl.hex (successful). G-code Sender 1.0.9 and 1.0.8 also tells you that it is not booted up the Arduino. You can not do anything. What did I do wrong?</p>
<p>Did you select the correct port in Gcode Sender? If you're using Windows, you can check the COM Port number of your Arduino in Device Manager</p>
What is the biggest size you can print?
<p>The theoretical maximum is 30cm x 30cm, but the machine is a bit too slow for that size - it would literally take half a day or more. The actual maximum is about 20cm x 15cm.</p>
So would it be a big adjustment to your plans to make it able to print at 30 cm x 36 cm? I want to make this and know nothing of any of these aspects of this machine.
<p>There are a few modifications you could make to speed up the machine for larger engravings:</p><p>- use a more powerful laser. I'm only using a max current of 1.25A through a 1.5W laser diode. There are more powerful 445nm laser diodes now, that can handle a higher current (1.8A+). A stronger laser means you can reduce the time needed to engrave / burn a pixel</p><p>- speed up the motors when going over blank pixels. I limited the speed, to reduce the speed difference between blank and burnt pixels. This was because the machine would vibrate too much, if the speed difference was high. If a stronger laser is used, both motor speeds can be increased.</p><p>- reduce the machine's resolution. The machine has a relatively high resolution - 10 pixels per mm (or 254 dpi). You wouldn't need such a high resolution for larger engravings.</p>
<p>Hey mate how you going? I'm building the main frame but I couldn't figure out what distance should I leave between the laser and the workplate. I'm planning to get a 2W 445nm diode. Is there an optimum distance calculation of some sort? Thanks a lot!!</p>
<p>On my machine, there is about 11cm between the laser and workplate. You should pick a distance based on the focal length of your laser (lens), and the thickness/height of the items you want to engrave. If the laser module you choose is like mine, it will have an adjustable lens that can focus to a distance range of at least 5 to 11cm (it can probably focus to shorter/longer distances, but I haven't tested it to the full limits). Also, you could make a height adjustable mount, so that you can fit thicker/taller items under the laser. Your white frame looks cool :)</p>
<p>Hi,I'm planning to build this project I was checking out the part list and I've got a couple of questions.</p><p>1.You are using 16mm ballscrew but the coupling is 6.35 to 8mm. How does it supposed to work? is there another piece between the shaft and the ballscrew?</p><p>2.In the list you've got 12mm shaft support (SK12). I don't understand where this is used.</p><p>Thanks for the help ;)</p>
<p>Hi, here are some answers that should help:</p><p>1. The ballscrews I chose have machined ends, so the end for the coupler has an 8mm diameter, even though the ballscrew is 16mm. For some better pictures, have a look at this amazon link (note: this ballscrew is very similar to mine, but not exactly the same): </p><p><a href="http://www.amazon.com/Ten-high-Ballscrew-RM1605-Supports-Coupler/dp/B00PH10K5C/ref=sr_1_2?ie=UTF8&qid=1444016129&sr=8-2&keywords=ball+screw" rel="nofollow">http://www.amazon.com/Ten-high-Ballscrew-RM1605-Su...</a></p><p>The machined ends are required to use the BK12/BF12 end supports. If you choose to use ballscrews, I'd recommend getting all the parts in a kit, or from one seller, to make sure the parts go together correctly.</p><p>2. I used the 12mm shaft supports as a mount and heatsink for the laser diode, which is in a 12mm Aixiz module. (There's a picture in step 5)</p>
<p>Thanks a lot mate I've found a local dealer and I'm going to buy all the mechanical stuff from them. I'm guessing it should be fine. There is another detail I want to ask. I'm planning to make the axes longer so that I can get a full A4 size engraving or something close to it. That being said when you send an image to the device does it automatically center the workbench or can you choose say to print on the top left or bottom right etc. How does it exactly work? Can it be modified in the code?</p>
<p>My machine (and the code) doesn't automatically centre itself. I just use the Arduino serial monitor to manually move the laser into the right spot before starting the Processing sketch. For example, sending the text &quot;1111111111&quot; will move the laser 10 steps (1mm) to the right. Quickly sending the characters 9 and 0 will turn the laser on and off, to see where the laser spot is. I usually move the laser to an area within a few centimetres of the intended spot, turn the laser on/off to check its position, then move the laser closer to the start position.</p><p>If you add some limit switches to your machine, you could modify the code to centre the laser at a known start / origin position, based on the triggering of those switches.</p>
<p>How much current this power supply will draw ? more over first you convert this atx power supply to normal dc power supply ? </p>
<p>The power supply for the laser just needs to be 10-12V DC, and capable of supplying 1.5A or higher. An ATX power supply isn't necessary, but I used one because I had some spares.</p><p>The power supply I used for the motors is a 36V, 3A lab/bench power supply (the motors usually draw less than 2A when moving).</p>
<p>hello can i get the circuit diagram ?? </p>
<p>Hi, I don't really have a circuit diagram except for the diagram on Step 5. You can try to create the circuit on a breadboard, and if you get stuck, send me an email (getburnt1@gmail.com). The part number for the diode in the circuit is </p><p>&quot;FFP08S60SNTU&quot; and the part number for the NPN transistor is &quot;TIP102&quot;.</p><p>(While you are building and checking the circuit, you should substitute the laser diode with a normal high current diode such as the &quot;FFP08S60SNTU&quot;, so you don't risk breaking the laser)</p>
thank you very much sir<br>
<p>Can that cut 600 gsm carton paper ? Like a laser cutter ?</p>
<p>I haven't tried it, but I think my laser might be too weak for that paper weight/thickness. It is probably possible with a more powerful laser diode (2W+), with GRBL set to a low speed. I found this link which has some test results for cutting/engraving different materials, using a more powerful diode than mine: </p><p>https://www.kickstarter.com/projects/1537608281/lazerblade-the-affordable-laser-cutter-engraver/posts/872030</p>
<p>hi,thank you so so much for nice job.i make it and now i have a <br>problem.i can not Conversion my picture to g code .please give me a <br>softwar for Conversion any picture to g code and sending g code to my <br>arduino.</p><p>please tell me how i can conversion text to g code with inkscap softwar.</p><p>my email:kambiz3221@gmail.com</p>
<p>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.</p><p>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 &quot;PicEngrave&quot;.</p>
<p>Hello,Can it be used for cutting balsa wood?</p>
<p>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.</p>
<p>Hello, sorry for my english :D</p><p>I watched the video &quot; vector mode with grbl &quot; 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! </p>
<p>Hi, here are some detailed steps <br>for raster mode</p><p>Arduino:</p><p>Upload &quot;cncmotors_driver3.ino&quot; <br>to the Arduino through the Arduino IDE (sketch editor). </p><p>You may need to change the <br>&quot;LASER&quot; pin assignment - I used an Arduino Mega, so it is pin 51 in <br>the Arduino sketch. You can also edit parameters such as time delays and the &quot;scalefactor&quot; variable to match your <br>machine, then upload to the Arduino.</p><p>To check that the sketch is working <br>properly, you can manually drive your machine using the Arduino Serial Monitor. <br>For example, sending the text &quot;11111&quot; should move the laser 5 steps <br>to the right. Sending a &quot;9&quot; should turn on the laser, and sending a <br>&quot;0&quot; should turn the laser off.</p><p>Processing:</p><p>Download and install the Processing <br>IDE (link is on step 8). I used version 2.0.1 32-bit, with the Serial library, <br>but there might be a newer version now.</p><p>The Processing sketch streams the <br>text file to the Arduino. Try the steps below to get it working:</p><p>Copy the <br>&quot;textfilestreamer2.pde&quot; file to a location on your computer. As an <br>example, I'm going to use &quot;C:\&quot;</p><p>Open the <br>&quot;textfilestreamer2.pde&quot; file. If Processing has been installed <br>correctly, a popup message will appear, and tell you that the file needs to be <br>inside a sketch folder. Click ok, to create the folder.</p><p>You will now have the folder <br>&quot;C:\textfilestreamer2\&quot;</p><p>Create the folder <br>&quot;C:\textfilestreamer2\data\&quot;</p><p>Generate a &quot;cncinstructions.txt&quot; <br>file from an image: </p><p>Run the &quot;CNC Image <br>Program.exe&quot; program<br> <br>In the program's text box, enter the full path to your bitmap file. There is a <br>sample bitmap (arduino.bmp) included with the program that you can try first. <br>The path would be something like &quot;C:\CNC Image Program\arduino.bmp&quot; <br>(depending on where you put the folder)<br> <br>Click &quot;OK&quot; and after a while, the image should be displayed by the <br>program. The file &quot;cncinstructions.txt&quot; should have been created in <br>the folder (eg C:\CNC Image Program\cncinstructions.txt)<br> <br>(If you need to run the program again, clear all .txt files in the folder)</p><p>Put the txt file in the correct <br>folder:</p><p>Copy the text file you generated <br>and paste it into <br> <br>&quot;C:\textfilestreamer2\data\&quot;</p><p>In Processing, click <br>&quot;Run&quot;</p><p>It should start sending data to <br>your Arduino - the Rx/Tx status LEDs on your Arduino should start flashing.</p><p>Note: The Processing sketch has been <br>configured to use &quot;COM3&quot; to talk to the Arduino. If your Arduino is <br>on a different COM port, you can either change it to COM3 in Windows Device <br>Manager, or edit the sketch to match your configuration.</p><p>Setting Start Position:</p><p>You can use the serial monitor in <br>the Arduino <br> <br>IDE (sketch editor), to send manual user inputs and set the start position.</p><p>Click &quot;Tools&quot; -&gt; <br>&quot;Serial Monitor&quot;. Then, you can enter the numbers 1,3,5 or 7 to move <br>the X/Y position. For example, sending the text &quot;1111111111&quot; will send <br>instructions to make the laser move 10 steps (1mm) to the right.</p><p>If you get stuck, you can send me an email (getburnt1@gmail.com)</p>
<p>ok, thanks, i will try it</p>
<p>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?</p><p>Thanks</p>
<p>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 &quot;LASER&quot; variable in the Arduino sketch.</p><p>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.</p><p>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: </p><p><a href="http://www.jaycar.com.au/Power-Products-Electrical/Plugpacks/DC-Output/SWITCHMODE-MAINS-ADAPTOR-12VDC-2-5A/p/MP3490" rel="nofollow">http://www.jaycar.com.au/Power-Products-Electrical...</a></p><p>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)</p>
<p>Thanks for the prompt reply! </p>

About This Instructable




Bio: I'm an engineer from Australia
More by getburnt:Arduino RC Car with FPV Camera Arduino Laser Engraver 
Add instructable to: