ReMake: Arduino Laser projector - from example


I am Re-making the Atmega16 laser projector shown here:

in Arduino. Should be no problem, but I already have one… I thought to use CPU fan for motor&rpm sensor module … I used this code

to read the current RPM from fan , which is around 8000rpm , and split one rotation time into time-slots for individual pixels.
but somehow I am getting instability.
These people were working with 1500 rpm.
do you think it’s just too fast for arduino?

anyone who is interested in helping in this project please email me, I will check my code first against theirs first and post it soon.

their code:


sofertom (a) gmail com

wow that is a really cool project. I bet the hardest part is aligning the morrors. Soiund interesting I wonder if the Arduino AVR chip will store the data for a full animation and the code. I can't really help since I don't have experience programming or working with microcontrollers yet.

I wonder if there is a way to magnetically control the y-axis of the mirror with an analog output? You might look into hard disk actuators, and you could increase your y-resolution without having to calibrate each mirror individually. What is the projection range / ever considered RGB?

Why not just spin 2 mirrors; one for X and one for Y. It’s how they do professional light shows. For increased resolution make the mirror a box or a hexagon. The more flat surfaces the faster the scan per RMP. The only issue is that the X needs to spin much fast than Y and so It must require a more complicated mirror geometry.

So with a flat two sided mirror each X pos would require would take Y/2 X rotations per Y pos

  • a 4 sided mirror its Y/4 X rotations per Y pos
  • a 8 sided mirror its Y/8 X rotations per Y pos
  • a 16 sided mirror its Y/16 X rotations per Y pos
  • and so on

In terms of RPM required its going to be quite demanding.
Lets say you want to make a NTSC Standard display your going to need to scan a Line every:

1 sec(scan time)/((480Lines/2(for interlacing)*30 Frames per second) = once every 0.139 milliseconds that means your X mirror would need to be going or 432000 RPM. Which is insane so assuming you need RPM>1000 you need >10 faces on your X mirror.
(Motor Speed)= (Scan Speed)/(2^Number of Faces on Mirror)

(Scan Speed)
Log2 ---------------- = Number of Faces on Mirror
(Motor Speed)

The Y mirror can move at a much slower rate with is equal to your (Vertical Scans per second)/number of Faces. So 480/2=240 RPM which can be done simply.

The Real Question is Does the AVR have enough CPU power to keep up with all of this and can the Laser be switched at these speeds.

I think using more then one AVR could be of help;

  • One for reading the incoming signal ← I think that you will need at least a 100+MHZ chip to do this right
  • One for controlling the motors ← Easy
  • One firing the Laser. ← The laser might be a problem because it needs to operate faster ~1.5-2Khz range

.< It just hit me if you can get the laser in sinc with the signals signal scan rate then you don’t need to modify the signal at all. This make the problem much easyer. Then its just a question of exstracting the sync fom the signal and fine adjusting the X and Y mirrors so they sync up. Hard but not imposable.