Introduction: Micro LASER Show With a CD Lens Mechanism

Picture of Micro LASER Show With a CD Lens Mechanism


This is the cheapest and easiest way to make a two-dimensional laser show projector.

It uses just one pivoting mirror, powered by the focusing mechanism from a CD or other optical drive.

They said it couldn't be done, but Ljudmila's skunkworks GRL research facility delivers anyway! ;) This design was first discovered in 2006 and sucessfuly made by several beginners at the Laser Tags workshop in 2007.

I hope this Instructable, my first, will help to spread it around and let all of you make, test and improve it!

Here shown using an Arduino for control, but you could hook some other signal into it easily, from a music player, a soundcard or some other electronic circuit.

Step 1: Gather Materials and Tools

Picture of Gather Materials and Tools
You will need:

  • a broken CD-ROM, DVD or other optical drive (you only need the lens focusing mechanism, so you get lots of other cool parts left over)
  • a LASER pointer of your choice (those small chinese ones will do fine too)
  • the smallest and thinnest mirror you can find. we used small round mirrors meant for making mosaics. (bill buxton recommended trying mylar.) you can also use the very small mirror found inside the optical assembly of a CD drive (under the lens, sitting on an angle)
  • a short piece of stiff wire (cut off leg of LEDs work for this)
  • some soft wire for signals
  • a stable housing - some kind of plastic box. bonus if it's transparent
  • signal source - I recommend an Arduino as it's easy to use and program

  • cross head screwdrivers, small and very small
  • soldering iron for electronics
  • wire cutters
  • glue gun (or other glue)
  • sharp pin for making a hole
  • pliers can come in handy

Step 2: Extract Lens Actuator From the Drive

Picture of Extract Lens Actuator From the Drive

You'll have to unscrew a looot of screws to disassemble the CD drive. If you have no better idea, just remove all screws you can find and try separating the components. In the later stages it might sometimes be necessary to apply brute force, but usually it's possible to separate all of the surprisingly many parts of a drive without damaging them.

The picture shows what you're hunting for. It's the moving lens part of the optical head assembly.

It can look a bit different, depending on your drive. it has a static back and moving top part. Inside the moving part are two coils, one moves the lens up and down, the other one left and right. Permament magnets are fixed to the static back.

If you're lucky, you will just be able to unscrew it. But sometimes you won't be able to separate it from the bigger optical head with the lasers and pickups inside. That's OK too.

See the wires in the last picture? That's what you'll add next!

Step 3: Solder Wires to the Lens Head

Picture of Solder Wires to the Lens Head

Identify the contacts on the cd lens - there are four, a pair for each of the two axes.
they are connected to the flexible wires holding the moving plastic part with the lens and the coils.

Strip the ends of four wires and solder them to the contacts... be patient, these are small points to solder to.

Strip a short length at the other end of the wires and coat them with solder to make them stiff and fit better with the Arduino.

Step 4: Glue the Stick to the Mirror

Picture of Glue the Stick to the Mirror

Put the mirror shiny side down on the desk. Hot-glue the short wire to the back surface of the mirror vertically.

The resulting piece has a T shape if the mirror side on top, as it will be in operation.

Step 5: Mount the Lens Head to the Housing

Picture of Mount the Lens Head to the Housing

Mount the lens head upright to a side wall of the box you're using, with a few millimeters clearance to the top ("ceiling") of the housing.

The lens itself, which used to be looking up in the cd drive, should be pointing horizontally from the wall towards the center of the box.

Step 6: Mount the Moving Mirror

Picture of Mount the Moving Mirror

Poke a small hole in the housing right above the lens head.

Stick the wire holding the mirror into the hole until it touches the lens head.

Fix the wire to the head. we used a sticky putty-like glue made for putting posters on walls. A small ball 2mm across is enough. It can also be done with a small dab of hot glue or superglue.

Let it settle for a bit, then carefully move the head around a bit with your finger. The mirror should tilt but stay attached to the head.

If you made the hole too big, glue a layer of strong sticky tape over it, and poke the hole in that.

Step 7: Connect the Signal Source

Picture of Connect the Signal Source
If you haven't yet, get your hands on an Arduino board. Download the Arduino software and run some examples to get comfortable with the process. Then program the Arduino board with the code below.

Stick the wires coming from the lens head into sockets 8,9,10 and 11 on the Arduino.
It is important to put the pair of wires connected to one coil into sockets 8 and 9 and the wires from other pair in sockets 10 and 11.

These are chosen because the pins 9,10 and 11 on the Arduino have PWM capability, used by the analogWrite command in the code.

Apply power and hopefully your mirror will happily wiggle around!

For first test you don't need to fix the Arduino to the housing. You should have made the wires long enough for it to sit comfortably beside the box.

If you've used the Arduino, you can add a 9V battery like shown here to make your device portable. You can safely power it from your computer's USB power if you don't have a battery.

The Arduino source code follows:

/* LASER TAGS - CD LENS MICRO LASERSHOW (Copyleft) 2006 by linefeed @ GRL */ int t=0;int inc=4;int pause=1000;int x,y,x0,y0,x1,y1;int pt,phase,loopcnt;int nshapes=6;int shape=0;int shapes[20]={0,4,7,9,11,20, 24};int ptsx[50]={-250,250,250,-250,  -250,250,0,    -250,250,    -250,250,    -230, -230 ,-15, -11, 220, -17, -17, -15, 150,   -250,250,-250,250  };int ptsy[50]={-250,-250,250,250,  -250,-250,250, -250,250,    250,-250,    -220, 200,  200, -200, -200, -210, -210, -35, -40,    -250,-250,250,250  };//pins //  8,9 - vertical // 10,11-horizontal void setup(void) {  // initialize inputs/outputs  pinMode(8,OUTPUT);  pinMode(9,OUTPUT);  pinMode(10,OUTPUT);  pinMode(11,OUTPUT);    digitalWrite(8,LOW);  digitalWrite(10,LOW);  }void setPos(int x, int y) {   if (x>=0) {     digitalWrite(10,LOW);     analogWrite(11,x);   } else {     digitalWrite(11,LOW);     analogWrite(10,-x);   }   if (y>=0) {     digitalWrite(8,LOW);     analogWrite(9,y);   } else {     digitalWrite(8,HIGH);     analogWrite(9,255+y);   }}void loop(void) {  //next shape     if (loopcnt>100) {    shape=(shape+1)%nshapes;    loopcnt=0;  }    //tick phase  phase+=inc;    //next point  if (phase>=100) {     phase=0;     pt=pt++;      //loop points in shape    if (pt>shapes[shape+1]) {      pt=shapes[shape];      t=pt*100;      loopcnt++;    }        x0=x1;    y0=y1;        x1=ptsx[pt];     y1=ptsy[pt];   }      //current coordinate  x=((x0*(100-phase))+(x1*phase))/100;  y=((y0*(100-phase))+(y1*phase))/100;      setPos(x,y);  delayMicroseconds(pause);   }

Step 8: Shine Some LASER Light on the Mirror

Picture of Shine Some LASER Light on the Mirror

Make sure you do not point them at yourself or your friends. With reflections the path of the laser can be somewhat unpredictable. Always be careful, you can seriously damage your eyes even with low power lasers!

Keeping this in mind, take the laser pointer in your hand and shine it on the mirror, so it bounces off it and hits the wall. The spot will dance around as the mirror wiggles and you will see a persistence-of-vision image if it cycles fast enough.

Happy times - I hope - your projector works!

To finish up, mount the pointer permanently on an angle looking down, pointing at the mirror. Here you will need some ingenuity. The details of this will depend on what you're using for the housing and what else you got at hand. In the pictures you can see the part used in the original cardboard housing that Bjorn of Origatronica fame helped me make.

The button is most easily kept pressed with some kind of a clip. Probably you can use a clothes-peg.

Lasers work best, but If you don't have one, you can try to use the sun as a light source. Or a strong spotlight shining from reasonably far away.

Step 9: Go Out and Tag Something! (and Report Your Results)

Picture of Go Out and Tag Something! (and Report Your Results)

If you followed this instructable to the end: Congratulations! You just made a device with great potential for light graffiti.

Now find a nice big wall in town that just calls for esthetic improvement trough animated laser tags!

Take a camera with you and record the fleeting images with a long exposure timlight graffiti expressions.

I hope i have described everything clear enough! Do let me know of your success or troubles while making and using these.

The Arduino code will give you a head-start. The patterns are written as series of coordinates to let you add new ones. Many improvements are still possible in the code. I suspect the quality of the picture and complexity of possible shapes can be much improved with somewhat smarter code driving the actuator.

You can experiment with other signal sources, stereo music players will probably be interesting.

Another idea for improvement you could try is to control the laser power with the Arduino too. This way you could program discontinuous patterns by turning the laser on and off at the right moments in the cycle.


davidp680 made it! (author)2017-04-12

Fun project. Many thanks. I have converted two lens mechanisms so far. I haven't got the shapes array in the provided code working but some simple for next loops work and give me similar results to your photos.

The 'sticky putty-like glue made for putting posters on walls' works well as did the clothes peg. I have assembled using helping hands vice and this gives an extra advantage of being able to rotate the whole unit to direct the display to a wall or ceiling.

The units I used both had a bolt holding the contact board. I used this to fashion a small eye-hook to hold the mirror wire.

arnab321 (author)2013-08-01

are the projections stable?

M-A-J (author)2013-05-30

Hi Please tell me the source code of the program in avr

tomsoderlund (author)2013-02-16

Thanks for a great instructable!

I'm having problems identifying which cables control which axis - any tips on how to find this out? I'm debugging with setPos(x, 0) and setPos(0, y), and can manage to get a good clean vertical movement but the horizontal movement always has a small vertical movement as well.

Also, I wonder about the code line digitalWrite(8, HIGH); - doesn't one of the corresponding coils need to be ground/zero/LOW for this to work?

UncleMike (author)2011-08-18

the code is one run on line that wont auto format due to too many syntax errors.

Gonzalo Ruiz (author)UncleMike2012-02-23

Hi. Please, linefeed, change the code. I spent a bit of time fixing the code. Yours didn´t work because of the aclarations (//pins 10-11, e-t-c). They made the loops (obligatory and optional ones) as aclarations, and arduino´s software doesn´t permit code without the void loop. I fixed the code, and it´s here:

(Copyleft) 2006 by linefeed @ GRL */
  int t=0;
  int inc=4;
  int pause=1000;
  int x,y,x0,y0,x1,y1;
  int pt,phase,loopcnt;
  int nshapes=6;
  int shape=0;
  int shapes[20]={0,4,7,9,11,20, 24};
  int ptsx[50]={-250,250,250,-250,  -250,250,0,    -250,250,    -250,250,    -230, -230 ,-15, -11, 220, -17, -17, -15, 150,   -250,250,-250,250  };
  int ptsy[50]={-250,-250,250,250,  -250,-250,250, -250,250,    250,-250,    -220, 200,  200, -200, -200, -210, -210, -35, -40,    -250,-250,250,250  };
//  8,9 - vertical
// 10,11-horizontal
  void setup(void) {
    // initialize inputs/outputs
  void setPos(int x, int y) {
  if (x>=0) {
    } else {
    if (y>=0) {
    } else {
  void loop(void) {
  //next shape
  if (loopcnt>100) {
  //tick phase
  //next point
  if (phase>=100) {
    //loop points in shape
    if (pt>shapes[shape+1]) {
    //current coordinate

AndyGadget (author)2009-12-07

I had a similar idea, had a quick web Google for a laser display using a CDROM drive coil assembly and was directed straight back to good old Instructables. 
I've extracted the coil assembly and wired it up and can see it moves side to side and up and down under the influence of the coils. It's also centre biassed, so to get full range of movement you need to pass current through the coils both ways.
I can see you've used the pivoted rod at right angles to translate this into X and Y motion, but the mass of this will limit the speed.   Have you tried other ways of doing this?  (My initial idea is a mirror attached at a corner using flexible silicone rubber close to the assembly, then a small rod straight up in the plane of the lens, which will rock the mirror (X axis) or tilt it (Y axis) as the lens moves.)  This would be more compact then the rod design, but a lot more fiddly to make.  I'll report back (and probably post an Instructable) if I make progress with it. 

gd_illeperuma (author)2009-10-28

I was just wondering .. Isn't the lasers bad if its hit your eye ?
Any safety suggestions. (I've seen a video where a DVD burner laser burn though a balloon. I'd probably stay with the CD )

chimere (author)2009-06-08

I'm curious, just how fast do these CD lens assemblies move? Can they move with high enough frequency to project POV images, or did you need to use a long exposure to capture your images?

linefeed (author)chimere2009-06-08

i have not measured their resonant frequency (anybody have an estimate?) but they are fast enough to project simple shapes at pov speeds.

i used one recently with nice results on dark facades of metelkova and on the wall behind a dj at our local spring welcome festivities. it was packed with 8 nimh aa batteries and powering the laser pointer with the arduino's 5V. it lasted all night.

hubi (author)2008-07-28

If you use an old DVD Burner, one of the Diodes is red (~650nm) one is IR.
from an 8x Burner u can get 90mW from a 16x Burner u can get more than 200mW if properly cooled. Here]
is how I made it.
I found a german Site, where the same is done much easier without microcontroller and the mirror also comes from the Drive.
Sorry for my bad english

thermoelectric (author)hubi2008-07-29

It would be alright if i could read it Time to start learning german :[

Oh, Thanks It wasn't as interesting as I thought it would be...

hubi (author)thermoelectric2008-07-29

maybe you willtry google translation or if you use fiefox, there are lots of tranlation addons available, like quick translation,translation panel ...

LukeKuke7 (author)hubi2008-07-28

Sorry for my bad english?

Your english is better than some of the people on this site who's first language is english.

No need to apologise, and thanks for the link.

linefeed (author)hubi2008-07-28

Thanks for the link hubi, was not aware of that site. This is indeed very similar, with a somewhat different way to mount the mirror. I'll add a note about using the mirror salvaged from inside the optical assembly.

I agree that using a DVD laser diode turned into a pointer for this would be the coolest. But that's a more difficult project in its own, and also well documented on Instructables already.

Sandisk1duo (author)2008-07-27

Now if only you could use the laser inside the CD lens to do the show... Great instructable by the way!

Kiteman (author)Sandisk1duo2008-07-28

Some drives (DVD? I forget) have UV lasers instead of visible light. Actually, I would like to see the whole thing mounted inside a box (laser-pointer and all), with a window (or hole) for the laser to shine out of, then you could leave it unobtrusively on a wall . Excellent project all the same.

Ian01 (author)Kiteman2008-08-10

CD drives use IR, DVD drives use red, and Blu-Ray drives use blue. They are very much too powerful for this though, unless you want to etch your wall.

rocketman221 (author)Ian012008-12-27

bluray drives use 405nm violet lasers and it would only etch the wall if you took it from a burner.

Sandisk1duo (author)Kiteman2008-07-28

DVD drive or burner? Regular ol' CD players have an infra-red laser, i checked this by poping a CD into a CD player, taking the cover off, and using night vision an a camcorder.

Kiteman (author)Sandisk1duo2008-07-28

IR or UV, either way, neither are any use for a light show.

Sandisk1duo (author)Kiteman2008-07-28

if yo u have a cellphone camera, or reglar camera, you can see it

Kiteman (author)Sandisk1duo2008-07-29

Yeh, but when you're trying to make a show, it's not much good if people can only watch it via a video.

Sandisk1duo (author)Kiteman2008-07-29

god point

kyotee (author)2008-10-15

Im having a go at doing this myself but using only audio signals to drive it, so far no results as i need software that can generate digital signals through audio and with individual left and right "speaker" control. System of a down makes large scribbles!

linefeed (author)kyotee2008-10-15

wow first builder! great to read this kyotee. please definitely post some pictures!

you could try using audacity to make some 2 channel custom waveform sound... it's easy to use! read manual

and for real-time control something like pure data? it's great fun playing with it, just don't be intimidated by its looks. read manual

i see you needed an amplifier, how did you hook that up?

kyotee (author)linefeed2008-10-15

Im using a TDA7386 car radio amplifier that i got out of my busted headunit where i also salvaged the lens mechanism. Its not attached yet and im kinda busy for next few days but should be up and working within a week or so, i will definitely keep you updated with the results once i have some

kyotee (author)kyotee2008-10-15

Just downloaded audacity. it is exactly what i needed. Thanks a bunch. results to follow

kyotee (author)kyotee2008-10-16

Have got lens mechanism moving in the x and so far theoretical y direction, it seems that when the mirror pivots in the y dimension it is somehow twisted back to the x axis. i think i need 2 lens mechanisms, one for x and one for y and i think this will be much better and with the setup im using it will not be hard to make this happen. i was too impatient to get my TDA7386 amp wired up so im using a sony xplod 222W lol a bit overkill but it does the job. (while i was waiting for picture to upload amp decided it was way too overkill(probably due to being a 4ohm rated amp and the coils on the mechanism wont be 4ohms i think)and has shutdown into protect mode!)

ravebot (author)2008-09-17


viacin (author)2008-09-17

wow... dude...wayyy to expensive for the board. I mean, if this was a robot..sure, but for this..c'mon. you can get the same result by gluing the mirror on top of a speaker.

mycroftxxx (author)2008-07-30

I am a little confused by this instructable. Will it allow you to project an arbitrary vector image?

linefeed (author)mycroftxxx2008-08-20

In principle, yes, it's a 2D vector display. so far there is a low ceiling to the complexity of the shape. with the current arduino code the shapes are coded as arrays of integers. they are displayed in sequence on an endless loop. you do get great random variations and throbbing of the shape for free. :) the initial application we thought of was light graffiti. but it should be possible to create a basic oscilloscope, vector clock or even a game with some clever programming.

vince_nys (author)2008-07-31

Great tutorial, def. gonne try it

About This Instructable




More by linefeed:Micro LASER Show with a CD Lens Mechanism
Add instructable to: