Finally, it’s time for the laser. We’ve covered all the basic coding required to produce vector graphics. So, now we need to project them onto a wall. Let’s build a laser projector!
The important bit – the laser
After the recent incredible discovery of gravitational waves by the advanced LIGO team, and last weeks ‘starshot’ announcement, my ‘precision’ laser setup looks pretty pathetic really.
For my purposes the only important factor to worry about is the laser’s power. We are going to be sweeping this laser at high speed across a wall to produce an image so a laser with appropriate brightness is required:
- If the power is too low, the image is too dim to see.
- If the power is too high, the whole thing becomes a total liability. The light reflected from a green laser above about 500mW from a wall (not a mirror) is enough to blind a person. I did not want to blind my wedding guests.
I did initially test the projector with a basic 1mW laser pointer. It actually worked surprisingly well, giving a good image on my workshop wall.
However, I was planning on projecting a far larger image in a brighter room. In the end I went for a 50mW green laser. This was not only incredibly bright by my standards but also looks really cool. The images look just like old school vector games which is exactly what I intended.
I should probably mention 50mW is easily enough to blind a human if the beam is viewed directly, so I wore eye protection while building this.
Side note – buying the laser
To be honest, I’d always been looking for a reason to buy a cool laser. This thing is actually pretty pathetic compared to some available online. There are places selling handheld lasers up to 2000mW which is easily enough to burn things, light matches etc. This is another reason to not over-do the power, the reception venue would not have been impressed if I’d permanently etched my show into their wall (maybe they would be actually, they were brilliant about the whole thing to be honest).
Anyway, it is actually illegal to sell a laser above 5mW in the UK. However, it is not illegal to buy one – go figure that one out. I was expecting to have to import mine but I managed to find someone selling them here online. About 2 weeks before I wrote this post, I got a recall email from them stating that they should never have sold these lasers and asked for them to be returned. That isn’t happening!
Moving on, I hooked the laser up to the Arduino via a transistor so it can be turned on or off by controlling a pin on the Arduino. The Arduino was powered via a mains adaptor. So the setup looked like this:
Moving the beam
This seems to be the hotly anticipated topic – several people have messaged me asking how I did this so let’s go through the options I tried in order:
High speed servos
A servo is a small motor which can be controlled to rotate to a certain position, therefore moving an attached ‘object’ to a desired point.
This was never really an option but was a starting point. Attaching the laser to a servo, and attaching that servo perpendicularly to another would allow me to point the beam in any direction.
The problem here is obvious – servos aren’t remotely fast enough to be used for a laser projector. There are some models on the market which are impressivley fast – some can even make images from lasers:
But, there is no servo which can make a decent image, or even an image at all which incorporates more than a couple of lines. Look at the ‘corners’ in the images created above. They are curved because the servos cannot change direction quick enough. The lines are also ‘squiggly’ because the servos cannot hold their position accurately at that speed.
The deflection method used needs to be seriously fast. Some of the frames contain over 1000 points. The laser needs to sweep all these points in a fraction of a second so the eye interprets it as a single image.
Hard drive head actuator
This was my first viable thought.
A hard drive uses a read/write head on a moving arm. This arm needs to be able to move to any spot on the drive platter at high speed in order to read and write data. In order to achieve this, a coil is attached to the arm and is positioned betwen two magnets. As soon as the coil is electrified, the arm deflects.
HDD arms are probably fast enough too, hooking the deflection input wire to an audio amplified turns the arm into a speaker:
From this point on, let’s forget about the notion of strapping the laser pointer directly to whatever is moving. Nothing can physically move the pointer at the speed required – it is far too heavy. Instead, we will attach a tiny mirror which weighs a fraction of a gram, and can therefore be moved at high speed.
I did play around with HDD arms for a while but the idea was a no-go in the end for the following reasons:
- The pad to which a wire has to be soldered to control the arm is TINY. I had to solder it under a magnifying glass and it kept falling off. I need something more robust that this.
- The arms are really fiddly to use and mount. They are an odd shape and are very delicate. Couple this with the above, and things get really frustrating.
- The motion of the arms is difficult to control. Instead of moving a little bit when a small voltage is applied and a large amount when 5V is applied, they seemed to not do anything as I increased the voltage and then move miles as soon as a certain threshold was reached.
- There is no inbuilt PID control (see below)
So, HDD arms are certainly possible to use but are a nightmare in reality. Other people have managed it though.
Mirrors on speakers
This idea lasted about 5 minutes.
Perhaps it’s possible to attach a pusher arm to a speaker and use it to deflect a mirror on a hinge?
It is possible but not really practical.
The actual solution – mirror galvanometers
There is a piece of kit which is designed for exactly this purpose. I held off buying some at first because I’d never even heard of the things – this whole project was a learning excercise so I wasn’t really too keen to use a ‘black box’ that I didn’t really understand.
After a while, it became apparent that galvanometers were the only way to do this. So I bought a pair on Ebay from China for just £50 (they cost hundreds if you buy them here).
Here’s what they are:
- The galvanometer itself is simply a high speed electric motor which can rotate a very light mirror back and forth at high speed.
- It is connected to a PID controller. I won’t go into detail about PID now. In summary, it’s a feedback mechanism where the galvo reports the mirrors position back to a microcontroller which constantly corrects it to ensure accuracy. See the references for more on PID. Without this feedback control, the galvos would have very poor accuracy.
- This is all connected to a provided power supply which conveniently takes care of the ‘how do I power this issue’. I connected the supply to the mains via a kettle lead. From this point on, I strictly only worked on the projector with the lead unplugged. Accidentally touch the live wire on a kettle lead and it could well be curtains.
Remarkably, the output from the Arduino which previously went to the oscilloscope could then connect directly to the input of the galvos and it worked straight off the bat. I was expecting to have to alter some of the code since i thought the movements would be too fast for the galvos but it wasn’t necessary. The only issue is the galvos require an input signal between -5v and 5v. The Arduino outputs signals of 0v-5v. This isn’t actually a problem – it just means the image is only a quarter of it’s possible maximum size. A bit of trigonometry showed it would be easily big enough for my requirements.
A little callibration was required for the galvos, this was done by following the instructions provided with them. Callibration simply involves turning a couple of potnetiometers. It changes the parameters of the inbuilt PID algorithm. Again, see the sources for more info.
A working projector
So, with the galvos installed, I had a fully working laser projector! Here is the setup and circuit diagram:
At this stage I was somewhat running out of time. I actually had to take this contraption through airport security at one point. I was going away for the weekend and figured I’d have some time to work on it. The security chaps at the airport were actually really accommodating, and pretty quickly decided it wasn’t a bomb as soon as I took the lid off.
Since the wedding was in a couple of weeks I didn’t bother installing an on switch. The thing just boots up as soon as the Arduino and power are plugged in.
My intention was to switch off the laser beam at the end of each frame and switch it back on at the start of the next frame. This would have been achieved by switching on the transistor’s collector on and off as necessary. This is called ‘blanking’
Unfortunately, it turns out the laser has a ‘warm up’ time and can’t be switched on and off quickly enough. Instead, I had to live with the beam being on when it returned to the start position of every frame. Watching the video I posted in my previous laser projector post, you can sometimes see the return path beam. I generally tried to design the displayed images to hide the return path.
If I improve the projector for future use, I’ll use a third galvo to block the beam as it returns to the start of the frame.
For the purpose of my wedding speech, it was adequate. Not perfect but it did the job, and at least I tried. You could say it was ‘a bit of a Parker Square‘
Summary and progress
In this post we:
- Sourced and installed a suitable laser. It can be turned on and off via the Arduino.
- Found a good method to deflect the laser beam by using galvanometers.
- Figured out how to power everything.
So now we have a fully functioning projector. All I needed to do at this stage was improve my code to make some nicer looking animations. I’ll cover this in the next post.
I didn’t really go into detail on PID control here. This site had a really good introduction to it. http://www.csimn.com/CSI_pages/PIDforDummies.html
I bought the galvos from this seller. They are way more expensive now! I suspect he was just trying to get into the market at the time. http://www.ebay.co.uk/sch/dj.lover/m.html?_nkw=&_armrs=1&_ipg=&_from=