Update! See Step 32 to find out how to use this project with a green laser!

Also - checkout the LaserTweet Instructable to make this project display data from Twitter:

This project uses an Arduino and some cheap audio speakers to create a real laser show with full X and Y axis control.

The included source code lets you easily draw text and even simple pictures!

View the demo video to get an idea of what this project can do.

You should be able to get most components locally (besides the Arduino).

Assuming you already have an Arduino - expect to spend roughly $35 on this project.

If you can upload a program to an Arduino and solder - you can probably build this project in an afternoon.

Users who have built this project:
mattbeowulf - http://www.youtube.com/watch?v=AnIoWZpEWk8
minhenes (using "real" galvos) - http://www.youtube.com/watch?v=BmYg3O4hlMg
hydronics - http://www.youtube.com/watch?v=5Q3nJLA2t18
benhgd - http://www.youtube.com/watch?v=K23-ThlCZEc
(Post a comment with your link - and I'll add yours to this list)

Step 1: A Bit About Laser Shows

Most laser shows use galvonometers (the little boxes in the picture) or "galvos"  to aim their mirrors.

Galvonometers are electromechanical devices that rotate to different angles based on how much voltage they are provided.

A minimum of two galvos are used - one for "X" (horizontal) control and one for "Y" (vertical control).

The laser show's controlling electronics quickly adjusts galvo voltages, and turns the laser on and off - moving it around so quickly that it appears to create a persistent image.

Commercially available galvos can move to up to 50,000 different points each second.

Galvos tend to be expensive - so we'll be making our own out of audio speakers!

Hey, I basically copied your instructable but put it in a portable container to make a strategic gerilla propaganda 'box'<br> <br> <a href="https://www.instructables.com/id/Guerilla-Laser/" rel="nofollow">https://www.instructables.com/id/Guerilla-Laser/</a><br> <br> Going forward I would recommend using a stronger laser... This would allow you to hit a building or billboard at a mysterious distance... I tried to buy a stronger, <a href="http://www.dealextreme.com/p/geniune-new-wish-5mw-green-laser-module-5v-10094" rel="nofollow">$14 green laser from China</a> but the china laser circuit did not allow cycling ON/OFF at quick rate like the cheap laser is used...(this is called blanking in the laser light show industry) You could rewrite the code to be more cursive in nature and less ON/OFF dependent... It would be fun to play with the programming in such a way and easy for a beginner... its all cartesian coordinates... that means easy!<br> <br> thanks again for all the hours of dinking around....<br> <br> <br> <br>
that's awesome!!!<br><br>had similar problems trying to use a green laser too.<br><br>suspect it's possible to get it a green laser working with some tweaking - the driver circuits are a bit more involved than is intuitive... (think they tend to involve temperature feedback and such).<br><br>
<p>Thanks for this great project. I built it with an Arduino Nano, a giveaway Laser pointer and Speakers that I got on the fleemarket. Although the laser pointer was running on 3V is seems to work fine on the 5V of the Nano. I used a 13.8 V power source for the speakers and the diodes instead of the 8 ohm resistors.</p><p>The next step will be to mount the stuff permanently and to tweak the parameters 8-)</p>
Arduino Nano should be same as other atmega328-based arduinos (see code for this project).
<p>I did not get enough precision from various speakers I tried, so I upgraded to commercial galvos available on ebay and a DAC to get 12bit precision.</p><p>Here's a video:</p><p>https://youtu.be/QLwdwvleztA</p>
<p>I did not get enough precision from various speakers I tried, so I upgraded to commercial galvos available on ebay and a DAC to get 12bit precision.</p><p>Here's a video:</p><p>https://youtu.be/QLwdwvleztA</p>
<p>Nice project! However, I'm having a problem.</p><p>I used the same exact parts: Tip120 transistors, 470uF 35V capacitors, 100ohm resistors. But I chaged one sight thing. I used BLDC motors and only connected two wires of each one to the setup. Before watching this instructable, I already saw people doing laser projectors using stepper motors, BLDC motors, an normal commercial galvos. I didn't planned to buy a stepper motor, or obviously a commercial galvo. The motors were saved from an old DJI Phantom Vision+ gimbal that fell from the drone during flight and broke the ribbon cable. I changed that cable many times and it always broke. So I bought a new gimbal and used the intact brushless motors. I also am using a 1W violet Laser, (Because I love strong laser beams!) with another tip120 transistor and another 100ohm resistor connected to pin 12. I also used a separate power supply to power the laser (It's way much powerful!) I used a powerful amplifier and connected each motor to a channel (X to Right, Y to left). I played music in it (with a lot of bass) and it worked really well like a normal galvo should work. But I wanted to do animations and write text at a decent quality.</p><p>Ok, the problem:</p><p>I run the same code that you provided (Thanks, so easy to use!) and the projector only shows weird circles, lines and shapes. IDK what to do, maybe the brushless motors were not ment to do that.</p>
sorry for slow response...<br><br>interesting idea - but I don't think the BLDC motors have any kind of &quot;centering&quot; mechanism. I can imagine they might vibrate as opposed to just spin - but I wouldn't expect them to provide a consistent position based on voltage like the speakers do.<br><br>good luck!<br><br>-Rich
<p>Thanks for answering!</p><p>I was already thinking about the centering problem. Another thing wrong that I discovered is that your project needs an DAC (Digital to Analog Converter). I altered the code a lot and put elastic bands (very soft and stretchable) to center the motors. It worked well, but the drawings had interference due to the PWM signals. </p><p>What i'll try do do:</p><p>-Apply a DAC to each control wire going to the transistors.</p><p>-Use two nRF24L01+ with another arduino (UNO) and a matrix keyboard to trigger the effects from a distance, making a decent party machine.</p><p>*I'm not using speakers for two reasons, because since they are moving at high speeds, they vibrate, because they have paper cones, they make a lot of noise and the second reason is that simply using speakers will increase he space required and I want for it to look more professional (just my charms...).</p><p>Another thing I improoved is that I used two lm317T regulators:</p><p>One setted permanently to 8V to power the motors and the other with a potenciometer to adjust the brightness again with a resistor to limit it to a maximum of 7.4V (laser's comfortable voltage) for the laser. Both regulators are connected in parallel to the 12V rail.</p><p>The 12V rail can be connected to a 12V power supply, or, in my case, a 3S lipo that I protected it with cell monitoring features using voltage dividers and some code of the arduino. This makes it PORTABLE!</p><p>The Projector now has a LCD with a temperature sensor and a cooling fan, wich is turned on and off by a relay according to the internal temperature.</p><p>I'll post a instructable about it soon =).</p>
<p>Amazing! Great job...I'll make some free time to try this :D Thanks for sharing.</p>
<p>Thanks you for that project it s relly cool, but i'm stuck on how to put the 12V</p><p>why there is not a step for that.</p><p>I dont know how to wire the 12V with rest of the circuit</p><p>Thank you</p>
<p>13.8v main PS ---&gt;|---&gt;|---&gt;|--- 11.7v to Arduino</p><p>Using 3 1N400x diodes.</p>
<p>An easy way to drop the supply voltage to the Ard from any power source would be to add an appropriate number of 1N4001 diodes (or any 1N400x series diode) in series with the V+ line from your main power supply. For every 1N4001 you add, it will reduce the voltage to the Ard by .7 volts. </p><p>If you needed to make sure that &quot;13.8v&quot; was more Ard friendly, add 3 or 4 diodes, and run the entire project off one power supply.</p><p>13.8 - 2.1 = 11.7v (3 diodes)</p><p>13.8 - 2.8 = 11v (4 diodes)</p><p>Even if it's really a 12v supply, adding 4 diodes will result in 9v to the Ard. Plenty.</p><p>Easier than heatsinking an LM7805 running off the main V+, which is the other option.</p>
<p>Probably one of the coolest projects I've ever built :-D - Massive props to Rich for the brilliant work. I used two 70w Sony speakers that I got from the local car boot sale for &pound;1 each! Works really very well. Have got Arduino IDE running on Raspberry Pi. And I've mounted it all in a flight case so it's portable. </p>
nice build!! glad your having fun with the project.<br><br>-Rich
<p>amazing! I want to make this.</p>
Hi Rich, simply bloody awesome project :)<br><br>Am currently in the process of building this to run on the Raspberry Pi. Am going to code in Python as that is what I know. Looked at the arduino code to get my head around it but got one major question.. Are you forming the images by scanning row by row, top to bottom and then only turning laser on at correct moments or are you drawing the outlines of the shapes and then turning on / off between each shape?<br><br>Hope that makes at least some sense!<br><br>Thx again - brilliant project.
Hi Dave -<br><br>Shapes are formed via vector-style drawing - shapes are actively outlined by the galvos (speakers) as opposed to being drawn raster-style.<br><br>Good luck with the project (feel free to contact me via rich@nothinglabs.com)<br><br>-Rich
<p>First, this is really cool and it's the first time I've seen one of these that can be built easily and for minimal cash. Nice.</p><p>However, one thing has me really perplexed. The way the mirrors are mounted, they are going to be moved parallel to the Z axis of the speaker. (ie up and down with the cone). But they are also mounted to the &quot;pivot&quot; which is also hard mounted the the speaker frame. In theory this setup shouldn't work (well) since the mirror should be fighting against the pivot stick as it tries to move up and down in a rigid plane and is resisted by the pivot stick which is hard mounted to the frame and which it is hard mounted to. This should resist pivoting and distort the image. My only guess is that the bamboo skewer and the paper of the speaker cone both deform enough to overcome this and allow the mirror to move in a motion that approximates pivoting, but doesn't actually pivot perfectly.</p><p>I think if I were to try this, I'd be inclined to mount the mirror on an actual pivot (ie glue a small straw to the back and run the skewer through the straw. Then mount that pivot skewer offset from the centre line of the speaker so that the edge of the mirror aligns with the centre of the cone. Then glue another section of straw to the edge of the mirror, parallel to the pivot straw. split the straw in the middle and run a piece of skewer through it and glue another piece of skewer from that skewer to the top, centre of the speaker cone. Essentially forming a T shape that can pivot at the T end. Now you have a mirror that truly pivots freely on it's centre line. </p><p>Putting the pivot point (straw) at other points that the centre of the mirror can changed the mirror deflection for larger or smaller intended display sizes / distances.</p><p>Just a thought. Comments anyone? </p>
The angle of deflection of the mirror is relatively small - enough so that the hot glue allows for some pivoting (if it didn't things would break apart immediately).<br><br>I think I tried some experiments with a hinge a few years ago - but don't think it resulted in an improvement (worth trying though).<br><br>Have fun!<br><br>-Rich
I want to make a laser show, too. I'm mostly interested in beam shows, not graphics shows. My considerations: <br>I was planning to use very small speakers, such as some 50mm 3W speakers available for as low as $3. Even though their excursion is tiny, my idea is to glue a lever to the speaker and then glue it VERY close to the mirror rotation axis, so the mirror would tilt a lot. This would also allow to have really small mirrors (reduced inertia of moving parts = great) and have the added benefit of allowing better operation on higher frequencies (small speakers respond better to higher frequencies), and I guess its performance wouldn't be bad on low frequencies since SPL is irrelevant, we only need excursion to tilt the mirror. <br>Also, I don't want to use an Arduino, I want to use full-fledged computer software to control the output. Eventually, I would record the audio output from the PC and play directly from a tiny mp3 player. It all would make for a very portable solution, maybe even pocketable. <br>Any tips on great laser animation software which works nicely with an audio DAC (I mean, with the computer's sound output)? Preferably free software with lots of beamshows available! :P
<p>Hi elias, I am currently experimenting with using audio.. have you had any luck? I believe the setup described in the tutorial enables the system to reproduce around 60k points per second (?). Using uncompressed audio at a rate of 44100 hz I think you could sample 44100 points per second (not sure if that is correct tho...). </p>
Don't have any specific advise on controlling from PC. <br><br>Sounds like a great project / please post details here as you make progress.
<p>I used your instructable and made this in 2011. I used it to project a laser show against a building to propose to my wife! Thank you so much for your project and instructions! </p><p>Like hydronics, I put it into a self contained box, and added a battery and inverter so I can truck it around. I modified the code to draw some other images and say my personal message.</p><p>Thank you nothinglabs!</p><p><iframe allowfullscreen="" frameborder="0" height="281" src="//www.youtube.com/embed/Yx2ENPW3rD8" width="500"></iframe></p>
that's awesome!
<p>I have some small galvos that I wanted to run with this code. I ran the galvos from pin 5 and 6. The x-axis mirror was bottoming out within it's range so I put in a 5.6&Omega; resistor to reduce the current. The diodes I put in because I thought they would protect the arduino? </p><p>The x-axis works fine but I cannot get the y-axis to move the mirror much, it barely moves and not very often. The peak volts the x-axis put out was 1.2 volts, y-axis was only .24 volts, this was over a period of over a minute. I reset the Arduino many times and got the same results. I tried reassigning the pins and switching out the galvos but the y-axis seems to prefer putting out very little power, and will not move the laser. I'm stuck with a laser show on a single axis : (</p><p> The laser seems to pulse just fine. </p><p>Any thoughts anyone?</p><p>Thanks!</p>
<p>I'd try swapping the X and Y axis pins in code to see what happens.</p><p>The way the show typically renders - the Y axis tends to move a lot faster than the X axis. If your using a multimeter to measure - it may not be fast enough to see the signal.</p><p>Also - no idea if the arduino can source enough current to effectively drive the galvos (wouldn't shock me if the Y axis got toasted) Might try slowing things way down to see what happens...</p>
<p>Would it be possible to power it with a 19.7V, 4.7A sony laptop charger?</p>
<p>I think that should work. I'd keep an eye on how hot the TIP120's get. You can dial back the power levels in the code a bit if needed. might try to get 8ohm speakers as opposed to 4ohm.</p><p>good luck!</p>
<p>what are x_level and y_level in the code</p>
x_level and y_level contain the current X / Y position of the laser.<br><br>hope this helps!<br><br>-Rich
<p>TCCR2B = TCCR2B &amp; 0b11111000 | mode; This line is giving me the error in the code and i also want to ask whether the exp_move is used to change the orientation of the speakers???</p>
hi , very nice project, i have one question , can you use , and how, instead of speakers, Hard Disk motors :) for X,Y control
hello! could you please put a description online of what the program does and how it works? i dotn work with arduino so i would like to write it on my own for pic MC, but figuring out th elogic might be lots of unnecessary extrawork.. thanks!
I'd suggest fully reviewing / digesting the source code / comments. there's a lot of documentation already there and in the instructable<br><br>if you have specific questions - let me know and i&quot;ll try to answer.<br><br>good luck!<br><br>-Rich
hi , very nice project, i have one question , can you use , and how, instead of speakers, Hard Disk motors :) for X,Y control
I played around with HD motors - never had any luck. I think they need some kind of feedback electronics to position accurately.<br><br>You should try it - let me know if you make any discoveries...<br><br>Have fun,<br><br>-Rich
Thats magnificent...
Just noticed a little error in the setPwmFrequency method, you have &quot;case 1024: mode = 0x7; break;&quot; where is should be &quot;case 1024: mode = 0x07; break;&quot;.
yup - that's an error!<br><br>if you google it - you can see it's propagated via some commonly copy / pasted code.<br><br>good news is that particular line isn't ever called - so has no effect on the project (so I'm gonna leave it be).<br><br>-Rich
OOPS. That is TC = L/R... Time Constant = L/R.
Signed up just to comment. First, I think you have done a stellar job with this. Many guys think of speakers, try something and give up for poor performance. I got interested because of high frequency Piezo tweeters... but moved to less expensive, slower galvos (no longer available) <br> Many good comments and speculations. I don't know if you or others are still playing with this, but FWIW. Actually, you don't want to damp the back EMF of the speaker. Seems counter intuitive, but I explain. I use real galvos in my laser graphics and the way is to use a current drive (high impedance) instead of voltage drive (very low output impedance, like Sound amps). If you recall, the series LR circuit time constant is L divided by R = L/R. This says that a small R makes the time constant large. The current is slower to build, magnetic field slower to build and cone slower to move. Your transistors are current sources, but as said by another poster, a source/sink drive is better - in essence a &quot;Power OpAmp&quot;. Unfortunately, driving 8 ohm speakers requires lots of current. A current drive (Google OpAmp current source) is accomplished by pitting a small resistor in series, to ground, with the coil and feeding the voltage at the top of it back into the OpAmp - yielding a voltage to current converter. <br> Then you sample the back EMF and use it as feedback, through a pot, so U can adjust it to get the best response. This, however, means that your power supplies (yes you'd need a + and a - supply) have to be high enough voltage to allow this back EMF to go as high as it wants to, so-to speak. The high supply voltage isn't needed to get the high current to flow, just to allow the back EMF to have the room it needs to simply exist. This is called compliance in current source Jargon. The analogy is when a voltage power supply can supply higher current spikes due to requirements of the load. For driving inductance like this (like TV Tube deflection), it turns out that the power supply voltages you choose now becomes one of the limiting factor on the speed you can get out of the 'galvos&quot;. Speed being the holy grail of laser graphics. If the back EMF is allowed to hit the power supply rails (thus clipping it), this is equivalent to 'damping' and the response actually starts to slow down and distort the image. <br> <br>I also would have (I do this for another application) cut away a considerable portion of the speaker cone to allow as fast a movement as possible and reduce damping due to air movement. Don't know if this helps anyone, but FWIW. I am starting the process of putting info on my laser graphics on my web site and will be uploading a schematic for such a drive. <br> <br> In addition, you should low pass filter (RC low pass) the PWM out before the audio amp. <br>Yes, an amp down to DC is required (which, internally, many audio amps are already), so it would be possible to turn an audio amp into a DC power OpAmp current source to do this. <br> Too many plates spinning to go into detail here. Motivated folks can try contacting me on my web site for more... <br>Cheers, Steve
hello friend, sorry my bad english, I'm from Brazil, I have a problem in my setup, the speakers are Galvos with 12v and some are moving sluggish, what could be? thank you
are you using he code as provided? <br> <br>If so - thing should be moving pretty quick. I would try reverting to the code as provided if you've changed anything. <br> <br>Besides that- easiest way to increase speed is to change &quot;float exp_move =&quot; to a smaller number. <br> <br>Look at step 29 for more tweaks.
Hi guys from Nothing labs. <br>This is a really great project... im exited to get it going. <br> <br>I am new with all this laser stuff and getting more involved every day. <br> <br>I just did a spirograph and works nice but now i want to have some kind of scanner controled with an arduino. <br> <br>Your project seems very easy to do and looks realy nice, but my question is if this setup would work with hard disk drives as galvos instead of speakers? <br> <br>I would really apreciate your response. <br>Best regards, <br> <br>Alejandro C. from Colombia
Hard drive galvos depend on having a feedback mechanism - that this project doesn't really have a method to deal with. Might be possible to make work - but would take a bunch of re-working... <br> <br>Have fun! <br> <br>-Rich <br> <br>
Probably a lot easier thatn all the other ones....

About This Instructable




Bio: Hi, I'm Rich Olson (nothinglabs.com). I sell cloud chambers for viewing radiation, make robots and dev software. If you need something prototyped - I ... More »
More by nothinglabs:Parametric 3d Printed Death Star Speakers 3D Printed Bike Shifter (friction) 2-Layer Circuit Boards Using Laser Cutter / Chemical Etching 
Add instructable to: