Laser Spirograph (meant as a tree topper)
DO NOT USE A LASER STRONGER THAN 5mW (Class IIIa) FOR THIS DEVICE! This has not been tested by anyone to be safe for lasers stronger than 5mW. If the motor drivers stall and the laser happens to be pointing at your eye, you will not see out of that eye any more. This is serious, folks!!!
Two vibration motors - you can pick up at Radio Shack. https://www.radioshack.com/products/radioshack-3vdc-micro-vibration-motor?variant=5717362821
Laser Module - I got mine off ebay (100 mW with TTL control) but it looks exactly like this one: http://odicforce.com/epages/05c54fb6-7778-4d36-adc0-0098b2af7c4e.sf/en_GB/?ObjectPath=/Shops/05c54fb6-7778-4d36-adc0-0098b2af7c4e/Products/OFL194
1" square mirror tiles - like you would find at a craft store
Arduino - I use Arduino Pro Minis for practically everything.
Use SpiroMount5 or SpiroMount10 depending on the throw you want. The SpiroMount10 will result in a much wider angle (10 degrees vs. 5 degrees) for a larger projection.
How it works:
Each motor's power is treated as a coordinate in a vector that describes how fast each motor is spinning. Each motor's power is continually modified by an "inertia" that changes signs and is randomized in magnitude when the power reaches the maximum or minimum allowed power.
The motors, like most motors, need a higher starting power than needed to maintain rotation. Thus at startup, before the laser is turned on, both motors are turned to max for half a second.
At very low powers, the motors can stall and idle to a stop, thus the motors are assigned a stall speed. If both motor's power is below that stall speed for two cycles of execution (3s), one motor at random will be kicked up to max speed for 1.5 seconds (the update time of the loop)
Please note, to use this in a public place with a >5mW laser, you'll need a CDRH permit or variance. To obtain the permit you'll need to implement independent stall detection. If either motor is stalled, you should cut the laser beam with TTL or a mechanical shutter. This should kick in FASTER than the above described code for a CDRH approval. I believe the guidelines is <= 25ms, but you should certainly investigate yourself as I am not a mechanical engineer, laser safety professional, lawyer, or employee of the FDA (who administer the CDRH guidelines) If you're interested in using this device in public, this page seems like a good place to start: http://www.fda.gov/Radiation-EmittingProducts/RadiationEmittingProductsandProcedures/HomeBusinessandEntertainment/ucm118907.htm
Minor warping on base - does not affect final product alignment
For each mount, snap in a mirror, then push the mount onto the motor. You may use a drop of superglue inside the hole to help secure it, but I found friction fit was plenty strong. Then use the included clamps to clamp each motor in place. Finally place the laser in its place and use the included clamps to attach it.
When I was done I cut a sqaure in a Radio Shack project box, glued in a piece of PC / Lexan to protect the mirrors and laser from dust, and shoved everything in side. The box gets zip-tied to the top of my christmas tree every year!
To control it, wire up an Arduino as follows:
Laser TTL control - pin 9
Motor power - pins 10 and 11
And install the laserspiro.ino sketch
This was mocked up in OpenSCAD. Unfortunately I've lost my .scad file in the meantime since creating it!