MakerBot Print is our newest print-prepration software, which supports native CAD files and STL assemblies,
allows you to interact with all your printers via the Cloud, and many other exciting new features.

Download Now


Mechanical Laser Show

by AdditiveTech Jun 13, 2017
Download All Files

Thing Apps Enabled

Please Login to Comment

Hello Evan! This video caught my interest on youtube, because you share the same name as me! haha. I also love 3D printing and lasers, and cant wait to try this out as soon as I have time! thank you!

Thanks Evan! You might also like this Evan related object I created:


Evan Name Silhouette Object

Yup I saw that. First thing I did after seeing your video was check out your other creations. Happy 3D Printing! :)

hello, excuse me , for any chance would you have this made in solidworks? i would very much made some models for my own, or the technical drawing for the desing ??. will be much appreciated

I did not use SolidWorks. I created this with Sketchup (basic, I know). I have included the Sketchup file (.skp) in this objects "thing files". Note that it is 1000X larger scale. I am not a professional so I did not create any technical drawings besides the .skp file.

you rock, great to include the math. I have to look at it more slowly.
Great project.

where is the math ?

I go over the math in my 6 minute youtube video linked in the item description. Additionally you can see the working code I wrote here:


Love how this looks! I saw it in Make and I am going to print it out!

Comments deleted.

If you attach a pen to this, you could make an automatic writing machine!

this is fucking great!

mind blown. Great video and awesome project.

this is a fabulous (jr) high school math class project.

Not a bad concept, however most laser pointers have a duty cycle that should not exceed about 30 seconds or you risk killing the diode. Taping the button down therefore probably isn't the best idea!

I think I saw this at Makerfaire bay area. Was that you guys?

Yes. That was me. Thanks for stopping by.

I would totaly make this if i had a laser. I might actualy buy one just for this.

The lasers cost 3 for ~$12. That is a pack of red, green, and blue. As I state in the description I recommend printing the larger variant instead if you have the bed size:


Giant Mechanical Laser Show

Cool project!

Also only mathematicians think your youtube explanation was simple math =) not me hehe

I didnt watch the video but i would just guess looking at it that the LeftDisk:RightDisk ratio is how far left or right it is and the hight is based on how high the bumps are on the disks. Im going to watch the video now and see if im right.

Oh god that math was to complicated i agree with you

I wish I was my son he would think its simple math. =) Didn't take after me thank god.

I didnt know if anyone else was having problems with the back plate. I have the monoprice mini select v2 and when it gets to a certain height (almost close to the end of the print) it just stops and with a little bit left on the progress bar. Any suggestions?

Are you using Cura? I experienced the exact issue last week with a completely different model. I printed the identical Gcode twice and it failed at the identical spot. Then I switched to Slic3r and it solved the issue. I may recommend that. Another advantage of Slic3r for the back plate is the variable Z resolution: you can have high resolution (0.1 mm) at beginning where the threads are and then fall back to lower resolution (~0.25 mm) for the rest.

So the print with Slic3r that I just tried unfortunately did the same thing. Stopping in the middle of the print with the progress bar so close to being done, yet the print does not accurately reflect that.
https://imgur.com/dhh0fZm This shows where the print is at.
https://imgur.com/wGHJbOg This shows the progress bar better

The entire machine just sits there running with the fans going and bed/extruder being kept at their temperatures. Any suggestions as to if its the machines problem or maybe the sd card. At this point I am at a loss so anything would help.

A couple more question:

-Cura and Slic3r both have previews. Do those look ok or are they cut off too? Make sure to check the layer previews as well.
-Are you sure your printer Z height parameter in the slicer programs was set correctly? If I remember correctly Cura has this but Slic3r does not have this param.
-Can you open up the .gcode file FROM THE SD CARD with a text editor program like Notepad. What does the end of the file look like? I am thinking maybe when you copied the file to your sd card it got cut off early. The end is suppose to look very different from the rest. You can look up what sample gcode looks like at the end.
-Did it stop at exactly the same height?
-Is this the tallest model you have ever printed?

I would recommend updating the firmware on your printer and maybe formatting or getting a new sd card depending on the questions above. Since the progress bar was off, I am guessing it is not a hardware problem. Also it seems very unlikely it is the .stl model's fault.

So the previews look good
The Z height seems to be correct
But I'm going to assume that this is my problem
X63.712 Y43.947 E578.92820
G1 X63.563 Y43.873 E578.93060
G1 X62.808 Y43.679 E578.94182UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU <-- this goes on for so long.t
It stopped at the same height when i tried reprinting it with Cura, but when i switch to slic3r same problem just different height.
And yes this is the tallest model I have ever printed.
So is it a problem with the file itself because I have also tried no support versions of the back plate and had the same issue, or would it be the sd card?

Those U's are definitely not good.

I think this is a problem with your sd card. Try generating the gcode again but save it on your computer. Take a look at the end of the file. I bet it looks fine. Now copy that to the sd card and take a look again.
If it still has issues, format the sd card FAT32 (https://www.wikihow.com/Format-an-SD-Card) and try again.
If you still have issues, buy a new sd card.

One more thing- external disks can have problems with files over ~4GB. This .gcode should be way less than that... right?

How do u work out where the reference points are, on the shap to be projected? I would have, incorrectly, imagined them to be equidistantly spaced like on the cam but on the image of the star most the points were clumped around the tips of the star. so how do know the point ether side of the tip will correspond to a 35th of a rotation of the cam
i hope that makes sense :)

Hi. Great question- it makes sense.
Lets assume you are rotating the input crank at a constant speed. This means that the laser will travel between each point at a constant interval. That is- ever X milliseconds it will hit the next point. If the points were evenly spaced the laser would travel at a constant speed. This would work fine, but I spaced them differently as a small optimization.
When the points are closer together the laser moves slower. I am slowing down the laser for the sharp turns and speeding it up for the straights (similar to a race car!). I chose the exact spacing by eyeballing- there was no exact math. But you could conceptually make math for that. For example you could have a target peak acceleration and a target max speed as constraints.

Ah ok! That simplifies things then.
thanks for the reply

This is impressive ! I like it very much and find it can be the basis to very rich variations ! Thanks !!

This is quite a brilliant idea and clearly from a mathematical mind. But there are a lot of supports necessary and I feel that these could have been designed out. Splitting the parts to then glue them together and avoid supports isn't really practical. The only option is to recreate everything in another 3D CAD program, then export new stl files to press fit everything together. This is especially true for the front plate which if split into three parts (or even just two) then re-assembled through integral pins would avoid all support. Even the simple crank requires support, but split into two and having an integral pin, would also avoid support. In my opinion avoiding the need for support in a 3D print design, maintains the surface finish quality, uses less filament and takes less time to print.

While designing I prioritized functionality, minimal part count, aesthetics, then printability in that order. Earlier designs had a 2 piece back plate that was cleaner to print and provided adjustability. I scrapped that in favor of a smaller part count. Since you prioritize printability higher, the ideal design would be completely different. Feel free to remix one or more parts. I will definitely print them and try them out! I designed with Sketchup and the .skp file is included (with 1000x scale).

This is such a great project and fun idea! Thanks for sharing the files. :)

My Hero!!! Thanks for sharing the math. BTW - Nice hands!

You are a genius! So rad!

I knew all that ,,,,not

HAhhhahahaha this is so crazy

super cool work brother

Awesome project!

If I build cams that I'm willing to donate do I just remix this thing or post them independent?
I'm new on thingiverse...

I would say create a remix and only upload the cam models, plus pictures of everything. Looking forward to seeing what you made!

My friend made this to create new patterns!!!


His tool works well. I just used it to create the new heart shape cams. For more information, read my blog post about it: https://hackaday.io/project/25447-mechanical-laser-show/log/62764-cam-generation-program-by-user-shy-tavori

Your friend is great. Many thanks to him :-)

I think this is amazing and I have printed all the designs but could you make more they are so amazing!

very nice and cool project! I need a heart for my Girl - is this possible? I love it! :D

Done! Uploaded above. Look for Heart_Y_Cam.stl and Heart_X_Cam.stl.

excellent! thx. very cool. :) :) :)

Will I need to adapt it for larger laser pointer? (I have this one https://ae01.alicdn.com/kf/HTB1wneeQVXXXXbbXFXXq6xXFXXXm/Xpertmatic-2-532nm-5-303-Power.jpg)
What is the diameter of laser pointer you using?

The cams are designed for a 14.12 mm diameter laser pen.
I own the larger one you linked too. The mismatched diameter does distort the pattern somewhat. But, the bigger issue is that the pen's extra mass reduces its ability to trace the pattern as quickly and accurately as lighter pens. If you decide to print this I would recommend picking up the other lasers ($10) and experiment with both.

wow that's what kind of math again? how do you possibly recall all that information? and then you actually used it! you can do whatever you put your mind to. except be a hand model. you're much too smart we need you. thanks for sharing i will definitely print this though i will never be able to explain how it works, i can line up the cams and turn the crank lol! thanks for sharing!

That's all trigonometry. I have very little of it memorized. I just looked it all up as I went. As long as you can identify what problem you are trying to solve, you can look it up!

How freggin nifty is that!

Your a genius, men.

This is cool.
Thanks for sharing!

Great model and perfect video explanation. May I ask what software you were using for the CAM simulation?

Algodoo. It's a great physics sandbox. Highly recommended.

I just downloaded Algodoo, and it looks really promising. Would you mind posting the scene file to the Thing files section? I'd like to make some cams of my own, and that way everybody could have a look at what went into your creation. Thanks!

One more question. Could you provide the Algodoo Scene that you showed in the video? Thanks.

No sorry. If you want to create a cam do the following:

  1. create a circle
  2. right click -> add bearing to center
  3. right click on bearing -> motorize
  4. create the follower retainer, anchor to background
  5. create the follower and apply a spring to push it into the cam
  6. Add a lobe to the cam with the solid adding tool

That helps. Thanks! I'm using a spreadsheet to calculate the cam dimensions for any new cams. Looks like Algodoo will be good for visualization, but not the detailed design.

Make sure to take a look at the Go program I wrote for this purpose: https://github.com/EvanStanford/cams

Thank you so much! That response time was unreal!

do you have a degree in math?

No, just computer science.

What do you mean "just" computer science! You do yourself a disservice! My degree is in computer science and folks don't understand why I do everything with matrix multiplication! I learned how to do computer graphics with a soldering iron. Long before it was all built into a GPU.

Great project. That's this weekend all occupied!

Hi! The SKP file seems to be in a weird scale, also the golang script outputs everthing around 10.000 larger. Could you point out the right scale? Thanks!

That is correct- each of those output 1000X scale. The reason why is that Trimble Sketchup has tons of rounding bugs when working at real scale. I found the hard way that you should work at 1000X scale when in Sketchup. Just scale down before export.

I wish there was a way to customize this with a paint drawing of the shape we wanted it to output and it would come up with the shapes of the gears for us, that would be dope.

That is what I call a good Idea.

Thanks for the supercool work!!
Why did u choose for the star shape to have inside lines instead of just outline?

Fun project, and great video! I've been working on some project videos and now I really notice when folks have great project videos. Well done!

Very nice! Can't wait to do this project with my niece. One question: Was there a reason you designed the cams and gears as one piece? If you were to print them separately, I would think you could leave the gears in place (and only print them out once) and only swap out the cam parts. The gears could be permanently assembled. If you put an orientation feature in how the cams assemble to the X and Y gear shafts, you wouldn't have to worry about cam orientation during assembly.

I may want to tinker with this idea a bit and publish a remix, unless you want to take a stab at it first! All in all, great work, and I love the explanation of the math.

Saw on Hackaday. Kickass!

Awesome project! So happy I found your video :)

you have so many likes, collects and downloads already!!!!!!!!!!!!!!

Wouldn't the angle technically depend on the radius of the other cam at that point as well? (if the other cam has a larger radius, the pen is pushed up more, then the angle is greater for the calculated cam). I think this would probably make the problem much more difficult though. Did you consider this? Are the implications negligible?

Yes, you are very correct. I am taking account for that issue. Let me explain:
For my first prototype I just found a list of the radii to each of the target points. Then I created cams where those radii where all X degrees apart from each other (eg if there were 36 points, each would be 10 degrees apart). This prototype had the exact issue you are describing and it was significant.
I am now accounting for this by calculating the angle that each radius protrudes from the cam at. When calculating a given point on a cam, if the opposing cam has a very large radius, that will cause the cam to increase the angle at which it puts that radius. This is done indirectly through the angle math (the second half of the math on the slide).

cool idea dude. good video also.
you should consider creating a SCAD file for making custom cams.

Thank you.
Yes, SCAD would be the correct way of creating the custom cams. My motivating factor for using Golang instead was that I wanted an excuse to learn Golang.

YES! If you use openscad, then you could perhaps make a Thingiverse Customizer along with the drawing widget, see: http://customizer.makerbot.com/docs#draw_polygon or an example thing like: https://www.thingiverse.com/apps/customizer/run?thing_id=753352

I was just looking at the Golang code and having done some customizer stuff before it might be really tricky using the drawing widget. It might be easier to work with a series of coordinate data instead.

Or maybe make something in a web format that would allow the user to import SVG points... or leverage something like maker.js ?

Interesting... I'm adding it to my "I'll never have time to do this but... " project list.

Great! I Love it :-)