Mechanical Laser Show

by AdditiveTech, published

Mechanical Laser Show by AdditiveTech Jun 13, 2017
15 Share
Download All Files

Thing Apps Enabled

Order This Printed View All Apps



Liked By

View All

Give a Shout Out

If you print this Thing and display it in public proudly give attribution by printing and displaying this tag.

Print Thing Tag

Thing Statistics

55532Views 6810Downloads Found in Mechanical Toys


If your printer has a width of 200mm or wider, instead print the superior large version:

The mechanical laser show is a device that projects a pattern by quickly moving a laser. It's
hand powered, 3d printed, open source, and free to print.

For more information and shots of it in motion, see this video:


Hackaday.io post with more info: https://hackaday.io/project/25447-mechanical-laser-show
Cam profile code: https://github.com/EvanStanford/cams

Print Settings


Monoprice Mini Select



Each part has different print settings:

  • Cams (2)
    15% fill, supports, no build plate adhesion
    I recommend increasing the "Support Distance X/Y" to 1mm or more

  • Crank gear
    15% fill, supports, large brim

  • Back Plate
    15% fill, supports, no build plate adhesion

  • Front Plate
    15% fill, no supports, no build plate adhesion

  • Crank handle
    100% fill, supports, large brim
    This piece has an arrow telling you which way to crank (clockwise). If you want it to look great, sand down with 100 grit sandpaper.

  • Fasteners (X axle + Y axle + 2*Bolt)
    50% fill, no supports, large brim
    The X and Y axles are different parts. One is right hand threaded and the other is left hand.

Parts to buy

Optional Parts

Version History

  • V1
    Original upload

  • V2
    All parts backwards compatible.
    Rotated threaded holes in back plate. Fastener heads should now line up better.

More from Mechanical Toys

view more

All Apps

Auto-magically prepare your 3D models for 3D printing. A cloud based 3D models Preparing and Healing solution for 3D Printing, MakePrintable provides features for model repairing, wall thickness...

App Info Launch App

Kiri:Moto is an integrated cloud-based slicer and tool-path generator for 3D Printing, CAM / CNC and Laser cutting. *** 3D printing mode provides model slicing and GCode output using built-in...

App Info Launch App
KiriMoto Thing App

With 3D Slash, you can edit 3d models like a stonecutter. A unique interface: as fun as a building game! The perfect tool for non-designers and children to create in 3D.

App Info Launch App

Print through a distributed network of 3D printing enthusiasts from across the US, at a fraction of the cost of the competitors. We want to change the world for the better through technology, an...

App Info Launch App

Treatstock is an online platform that offers decentralized manufacturing services such as 3D printing and CNC machining for clients all over the world. We offer free and instant access to comparati...

App Info Launch App

3D print your favourite design with NinjaPrototype, a professional 3D manufacture with consistent quality and speed.

App Info Launch App

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.

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