The laser scan head is nearing completion; I just have a few more mounts to machine, and waiting on one more optic to arrive, then we should be complete. However I thought I would take this time to explain the theory of this contraption thus far.
Principles of Operation
As previously mentioned, the laser will scan a slice of the part in the X/Y plane, and the stepper motor controls the layer thickness (Z axis). The scan is produced from the manipulation of a laser beam, by varying intensity and position.
Beam Power Control
Achieving varying intensity of the laser is attained by modulating the amount of current flow to the laser diode. This signal input on the laser diode driver is coupled to an 8-bit DAC, providing 256 discrete intensity levels. It should be noted that in this “3D printing” application, we are likely to only require simple “On/Off” action, however having the ability to control the laser brightness in this way allows for computer control and finer optimisation of the printing process as a future possibility.
The beam position is controlled by two high reflectivity mirrors mounted on the shafts of two closed loop galvanometers, at right angles to each other. These mirrors can rotate very precisely and very quickly. One allows for control of the X-axis and one for the Y-axis. A laser beam is fed into the side, hitting the first mirror deviating the beam by a few degrees in one axis; then the beam hits the second mirror, altering its angle in that axis. By accurately controlling the modulation of the laser and the position of the galvanometers, one can “draw” nearly any required shape onto a projection surface.
This laser head will use three laser diodes in total; two near-UV “violet” laser diodes (wavelength 405nm), and one red laser diode (wavelength 658nm). The idea behind having two different wavelength lasers is to allow for both “printing” and “aiming”. The red laser beam will be used for safely aiming and positioning as there is not enough energy to initiate polymerisation when exposed to the resin. The near-UV laser will be used to polymerise the resin; I have successfully confirmed polymerisation occurs at 405nm using my polymer solution and mix of dye. :-)
The power of the red laser (658nm) used will be approximately 100mW and the power of each violet laser (405nm) will be approximately 350mW.
It is planned to use two violet laser diodes, combined into one single beam with overlapping beam geometry, as so not to cause any loss of printing detail while providing an increase of available power. The two laser beams will be spatially combined by using two different polarisation states for each laser diode, and a cube beam splitter optic at the junction to merge these. However only one diode will be used for early tests for simplicity, with a view to a planned upgrade to two soon after for increased production speed.
In order to spatially combine both “print” and “aim” beams into one, a precision laser dichroic mirror will be used. This mirror allows light of a specific wavelength to pass through it, while reflecting light of another wavelength. Using this approach a single beam can be directed onto the scanning galvanometers, and both the scanned image from the print and aim beams will perfectly match.
An initial layout of the scanning head has been built onto a 200 x 150mm base, and includes all lasers, optics and drivers cards. The only additional requirements are signal inputs and power (±24V, 12V & 5V). The drivers and laser diodes generate a sizeable amount of heat, so were fixed onto an adequate heatsink for normal operation and stability.
All optics are mirrors are fixed to 3-axis precision kinematic mounts to allow for fine positioning. A final front surface mirror is placed after the galvanometers at an angle of 45˚ to project the slice downwards onto the resin tank. This is also fixed onto a kinematic mount to allow for alignment.
I have machined the mounts for the diodes, and have been anodised black to match the other parts. They are quite bulky, however are so to dissipate the heat generated by each laser diode. One of the near UV modules has been built and collimated, and the red module built and wired, but not yet mounted.
Machining of the mount for the red laser diode is still to do. I have indicated on the beam path image where this will be located. Also several smaller plate mounts are required to suitably fixed all the gubbins down correctly; then comes the task of mounting this assembly upside down in the chassis, wire the thing up, then the fun really starts! ;-)
Quite a mundane post this, however it needs to be done!
Over the last couple of days I have been thinking how best to house all the internal components, coming to the conclusion a “two deck” approach would be the most suitable. The basics were sketched out in a CAD package, and today I fired up the milling machine, spun up the lathe, and cranked out the skeleton chassis. Technically I could finish 95% of the machine before I need to go away and complete the enclosure, however I hope to make it look more presentable sooner! :-)
First some numbers; the footprint of the machine is currently 500 x 250mm, and is a height of 475mm. Each deck has been machined out of 8mm thick 6082 aluminium, and the columns from 22mm diameter solid aluminium round bar. The skeleton chassis is very rigid, (not to mention heavy!) I know I could have used thinner material for each deck, however the top deck will also act as a heatsink for the laser scan head, and the base for rigidity; so it was decided to standardise each to the same thickness. Stainless steel M8 countersunk screws bolt everything nicely together.
Only the laser scan head and the production platform will be fixed to this top deck. The laser head will be mounted upside down with a precision kinematic mirror mount to bounce the scanned slice through 90˚, allowing for very fine adjustment of the laser scan onto the polymer tank below. The production platform will be made from ground silver steel, with a rigid telescopic mount to allow for correct positioning of the platform into the polymer tank; however once set this will remain fixed during the printing process while the tank is lowered for each slice.
Practically everything else will be fixed to this plate, the X/Z table, the micro-controller & stepper motor board, and the switched mode power supplies. The X/Z table has been fixed on four vibration isolation mounts, as the table chattered a little on a solid surface when it accelerated through its resonant frequency; it now runs whisper quiet. :-)
It is planned to fit four fixed aluminium panels around the skeleton frame, with the LCD (and possible future keypad/switches) being fixed to the front panel. The remainder of the panel will be hinged as a door to allow access to the polymer tank. It is planned when all panelling is complete, a suitable surface finish will be applied and all the parts anodised.
The initial batch of reagents arrived – I was quick to don my lab coat and get mixing :-)
But first a little about the chemistry of the whole process…
Referring to a paper by Joseph Muskin, Matthew Ragusa and Thomas Gelsthorpe, titled “Three-Dimensional Printing Using a Photoinitiated Polymer” they outline a similar reaction very well and also demonstrate a rudimentary projector printing technique. So a directed thanks to them.
The composition of my solution contains:
- Poly (Ethylene Glycol-400) Diacrylate
- Phenylbis (2,4,6 Trimethylbenzoyl) Phosphine Oxide
- Bromothymol Blue Dye
UV light incident upon the photo-initiator (Phenylbis (2,4,6 Trimethylbenzoyl) Phosphine Oxide) is absorbed and free radical species are generated.
The generated species then react with the Diacrylate monomer to initiate polymerisation.
The selected dye was “Bromothymol Blue” chosen for two reasons:
- Acceptable level of light absorbance circa 405nm.
- The colour of Bromothymol Blue dye solutions are highly pH dependant, giving some degree of colour control of the produced parts. In acidic solutions, the dye is bright yellow; neutral solutions (pH 7) the dye is green, and in bases is a deep blue.
The polymer solution is mildly acidic, giving a nice yellow colour to parts. Therefore an aim will be to investigate the necessary amounts of a base (such as NaOH) required to be added to the polymer solution to generate these three different possible colours for part production. It is straightforward to calculate the required amount of a base to be added, however I will revisit this at a later date as it is not a primary goal.
The initial batch produced will be based upon the Muskin et. al formula of 98ml of monomer with 2g of photo-initator.
The solubility of the photo-initiator in the diacrylate is poor, although 2g does eventually dissolve. If I find myself making batches more frequently, I will invest in a magnetic stirrer to speed up the process!
All forms of the polymer solution are stored in amber glass bottles to prevent ambient UV light spoiling the solution.
Initial tests show the prepared solution works well, and early results are very promising. Processing times appear very fast with the current laser prototype. In the coming weeks this will be quantitatively assessed, and a decision made as to wether or not to proceed with the planned upgraded laser design (which would be approximately double the laser power).
Further work: Experiment with dye concentration effect upon slice thickness achieved under standard conditions; and to investigate slight pH changes for creation of yellow, green and blue useable polymer solutions.
I decided to use an Arduino based design for the control of the hardware for several reasons. First, I had one lying around. Second, I like the IDE and how easy it is to reprogram. Third, it would be relatively painless to take the completed prototype and lay out a complete custom PCB with all the essentials included when the design had been sealed in – however that is a way off!
- 2x Haydon Kirk linear actuators
- 4x Sharp GP1A75E IR sensors
- 2 xSharp other IR sensors
- 1x LCD
- A handful of buttons and switches
An Adafruit “Motor Shield” was ordered, as it seemed perfect for controlling two stepper motors. Within minutes it was assembled and the X/Z table was whizzing around :-)
Note: Rather than use the standard AFmotor library for the code, the AccelStepper library was used as it supports acceleration movements very nicely.
All four of the limit sensors were hooked up to analog inputs A0-A3; with the 2 other sensors left disconnected. The four connected sensors will be used to determine the home position and axis boundaries.
I had run out of inputs on the Arduino, so on the list of things to do is multiplex the sensors, or implement the I²C bus and hook them in through that.
A little 16×4 LCD was added to show the controller’s current operation. At this stage I’ll admit, it is a little superfluous, but will be useful to give feedback on the progress of the slice printing.
The LCD is connected through a “backpack” that consists of a 8-bit I/O expander and 74HC595 shift register; controlled by the Arduino via I²C. Implementation of the additional switches and sensors will probably follow a similar route.
All the code was written in the Arduino IDE, and currently performs a homing routine; moves the table into position, then begins to increment the Z-axis table by a fixed amount on a time base. This will suffice for the time being, as it only takes a minute to change the timebase stored on the chip. However I plan interfacing this controller to the laser controller by means of trigger pulses to ensure both controllers will stay in sync over the duration of the print. This will give much greater flexibility to the printing process.
The motion control aspect of the machine just requires a table which can move up and down by set amounts. A stepper motor based design would be the obvious choice here, and control of such is discussed to death on the internet.
The initial plan was to use a single axis linear positioning stage, such as this one, mounted vertically. However I managed to salvage something far more flexible from a DNA sequencer.
There is 200mm travel on the X-axis and, 60mm of travel on the Z-axis. The plan was never to make huge components (the resin is so expensive!) so this would be perfect. Having an X-axis allows for more options such as batch production of different parts.
Another possibility, and the one I will be pursuing, at least in the early stages, is to have a “cleaning station” i.e. the table is divided into two section, one filled with resin where the part gets printed, and the other filled with water, so the part can be automatically washed after it has been printed.
There are a plethora of IR sensors attached to the rig; one at each end of travel for each axis and two for sample identification midway along the X-axis. All will be reused; the axis ones for homing (for all intents and purposes eliminating the need for rotary encoders on the steppers) and the midway sensors for checking the resin tank is aligned in the correct position.
The Z-axis motor is only 7.5˚ per step, but with suitable control, should be able to move the table in ~0.02mm increments. This is acceptable for the minimum slice thickness of produced parts. Due to the imperial ball screws I need to verify this figure with a dial test indicator, to find the exact minimum slice thickness. The X-axis motor is a standard 1.8˚ per step.
The white lever pictured is attached to a torsion spring that allows the side plate to move back and forth. This will come in very useful for securing the resin tank into a fixed position for printing.
So I made a start on the software side of things…
3D parts are modelled in Pro/Engineer (or any CAD package) and they need to be converted into a format that the laser scan head controller can understand and make the model, slice by slice!
The first step is to convert those CAD models into slices for processing. Exporting the CAD models into .STL files seems the best way to go, sterolithography is what that file format was made for. ;-)
I found a nice little utility from a few years back called SLICE, by Freesteel. It looked like exactly what was needed to get started. It’s a command line utility, but I wrote a little wrapper for it, which will form the basis of the “3D Laser Print” software which will control the whole process from CAD file input to laser output.
Currently you give it your STL file, and it spits out a folder full of images of each slice of the model, tailored ready to throw into the laser pre-processor.
More to do on that later…
Update – (13/06/11)
It appears the Freesteel site, has gone offline :-( taking their excellent utility with it. I have checked the licence terms, and distribution of the binary is allowed. I will not be releasing my additional code until I have a complete version that deals with the whole printing process.
I have mirrored the original Freesteel slicer here
Hope that helps!
This marks the start of the build log for a new project of mine; a scratch-built 3D laser printing machine!
In recent years there has been a surge in people building their own rapid prototyping systems; be it CNC mills, lathes or routers; or some of the plastic-based 3D printers. RepRap is an excellent example of such a project.
However I was interested in coupling a laser to perform the “printing”, rather than a plastic nozzle or conventional tooling. Such a process already exists called sterolithography; this was first developed back in 1986 and the cost of the machines were, and still are, highly expensive. My goal was to create a similar machine for a fraction of the cost. Why? For the challenge… :-)
The principle behind Stereolithography is to use a UV laser to scan a “slice” of a part onto a bed of liquid polymer. The UV light causes that particular point to solidify, and a whole slice is developed. The supporting bed then moved down to allow more liquid polymer to flow on top of the previous slice and the process is repeated. This way complex 3D structures can be “printed”. Sounds simple enough!
This video shows a typical sterolithography machine in action quite well:
I’ve seen a similar system built by a chap who used a DLP projector as the projection source. Great idea – but I want to use lasers!
So that’s the goal, that’s how it works; I’ve just got to go back and fill in all the blanks now…