Mechanical Laser Show

device that projects a pattern by quickly moving a laser. all mechanical, 3d printed, hand powered

Similar projects worth following
My goal is to use a laser to display a Persistence Of Vision (POV) image. The image should be easily viewable and recognizable. It should use all 3d printed parts and be hand powered- no electric motors or servos.
This is a little different than most projects on this site since I stayed away from electronics. I hope you’re interested in mechanical engineering as well!

All .stl files are here:

How it works

When you turn the input crank, the cams turn at a 5:1 ratio. Every time the cams rotate, the laser traces the path once. Using 2 cams allows the laser to move with 2 degrees of freedom. Basically one actuates in the X axis and one in the Y axis.

Cam profile design

The most complicated part of the project was designing the cam profiles. To do that, I wrote a simple Go program. It takes the target path as input and outputs the 2 cam profiles. The target path is a series of points that the laser will travel to sequentially.

Here is the code (look at ConvertCoord function)

For more on how the math works, watch the video above.

Optimizing Mechanical Variables:

Whenever you create a physical machine, there are many factors that can be tuned to achieve the goals. Specifically, tuning all of these variables would result in a more precise output pattern and less required input power

  • crank gear ratio
    • too high (> 5:1)- human has too small of a mechanical advantage
    • too low (< 5:1)- laser moves too slow
  • rubber band force
    • too much- difficult to turn, too much friction
    • too little- "valve float" pen jumps off cams slightly
  • Coefficient of friction between laser and cam- should be minimized
  • Rotational inertia of laser pen
    • If I had a very heavy laser, it would take more force to move.
    • In order to minimize inertia, I flipped the pen around from my original design so the lighter nose is actuated. (The butt contains the batteries and is much heavier).

  • Cam generation program by user Shy Tavori

    Evan Stanford07/10/2017 at 05:38 0 comments

    Since my last log entry, the project has gained mild internet fame. The best effect is that several people from around the world have added to the project. This log entry is about youtube user shy tavori's program that can be used to generate new cams from custom input paths.

    Take a look at shy tavori's video explaining his program:

    The program runs in 3D modeling program Rhinoceros. It uses an extension, Grasshopper, which adds block based scripting. I was not familiar with either application until shy tavori brought them to my attention. They seem like powerful applications.

    I used his application to create a new set of cams- the heart shape. I made this choice because several commenters requested it and it is very recognizable. This has been the simplest shape I have created so far which has several advantages:

    • The machine requires less hand power to run
      • Less intricate features give less opportunities for "valve float" which means less spring force required
    • The outputted shape is larger
      • as measured by the projecting angle in degrees
    • Higher total image resolution
      • The laser pen is moved farther. This is like printing a larger image with a constant DPI printer resulting in a higher total resolution.
      • My printer has an XY accuracy of ~0.2mm. The heart cams have a radius range (max-min) of 9mm. This kind of gives an approximate resolution of 45 X 45 pixels. This sounds bad until compared with the batman shape has an effective resolution of 17 X 17 pixels. Note that these are back of the napkin approximations and more complex math is needed for exact tolerance calculations.

    Custom cams can also be created with my Go application. I think shy tavori's way would be easier for the average person.

    Here is the procedure I used to use shy tavori's work to create the new cams:

    1. Download/Install Rhinosourous
    2. Download/Install Grasshopper
    3. Download shy travori's grasshopper code Cams for MECHANICAL LAZER
    4. Open Rhinosourous
    5. Run command Grasshopper (opens grasshopper window)
    6. From grasshopper window, open shy tavori's .gh file
    7. Set correct laser radius (7.06)
    8. Rhinosourous -> change to front view
    9. Rhinosourous -> standard tools -> polyline
    10. Draw target shape in pink circle
    11. Grasshopper -> select far left item curve. Right click -> set one curve
    12. Select the target shape you created
    13. Grasshopper -> use slider to verify cams don't hit each other
      1. (you may have to disable the cam previews for this. To do so:
        1. select far right result -> right click -> preview)
    14. Select far right result -> right click -> bake -> ok
    15. Select newly created cams
    16. Rhinosourous -> file -> export selected
    17. Do the same for the other cam. (other far right object)

    I manually added the heart emboss/deboss for identification. The resulting models can be found on my Thingiverse page.

    Check out the result:

    Turned out great. Thanks shy tavori!

  • Future improvements and features

    Evan Stanford06/13/2017 at 20:39 0 comments

    At this point I think it is unlikely I will continue the project. But if I did, here’s what I could do:

    Blinds for discontinuous patterns.

    Let's say I wanted to make a smiley face pattern. It would require the laser to turn on and off to keep the eyes separate from the mouth. The current system would not allow that because it can only trace continuous patterns. One way to allow that would be to add a blind wheel to one of the cams. This would spin with the cam and block the lasers light for part of the pattern.

    Motor driven

    Although against the original spirit of the project, I could achieve much cleaner patterns with more input power. This would also eliminate the need for the input crank and gear ration since the motor could drive the cam directly.

    Web service for new cam creation

    I already made the open source Go program that can generate cam profiles. That said, it is far from user friendly. I could foresee a user interface that allowed users to draw a pattern and click submit, and I return the 2 stl files to print.

  • Creating the video

    Evan Stanford06/13/2017 at 20:38 0 comments

    (See the video in the project details. Sorry about the ending.)

    Filming the mechanical laser show presented 2 challenges- exposure and focus.


    Photographing the POV effect is easy. Just set the exposure to over 1/5 second. Filming the POV effect is challenging. At 30 fps, each frame can have a conceptual maximum exposure of 1/30 second. Since your computer monitor is much dimmer than a laser, it does not create the full POV effect. Therefore in order to display the laser pattern like it is perceived in real life, I applied an After Effect called Echo. This effect merges the current frame into the N next frames, each time fading a predefined amount. This simulates what a human sees when a laser is moved quickly- a path that fades in about 1/5 second.

    To further complicate things, my camera cannot actually take 1/30 second (= 33 ms) exposures while filming at 30fps. The camera needs time to read and clear the sensor before starting the next frame. In reality that takes around 3ms, leaving me with only 30ms exposures for each frame. That might not sound like much loss, but during that time part of the path was traced and it was not recorded by the camera. That results in false gaps in the video of the pattern. I did not attempt to fix this for the video.


    The laser show projects at a very small angle and therefore must be far from the projection surface in order to make a decent sized pattern. When filming both at the same time, the device must be much closer to the the camera than the pattern. With the required low light conditions is was near impossible to get both items in focus at the same time. See Hyperfocal distance . Therefore, in order to make both parts of the shot more closely match reality, I filmed it twice at 2 focus levels and combined the results in post. The Echo effect was only applied to the laser pattern part. Please see the below video for a raw, untouched version. Note that the laser point is out of focus which causes it to look much larger

  • Final design- Prototype 2

    Evan Stanford06/13/2017 at 20:30 0 comments

    Since prototype 1 I made the following improvements:

    • Actuating nose of pen instead of butt because the nose is lighter
    • Hand crank on opposite side
    • Cams facing forward
    • Screws have less threads per inch for easier printing
    • Cam design

    Cams are now designed by software that makes far fewer assumptions. Software takens into account radius of laser pen and calculates a new angle for every radius.

  • Basic design finalized- Prototype 1

    Evan Stanford06/13/2017 at 20:29 0 comments

    I decided on the final layout I ended up pursuing. Here was my first prototype that I actually modeled and printed. For the cam design, I made a single set of cams manually by hand once before I created the software. I made the assumption that the angle between every radius is the same (∠B from video = 0). This made it possible to create the cam, but resulted in a poor pattern.

    Note that the laser faced "backwards" here.

  • Coming up with the basic design- Concept 2

    Evan Stanford06/13/2017 at 20:25 0 comments

    Concept 1 from the previous project log had many limitations that caused me to discard it such as:

    • Being driven by 1 cam gives it 1 degree of freedom. In this situation that prevents patterns that backtrace
    • It requires the user to throw it around in the hand. That would result in large shakiness and error
    • It would be very difficult to spin at the required 5 Hz

    The last limitation led me to consider a similar design where gearing causes the cam to also spin in the opposite direction. After investigating a bit, it was clear this design was getting too complicated too quickly

    Concept 2

    The fact that every part moved in the previous idea led me to consider a machine that had a stationary frame and was hand cranked. At this point it was clear that there needed to be 1 hand crank and 2 cams. I considered several variations including a design that had the crank gear in the center and the cams each connected to it. This used cam rockers to transfer motion from the cams to the butt of the laser. This and several other designs were eventually eliminated in order to reduce the part count for greater simplicity.

  • Coming up with the basic design- Concept 1

    Evan Stanford06/13/2017 at 20:23 0 comments

    I am writing the project logs after the project has been completed by reviewing my notebook. These will still be in chronological order.

    After coming up with the goals in the description, my first design was similar to a party spinner. Inputted power would come from swinging an off center mass around the axle. The user would hold the axle.

View all 7 project logs

Enjoy this project?



Dr. Cockroach wrote 04/02/2018 at 10:01 point

Now that is cool , well done :-)

  Are you sure? yes | no

MarkRD wrote 07/06/2017 at 05:05 point

This is amazing. I literally cannot think of anything else I could say.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates