Introduction: A Laser Beam Combiner With 3d Printed Parametric Optomechanical Components.

This instructable shows how to create a simple beam combiner with some cheap laser pointers from ebay and some optomechanical components I've designed.

The beam combiner itself is nothing special, many people have done it before and it is a technique commonly used in projectors.
For exaple: "styropyro" on youtube has a very nice demonstration of the same type of combiner.

But notice how his components are just loosely put on a table. He is a very skillfull guy, if he wanted a more permanent set up he would have made a permanent fixture.
Unlike electronics there isn't really an easy accessible equivalent of a breadboard or etching your own pcb for optics.
What is used for optics is called an "optical bench" onto which optomechanical components are mounted. optomechanical components are used to put optical components, such as lenses, mirrors, beam splitters,... onto an optical bench. The problem is that this optical bench and those components cost a lot of money. (think $100-200 a piece for the cheapest ones)

If someone wants to play around with some scavenged or cheap optics from ebay, there isn't really a cheap and neat way to do this without building your own holders.

The last couple of weeks I've designed a set of optical components that can be quickly 3D printed and mounted on standard extruded aluminium profiles.

  • The models are parametric; you can easily change their shape of you have different profiles or optical components.
  • Only M3x20 bolts (and nuts) with smooth metric hex caps are needed. You need the smooth cap ones because the models have a thickness of 6 mm and only the smooth caps can sink nicely in there.
  • All models print fast (15-60 min at 15% infill on a slow Anet 40 mm wall speed) and do not require supports.

To demonstrate this, in this instructable I will show you how to make the optomechanical components to assemble a laser beam combiner to combine the beams from 3 laser pointers, (a red, green and blue(violet) one) to form an RGB laser beam with which you can generate for example a white laser beam

Years ago I remember one could upload animated gifs to instructables, so I recorded a bunch of short clips, but this doesn't seem to work anymore. Instead I've uploaded some video files here and in the last step for you to see.
Here I stitched together some screenshots from a video. next to each other.

I don't have a smoke machine so I had to use a piezo fogger to generate some mist to make the beam visible to the camera. This was not very practical as the mist doesn't reach very far, please look at the video "short_beams_in_fog.mp4" video attached to this step.
And please, see the videos attached in the last step.

Edit: In the mean time I have figured out how to upload a video on youtube, but since I still don't know how to use the embed function suggested by Instructables, I will just embed it here. Please forgive the shaky footage, it was filmed with a smartphone and I had to blow the fog for it to cover the laser beams.

The models for the optomechanical components are designed parametrically in FreeCad, this means that you can customize them to your optical component by just changing some parameters. For example the radius of a lens you want to mount.

The models are designed in such a way that you only need "hex socket, smooth cap M3x20 bolts" which are easy to find.

The components can be mounted on very standard extruded aluminium profiles with which you can construct an optical bench of arbitrary complexity.

What you need:

  • FreeCAD if you want to change the models. (Free obviously)
  • A 3D printer or access to one. (I use an Anet A8)

  • Extruded aluminium profiles + brackets and tools to assemble them. ( I use 30x30 but you can equally well use 20x20 or 40x40 with some modifications) These cost about €6-10 per m depending on the seller. I don't want to link for a vendor, but mine are bought from DOLD-mechatronic, but in the USA I hear Misumi is popular.
  • About 50 M3x25 nuts and bolts (about $3 from a chinese ebay seller)
  • Obviously M3 nuts (the one but top result for me shows €1.36 for a pack of 100)
  • A Red(650 nm), Green(532 nm) and Blue/violet (532 nm) laser pointer. (seach "red green blue laser pointer", sort by cheapest and you'll find some sellers with the option to choose, buy one of each ($1-2) NOTE, the safety labels are fake, these pointers emit way more than 5 mw. Especially the green laser pointer is dangerous ! See step 7. Or this video.
  • A dichroic prism. You'll find plenty of "defective" prisms on ebay and aliexpress. "Defective" for prjectors is still good enough for us to play around with. I bought 4 for $12
  • A 3V power supply (I use a DC-DC buck converter ($1 on ebay) and an old wall adapter
  • An arduino
  • A breadboard, some wires and 3 logic N-channel MOSFET (I use 30N06L)
  • I include a step where I talk about lenses, if you want a cheap source of lenses; search for "google lens" on aliexpress.

I am still searching for a small and similarly cheap source of mirrors. The best thing I found are parrot toy mirrors, but even those are still quite expensive compared to the previously mentioned objects. Otherwise I found some hand held makeup mirrors, but with a diameter of 7 cm they require a new component to be modeled. This hasn't been done for this instructable. (And these makeup mirrors aren't direct surface mirrors which can be annoying for more complex systems.)

Step 1: Aluminium Extrusions

Typically a big, heavy, steel optical table with various M6 threaded holes is used to mount opto mechanical components on. This is obviously not a realistic option for small diy projects with optics.

As an alternative, aluminium 30x30 extrusions are used here, these types of extrusions are easy to find online, are quite cheap (€6.5 / m) and they are pretty standardised, so the brands shouldn't make a difference.
Many webshops offer different sizes or you can order them precut at different lengths.

You can very easily build very strong and rigid frames out of these profiles, they obviously won't beat a real optical table but they are light weight and easily reconfigurable.
I used 30x30 profiles, because I based my models on a little scrap piece I had, but since all the models are parametric you can very easily make them for 20x20 or 40x40 profiles.

Be sure that when you order them that you order compatible t-nuts and corner brackets. I bought some profiles that require spring-ball t-nuts instead of regular t-nuts. I only learned about this when I saw that they didn't fit together. The seller I bought my profiles from offered B-type and I-type profiles. I bought the I-type profiles while I should have bought the standard B-type. Normally wherever you buy them, you probably can order profiles,nuts and bolts together. I didn't and hence I screwed up.

In the added photos you will see how you can construct a cross-like shape that will be used as the base for a beam combiner for red, green and blue LEDs.
I still don't have spring-ball nuts so I'm using 2020 t-nuts for 30x30 profiles in this demonstration.

For the demonstration I used 1 400 mm piece and 2 200 mm pieces which I arranged in a crosslike pattern. As you can see in the photos.

Step 2: Freecad

The models are designed in FreeCAD

I designed them over the course of a couple of months while learning FreeCAD. All models work fine in version 0.17 (revision nr 13541 to be precise)

If you are interested in using these components, it would be good if you followed some basic tutorials, specifically with the "part design module" since that's essentially the only thing I used.

Since the models are parametric, you have to enter and store the parameters somewhere. I do this in two different places.

  1. A spreadsheet for static measured values
    For example bolt and nut sizes. Next to the values the name is written (sometimes with an "/" in front of it) so you now what will change if you change the value.
  2. A "master sketch" for dynamic values.
    Spreadsheets can slow down everything because with every change your entire model is recomputed. Many people use something called "Master Sketches" which are sketches that contain shapes with some desired dimensions that are referred to in the model. Changing the "Master Sketch" will change the model

    Master Setches are more practical for values that really determine the general shape of your model if you want to try and change various things.
    In some cases, where multiple parts are designed in the same document (because they belong together, e.g. the mount which consists out of a "base" and a "bar") a "Master object" is used, this object is just a container for a general master sketch to which is referred by means of a "shapebinder". In this way you can use the same master sketch in multiple parts. See here for a forum topic on the best practices, but you don't really need it to build these optical components.

    I can't seem to annotate "named constraints" in sketches, but you can find all constraints in the side bar -> Constraints -> set filter to "named".

For every component in this instructable, I will show what values you can change and where to find them.

So depending on the complexity, you'll have to measure your nuts and bolts and measure your optical component for which you want to make a holders and enter the values in the spreadsheets or master sketch.

This was and is a project I've been working on a little bit here and there over the course of a couple of months. When i began I knew next to nothing about FreeCad, but as time advanced I learned more and more things. So the way I do things, the names of the parameters can be slightly different in the different models.

A good example is the constraint name "hexagondikte" or "hexagonthickness" used in some models. Originally everything was based on a hexagon with a specific size, but now it only appears in the "lens holder" and is used to specify the thickness of various components. I haven't yet figured out how to change the name without breaking models. Also, adding or removing lines in master sketches will cause errors too if shape binders are used.

Step 3: The Base

To mount optical components, onto the aluminium profiles a standard "mount" is used. In the next steps some "holders" are shown that can be mounted in this "mount". You can easily design your own "holders" with this principle.

The base consists out of 3 different components:

  1. barholder: A holder one can mount on an aluminium profile which holds a bar.
  2. bar: A generally cylindrical bar held by the barholder onto which optical components can be mounted
  3. squarenut: A nut to secure the barholder onto the aluminium profile. (Basically just an m-3 t-nut)


The barholder is the essence of the entire mount, it is essentially a tube that can be mounted onto an aluminium extrusion. A "bar" with an optical component in a holder attached to it, can be slid into the tube and secured with an M3 bolt.

schematic of parameters
Fig 3.1. Side and top view of the bar holder

The green dimensions are aliases set in the Spreadsheet "measured" change the values to the measurements of your own nuts and bolts.

B : extrusiongap
E: M3bolt
F: M3boltcap
G: M3nutthickness
H: M3nutwidth
J : extrusionthickness (/2 in the holder model)*

For the Holder, J is half the value of "extrusionthickness" (see figure B) because this padded structure makes the holder slide in the gap of the extrusion which prevents it from turning when nuts are tightened. but it must be thin enough so that the "squarenut" can still tighten onto the profile.

The red dimensions can be found back in the Master sketch in the document, you can find this in the object "MBody", double click on the sketch "Master" to edit it.

A : barlength
C : barradius*
D : outerradius
K : hexagondikte

For the Holder, C = barradius + 2 x printgap, you can find the alias printgap in the spreadsheat, increase printgap if the bar fits too tight in the holder.

Fig. 3.2 Profile schematic from datasheet

Also take in account some printer tolerances, the alias "printgap" is not displayed in the image, but it is a tolerance to take in account the layer thickness of your printer so that the "bar" can move smoothly in the "holder". If it's too tight, you can increase it a bit. For most measurements, in other models the tolerances of your printer are not taken in account, you may have to add 0.1-0.2 mm to some measurements.


"Bar" is an object onto which the optomechanical components can be mounted and can slide in the holder where it can be fixed at a desired angle and height.

The shape of the bar is not a complete cylinder, but instead has a flat side.
This serves two purposes:

  1. It prints accurately without support structures
  2. The nut used to fix inserted bolts can be positioned easily to a good place.

Fig. 3.3 Side and bottom view of "bar"

As can be seen, no new parameters are necessary. Some values like the position of the nut holes can be changed but have no effect on the functionality. Now the holes move automatically with the parameter "barlength".


By now it should be clear that the parameters of the measured objects are reused in the different objects in the same FreeCAD file.

squarenut is such a simple object that I won't make a technical drawing. (Technical Drawings are easy in Freecad, but I don't see an easy way to annotate them and measurements are pointless)

Basically as you can see in the profile of Fig 2. you can mount stuff on it by bolting it onto a "square nut" inside the stump arrow shaped hole.

Because the squarenut is so simple, and it has a specific shape, the general shape isn't parametric. The holes for the m3 bolt and m3 nut will change according to the values entered into the "measured" spreadsheet.

I bought an annoying kind of Aluminium profile which seems to be a bit too small for the cheap chinese T-nuts, so my design will very likely be small enough for yours and you won't have to change anything. (unless you use an other type of profile instead of 30x30)

Fig 3.4 Schematics and 3d view of "squaenut"

Attached you will find three .obj files, please note that these models work for my M3 nuts and bolts and my printer. Since I use cheap chinese nuts and bolts, there can be some difference in the dimensions. Similarly our printers may have different toolerances. You can try, but don't expect the printed .obj files

Also attached of course is the original Freecad File. "mount.fcstd"

Step 4: The Lens Holder

In many cases you will want to mount circular things such as lenses or filters, tiny mirrors.

This is done in a slightly different manner than seen in commercial lens mounts. In commercial lens mounts screws are used with on the end freely rotating hooks. Creating those freely rotating screws is quite difficult with a 3d printer. Even more so, the lens holders here are smaller than most commercial holders so it would become very fiddly to insert and secure a lens.

I have solved this by creating a flexible ring in which a lens or any circular or cylindrical object can be clamped. This ring can then be inserted into a ringholder and secured with M3 bolts. Because the ring is flexible one can finely adjust the position of the lens.

Not all parameters will be explained, only the ones that have not yet been explained in the previous steps.

Fig.4.1 Schematic of the ring. A circular object (blue) can be clipped in the ring.

In the Spreadsheet you can find:

A : lensradius (12.5 mm for the google lenses)
B : holderradius (19.9 mm)
C : thickness (0.8 mm)

A tiny groove is added in which one can secure a circular object without useing any screws. This allows you to handle the lens more easily.

Fig.4.2 Detail of groove in the ring to clip circular objects in.

You can find the attached FreeCAD file as "ring.fcstd" and an exported .obj file
Note that these are for a lens with a diameter of 25 mm.

The holder

With the ring alone you can't do very much, you have to be able to mount it into a holder which in turn can be mounted onto the aluminium profiles. For this one can use the object "holder".

Fig. 4.3 Schematic of the "holder"

In the Master sketch:

A : hexdikte (6 mm)
B : ringdikte (7 mm)
C : innrerradius (equal to the "holderradius" of the ring, or a bit larger (+ 0.1mm) depending on the printer) Here 20 mm

In the Spreadsheet "measured"
D : M3boltcaprad (2.6 for mine)

Fig.4.4 3d view of the holder

As can be seen, there are 6 holes for M3 bolts. Three M3 bolts are used can be used to secure a "ring" and tweak the position of whatever it holds. The there other holes can be used to mount the ringholder onto other objects, such as a "bar" or "horizontalbar" (see next step)

M3 bolts with smooth caps should be used, because the caps can be sinked completely in the object not hindering the ring.

Step 5: Horizontal Bar

Originally this project started because I wanted to mount a laser on my telescope.
So it had to be easy to mount, and the laser had to be finely adjustable.

This was achieved by connecting two ring holders with a horizontal bar ( don't forget to change values of "innerradius" (15 mm) in "holder.fcstd" and holderradius and lensradius (7 mm) "ring.fcstd"). As you can see, besides the radial mounting hole used in the previous step, it has two holes on the front in which one can sink a smooth M3 cap. Trough these holes one can mount the ring holders onto other objects such as this horizontal bar.

Just like the other sketches some parameters can be changed. The values for the screws and nuts have been left out

Fig. 5.1 Schematic of the horizontalbar

A : barlength (50 mm)
B : hexdikte (6 mm)

You can find these parameters in the Master sketch.

The usual nut and bolts parameters are still in the spreadsheet "Measured".

The horizontal bar itself has a hole for an M3 screw so that it can be mounted onto a (regular) bar and intserted into a mount attached to an aluminium profile.

Fig. 5.2 3d view of the horizontalbar in the correct position.

Then as you can deduce from the photos it's pretty straightforward to attach some ring holders on both ends, insert some spring rings and insert for example a laser pointer.
Just like a lens, the postion of the laser can be tweaked a bit. By varying the position differently in the front and end one can aim the laser beam a bit. See more on this in step 8

Both files for the rings and the horizontalbar are attached.

Horizontalbar.fcstd contains the modifialbe freecad file, horizontalbar.obj contains an exported .obj file.

Besides that, the smaller version of the ring and holder are added as "smallholder.obj" and "laserring.obj".

Step 6: A Holder for the Dichroic Prism.

A lot of optical components have a cube shape.

For the demonstration used here a dichroic prism with a square footprint is used.

So the object "Cubeholder" is an object to hold cubes, or at least square prisms. An other interesting to use this holder for would be beam splitters. But all my optical components cost about €1-3 each, I haven't found a beam splitter in that price range.

Fig. 6.1 schematic top view of the cubeholder. (blue = dichroic prism)

A : Cubewidth (20 mm for the cube used here, it can be useful to add 0.1 mm)
B : Padwith (6 mm)

The parameter "B" is actually the same as "hexwidth" or "hexdikte" from the previous models.

Fig. 6.2 3d view of the cubeholder.

Again in the center, the model contains a hole in which one can sink an M3 smooth cap bolt.
The cubeholder, just like other components has to be screwed onto a "bar" first.

Attached are the freecad file "cubeholder.fcstd" and an .obj which may or may not work directly for you "cubeholer.obj" .

Step 7: Powering the Lasers Pointers.

Laser safety !!

Cheap green lasers can be very dangerous. Green lasers actually contain a very strong infra red laser diode of about 1000 mW. The infrared light is converted by frequency doubling into a couple of mW of 530 nm green light. More expensive diodes include a high-pass IR filter which blocks all the non-converted infra red light. But the cheap chinese pointers do not include this filter.

Look at this video from the youtuber "brainiac75" which explains the problem very well and how you can test your laser. So you want to find a filter that blocks Infra red light. The advantage is that these are fairly common on the internet, you can find them for a couple of euros.

DON'T use green laser pointers without one of those filters.

I found very small ones with a diameter of about 5 mm. I checked with a spectrograph at work and it blocks the IR light very well. If you find these on ebay, you can find the model I use in "irfilterholder.fcstd". If you find them in an other form factor, you either have to get creative and devise your own mount or you can use a "lensholer" to mount it against the laser diode. Just be sure that you mount it so close to the pointer that the reflected IR light bounces back into the laser.

You can find my laser filter holder attached as "irfilterholder.fcstd" and an exported .obj file "irfilterholder.obj"

The Power Plug

When batteries are used, you cannot control the power of the lasers. Therefore the batteries are replaced with electrical wires. The easiest way would be to just solder the wires on to the spring and inside wall of the laser but even though they are only $1-2 each I don't want to ruin them.

For that purpose I designed a little plug in which two electrical wires can be glued. The ends of the wires are stripped and stick out of the holes of the plug touching the spring and threads of the laser pointer.
You can twist the plug in the laser but preferably not too far. It turns out the pcbs inside can get crushed easily.

The model can be found in the attached file "laserplug.fcstd". Because it's so simple it is not really parametrised as the other models, but you can change the sketch of the rotated profile directly.
The model is based on a sketch (named "sketch") which is rotated around the z-axis. If the plug doesn't fit a laser pointer you have, make the encircled constraint a bit smaller or bigger.

Fig. 7.1 Change constraint to make the plug fit the laser pointer.

To see how the plug is inserted in the laser mount, I refer to the photos. It is clear that you have to trim the copper frays so that a short circuit cannot happen.

Attached you will find the FreeCAD file "laserplug.fcstd" and an exported .obj file "laserplug.obj"

Driving the Laser pointers with an Arduino.

Anyone familiar with arduinos knows that they have "analogue out" ports. These are ports with a "PWM" output. The laser pointers themselves (especially the green one) demand a bit too much power from the arduino.

Instead, I use a 12V wall-plug adapter that I soldered to a DC-DC buck converter. These are efficient devices that one can use to create a voltage source lower than the input voltage. I used one to create a 3V source to replace the batteries.

Therefore the laser pointers are powered separately trough some MOSFETs , I use 30N06L LOGIC N-Channel MOSFET. "the Logic level" part means that you can drive them with an arduino.
If you aren't familiar with MOSFETs, Fig. 7.2 shows how to use them in a schematic.

Fig. 7.2 Schematic of how to use a MOSFET to drive e.g. a laser pointer note that
the laser pointers have a driver themselves and do not need extra current control.

To drive 3 LEDs, the same schematic is reapeated three times. (obviously with the same Buck converter and arduino) .

I've included some test-code for the adruino. It is just the "analog" example code but with all the serial stuff removed and some changing values added. You will find it under the name "lasertestarduino.ino"

Step 8: Demo : a Beam Combiner

With the components from the previous steps one can build a simple beam combiner with a dichroic prism

3 laser pointers, a 650 nm red, a 530 nm green, and a 405 nm blue (or rather violet) laser pointer are aimed at a dichroic prism. The beams are combined to form a white laser beam.

For each laser pointer a laser holder has to be assembled and mounted on a "leg" of the aluminium cross. In the center of the cross a dichroic prism is mounted.

As said in the previous step, instead of using batteries, the lasers are powered with an external power supply (power wall adapter with a buck-converter to 3V) but PWM modulated via an arduino.
Via the arduino you can therefore govern the power given to each laser and modulate its intensity. Laser pointers themselves have their own driver that then drives the laser diode. This works very well for the red and blue laser diode, but the intensity of the green laser diode doesn't vary linear with the PWM signal. It has either something to do with the driver inside not reacting well to the PWM power supply, or with the frequency doubler not getting enough photons to do its thing or the general abuse the pointer has had to endure.

Nevertheles, you can mount the 3 pointers onto the aluminium profiles, mount a dichroic prims and adjust the laser pointers. This can be a quite tricky, because these cheap laser pointers don't shine straight and their diodes aren't even 100% on axis. So you need to both shift the position and rotate them so that the beams overlap.

Fig. 8.1 schematic of how to adjust the position of the lasers by
tightening and releasing bolts.

It takes some practice, but you can easily focus the dots of the pointers onto each other onto a far away surface. If the Red, Green and Blue dots overlap this doesn't always mean that the beams overlap. Only at that point.
To make the beams overlap, hold a piece of cardboard in front of the dichroic prism (where the beams exit, DON'T LOOK IN IT) and SHIFT the lasers so that the dots overlap. Then recombine the dots far away and repeat. After a while your beams should overlap very nice.

However, As you will notice the low quality beams from the cheap pointers have each a different radius and cross section. In my case the red and blue diodes have a wider radius and elongated. The green one however is thinner but produces a ton of speckle. With this you will not see a nice white beam, but always a rainbowy RGB beam.

Fig. 8.2 Diagram of the setup.

To solve this, I've made a tiny circular disk with an aperture with a diameter of 3 mm. I mounted it into a lens holder and adjusted it so that it blocked the laser beams except for a small circular aperture. With this you can get 3 almost perfectly overlapping bundles of light.
You can find freecad file as "aperture.fcstd" and an .obj file as "aperture.obj"

This aperture object can be mounted in a lensholder in the path of the beam. Just like the lasers you can adjust its position a bit.

My beams stay combined for more than 8m. However it doesn't really look white anymore at this distance but it looks more like a small spirally cluster of RGB speckle simply because the laser beams themselves are not that collimated.

I wish I had a smoke machine to make the beams more visible but the only thing I had available was a small piezo fogger. The fog stays very local so I couldn't show long stretches of the beam. If you know an easily and non-poisonous source of smoke, let me know please.

Attached are some videos where I used the piezo fogger.
I've also used a small tub of water with a drop of milk. When a white beam shines on the milk, it scatters the blue light somewhat more, giving the bath a bluish glow while letting the red and green light pass more resulting in a yellow beam.

The titles are descriptive of the content, they all are about 4-20 seconds and originally intended as animaged gifs.
But it seems that I have to figure out a way to upload these videos somewhere. (I suppose I'll have make a youtube account).

Also, Instructables is not an ideal repository for files. I will collect all freecad and object files in a repository on thingiverse or myminifactory.

Edit: I have added some youtube videos, so you don't need to download the mp4 files anymore. I know, I filmed vertically, these were originally intended as animated GIFS in the instructable itself. This is a nice effect of the laser shining trough water with a drop of milk, you can clearly see the effect of the rayleigh scattering. (blue glow of water + reddening of the beam the deeper it gets)

A short video showing the beam combiner working with a single color changing dot at a distance showing that the beams stay together.

Optics Contest

First Prize in the
Optics Contest