Instructables

Arduino Laser Show with Full XY Control

FeaturedContest WinnerContest Winner
Picture of Arduino Laser Show with Full XY Control
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:
http://www.instructables.com/id/LaserTweet-Twitter-Projecting-Laser-Show/

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
                   http://www.instructables.com/id/Guerilla-Laser/
benhgd - http://www.youtube.com/watch?v=K23-ThlCZEc
(Post a comment with your link - and I'll add yours to this list)
 
Remove these adsRemove these ads by Signing Up

Step 1: A Bit About Laser Shows

Picture of 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!

hydronics2 years ago
Hey, I basically copied your instructable but put it in a portable container to make a strategic gerilla propaganda 'box'

http://www.instructables.com/id/Guerilla-Laser/

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, $14 green laser from China 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!

thanks again for all the hours of dinking around....



nothinglabs (author)  hydronics2 years ago
that's awesome!!!

had similar problems trying to use a green laser too.

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).

spewlocks4 days ago

amazing

Wonderful

mr79192 months ago

what are x_level and y_level in the code

nothinglabs (author)  mr79192 months ago
x_level and y_level contain the current X / Y position of the laser.

hope this helps!

-Rich

TCCR2B = TCCR2B & 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???

regaltaxlaw4 months ago
hi , very nice project, i have one question , can you use , and how, instead of speakers, Hard Disk motors :) for X,Y control
sharkyenergy4 months ago
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!
nothinglabs (author)  sharkyenergy4 months ago
I'd suggest fully reviewing / digesting the source code / comments. there's a lot of documentation already there and in the instructable

if you have specific questions - let me know and i"ll try to answer.

good luck!

-Rich
koruptx25 months ago
hi , very nice project, i have one question , can you use , and how, instead of speakers, Hard Disk motors :) for X,Y control
nothinglabs (author)  koruptx25 months ago
I played around with HD motors - never had any luck. I think they need some kind of feedback electronics to position accurately.

You should try it - let me know if you make any discoveries...

Have fun,

-Rich
My Diet Area8 months ago
Thats magnificent...
DanNixon11 months ago
Just noticed a little error in the setPwmFrequency method, you have "case 1024: mode = 0x7; break;" where is should be "case 1024: mode = 0x07; break;".
nothinglabs (author)  DanNixon11 months ago
yup - that's an error!

if you google it - you can see it's propagated via some commonly copy / pasted code.

good news is that particular line isn't ever called - so has no effect on the project (so I'm gonna leave it be).

-Rich
SteveNosko1 year ago
OOPS. That is TC = L/R... Time Constant = L/R.
SteveNosko1 year ago
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)
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 "Power OpAmp". 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.
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". 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.

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.

In addition, you should low pass filter (RC low pass) the PWM out before the audio amp.
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.
Too many plates spinning to go into detail here. Motivated folks can try contacting me on my web site for more...
Cheers, Steve
DBender1 year ago
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
nothinglabs (author)  DBender1 year ago
are you using he code as provided?

If so - thing should be moving pretty quick. I would try reverting to the code as provided if you've changed anything.

Besides that- easiest way to increase speed is to change "float exp_move =" to a smaller number.

Look at step 29 for more tweaks.
Hi guys from Nothing labs.
This is a really great project... im exited to get it going.

I am new with all this laser stuff and getting more involved every day.

I just did a spirograph and works nice but now i want to have some kind of scanner controled with an arduino.

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?

I would really apreciate your response.
Best regards,

Alejandro C. from Colombia
nothinglabs (author)  alejocorrear1 year ago
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...

Have fun!

-Rich

JensonBut1 year ago
Probably a lot easier thatn all the other ones....
I want to make a laser show, too. I'm mostly interested in beam shows, not graphics shows. My considerations:
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.
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.
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
nothinglabs (author)  elias.alberto1 year ago
Don't have any specific advise on controlling from PC.

Sounds like a great project / please post details here as you make progress.
Couldn't I just use a set of PC speakers, with their amplifiers? Isn't that what you have built here? I have made one before the days of Arduino magic... worked then. Gotta try this :)
Commercial amplifiers have DC blocking inputs, which is bad for this purpose.
someone should do the same instructables but use a laptop instead of arduino
What kind of laser did you use. Or how did you make it so visible?
nothinglabs (author)  hthnc-student1 year ago
standard red laser pointer.

if you want brighter - look at the notes for using the green laser pointer.
Mine works!! What a hoot! I will tweak and try to get the quality to match your vid. It works great as it is, just not quite as clear. Thanks for the instructions, a fun project.
BTW, I have not found the revisions about using diodes instead of the resistors across the speakers, have you posted this? I am interested to see if it uses less power and heats up less. I am using 10 Ohm resistors, the machine works, maybe I shouldn't mess with success? ;) How do you guys figure all this stuff out?
nothinglabs (author)  stringstretcher1 year ago
congrats on getting stuff working!

see step 17 for info on the diodes (I just added a few other references to it in the project). It will improve performance a little - in that it uses maybe 25% less power - reducing the load on the transistors (which can help drawing accuracy).

figured this out through a little theory - and lots of trial / error...

-Rich

Will do.. Thanks!
Jim
The only commercial laser show I looked inside of had spherical mirrors, like a rather large ball bearing mounted on a rod and driven by a galvo. the curved surface gave a larger throw to the motion of the galvo, allowing for faster motion due to the shorter travel. Might this work; highly polished ball bearings on the speakers instead of rear surface mirrors? BTW, there is an instructable on converting acrylic mirrors into front surface mirrors, and believe me, that makes a huge difference in resolution.
nothinglabs (author)  stringstretcher1 year ago
cool - I think this is the instructable your talking about with the front-faced mirror:

http://www.instructables.com/id/DIY-Front-Surface-Mirror./

yes - definitely loose some definition in the beam to the back-sided mirrors
jeff-o3 years ago
Any idea whether a mosfet could be used here? I assume so - and perhaps without dumping out so much heat.
nothinglabs (author)  jeff-o3 years ago
I tried using a mosfet - but didn't have very good luck.

I should point out the I didn't spend a lot of time with it - I kind of suspect it would work with the right tweaks. Definitely worth trying!

-Rich
Try using an enhancement-mode mosfet with logic-level input. These can be driven directly from the arduino's output, switching high voltage and current without heating up. This due to the extremely low Rds (resistance from drain to source).

Great instructable, very cleverly done. I especially liked the idea of using a green laser to write messages in the sky!
abend jeff-o1 year ago
I tried MOSFETs, but didn't get it working yet. I do want the very low on resistance, so I can have smaller heat sinks and waste less power.

My guess as to why the MOSFETs didn't work is that the voltage they are switching is a lot more than the gate drive, and so they end up running in ohmic mode and getting really hot. Add the fast PWM, and the gate capacitance may never fully charge and get it kicked over into saturation.

I'm planning to make a darlington of a 2n2222 or similar with the MOSFET, so I can drive the gate with the full 12V. I'm posting about my attempt on www.gizmosmith.com, so I'll have details there when I'm done.
nothinglabs (author)  abend1 year ago
I did some testing with mosfets and didn't have good luck - but my efforts were far from exhaustive.

good luck!
Pro

Get More Out of Instructables

Already have an Account?

close

PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!