Introduction: Laser Glow Writer

About: Maker Dad.

UPDATE 1/3/2015:

I committed a python program that now lets your laser your tweets on the wall with your laser writer! Check it out here.

UPDATE 12/21/2014:

I have created a gcode font that allows for dynamic gcode creation. What does that mean? It means now we can talk to the laser glow writer to shoot out messages on our walls, ceilings, cats.. (not cats) via code! Check out this video to see what I mean.

Code Here:


The Glow Writer is a CNC single point projector that uses a near ultra violet laser to excite photons on luminescent material. Basically, it's a laser that shoots at glow-in-the-dark vinyl (glow paint?) and makes it glow where it hits. At it's heart, the Laser Glow Writer is a 2-axis CNC machine, which means the laser can draw very detailed and intricate designs, that you can create on your computer or mobile device, from across the room. Using a combination of 3D-printable and laser-cut parts, as well as some off the shelf hardware you can make this pretty cool little machine fairly easily, and it works extremely well with a safe, low-power laser diode. All parts are sourced and are available online.

How does it work?

The Laser Glow Writer works by being controlled from and Arduino Due that is running the TinyG CNC motion controller firmware. The Arduino then controls the 2 stepper motors (X and Y axes) in a coordinated fashion while turning a small laser on and off. This is all spelled out much more clearly in the rest of the instructable so read on!


I originally designed this machine for Halloween to write spooky messages on the wall all night long, but there are many other cool things that it can do! The first version that I built was big and not very accurate. Being a bit of a perfectionist, I redesigned the whole machine to be smaller and cheaper to build. Above all else, it had to be much more accurate! A lot of care has gone into engineering a really nice project!

So what follows is how to build and drive the Laser Glow Writer!

Links and Information:

Build of Materials (BOM):
Design Files:
Demo Videos:
Math: If you like numbers and want to see how the gear ratios / distance / travel per revolutions were all calculated you can check out this google spreadsheet.

Step 1: Assemble the Y Axis Laser Base

We need to build the housing that will hold the laser. This is one of the more tricky parts of the whole build. After you have printed / laser cut all needed parts. Grab the grab the base.stl 3d printed part along with all the laser housing parts.

Grab the 3 1/4" bolt (BOM #7) and start threading it into the base stl file. This can be a bit sticking so get it threaded right. Add the 1/4 washer that comes with the push bearing kit and a 1/4" nut to "pull" the 3 1/4" bolt into the base.stl print. NOTE: All design file links are listed on the main page of this instructable. This will pull the bolt "flush" with into the hex base recess.

Step 2: Attach Y Axis Motor and Secure Sides

Now we have to assemble the laser cut "tower" for the Y axis. Grab all 4 laser cut y pieces as well as both Y bearing mount prints plus the NEMA 11 "short" motor. (BOM #12).

Place the motor into the laser cut opening as seen in the picture. Secure the motor to the laser cut holder by using the 2.5mm x 8mm screw + 2.5 mm washer. (BOM #12 & #13). Do not tighten as we need the motor to move the motor to assist with belt tensioning later.

Finally secure the laser cut sides together with the 2x of the M3 12mm bolts and nuts as seen in image. (#4 & #14 in BOM) . Use 2x M3 x 8mm to secure the base.stl printed part to thread inside of the plexiglass. Do not over tighten!

Step 3: Attach the Y Axis Bearings

Place the bearings into the 3d printed Y axis bearing holders and using a vice "press fit" the R3-2RS Bearings (BOM #2) into the "open y bearing holder" and the "closed y bearing holder". Go slowly and make sure you remove any excess stringy filament left over before attempting this step. Note: in the image I used a green part to illustrate this.

Now insert the open Y axis bearing holder onto the laser cut side Y axis panel that the motor shaft is protruding from. Mind the orientation on the notch of the Y bearing holder. Securely fasten with M3 x 8mm bolts (BOM #4). Do not over tighten! Do the exact same thing with the Y bearing closed holder.

Step 4: Assemble the Laser Housing

Locate the 1/8" mesh cable protector (this is optional but recommended BOM #8) slide the mesh around the cable for the 5MW 402nm laser diode (BOM #27). Next insert the mesh + laser into the laser holder 3d printed holder. Pull the wires out of the back of the 3d printed laser holder. Finally insert a small zip tie (BOM #15) into the part. You might want to "bend" the tip of the zip tie to assist it's return to the top. This is an important step. The zip tie acts as a stress relief for the laser module. Without this part your laser module will most likely break after a short "glowy time"!

Step 5: Mount Laser Y Axis Module

Locate the 10-24 2 x 1/4" bolt (BOM #6) and the 3d printed Y axis belt part. Take 2x 5mm washers (BOM #16) and slide the over the outside of the 10-24 bolt. Place the bolt with the Y axis gear into the Y axis bearing. Place an additional 5x 5mm washers onto the inside of the 10-24 bolt. Thread 2x 10-24 jam nuts after the washers as see in the image. (BOM #18). Then insert the laser module into the Y axis housing. Thread the 10-24 bolt into the laser module holder then insert a final 10-24 jam nut (BOM #9) to the end. The alignment of the laser is a bit tricky. Watch the included video to see how I fixed this. This part is a bit tricky but its possible!

Step 6: Attach and Tension Y Axis Belts

Place the NEMA 11 20x tooth pulley (BOM #18) onto the Y axis motor. Do not tighten the set screws as we will need to adjust this to the right spot once the belt is on. Make sure you loosen the Y axis motor screws. Then place a screw driver under the motor to press the motor towards to top large Y axis gear. This is to assist with placing the belt over both pulleys. This is tricky and sometimes its best to remove the top motors screws completely to get the belt over both gear and pulley. (BOM #31 - 79 tooth) Once you get the belt over both gears you need to tension the belt. Pull the motor back down towards the bottom of the base and then tighten the motor mount screws. Once that is complete align the motor pulley so that the the belt is directly vertical from the motor pulley to the Y axis gear. Look at the last pic in the bunch to see what I mean.

Step 7: Insert Wires Into Wire Guide

Pull wires for the laser diode, Y axis motor through the wire guide. The laser diode (BOM #27) should be in the far right wire guide as if looking from the back of the wire guide. The Y axis motor should be placed into the far left wire guide hole as from the same orientation.

Step 8: Mount X Axis Motor

Place the X Axis NEMA 11 Long (BOM #19) face down onto the top laser plexiglass top. Be sure the long strip cut is to the right of the X Axis motor as seen in the pic. Secure the motor exactly the same way as the Y axis motor being sure to keep the bolts loose.

Step 9: Setup the X Axis Linear Bearing Mount

Remove the 1/4" nut from the Y axis tower. Leave the 1/4" thrust bearing attached. Now place the thrust ball bearing (BOM #20) and the 1/4" bushing face down (BOM #4). Take the whole Y axis now and insert it into the top laser cut panel as seen. Move'in a-long now!

Step 10: Attach Wire Guide

Slide the X axis wire down the center hole in the 3d printed wire guide. Then gently place the wire guide into the rectangle hole in the top laser cut panel. Screw that bad boy down!

Step 11: Tension X Axis Belt

Thread the X axis 3d printed idler gear on to the 1/4" bolt. Next, insert an additional 1/4" jam nut (BOM #9) onto the 1/4" bolt. Insert the 20 tooth motor pulley (BOM #18) onto the NEMA 11 X Axis motor shaft. Pull the motor towards the 1/4" bolt and slip the belt (BOM #32 96 tooth belt) over both gears. Gently pull the motor away from the 1/4" bolt and tighten the motor mount screws.

Step 12: Secure Middle Layer

Get the middle laser cut section and insert the thrust bushing (BOM #3) so that it is facing towards to top. (This is the opposite direction of the other bushing). Place the 1/4" thrust bearing followed by the stainless steel 1/4" washing that comes with the thrust bearing pack. Lastly gently insert the side laser cut panels into the top and bottom laser cut panels, then place the lock nut (BOM #21) onto the end of the bolt. Do not over tighten this.

Step 13: Mount Arduino and Setup Power Input

Using some scrap wire get the toggle switch (BOM #22) and using a soldering iron solder the scrap wires as seen in the first image in this step. Next insert the female power mount (BOM #23) to the back laser cut panel, secure the nut that came with the mount. Then solder the scrap wire to look just like the 2nd picture in this step.

Next get the small M3 x 12mm (BOM #36) mounting screws and attach the Arduino Due (BOM #24) to the bottom laser cut panel. DO NOT OVER TIGHTEN THIS! You will damage your Due if you do so!

Step 14: Wire the Transistor Laser Control

Get the TIP120 (BOM #37) and some small gauge scrap wire. Solder each pin of the TIP120 with a different color wire. (IMPORTANT). Also heat shrink them to prevent shorts!

Solder the 2.2k resistor (BOM #25) to the pin labeled number #12 on the gShield (BOM #26). Next, solder the other end of the 2.2k resistor to the far left left of the TIP 120 transistor. Be sure to slip some heat shrink over it and shrink it up!

Solder the very far right wire connected to the TIP 120 to the GND on the gShield. Trim excess wire.

Screw down the TIP120 with a M3 12mm (BOM #36) bold to the bottom panel, secure with a M3 nut. (BOM #14)

Step 15: Attach Laser Module Mount - Adjust Current Pots

Solder the red wire of the 2 pin female connector (BOM #28) to the 5v supply that is connected to the gShield. Trim excess.

Solder the black lead of the male connector (BOM #28) to the center lead wire that is connected to the TIP120. (BOM #37) Regular song and dance.... Heat shrink it up and drive on.

Before moving on you should adjust the current trim pots on the gShield. I have attached a picture for the "good" current settings for the motors I listed in the BOM. Look at the last photo of the gShield in this step. Get a small screwdriver and turn the white current trim pots all the way counter clockwise. DO NOT USE TOO MUCH TORQUE OR THEY WILL BREAK. Once you have adjusted fully counter clockwise turn the pots clock wise to reflect the orientation in the picture. Note the black adjustment lines. I know this was "wordy" please let me know if this is not very clear in the comments.

Step 16: Attach Motor Wires

Get the Y axis motor wires coming out of the wire guide 3d printed part. Insert the Black, Green, Red, Blue wire as shown in the image above. You need to make sure you use this color sequence. If you used some other sourced stepper motors that do not share the same scheme you will have to test this to make sure its wired for the right polarity. (See the tuning / troubleshooting section)

Make sure you have a good connected to the screw down terminals or you will have to repeat this step above. Continue to do the same with the X axis wires.

Step 17: Tighten It Up

Now it is safe to insert M3 nuts (BOM #14) and bolts (BOM #36) into the rest of the frame to tighten things up so we can move on to the next step and attach the front and back panels.

Step 18: Attach Front and Back Panels.

If you have excess cable for the power connector / switch go ahead and trim it up now. Then insert the black lead into the GND terminal (LEFT IN PICS) and screw down. Do the same with the RED lead inserting into the + terminal onto the gShield.


Make sure you 2x check this step. Mis wiring could / will blow up both the due and the gshield.

Close up shop. Secure both sides (front back) being careful to route wires away from edges and inside belts.
You can also make sure the power switch works by inserting the 12v 2Amp 5.5 A/C (BOM #33) adapter into the female power port. (BOM #23). If you opted to pick up the 4x rubber feet (which is optional but help with leveling) go ahead and place them in all 4 corners on the bottom of the Glow Writer. (BOM #34)

Step 19: Flashing the Arduino Due With TinyG G2

In order to get this whole thing working we need to flash over the native Arduino Due code with the TinyG G2 code. I have compiled a custom version for the Laser Writer settings @ 9ft away from the glow in the dark vinyl (BOM #29). Be sure to use this version of the TinyG G2 firmware:

Once you have this downloaded go here to learn how to flash this onto your Arduino Due.

Step 20: Converting Images to Gcode

How to convert images to gcode

1. Convert Image to SVG format. This site is useful:

a. Select “Monochrome”

2. Convert SVG to gcode. This site is useful:

a. Select Centimeters

b. File -> Open SVG File

c. Edit-> Scale Selected. Scale the image to fit the correct drawing area (our demo files use a 21"x21" format)

d. CAM->Follow Path Operation

e. Tool Diameter = 1

f. Target Depth = -1

g. Safety Height = 0

h. Step Down = 1

i. Feedrate = 45000

j. Plunge Rate = 45000

k. CAM-> Calculate All

l. CAM-> Export Gcode->Export Selected Toolpaths

3. Modify gcode for laser.

a. Line 9 - replace “M3” with “M5”

b. Replace all instances of “G0 Z0” with “M5”

c. Replace all instances of “G1 Z-1 F45000” with “M3”

d. Save

Step 21: Tuning / Testing

In this section we will make sure that your mechanics / wiring is good go to. This assumes you have flashed my specified elf binary onto the Arduino using the links in the previous section. NOTHING in this step will work with doing the previous part first. FYI.

Connect the power to the Glow Writer. Next connect a micro USB cable to your computer then to your Glow Writer. Once this is done you should hear the motors start to hum lightly. This is the coils in the stepper motors energizing. If you do not hear anything make sure your power switch is in the ON position.

From here please follow the already provided "Setup Coolterm" instructions provided by the TinyG wiki.

Once you have connected to TinyG type in $x and hit enter. You will see all the settings for X. $y for the settings for Y.

Go ahead and make sure both axes are mostly centered.

Now issue a small move like G0 X400 Y400. These are both positive values. So you should see the X axis move from Center to the Right. The Y axis should move "UP". If this is what you saw. Cool! If not your wiring is incorrect and you need to return to the wiring section to verify your cable matches the images I provided.

I am going to leave this section a bit "lacking". If you feel you need more help that the TinyG wiki provides for setup please leave a comment and I will post more detailed information in future. If you feel more comfortable private messaging me and I will do my best to update this page with your input.

Step 22: Sending Gcode Files

The quickest way to send a generated gcode file would be to use something like Coolterm to send the file you created. You can read how to do this here:

However, Chilipeppr TinyG sender is MUCH more fully featured and a better choice:

Gcode Files:

Here are some of the test images I created. Instructables / Formlabs please do not sue me. :) If you do have an issue with your logos being converted to laser gcode files please let me know and I will remove them for sure.

You can download the demo gcode image files here:!design-documents

Step 23: Final Thoughts

This was a fun project to take on for me. It took quite a bit more work / time than I anticipated. This was my first attempt at an instructable and for sure my first time trying to win a contest! I tried to do my best with the build instructions. If there is anything that is not very clear please let me know and I will do my best to fix inaccuracies!

Laser selection. I used a 5mW laser in this instructable. These are the max power before these little lasers get "dangerous". I am not a laser expert however :). So perhaps use common sense. Don't stare into the light! That being said you can get a more powerful 405nm laser that will excite the vinyl for longer periods. However this is not as safe so use your own judgement on this one.

Project thoughts, I ran out of time. I wanted to have a google chrome app that I could send files and do on the fly configuration settings (read change the internals of TinyG settings based off of dynamic "distance to wall settings"). I also wanted to do a "screen saver" where I could randomly draw circles or squares or anything really! Dynamic gcode generation is something else I would very much like to get working. Think of something like having a keyboard + laser writer on display. You could come up and type answers to questions or whatever you wanted. Perhaps an interactive MUD experience :) Some future work I am sure :) I plan on making a few more of these laser writers for the upcoming new years party we will be having. I will try to post some new videos of the machines in action drawing away.

Make it Glow!

Second Prize in the
Make it Glow!

Formlabs Contest

Participated in the
Formlabs Contest