Project: Stabilisation of a laserlight

Hello

My first real Arduino project is to stabilise a laser beam by controlling a stepper motor on which a mirror is attached (1 dimension to start with). The laserlight changes the position where it beams from respectively the direction and the stepper motor should change the mirror in a position so that the reflected beam goes to the same position.
The reflectet laser beam points on a quadrant photodiode which realizes the movement of the beam respectively the movement of the laser and gives that information to the Arduino which calculates the needed movement of the stepper motor.
On the second stage I could add a second mirror for the second dimension.

For that I found a stepper motor with an angle cut of 0.45 degrees ( http://www.ec-motion.com/index.php?id=12&L=1 ).
Is it possible to run it with this shield ( http://207.58.139.247/index.php?main_page=product_info&cPath=17_21&products_id=81 )?
And where should I order this stepper motor? Unfortunatelly I didn't find a marchant. Is it the best solution to phone EC Motion?

My second problem is that I have no clue on what specifications I should check by the quadrant photodiode. How can I adapt it to the Arduino and use the signal?

I'd be glad if you helped me :slight_smile: Already thanks for reading it. I hope my English was more or less understandable.

Was my English too bad?
I'd be happy if you could confirm that the combination of the stepper motor and the Arduino shield fit together and every tip to the usage of the quadrant photodiode.

Was my English too bad?

No it was understandable. However personally I didn't think the project was achievable, certainly not running a stepping motor with steps it is too coarse.
I did see a laser control somewhere (maybe an instructables) that used a motor as a servo feeding analogue voltages into a bi polar stepping motor.
However, I am not convinced that you would get enough discrimination from a quadrant photo diode to allow you to control what you want.

As I was so negative I didn't post anything and I thought I would see if anyone else came up with anything, but apparently not.

Thanks for your clear words. The combination of a coarse stepping motor and a small quadrant photodiode doesen't fit together, because the motor wouldn't always be able to direct the beam exactly on the mirror.
I didn't understand how the servo motor was connected to the stepping motor in your example, sorry. I thought of using a servomotor instead of the stepping motor which would have the possibility to direct the laserbeam always on the quadrant photodiode. Could that be accurate enough?
The other idea I had was the usage of a selfmade panel of photosensors (those were as close together as possible) instead of the quadrant photodiode. Then the stabilisation would not have to be perfect (the beam wouldn't always hit the 'main photosensor') but it wouldn't let it spread as much as it would normally.

Is one of those possibilities better?

They use two small DC motors to slowly move the mirror platform. It seems to me like this would be more suitable for accurately positioning a laser beam (although even that device may not have enough accuracy?)

There used to be a company (not sure if they still exist) named "Airband" (or something like that), whose initial product used similar positioners (they touted this in their promo material); their product was a system of laser repeaters and detectors for free-air optical networking over long distances. They used the devices for setup and maintenance of laser positioning and tracking for their service.

I didn't understand how the servo motor was connected to the stepping motor in your example,

Well that's me being not clear. :-[

It was a bipolar stepping motor but it was connected up as if it were a servo motor by sending two signals through D/A converters and then into the coils. This allowed you to move the motor through a single step with the resolution of the D/A. A sort of extrema example of micro stepping you need that for the fine control.
The problem with the quadrant detector is that as the laser is a very small point there is little space for it to spread over the quadrants and give any sort of accurate pointing information. A much better approach would be to use a sensor array from a web cam or CCD sensor to get the feedback.

Sorry I didn't know you need the information where I'm coming from. I updated that now. The two examples you gave would have also been a nice way to achieve my aim, thanks for sharing.
But the way using stepping (/servo) - motors seems to be a cheaper way for me in Switzerland and also attracts me a liddle more.

Thanks for your explanations Mike, it's a bit more clear. Due to my lack of expirience with this domain I'm still not completely sure if I understood right. Do you have an example from it's usage? But it seems as if it would be enough to order the Stepping Motor and the Adafruit Motor/Stepper/Servo Shield. Maybe I'd get it easially with the components in my hands.

I will google for the keywords you gave me. Thanks guys you're really helping me getting ahead with my plannings and avoiding mistakes :slight_smile:

Was my English too bad?

No. But my problem is that there's not enough of it :slight_smile:

It's not very clear what you're trying to do. How much do you need to move the beam? Are you trying to make minor corrections (say, 1 or 2 degrees)? To move it over many degrees to follow a moving target?

That mirror-adjusting mechanism Richard mentioned sounds promising. To get a finer, smoother adjustment than a direct mount to a stepper, you could mount a cam to the stepper (or a servo), and use that to tilt a pivoting laser mount. Or use the stepper to drive a screw (or even a micrometer, for really fine control).

I agree that what you want to do isn't very clear. As to fine adjustment I've found a standard hobby servo can make ~426 discrete movements with in its ~190 deg rotation range. One could use one servo to move a rotating platform ~190 deg, and on that platform mount another servo that is geared down such that in the servo's ~190 deg rotation, the mirror only rotates ~10 deg. In this setup the first servo gets the laser in the general ball park, then the second servo does the final position tweeking.

I will google for the keywords you gave me.

Try:- laser light show

As these projects include X/Y control of motors to a fine degree.

Picutes say more than words. I did a liddle sketch.

That's what I'm thinking of actually. I already tried a prototype of the trail: http://fabitosh.bplaced.net/arduino/beamstabilisation/legotrail.jpg
I hope it's more clear now :slight_smile:

To get a finer, smoother adjustment than a direct mount to a stepper, you could mount a cam to the stepper (or a servo), and use that to tilt a pivoting laser mount. Or use the stepper to drive a screw (or even a micrometer, for really fine control).

This sounds great! Can you show me a project where it was used or an explanation how it's done? It's hard to imagine that just from those words (as beginner as I am).

hobby servo can make ~426 discrete movements with in its ~190 deg rotation range

If I calculated right this would give a step angle of 0.446 degrees.
The 'best' stepping motor I found should also be able to make steps 0.45 degrees. (http://www.ec-motion.com/index.php?id=12&L=1) So the servo wouldn't be a serious advantage (especially because it's normally more expensive). I'm confused :-?

Your main idea sounds very interesting. I'm not sure if I understood the other comments right, but if it is possible to make the motors more precise and still having the angle of 180 degrees I'd prefer that way (less mirrors and places to make mistakes). Otherwise I could try this out.

Okay, summarised:

  • How do I 'make' the motor finer than the step of 0.45 degree? Is this possible?
  • Which lightsensor should I use? (not too expensive and avaible in Europe if possible)

Thanks again for your effort! :slight_smile:

OK it is clear what you are trying to do. The only question is why?

The only question is why?

In our school we could choose a topic we like and make a big work about it. I liked to create a small CSP-Tower (http://upload.wikimedia.org/wikipedia/commons/5/50/PS10_solar_power_tower_2.jpg). But for the creation of an heliostat would have meant much work and many hours for a friend who could have done those heliostats.
We decided to track a laser beam instead of the sun and we did those changes. I hope to get some expirience out of this project that I can realize later other maybe more complex things.


Isn't my project just a galvanometer (just without the lenses)? If I bought that I almost had no work. So I could call my aim 'Make your own galvanometer'.

Unless you have an uneven track, not clear why you need a vertical-axis mirror, unless that is part of the experiment?

It was mainly an option to develop the system if I achieved the first aim.

Unfortunatelly (bad time) I go to holiday on Saturday. I'd like to order the needed components tomorrow so that I can start shortly after my vacation.

The closest thing to a computer-controlled galvanometer is a hobby servo motor.

Maybe for the world's slowest galvo; real galvanometers are low mass, high-speed, and very accurate positioning devices.

They're also fairly expensive (if you find cheap galvos, you're still going to spend money on the drivers) and close to impossible (just this side of it) to replicate at a hobbyist level.

What would be closer would be a pair of speakers (with most of the cone removed, and a small, low-mass front-surface mirror glued to the center of the drive coil) angled properly to scan/position a laser in an X/Y fashion. The problem with this method, though, is lack of feedback, plus the coils on speakers will fail if driven with a constant voltage/current.

A pair of small stepper motors with mirrors on the shaft and some form of rotary encoder position feedback might be better...

:slight_smile:

Okay again thanks for your help.
I finished the constructing part yesterday and got my hardware ready. A small impression:


I just wanted to test all the phototransistors. I connected them the same way as I found it on the website (-> see Screenshot). The outcome and the programming code is also shown on it. http://fabitosh.bplaced.net/arduino/screenshots/phototransistor_inputs.jpg
Even tough the light intensity was stable the inputs jumped around extremely from ~400 to ~550. What could be the reason for that? I used 33k[ch937] resistors.
An other strange thing is that I get values from Pin 5, even if I absolutely didn't connect anything to this Pin (need to organize one more 33k[ch937]-resistor). Because it sounds so strange I felt like I had to make a photo of it as proof. :wink:
http://fabitosh.bplaced.net/arduino/beamstabilisation/Pin5empty.jpg
How can that be?

I just think that steppers don't have small enough step size to do what Fabitosh is proposing.

Couldn't you implement a "micro-stepping" scheme, either by using a driver chip that implements it, or by building a custom driver that can output a varying voltage to the coils (instead of the regular on/off scheme), to allow you to position the rotor between coils...?

:slight_smile:

Nice looking experiment. Good show!

Thanks! :slight_smile:

You talk about photo-transistors, but the devices in your photo look like photo-voltaic cells?

True, sorry they are kind of solar cells. The datasheet to it you can find on this link:

On my screenshot you can just see the values which I did without beaming on the solar cells. But the result is almost the same when I beam on them too. (Laserlight wavelength: 650 to 680 nM (10^(-9)M))
The strange thing is that I tried out three of them and could clearly read from the values when the beam was on them.

Couldn't you implement a "micro-stepping" scheme, either by using a driver chip that implements it, or by building a custom driver that can output a varying voltage to the coils (instead of the regular on/off scheme), to allow you to position the rotor between coils...?

Sounds promising and complex. :wink: I will try to finish the project first with the Servos I got (Continuous Rotation Servo [FeeTech FS5103R] : ID 154 : $11.95 : Adafruit Industries, Unique & fun DIY electronics and kits) and see if it would already work when I move the laser slowly. If that works I will maybe try to improve other things. But first I need to come to reach a finish (deadline next Monday).

Yes, but that would quadruple the complexity of the project and Fabitosh seems to have his hands full already.

Very true. But I'm still having fun :slight_smile: My written part will be on German, but I will link it here too when I've finished for the ones who are intersted and having a bit German reading skills.

I will try to connect an other 5th resistor (40k[ch937]) and just try to find the error. But if you already know it I'd be glad if you telled me :wink:
Thanks for your effort!

I used a 5th 33k[ch937]-resistor now, but it's still the same. The input values jump around and I can't read a difference when the laser is beaming on a solar cell.
I did a wiring diagramme, maybe this shows the error:
http://fabitosh.bplaced.net/arduino/schaltplaene/
Choose either the .eps or the .pdf-file.

I'd be really glad if you could help me, I got no clue.

You seem to have these connected as if they were photo-sensitive resistors. Aren't they photo-voltaic cells? They should generate some small voltage upon exposure to light. What happens if you just connect the - side directly to ground and the + side directly to an Arduino analog input pin?

:-[
You're my hero! :slight_smile: That was exactly my fault. Thank you very much, I will remember to think about the wiring better before I start to set up everything.
Will update the topic when I got a new error or when the project reached its finish (It will hopefully be the 2nd).

Hey guys
I finished the written part and can completely focus on the model now. The written part is in German. But for the ones which are interested I uploaded it here:
http://fabitosh.bplaced.net/arduino/Der%20kontrollierte%20Weg%20des%20Lichts.pdf

Now to the more serious part. After having the Arduino Duemilanove connected with the computer for about an hour and experimenting a bit I couldn't upload the new program anymore. The serial port isn't found anymore.

The voltage regulator (http://wiki.elphel.com/images/7/70/ArduinoDiecimilaComponents.jpg) was extremely warm. I unplugged the USB-cable and waited around an hour. It still didn't work, but the voltage regulator is getting warm again. May it be that the Arduino has too much power because of the photovoltaic cells and overheated?
I also realized that the engines often did some short moves without the order to do so.

And an other question. What would be the easiest way to get more analog in pins?