Getting the thing aligned the first time is a major pain - but once it's
roughly aligned, it's much easier because you can just adjust at the four
corners. Most of the time, I only need to realign after I replace a
mirror, or if one of the Y cart belts or the Y-axis drive shaft slips or
has to be removed for some reason. In those cases, it's really only the
rotation of the mirrors that has to be adjusted - not the position of the
mount itself.
The problem with that is that the design of the lasersaur's mirror mounts
pretty much guarantees that any time you loosen the mirror mount bolt to
reposition it, you'll screw up the rotation.
So in practice, you want to get the position of the mirror mount itself
sorted out first - and only then start messing with the rotation...but you
have to get the rotation right in order to figure out how much you still
need to move the mirror mount by. This is really frustrating - but once
your Y-axis motion is working without the belt skipping, you'll probably
only have to do it if you ever move your lasersaur - or after a few years
when your laser tube needs replacing.
I use laser-cut plywood targets that are the same diameter as the mirrors
and which are etched with three concentric circles and a cross-hair with
an arrow showing which way is "up". Sadly, you need a working laser
cutter in order to make those targets! Doing this saves a TON of time.
I've attached the SVG file I used to make a bucketload of them from a 30cm
x 30cm sheet of plywood. Remember to make a new batch as the first thing
you do after you've realigned your laser!
If you want an utterly mindless alignment algorithm, then it's this (sorry
for the pseudo C code!):
int mirror ;
double Xnear, Ynear, Xfar, Yfar ;
void measure ()
{
/* Measure the position of the laser spot both close to, and far from
the mirror */
move the target as close to the mirror that you're adjusting as
possible ;
zap the laser and adjust the power until you can just see a clear
circular spot ;
measure where the spot hits the target in the X and Y directions ;
those distances are Xnear and Ynear ;
move the target as far from the mirror that you're adjusting as
possible ;
while ( true )
{
zap the laser (you may need a little more power than before) ;
if ( the laser leaves a mark )
{
measure where the spot hits the target in the X and Y directions ;
those distances are Xfar and Yfar ;
break ;
}
else /* You're a long way off-alignment! */
move the target closer to the mirror ;
}
}
void main ()
{
for ( mirror = 1 ; mirror <= 3 ; mirror++ )
{
do
{
do
{
measure () ;
if ( Xnear >= Xfar ) slide the mirror horizontally by -Xnear ;
if ( Ynear >= Yfar ) slide the mirror horizontally by -Ynear ;
} while ( Xnear >= Xfar || Ynear >= Yfar ) ;
do
{
measure () ;
if ( Xnear < Xfar ) then rotate the mirror horizontally until
Xnear==Xfar ;
if ( Ynear < Yfar ) then rotate the mirror vertically Ynear==Yfar ;
} while ( Xnear != Xfar || Ynear != Yfar ) ;
} while ( Xfar != 0 || Yfar != 0 || Xnear != 0 || Ynear != 0 ) ;
}
/* Hooray! */
}
...well, that's not quite right because X and Y are signed numbers...but
you get the idea.
The trick there is to understand that if you slide the mirror by (say)
5mm, then the spot will move by 5mm on the target no matter how far it is
from the mirror - but when you rotate the mirror, then the distance that
the spot will move by will be larger at greater distances.
-- Steve
> 3000 Leuven, België
-- Steve