Introduction: Micro LASER Show With a CD Lens Mechanism
Hello!
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
Materials:
- 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
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
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
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
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
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
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 @ Ljudmila.org 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
WARNING: LASERS ARE NOT TOYS!
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)
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.

Participated in the
The Instructables Book Contest
1 Person Made This Project!
- davidp680 made it!
35 Comments
9 years ago on Introduction
are the projections stable?
9 years ago on Introduction
Hi Please tell me the source code of the program in avr
10 years ago on Step 3
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?
11 years ago on Step 7
the code is one run on line that wont auto format due to too many syntax errors.
Reply 11 years ago on Step 7
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:
/* LASER TAGS - CD LENS MICRO LASERSHOW
(Copyleft) 2006 by linefeed @ Ljudmila.org 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);
}
13 years ago on Introduction
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.
13 years ago on Introduction
Hi,
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 )
13 years ago on Introduction
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?
Reply 13 years ago on Introduction
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.
14 years ago on Introduction
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]http://dreiling-kamen.net/hubidrei/html/dvd_laserdiode.html
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
Reply 14 years ago on Introduction
It would be alright if i could read it Time to start learning german :[
Reply 14 years ago on Introduction
here is the translated version
Reply 14 years ago on Introduction
Oh, Thanks It wasn't as interesting as I thought it would be...
Reply 14 years ago on Introduction
maybe you willtry google translation or if you use fiefox, there are lots of tranlation addons available, like quick translation,translation panel ...
Reply 14 years ago on Introduction
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.
Reply 14 years ago on Introduction
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.
14 years ago on Introduction
Now if only you could use the laser inside the CD lens to do the show... Great instructable by the way!
Reply 14 years ago on Introduction
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.
Reply 14 years ago on Introduction
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.
Reply 14 years ago on Introduction
bluray drives use 405nm violet lasers and it would only etch the wall if you took it from a burner.