Laser Cutter

laser cutter article heading

Introduction (this article is under construction)

Having been impressed by the bond film, Goldfinger, many years ago I have decided to try to make a laser cutter. (Actually, I had access to a laser cutter some time ago and found it a very useful piece of kit. For example, I used it to cut the customised instrument panels for my TR7-V8 project.) Also, many years ago, I had been fascinated by home-made laser projects described in the The Amateur Scientist pages of the Scientific American (at the time, pre 2001, when it was a really good mag). Sadly, making a CO2 laser is probably beyond me now (it require glass blowing, vacuum technology etc.) but I should be able to have a decent stab at a cutter if the numerous YouTube videos describing how it can be done are anything to go by.

Old Stuff…

Below are some things I did when I had access to a laser cutter. It could cut 3mm Perspex and MDF easily but would not touch metal. Top left: The basic arrangement of a laser cutter with a stepper motor for each axis (X & Y). Top right: I designed the parts for the TR7 switch panel on CorelDraw. A printer driver for the laser cutter was loaded on my laptop and transferring the design to the cutter was as simple as any print job. Below, middle left: The logos for the switches which were glued into the black panel with corresponding cut outs. Below, middle right: The panel installed in the car. Below, bottom left: Triumph logo for Nardi steering wheel. Below, bottom right: Illuminated TR7 V8 logo in panel on centre console. The logos were illuminated by LEDS glued to the back of the panel (I describe this in more detail on my old site,

Old laser-cut bits for TR7
laser cut examples from my TR7 project

New Project…

It strikes me that a laser cutter is in some ways easy to build, compared to, say, A CNC milling machine which has to have enough strength to press a rotating cutting tool against a piece of work and also move a heavy motor around in three dimensions. The laser cutter just needs to move some mirrors and a lens around in two dimensions. Hence the motion can be controlled by a toothed belt rather than a lead screw and nut. There is, of course the difficulty of lining up and focussing an invisible beam of light with the potential to blind or start a fire!

As far as I can see, all laser cutters are XY, Cartesian coordinate type machines. Not being averse to a left field solution, what other configurations are there that will be able to cover every point on a rectangular area? For example, something like the human arm pivoting at the shoulder and elbow would be possible. The business end is only supported by the levers and the two pivots which would have to be very rigid and free from play. Also I’m not sure how the laser mirrors would be arranged. Another configuration could be the delta arrangement used on some 3D printers. I’m not sure how the mirrors could work with this either. So Cartesian X-Y it is!


It would seem that by far the most popular way of making a laser cutter or similar is to make use of aluminium extrusions developed by OpenBuilds which feature V-edged grooves which can guide sliding carriages running on specially profiled wheels. These extrusions come in various different multiples of a basic 20x20mm base configuration. I have chosen 20x40mm versions as the carriages will run on the 40mm side providing a more accurate location than a 20x20mm extrusion. They will also be more rigid.

Mechanical Drive

Alternative arrangements for stepper and belt.

There seem to be two ways to cause a stepper motor to drive a carriage across an extrusion (see above). One way is to mount the stepper motor at the end of the extrusion and have a loop of drive belt the lenth of the extrusion with an idler wheel at the opposite end to the motor. The carriage is fixed to the belt at one point and is pulled back and forth as the bet moves. The other method places the motor on the carriage with a fixed belt which acts as a sort of rack to the drive wheel on the motor’s pinion. The belt passes under the wheels of the carriage and up (or possibly down) round the drive wheel on the motor making sure that sufficient teeth are in contact to ensure a secure drive. Which is better? (Answers on a postcard…)

Stepper Motors

The principle behind a stepper motor is quite simple; some electromagnets are turned on and off so as to drag magnets round and round. (I made a YouTube video – see below- which demonstrates this simple principle. However, the details of driving the coils of the electromagnets at speed is a different matter and the theory of driving quite high current pulses into inductances might have been accessible to me when I was at college many years ago but now… not so much!

Fractional steps

More complexity involves fractional steps, when the magnets are not just dragged round to be exactly opposite one pole but are somewhere in between two. There may be up to 32 fractional steps. A half step is easy, adjacent poles are turned on so the magnet hovers halfway in between but 1/32 from one pole and 31/32 from the next must be tricky for the electronics driving the coils! Fortunately, clever ICs have been developed and Pololu (who seem to have a big share of the market) have incorporated them onto small breakout boards which can easily be incorporated into other circuitry.

Choosing the right Stepper Motor

I’m not sure how to choose the right stepper motors. The loads are light, so nothing very large should be necessary. NEMA 17 seems to be appropriate. The 17 in NEMA 17 – (National Electrical Manufacturers Association), just seems to refer to the diagonal distance between the fixing holes, in this case 1.7 inches. I am using Motech Motor type MT-1704HSM168A supplied by Ooznest. These are 0.9 degree per step motors (400 steps / revolution). Most seem to be 1.8 degrees (200 steps). The more steps, the better the resolution but, perhaps, the slower the speed? Time will tell whether I have made the right choice!

Electronics and Software etc.

2D and 3D CAD programs (my laser cutter will only need 2D design) will output vector graphics designs as files in svg or dxf format. These will have to be converted to a G-code file which contains instructions for the movement of stepper motors etc. tailored to the CNC machine being used. The CNC machine needs its own computer with software which can read the G-code instructions and send the required pulses to the stepper motor driver circuits.

Arduino Uno provides the Brains

Arduino CNC shield with Pololu drivers

At this stage, this is how I see the electronics and software for this project developing. I am going down the open source route. I intend to use an Arduino Uno flashed with GRBL motion control software which can be customised with settings for individual machines. An Arduino CNC Shield will sit on the Uno and provide sockets for the Pololu stepper drivers and various jumpers which can be used to customise the operation of the whole kit and caboodle (see picture above – the Uno is under the CNC shield).

Not so Banggood

As an aside, I really feel for the guy who originated the CNC Shield. This is a quote from his site: “Due to Chinese Clones being sold for less than $5 and pricing me completely out of the market (and them not contributing to the project) I have decided to not publish future versions (of) design files.” And its true, on sites like Banggood you can find shields with clones of the Pololu drivers for peanuts. Apart from a lack of manufacturer’s logo, they look absolutely identical.

Of course, this is everywhere. Arduinos and similar have been cloned for years. I once bought a cloned Ethernet Shield, it was about £10 cheaper than a genuine item and I have felt (a bit) guilty ever since. This is, perhaps, the one area, the stealing of intellectual property, where I have a bit of sympathy for Trump. Did I just write that? UGH!

Add in a Raspberry Pi

I hope use a Raspberry Pi to send G-code to the Uno via a USB/serial connection. The Pi will run bCNC “Swiss army knife for all your CNC/g-code needs”. (Universal Gcode Sender is, I believe, an alternative.) Also, keeping things Pi-based, I could use Inkscape running on the Pi to do the required CAD work (but it’s probably going to struggle) or I could send files to the Pi from my PC over SSH etc. If required, I can monitor/control the Pi remotely from my PC using VNC.

Testing GRBL , the CNC Shield & Drivers

Cat-shaped testing problems!
Cat-shaped testing difficulties!

While waiting for some parts to arrive, I started to load some software. Flashing GRBL to the Arduino proved to be straightforward following these instructions and I was able to issue some G-code instructions (for example: G0 X100 or G1 Y-50 F100)) using the Arduino IDE Serial Monitor (set the baud rate to 115200 or it won’t work!) and see a stepper motor run. The “running” did not seem totally right – sometimes it would seem to stop before it’s allotted number of steps had been run. Then I guessed that the DRV8825 might be overheating and shutting down while it cooled off. (As a person who had to use a pair of pliers to conduct the heat away for the leads of germanium transistors while soldering to prevent them being permanently cooked, I still can’t quite believe semiconductors can get so hot and still work!)

The problem was, I believe, A failure on my part to set the current limit. The easiest way to do this is to measure the voltage at a through hole connection on the Pololu PCB. I put a piece of 30 gauge wire through the hole to make contact and measure between this and ground. Twiddle the preset potentiometer on the board until the numerical value of the voltage is half the numerical value of the desired current limit (see picture below).

Adjusting the current limit

More Software

Next, I installed bCNC on the Raspberry Pi 4. This is a Python package utilising Tkinter. Installing a Python package is not completely straightforward for those who just dabble in Python like me! There are details here. According to someone on a blog (I can’t remember the reference!) you need the following installed first before installing bCNC: pip, numpy, scipy, tk, wheel, serial, setuptools PIL, and opencv. The last two allow X-Y alignment using a USB web-cam on the gantry. I’m not sure if this will be useful for laser cutting. Anyway, with some difficulty, I installed opencv using the instructions on this page. This also showed me how to install all these bits and pieces within a virtual environment which seems to be a good thing.

The otherwise perfect description of the opencv installation process seems to leave out a couple of points. Under “Step #4”, add the following lines to your ~/.profile:

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/

Without the last line, I got the error /home/pi/.virtualenvs/cv does not contain an activate script. Also, to ensure that the virtual environmet works when you close the original shell and open another, you have to add these lines to ~/.bashrc:

export WORKON_HOME=~/.virtualenvs
source /usr/local/bin/

Then you have to source ~/.bashrc to activale the changes.

Initial testing of bCNC

So having finally got bCNC installed on a Rpi, I connected the Arduino/CNC Shield with a USB lead and started bCNC (open a terminal window and enter workon cv – cv being the name of my virtual environment – then enter bCNC return).. I selected the correct port by trial and error (it was /dev/tty/ACM0) and was able to run both the X and Y axis motors by clicking on the “Move Gantry” button, moving the cursor on the drawing board (is that what it’s called?) and clicking.

Construction begins!

Some parts arrived from Ooznest, so I was able to start construction. For now, I am concentrating on building a two-axis, CNC-controlled (in effect) plotter. If I can get that working, I will then invest in a 40 Watt CO2 laser.

V-slot makes it easy

The use of Openbuilds type parts seems to be universal for self-build projects and that is the route I am taking. I have bought enough 20/40mm V-slot extrusion to make a rectangular frame and a gantry to move up and down it. As I mentioned above, 20/40 seems to be the right dimension of extrusion for a machine in the region of 900 x 500 mm. I relied on Ooznest to cut the extrusions to length. It’s really important they are cut really accurately and exactly square and they have the right saw to do it. I have seen videos of mitre saws being used and it is true that almost any type of blade can cut aluminium (without, in my experience, getting rapidly blunted – as a child, I used woodworking brace and bit augers to cut holes in aluminium to mount valve or vacuum tube bases and they are still fine after fifty odd years with only the occasional sharpening). However, most setups will not be as accurate as is required in my view.

Bits & bobs

parts for laser cutter

I bought a job lot of angle brackets, a bag of 5mm T-slot nuts and 8mm button-head stainless steel socket-head screws from Ebay and Amazon and assembled a frame. I had never used T-slot extrusions before but I was impressed with how quickly it all goes together. Put the screw through the bracket, start the nut on the screw, push it through the slot, turn the screw with a ball-headed Allen key and the nut spins round and jams at ninety degrees before it finally tightens up. Voila! Job done!

Having, therefore, got a frame and a bar which would act as the Y gantry, I purchased three V-slot gantry plates (with Delrin wheels which slide along the V-slot), some 2GT Gates Open Timing Belt (6mm wide) three 2GT Pulleys – 30 Tooth (for 6mm belt – 5mm bore to fit the steppers) and a couple of 2GT 20 – toothed Idlers – again from Ooznest.

Then I needed to make up a lot of brackets and similar bits and bobs to hold the stepper motors, tension the drive belts and attach limit switches etc. I made these mostly out of 3mm (or 3.2mm) aluminium plate or angle.

Accurate drilling (hopefully!)

In order to accurately place holes and in the absence of a CNC drill/mill (perhaps this is what I should be making?) I used my 3D printer to make patterns with the holes in the right places. The patterns had 2mm holes for pilot drills which were then enlarged. The problem with this method is that the patterns only last one time as the holes in the PLA are quickly enlarged.

Fortunately, the accuracy of operation of the finished machine depends on the accuracy of the stepper motors and the Grbl software driving them (and the belts and pulleys, perhaps). For the most part, a lack of accuracy in the construction of a few tenths of a millimetre on my part will not be a problem.

When enlarging the pilot holes, it pays to clamp the work down to the drill table as just holding it “loose” with a machine vice inevitably leads the hole to wander out of true. This problem increases as the diameter of the hole increases – for example, the hole for the location of the stepper motor (22mm diameter) for which I used a stepped drill (from Aldi!). I scribe a 22mm diameter circle with dividers first so that I am reasonably confident the hole is in the right place as the hole increases in size.

Below, left: A 3D printed drilling pattern. Below, right: Belt tensioner for the Y gantry (still needs a bit of finishing!)

belt tensioner

Below, left: The Y axis tensioner – the screws marked by the arrows adjust the tesion with clamping screws on the slots. Below, right: The X axis version.

belt tensioners, Y and X

Below, left: The Y drive arrangement. Below, right: The X drive arrangement. Here I’ve had to space the motor out from the gantry plate with two thicknesses of 3.2 mm aluminium plate to get the drive pulley over the centre of the slot. As you can see, I’ve used both the drive arrangements described at the beginning of this page.

X and Y drive motors and belts

Below: The basic arrangement completed (sort of!) For the time being it’s just resting on blocks of wood.

frame and gantry completed

Limit switches

In addition to the X and Y limit switches at bottom left which will be connected to the CNC Shield to establish the home position, I fitted four other switches to detect out of range movement of the gantry; two each at max. and min. X and Y movement. (For the moment, I am not considering any possible Z movement – at this stage I don’t know how this will work out.)

Safety limit switch circuit

limit switch circuit

I am connecting these four limit switches to an independent circuit which will cut out power to the stepper motors (and the laser). (I am aware grbl could do this but I want the extra safety of being grbl-independent.) The circuit is a bi-stable latch arrangement using my old friend the 555 IC (see above drawing). This will switch a couple of relays (Panasonic ALE1PB05, 277VAC, 30VDC, 16A, 5V coil from Farnell, 1712521) which will control power to the steppers and laser as just mentioned. On the 555, taking pin 2 low switches the output high and taking pin 6 high switches the output low. The 555 output drives the relays via a couple of transistors to provide the current. Pin 6 is connected to an inverting transistor so that taking the base connection of the transistor low will take pin 6 high. This enables the limit switches to short to ground rather than 5 volts. (This seemed like a good idea but I can’t exactly say why!)

PCB layout

Limit switch pcb layout for laser cutter

As usual the pcb provides plenty of “prototyping” pads for components I have forgotten to include at the design stage. The pcb layout does not show the 0.1uF capacitors across the limit switches and reset switch as I incorporated these after I had designed the pcb and they had to be soldered on the track side (I found the inputs could be triggered by just touching them with something metallic which isn’t good!) The layout also doesn’t show the LED which lights on power up and when the limits are triggered. Also the 22uF and 0.1uF bypass capacitors are not shown. Also there are some minor changes to resistor values which reflect what came to hand (resistor values are mostly non-critical – except when they are!)

Power supplies

The 5 volts comes from the Raspberry Pi via the USB lead. I worry that switching pulses for the relays will feed back into the Pi and the Arduino and upset things but so far, this has not happened. (Incidentally, the power for the three stepper motors is coming from a 15 volt power supply I made many years ago. It has a large mains transformer and a hefty smoothing capacitor. I understand this is desirable to smooth out high transient currents derived from pulsing the steppers. I will construct a new power supply in the fullness of time – probably!)

Safe at start up

The 555 has its reset pin (4) taken to 5 volts via a resistor and to ground via a 0.1 uF capacitor. This ensures that on power up, the 555 is in a reset state i.e. the output (pin 3) is low. That means that on power up the supplies to the motors and laser are disconnected. The power is enabled by taking pin 2 low with a push button switch. (So the machine does not start up if mains power, say, is unexpectedly applied.)

limit switches and pcb

Above, left: This shows the limit switches for min. Y. The bottom switch is to establish the Y home position, the top switch works with circuit described above. The picture above, right shows the CNC shield (with the Arduino Uno underneath) and the safety limit circuit with its two relays, 555 etc. plus a whole mess of wires which will (hopefully) be tidied up as the project progresses. For convenience the electronics are screwed to a piece of Tufnol attached to the V-slot. They will probably be repositioned as the project progresses.

By pure luck, the safety limit switches trigger a fraction after the homing limit switches (probably because of slight variations in the bend of the lever) which means that homing does not trigger the safety cut out. If this had not been the case, I would have had to kept the reset button pressed during homing (the red reset button can be seen hanging from the circuit in a temporary configuration).

Edit config.h

Before I could do any testing, I had to get the machine to “home” on just the x and y axes. You have to edit the config.h file in the Grbl distribution, the recompile Grbl on your Arduino Uno. Probably a good idea save the original config.h to a location where it can’t be found during the compilation process otherwise you will get errors.

Comment out the line:

#define HOMING_CYCLE_0 (1<<Z_AXIS) // REQUIRED: First move Z to clear workspace.

Then uncomment lines:

#define HOMING_CYCLE_0 (1<<X_AXIS) // COREXY COMPATIBLE: First home X
#define HOMING_CYCLE_1 (1<<Y_AXIS) // COREXY COMPATIBLE: Then home Y

During recompilation, I noticed that various Grbl settings were retained. I assume these are not overwritten with the generic values when Grbl is recompiled if changes are detected? Perhaps theses are stored in EEPROM memory, if you want to really start from scratch, this should be erased first. See

(I later noticed this was a feature (with a number of options) which can be adjusted in the config.h file. No need to clear EEPROM “manually”! There a numerous other features which I will have to come to grips with later on!)

Initial testing

Having done this, I started bCNC on the Raspberry Pi and connected to the Arduino by clicking on the appropriate button. Initially, as a safety measure, the system starts in an alarm condition so the “unlock” button needs to be clicked on. Then I could click on “Home” and watch the gantry do its thing!

Next, I used the “jog” arrows to move the gantry beyond its limits to test the appropriate limit switches connected to my 555 circuit. The motors cut out as expected.


calibration with a vernier gauge

Then I was in a position to calibrate the X and Y movements in terms of steps per mm. Set the jog to move 10 mm and measure the actual movement with a vernier gauge (see picture above). Allow the carriage to push the vernier gauge then measure how much it has been moved. Calculate the revised number of steps and enter the value in the Grbl settings. New step value = old value * 10 / measured movement. I used the Serial Monitor facility on the Arduino IDE to input the values (set the baud rate to 115200 or it won’t work! $100 sets the X value, $101, the Y value.) Then test again. Repeat until the gantry moves as it should. Set the gantry to move 100 mm and test again, repeating until the movement is correct. I got very slightly different values for X and Y despite the fact the motors and drive pulleys are the same. Perhaps this is down to belt tension. I will (perhaps!) test this out in the future.

Testing by drawing

Next, I tried to determine whether the gantry would actually move according to some sort of GCODE file (the language of CNC machines). The free Illustrator – like program Inkscape can output 2D GCODE files and I used this with a drawing of a simple gear wheel. (I actually drew this on my ancient version of Corel Draw (with which I am very familiar) and exported/opened this as a .cdr file in Inkscape.

There is some sort of bug in this process as the drawing appears larger than it should. I understand this may be related to a confusion on the program’s part between pixels and points as unit of length. It appears that a scaling factor of 35% will bring it back to the correct size (although I would want to look into this a bit more if I was using the machine in anger).

In order to generate GCODE, I took the following steps. First, from the Layer menu, I added a layer, then, from the Path menu, I clicked on Object to Path. Finally in the Extensions menu I went to Gcodetools, Path to gcode. I accepted all the defaults and ignored all the warnings which produced an .ngc file which is a text file comprising GCODE commands. I then transferred the file to the Raspberry Pi using Win SCP.

I clamped a pencil to the gantry, loaded the file into bCNC and started it up. I was rewarded by a rather neat drawing of a cog! (Below, left: The cog on bCNC. Below, right: The machine drawing said cog.)

Gear drawing on bCNC

More calibration attempts

Finally, in this phase, I drew a 50 x 50 mm square in Inkscape, outputted the GCODE to bCNC and ran it on the machine. While it was running I nudged a vernier gauge in both the X and Y directions. I found an error of about 0.3 mm in the Y direction over this distance. This seemed to show that I had been wrong with my initial calibration when I seemed to detect the need for very slightly different values in steps/mm for X and Y. I fiddled around with the values for $100 and $101 to improve matters. The current provisional value is 107.2 steps / mm for both X and Y.

Better drawing

Next I made a stepper motor – enabled “drawing head” to test my abilities to control the Z-axis (see picture below). The motor, which is fitted with a lead screw to provide linear motion, lifts a pencil lead up and down. The motor pivots so that the pressure on the lead on the paper is governed by the weight of the motor. (Later, I added a weak spring to increase this pressure.) The motor sends the pencil lead down till it hits the paper. Once that happens, it swings on the pivot on the pivot until a microswitch is triggered which sets the home position. That’s the theory, anyway!

laser cutter "drawing head"

First, I had to recompile Grbl with the Z axis homing included in config.h. Then I adjusted the Z axis maximum rate to 50mm / min ($112) – although, later I found that 500mm / minute worked fine!.

I had bought the stepper motor years ago in connection with a project to control engine idle speed automatically and I had no idea of its spec. I figured that any motor is capable of half steps so I set the jumpers on the Pololu board to that. It sounds a bit rattly but works ok.

With that done I tested the Z setup by jogging and roughly calibrated the movement of the lead screw. ($102 = 25). I had a lot of trouble trying to get the Z axis to home and went down all sorts of rabbit holes until I discovered that as of grbl 0.9, the Z limit signal pin (D11 on the Arduino) has been swapped with spin-enable (D12) so that’s where the switch should be plugged!

Real-time (?)

While trying to get the Z axis to work, I tried to get real-time status reports which might inform me about the limit switch positions (? in grbl). This involves setting $10 which is a 5-bit mask (I think!). A value of 1 signifies machine position: a 2, work position: 4, planner buffer (?): 8, RX buffer (?): 16, limit pins. It seems that bCNC depends on the machine position report in some way and if the 1 position is not set, it goes a bit haywire and claims bCNC is not connected though it is, as you can jog and, as far as I can remember, still home. So any number you set for $10 must be odd!

Home again

My aim at this stage was to home the pencil resting on the paper. How it gets lifted off during the execution of a GCODE file, I don’t know yet! At first I intended to use limit 3 to home the pencil. The idea was that the motor would start of with the pencil lifted off the paper so that switch 3 would be closed (the NC contacts, though, would be open). As the motor caused the pencil to hit the paper, the switch would open and the NC contacts would close. This did not work, however, I think, because there is not enough space for the limit switch pull off routine to work as it should. (By good fortune, however, I found later that I could put switch 3 to good use after all – see below.)

I reverted to limits 1 and 2 (connected in parallel). This worked once I had allowed enough maximum travel on the Z axis ($132 = 20). I connected the motor to move up on homing so the top microswitch registers that position with the pencil lead clear of the paper.


To get the pencil lead in contact with the paper, I need to use the Probe facility. This needs a switch or contact between the Arduino A5/SCL pin and ground (this will have been setup by Grbl as a digital input pin, I presume). Having connected switch 3 to do this, I started by jogging down in steps of 0.1mm. When the tip hits the paper, the swinging arm moves until a point is reached when limit three is released and the NC contact closes. This is registered on bCNC by the status readout Idle (P) on completion of the jog, signifying that the probe has been triggered.

Laser cutter project so far (as drawing machine!)
Laser cutter as drawing machine!


The Gcode G38.2 probes towards the workpiece, stops on contact and signals an error on failure. So the command: G38.2 Z-1 F1 sends the pencil down to the paper. When I tested this, Z went from -19 (home – I assume 19 is related to the 20 maximum allowed movement I have set in Grbl for Z) to -6.84 which reflects the dimensions of the Z components of the machine, distance from the bed, thickness of the paper etc. A command such as: G1 Z-16 F1 moves the pencil to coordinate -16 which is clear of the paper. There is a place in Inkscape / Extensions / Path to Gcode which allows a safe distance to be entered.

bCNC buttons

(I wanted to build these commands into two of the user-configurable buttons on bCNC. I was able to do this but, so far, I have been unable to save them – the heading Buttons in the .bCNC file located in /home/pi, remains blank.)


This is the procedure for drawing a file/picture:

  1. Home the machine
  2. Set the work position to the machine position (-19.0 in this case)
  3. Put the pencil down to the probe contact position
  4. Jog +Z 3mm to clear the probe contact microswitch (allows the pencil to keep contact with the paper better)
  5. Zero the work position
  6. Run the file

The Gcode I have produced runs the paths twice. I need to understand how to stop this happening. (I could just edit out the second runs in the Gcode file but that would be cheating?)

laser cutter drawing head showing springs

The picture above shows another instance of the picture of the gear, this time made with the stepper motor-equipped drawing head. You can see the spring (actually two hooked together) which I fitted to increase the pressure of the pencil on the paper.

Cables under control

Laser cutter trunking

Cable trunking was now on the agenda. I didn’t know quite what size to pick, so I chose 18 x 37 which when I actually got it looked rather large. Still better too large than too small as long as the stepper motors can haul it along!

I tried the trunking in various positions, pivoting in the horizontal and the vertical planes. In the end it seemed there was no alternative to the position shown in the picture above.

In order to support the trunking, I tried attaching a roller support hung off the gantry plate which held up the trunking as the gantry plate moved along. However, a neater solution was to fit a plate the length of the gantry plate (see arrow on the picture above) supported off the gantry at either end so that the movement of the gantry plate was not impeded. The trunking connecting to the gantry similarly will be supported by a plate which will be attached to the machine’s frame.

Now I need to repeat the exercise on the right hand side of the frame, probably underneath the drive belt. This will mean raising up the machine with the next stage of the construction… Then I will have to redo a fair number of the cables as they are too short at present!

Raise up the frame!

laser cutter framework legs go on

The machine goes up in the world with four legs 300mm long (see picture above – the 20×20 extrusion looks a bit spindly but, hopefully, it will be all right). There will be a bottom frame under these legs, probably 1000 x 540mm. (Remember I’m designing this as I go along!)

(NB. The picture above doesn’t show the support plate for the trunking.)

Making it up as I go along!

Inside this skeleton box will sit the bed (aluminium honeycomb or, perhaps, ni-chrome, or similar, wire mesh) which will be raised and lowered by four stepper motors fitted with 8mm lead screws. I’m thinking it would be easier to use four motors rather than one with belt drive, bearings etc. etc. However I will need four Pololu drivers and a perhaps a CNC shield but driven by an Arduino running basic software (not Grbl). I envisage pressing a button, the bed descends to its home position, then rises till the work on the bed encounters a probe on the laser head, plus controls to manually raise and lower. The question remains as to whether I shall need guide rods with linear bearings etc. in addition to the lead screws (which will have some sort of top bearing). Obviously, I don’t want the bed to wobble when the laser is doing its work!

I envisage all this being inside a sealed box with the usual hinged lid for access all sitting on a table under which would be all the other gubbins needed (extractor, air pump, chiller, power supplies etc.)

Back to bed

Back to raising and lowering the bed, I thought long and hard about how to design in an accurate vertical motion. One of the problems, it seems to me, is ensuring that the bed can move smoothly up and down without significant slackness from side to side requiring linear bearings of some sort with very little play. This requires quite accurate construction of the framing etc. to which these bearings are attached. Although the position of bearings etc. can be made adjustable, the squareness of a frame can be tricky to achieve and needs a lot of fiddling with try-squares etc.

Doesn’t fall flat – unfortunately

More difficult, I think, is making sure a large rectangular frame, say, is flat. You can build your structure on a piece of block-board or thick MDF which will be pretty flat but will flex a little if the table or trestles on which the surface is not flat and so on. I have a self-levelling optical level which I am going to use eventually when I am doing the final alignment. This should be able to measure “flatness” to a fraction of a mm. Hopefully it will be enough! Or, perhaps, the vertical dimension of a laser cutter is not that critical (relatively) compared to, say, a milling machine or 3D printer. Time will tell (again, you have to remember, I am making this up as I go along!)

I get a bit square

Anyway, I contented myself at this point, by getting the frame as square as possible. First, it is a good start to have all the frame members the right length. This is where having the supplier cut the pieces with their expensive special saws pays dividends! Getting the frame square involves loosening joints and sliding them here and there and checking measurements with a tape, vernier gauge etc. as appropriate.

Bed mechanism

I toyed with the idea of raising the bed on three screws as opposed to four. Three would be (obviously) cheaper and less likely to jam if things got out of hand (a three-legged stool never wobbles etc.) In the end, I went down the conventional route (four) which better supports the bed.

laser cutter bed mechanism

I looked at stepper motors directly connected to Acme lead screws and nuts and the prices from Banggood seemed attractive. However the chances of receiving them without any bends caused by poor transit arrangements militated against this choice. In the end I opted for four cheap stepper motors from Ebay (they don’t have to be very powerful, fast, high resolution etc. I hope). I am coupling this up with lead screws made from M8 brass studding (easy to cut and machine and needs a minimum of lubrication).

Motor mounting plates

Drilling stepper motor mount - laser cutter

The first thing to do is make the mounting plates for the four stepper motors. It’s quite important here to drill the holes for the motor in the right place for the motor to fit and also correct relative to the edges of the plate. I 3D-printed another pattern/template which I used to drill 2.5mm pilot holes in the first plate. I used this plate as a pattern for the other three plates. I then enlarged the holes as required. For the 22 mm stepper motor location hole I used my stepper drill (from Aldi!). This produces a round hole in thin material (thin relative to the diameter of the hole), whereas a conventional twist drill may leave a hexagonal hole (in thin material).

Location, location…

I located the plate by drilling the first “step”, then clamped the plate on the drill press (as shown in the picture above) before running through the “steps” up to 22 mm. Lubrication with something like WD40 is necessary with all drilling in aluminium alloy. Nevertheless, there is always an annoying burr which I normally cut off with a wood working chisel.

Clamping when drilling a large hole is essential to ensure the hole is reasonably close to where you want it. Also clamping is a great for safety. If you are holding the work with your hand and the drill bitcatches the work will flail around with potentially serious consequences for your hand! Even a small piece of work can fail to break through cleanly and run up the drill bit at the very least messing up the hole, particularly in something soft like aluminium. On the other hand if you have many small holes to drill life is too short (perhaps) to clamp every one…

A little disappointment

Disappointingly, I had to enlarge the four 3 mm holes to get the stepper motors to fit. I suppose the 22 mm hole wandered up to 0.5 mm as I drilled it. This could be due to play in the drill press shaft. Probably a better way would have been to drill the 22 mm hole first, then use a 3D-printed pattern/jig with a flange which located into the hole and subsequently drill the four 3 mm holes using this pattern.

Further progress on laser cutter build

Progress on the bed

My next task was to fit the Delrin guide wheels on the rear member of the bed (see sketch above). I know that the centres for each pair of wheels need to be 40 mm apart (for a 20 mm extrusion). Not only do I need to be able to drill these holes accurately, I also need to space the pairs of wheels to match the dimensions of the frame.

First I rechecked the separation of the rear uprights top and bottom and made further slight adjustments to get them as square as possible. Then I marked the positions of the uprights on the angle which will become the aforementioned rear member of the frame. I then set out the positions of the holes for the guide wheels.

I expected that inaccuracies would creep in and that I would have to elongate some of the holes (or use the eccentric mounting bushes which I used on the gantry plates etc. In the event, I got lucky and the holes I drilled positioned the wheels accurately enough to allow the bed member to move up and down with pretty much zero detectable play.

Next were two 12 x 12 mm bars with M8 female threads at the separation of the stepper motors. To get as good a positioning for the holes as possible, I made a gauge consisting of three pieces of 12 x 3 mm bar, two with 5 mm holes to fit over the motor spindles and one to link them together. While fitted to the motor spindles, I clamped the third piece in place and then drilled holes to bolt the pieces together. Then I clamped the gauge onto the 12 x 12 bar and drilled 5 mm pilot holes which I enlarged to 6.5 mm ready for tapping out to M8 thread.

Gauge to establish separation of lead screws

Above, left: The three pieces of 12 mm wide alloy fitted over the motor spindles and clamped together. Above, right: The parts of the gauge bolted together and clamped on the 12 x 12 bar ready for drilling.

Turn, turn, turn

The next task was to turn down one end of the four pieces of M8 brass studding (threaded rod) to 6 mm to fit a flexible coupling that I will be using to connect it to the stepper motor (picture below).

Bed for laser cutter - turning down leadscrew

Bed setup

Laser cutter bed progress

The picture above shows the four stepper motors and the lead screws temporarily in place screwed into the 12 x 12 mm support bar (2). Aluminium angle (2) rests in place temporarily. It will be bolted to the front and rear members to complete the frame which will support the aluminium honeycomb bed.

Laser cutter leadscrew detail

The pictures above show details of the lead screws. On the right, I have fitted a nyloc nut to the top of the lead screw to make it easier to manually adjust the corners of the the bed when getting it level, with the outer case in place.

On the grid

I’ve also made a grid from 10 x 3mm bar on edge to further support the aluminium honeycomb. The pictures below show how the bar is attached to the outer frame using pieces of 12 x 12mm bar notched to locate the ends of the bars. Top left: I used the band saw to cut the slots in the end of a long piece of 12×12 bar so that I could use the cross-cut guide, then cut the pieces off the bar to the correct length. I finished the slots off with a small file, which is, luckily, 3.2 mm (1/8 inch) at its thickest point, until the file just passed through the slot. Some WD40 on the file stops it sticking too much. These pieces were drilled to 2.5mm ready to be tapped to M3 so they can be screwed to the outer frame. The long bar and the two shorter cross bars are half jointed together.

Laser cutter bed grid details

I assembled the grid on the top of the frame and cut pieces of wood to jam the parts in place (top right and bottom left, above). I used mini clamps the fix one side securely while I drilled through the other hole into the frame members. Finally, I took the grid away and enlarged the holes in the frame to 3mm and countersunk (countersinked, countersank? – compare “flied out” in baseball parlance, discussed by Steven Pinker) them on the top. I tapped the grid parts to M3 and screwed the assembly together (bottom right).

I already have the honeycomb. It comes in a “compressed” form which needs to be “expanded” so I don’t yet know whether the spacing of the grid will be close enough to support it satisfactorily. Time will tell!

Driving the motors

Next, I bread boarded the circuit to drive the stepper motors using the usual Pololu drivers. I originally used an Uno to produce the step pulses, the enable, direction inputs to the driver and coordinate inputs from the various controls and limit switches. However, as far as I can see, all I need is a pulse generator and some logic gates / inverters so I have gone with the circuit shown below.

Laser cutter bed drive circuit

How the circuit works

The switch, bottom left, marked “up / down” is a centre off change over switch. When the switch is off, the inputs to the top 7400 NAND gate are high (courtesy of the two 1k resistors). The second NAND has its inputs connected together to give an inverter, so the output to the Enable on the driver is high and the motor is disconnected. At the same time the low output of the first NAND is linked to the 555 timer (which is wired to produce equal mark/space pulses) reset pin, thus preventing pulses from being generated.

When the switch is operated, the inputs to the NAND are unequal and the output to the driver’s enable pin is driven low, the 555 reset pin goes high producing pulses and the motor runs. One of the poles of the switch is linked to the direction pin on the driver (via the NANDs wired as buffers) so the motor direction changes according to the switch position. Limit switches prevent the bed being moved into the wrong position etc.

The speed of the motor can be set by adjusting the variable resistor on the 555 circuit. The link to the reset pin on the 555 also connects to a ZTX450 transistor which will be connected to the previously described relay board to trip the supplies to the gantry, laser etc. when the bed is being raised or lowered.

Breadboard, laser cutter bed motor control

The picture above shows the final circuit breadboard. It’s the usual mess!

PCB design – not my best work!

laser cutter bed circuit board

The layout for the bed raising motors is shown above. It is not amongst my best work! It contains masses of wired links. Maybe I should try auto routing? (I made one or two alterations in the final version, cutting the link to half stepping and allowing other modes to be set. I also incorporated the fixed resistor – 33k in series with the variable resistor – on the pcb.)

Laser cutter bed circuit

Above, top left: The pcb before drilling. Above, top right: Testing the square wave generating section. I monitored the waveform on my BitScope oscilloscope running on a Raspberry Pi (above, bottom right). Above, bottom left: The pcb with the Pololu circuit boards plugged in.

Expanding the honeycomb

Expanding the honeycomb

At this stage I tried expanding the honeycomb. I had read the instructions some time previously and thought I could remember what to do. So I trimmed the length of the unexpanded honeycomb with a fine saw. Next, I placed the honeycomb at the far side of my bench and knocked some panel pins through the end cells (see pictures above). Then I knocked panel pins through a strip of wood so the points stuck through the other side. I engaged these with the cells in the honeycomb and pulled gently to expand it. At this point I realised that with the expansion in one direction comes much more contraction in the width of the honeycomb than I had bargained for! I had trimmed off about 25mm more than I should have.

I cut the parts of the honeycomb which had been pulled by the nails as they were a bit uneven. I used a large pair of scissors which produce a surprisingly neat cut.

I tried the honeycomb on the frame and found that the support grid spacings seem suitable to adequately support the honeycomb (unless I want to lase a small piece of something extremely dense!) Of course, one end is not supported because the honeycomb is too short. Rather than modify the support frame, I will probably buy some more honeycomb. Bother!

Next time…

Next time, I will mark out the positions of the panel pins so that the spacing is even (rather than just judging by eye) and use the drill press to make pilot holes for the pins to ensure they are vertcal. This will make it easier to ensure that the honeycomb is expanded evenly.

A strip of aluminium lightly clamping the honeycomb on two opposite sides would probably be good thing too.

Completion of the trunking

Laser cutter trunking

Above, you can see the trunking from the gantry to the fixed electronics etc. on the frame. The plate on which the trunking runs can also be seen.

Now I need some plastic conduit to tidy up and protect the rest of all those wires. (Or perhaps it should be metal conduit, grounded to shield all those wires. This brings me to the frame itself. It should probably be grounded but the extrusions are anodised which is an insulating layer. So, perhaps, wires should be attached to the various parts with the anodising scraped off where this contact is made and taken to ground at one point. I’ll leave this till later!)


I read that copper mirrors are good for infra red beams and that they can be made in a home workshop, so, here goes!

I purchased a 25mm diameter bar of copper and sliced off three 11mm sections on my band saw. I rotated the bar (against the motion of the saw – don’t let the saw drag the bar round – this makes a big mess) to try and get as accurate a cut as possible. During this process, I managed to jam the blade on numerous occasions which results in the blade coming off the wheels followed by fiddling to open the case to replace it accompanied by some cursing!

Then I put the pieces in the three-jaw chuck on my mini lathe and cleaned up the cut leaving the pieces about 10mm thick (picture below, top left).

I made a 3D printed clamp with six index holes (at 60 degree intervals) to enable me to drill three holes (separated by 120 degrees) which would then be threaded to take the screws which spring load the mirror onto its bracket (picture below, top right and bottom left).

Having drilled the holes, I tapped them out to M3 with the mirror blank in a drill vice and the taps (starter, number two and bottom) in a drill stand chuck (with the drive disconnected). The helps ensure the holes remain at right angles to the future mirror surface.

I cut another (thinner slice) of the copper bar, fitted it in the clamp and drilled six holes to use as a guide to drilling the holes in the mirror bracket (picture below, bottom right).

Laser cutter - making the mirrors 1

Three M3 cap screws spring-load the mirror while another three bear on the back of the mirror to adjust the aim. To ensure the spring-loaded screws do not drag on the aluminium bracket as they pass through, I included a section of thin-walled brass tube (3mm internal, 4mm external diameter) of the type you can get at model shops. I cut this with a fine toothed piercing saw with a piece of 3mm aluminium rod inside to help to reduce the saw catching when it is half way though.

The 4mm holes in the bracket where the tubes pass through need to be countersunk on both sides to allow the tubes to angle slightly as the mirror is adjusted. A bit of careful filing with a 3mm needle file is also needed to take off the sharp transition between the hole and the countersink.

I also ground the tips of the three adjusting screws into a rounded point which I finished off on a stiff polishing wheel loaded with brown cutting compound (“Tripoli” compound) – see picture below, bottom left and right.

Then I tried polishing the mirror surface. I took a piece of 800 grade wet and dry carbide paper, placed it on the flattest surface I could find (my cast iron saw table) and rubbed the surface in circles and back and forth regularly moving the disc in my hand until the lathe circles were removed and the abrasion of the surface seemed even. I tried to take care that the surface under the paper was clean and free of grit as was the paper itself.

Following this, I polished the surface with Solvol Autosol chrome polish on a cotton cloth, stretched out on a flat surface. After a few minutes, it seemed pretty shiny. I tried using both cerium oxide and tin oxide as a slurry (I had these for polishing semi-precious stones from my jewellery making days) but they didn’t make any noticeable difference (they are used normally for polishing hard materials so, perhaps, no surprise). I should try jeweller’s rouge (ferric oxide), maybe.

There are still scratches visible on the surface. I put this down to the abrasive paper not being free of grit. I will carefully wash a new piece of paper before trying again. (I assume scratches will scatter and generally mess up the beam) – see picture below, top left, unpolished, top right, one polished, one not.

Laser cutter - making the mirrors 2

Getting parts in the right position

The next step was to get some idea of where the mirrors would need to be positioned. I made a plate on which the left hand gantry mirror would be fixed and a temporary plate the other end of the gantry. I set up two of the mirror brackets on each of the plates so that each was the same height above and parallel to the gantry (1 & 2 on the picture below). I shone my (very cheap) laser level through each of the centre holes of the brackets (see picture). The plate, 3, is where the third mirror and focussing lens will be attached. I held a ruler at 90 degrees to the plate and measured off where the laser dot struck. This measurement gives the distance of the centre of the mirror and the lens from the mounting plate. The next stage was to make a housing for the mirror and the lens.

Using a laser level to esiablish the position of components

The housing for the third mirror and lens

Constructing laser cutter lens bracket

Using the distance determined above, I made a housing for the lens our of a piece of 6mm aluminium angle (see pictures above). I marked the position of the hole for the lens and then mounted the angle in the 4-jaw chuck on my Mini Lathe with the mark at centre height. I included some packing to clear the back of the chuck so it didn’t get damaged when I made the hole. I used a step drill in the tail stock chuck to make as big a hole as possible without hitting the 4-jaw chuck. Then I used a boring tool to enlarge the hole to 23 mm diameter, allowing 1 mm all round to support my 25 mm ZnSe lens (which I trust is suitable!)

The lens has a focal length of 38 mm which I understand will be a compromise between cutting fine detail (smaller focal length) and depth of cut (longer focal length). I was after a 50 mm lens but I could not get hold of one at the time at a reasonable cost. (I did order a 50 mm lens but there was nothing in the box when it arrived!)

Then I enlarged the hole to 25 mm to a depth of 3 mm so the lens would fit in. I also made clamp to hold the lens in place with a recess for a suitable “o” ring. You can see that in the picture below.

Completion of the mirror / lens unit

Laser cutter mirror and lens assembly

n the picture (above) you can also see lever adjustment for the mirror, a piece of 50 x 50 mm tube cut out to shroud the mirror and lens and a (grey) 3D-printed moulding to retain the tube. Finally, a probe to set the table height (picture below) and an adjustable nozzle to direct the air blast.

laser cutter z-axis probe

Checking the mirror alignment

Laser cutter - checking alignment

With the laser level still in position to shine through the centre of the second mirror mount and parallel to the gantry (see picture above), I adjusted the lens mirror up and down (with the lever) and adjusted the tilt to get the beam hitting the centre of the mirror and passing through the centre of the lens mount. You can see a red dot on the bench.

Mounts for first and second mirrors

Laser cutter - mirrors one and two

The mirror on the left in the picture above, is the first the laser beam will encounter and will fit in the cradle which will hold the laser (this is described below). The stack of various thicknesses of materials brings the centre of the mirror up to the axis of the laser. The mirror on the right is the second and is mounted on the end of the gantry. The large holes are to allow it to fit over various bits and pieces belonging to the drive belt etc. You can see slots allowing the mirror’s position to be adjusted.

Laser cutter - mirror on gantry

Above: the mirror mounted on the gantry with a cover which I hope will reduce stray reflections while initial adjustments are made and the laser is not in its final box. I will be able to detect misalignment, as this bit of 3D printing will immediately melt (or worse)!

Cradle for the laser

I’ve built a cradle to hold the laser from four pieces of 20 x 20 extrusion joined with pieces of 3 mm aluminium plate. At 1.2 m long, it looks rather large compared to what I have already built. It could have been a bit shorter but I bought the extrusions before I had the laser. I could shorten them but they come from the supplier so neatly cut and all exactly the same size so I am loath do any cutting! (See pictures below.) I am now intending to fit the laser to the rear of the cutter framework at an angle which will save some space. On the plus side, I understand setting the laser at an angle is necessary to prevent air bubbles getting stuck in the glassware. On the other side, however, it will make it more difficult to get the beam from the first mirror, which is in the cradle, lined up as the whole laser, cradle and all will need to be adjusted.

Laser cutter - laser cradle test
Laser cutter - clamps for CO2 laser

The top pictures show how I have made some adapters to fit the laser level in the cradle and have the beam firing along the centre line like the CO2 laser. That way I hope to do some more preliminary optical alignment.

The picture shows the red dot on my hand. I don’t think I will be testing the real laser like that!

The lower picture shows the details of the clamp for the laser. It seems over complicated but it does work quite nicely. It so happened that I had a piece of silicon tube with an internal diameter of 50 mm which matches the diameter if the laser. I cut sections and split them so they could be put on the laser. I cut 3 mm plates with suitably sized holes and then cut them in half and screwed the parts together with sections of aluminium rod drilled and tapped to M5. The rods were also cross drilled to enable the two halves of the clamps to be screwed together and so that the clamps could be screwed to plates which could be in turn, screwed to the extrusions.

Fitting the cradle to the machine

Laser cutter - laser cradle fitting

The picture above shows the cradle fixed in place at a jaunty angle! I’ve used three triangular plates and a spacer to clear the guide wheels for the bed. I also have a couple of braces fitted with spherical bearings to cope with the funny angles. These bits and pieces are shown in the picture below.

Laser cutter- laser cradle attchment

The T-nut with the spacer fits on the main machine frame while the other two fit on the cradle. By sliding and pivoting the attachment points the output from the first mirror should be able to be lined up. The spherical bearings are screwed into tapped holes in the ends of 12 mm aluminium bars (see picture below).

laser cutter cradle support

Inital laser tube test

The laser is 1m long, and rated at 60W. I am sure about the length and the fact that it came from China but the veracity of other characteristics remains to be seen! It came from Vevor (on Amazon) and is labelled HK Laser. It cost about £115 and shortly after I had purchased it, this model was no longer available. Make of that what you will! The same was true of the power supply (also from Vevor) which is labelled MYTG60W. This cost £82.

I fitted the laser tube into the cradle and removed the first mirror. I cut an instant coffee can in half, lined it with fire-clay and set it up as a target (“X” in the picture below). I set up a small submersible pump in a bucket and connected it up to the tube. I made up some connections to the power supply including a push-button to fire the laser and a potentiometer to adjust the power (0 – 5v input) and a meter (0 – 40 mA) in the negative supply lead to the laser.

Laser cutter - testing the laser.

Safety first!

Having donned laser specs, a polycarbonate head shield, gloves etc. I briefly (and with some trepidation) fired the laser at 10mA blew a hole through a piece of paper and noticed a satisfying pink glow in the tube. I increased the current to 20mA (which the Internet seems to agree is the maximum for a 60W laser) and fired for about thirty seconds. Having removed the plug from the mains, I dismantled the coffee can and noticed how the beam had fused the fire-clay (“Y” in the picture above).

So my fears that either the laser or the power supply or both would be duds were unfounded. Of course, it’s early days!

More testing

Laser test on thin plywood

For the purpose of testing in relative safety, I protected the optical path between the laser / gantry and the gantry / lens unit with pieces of metal tube (picture above). I fired the laser into a piece of thin plywood set up roughly 38mm from the lens (it’s a 38mm focal length lens) for as short a time as I could physically push and release the button on my temporary laser-handling panel. I was rewarded by a small hole, roughly 0.2mm in diameter (picture below, bottom right). This is perhaps, a bit larger than it ought to be but with further adjustment it will, hopefully, be reduced.

Some details…

laser cutter glasses & other parts

The pictures above show some more details. Top left: The connectors I have made for the laser. Basically, 6mm brass rod, drilled and tapped M3 down the axis and a 2mm hole across for the laser’s pins. The cable is soldered into the rear hole and the joint is protected with shrink tubing. A piece of red silicon rubber tube further protects the positive connection.

Top right: The marking on my laser specs. Radiation from a CO2 laser is at a wavelength of 10600nm so I trust these will keep me safe!

Bottom left: This is an example of 3D-printed buttons I have inserted into various places in the optical pathway to find out where the beam is. In this case, it’s fairly central which is good!

Test circuit details

The circuit below shows the slightly more complex circuit for test firing the laser. I used an Adafruit Feather M0 I had in my bits box to fire the laser once before needing to reset (for safety purposes). The length of the pulse is determined by the software (below). The circuit diagram shows the use of a pot to set the pulse length although, at the time, I didn’t implement this in the software.

Accidental laser triggering

I need to reassure myself that pin 10 does not go high during power up or reset as that would briefly fire the laser. As I understand it, on startup, the input/output pins are in a high impedance state. Although in this state, the voltage on the pin can in theory float above ground it would not be able to provide enough current to turn on the ZTX450 which is a bipolar not FET transistor. A 1k resistor between pin 10 and ground might provide additional insurance against anything untoward at startup or reset.

It would also be a good idea to put an additional push button in series with the “manual fire” button to reduce the laser being accidentally fired.

Laser cutter - circuit to test fire

Software for Feather

// pulses laser once
// 25.1.21

int x = 500;

void setup() {

pinMode(12, INPUT_PULLUP);  // pushbutton fire for x milli sec
pinMode(10, OUTPUT);        // fire psu
pinMode(5, OUTPUT);         // ready to fire led - amber
pinMode(6, OUTPUT);         // finished firing led - green

void loop() {
  digitalWrite(5, HIGH);    // amber on
  while( digitalRead(12) == HIGH){      // wait for push button    
  digitalWrite(10, HIGH);     // fire psu
  digitalWrite(10, LOW);    // psu off
  digitalWrite(6, HIGH);   // green on
  digitalWrite(5, LOW);  // amber off
  while(1) {            // loop forever (until reset!)

Bit of a lash up?

Maybe I should take more notice of the notice on the high voltage power supply! (Picture below, left.)

Laser test circuit.

The panel is 3D-printed. It only took seven hours to print! The laser cutter will take a minute? (Even cutting it out by hand would only take an hour or so.) I could have made a much neater job of it but at this stage it will do. ‘Tis enough, ’twill serve, to quote the Bard.

Even worse!

Laser management circuit

Above, I’ve taken the Feather M0 and the other bits of circuit from the temporary (green) 3d-printed panel and reassembled it all on a piece of strip board (Veroboard). I thought I’d save time and effort making a pcb. It turned out that it took longer to pack everything on the strip board, making up the positioning of the components as I went along. A pcb needs to be designed before manufacture wheras there is a strong temptation to design strip board circuits as you go along. To make final assembly easier (I hope) I have provided headers to plug in all the front panel stuff. Also, I used a piece of strip board which was probably smaller than ideal. All this resulted in a mess of inter connections and a very unsatisfactory looking piece kit all round! However, it works.

I added a 1.2k resistor between pin 12 (the one shot button) and the 3.3v supply rather than relying on the internal pull-up resistor. The internal pull-up is a very high value and I found touching the switch terminals could trigger the Feather. Although once behind the front panel, I wouldn’t be able to touch the terminals, I wouldn’t want to take any chances that the laser might be accidentally triggered.

I also added a bit of circuitry to turn on a blue warning LED when the laser is firing. I probably could have connected the LED between the low laser fire terminal (“L”) and the laser 5v supply but I opted to use a couple of transistors picking up the state of the L terminal and getting their power (and thus the power for the blue LED) from the 5v supply to the Feather (which derives from the hefty low voltage supply for the whole system (described later).

Next, I have to actually do some thinking!

Now I’ve sort of got the hang of most of the systems which go to make up the laser cutter, I can move on to a final design. (I say final, I haven’t really had any formal design at all so far, just a rather nebulous idea of what my laser cutter should be like. Perhaps my subconscious has been working on it a bit more thoroughly! I’m a firm believer in letting the subconscious get on with it! Much less effort required.)

Eventually, I’m going to put everything in a box: 1) to protect from the laser beam, direct or scatter etc. and 2) to contain fumes (or even fire) so that they can be reasonably efficiently extracted. My idea is to mount the existing works on a big enough base and set this on a stand, essentially open with a shelf on which the water reservoir, pump and chiller, air pump and extractor etc. can be mounted.

I had toyed with the idea of welding up a frame from 25mm square section tube but to make it a bit easier, I have decided to use a timber-based material for the base and fit 25mm tubular steel legs and bracing using a Key Klamp type joint system.

I initially intended to make up the base from 25mm thick marine ply but local supply seemed to be problematic so I settled on a double thickness of 18mm moisture resistant MDF Lite. I thought of gluing the boards together but in the end decided to use lots of screws in the interests of demount-ability. I think the main thing it to keep the extrusion frame as stable as possible and 36mm of MDF Lite should do that. I’ll cut a 100mm hole in the base to connect up to fume extraction. Perhaps the base should be covered in, say, 22 gauge aluminium sheet for fireproofing although that would be reflective.

Making the base for it

The pictures below show the progress on the laser cutter bench/base. The bottom level consists of a sheet of 18mm MDF Lite and will house the water reservoir, pump and chiller/radiator, the air pump and the fume extractor fan.

Laser cutter bench in progress

The top (which is the bottom of the laser cutter itself, of course) is made from two pieces of 18mm MDF as mentioned above. The top piece is 6mm all round smaller leaving a rebate to locate the laser cutter case. 50x25x3mm aluminium angle will complete this rebate to form a slot and (hopefully) help to prevent the top from sagging. However, it will probably need some further stiffening underneath. I don’t want the MDF to distort (changes in humidity etc. and distort the laser cutter frame. I haven’t decided whether to bolt the frame down to the MDF or let it “float” on some type of anti-vibration mounting because of these worries!

The overall size of the top is 1220 X 760mm and the whole thing sits on some 100mm castors.

Laser cutter - test fitting on base

Above: The laser unit sits on its base for the first time! I’m checking to see whether the base is big enough. It is, with room to spare – perhaps I could have made it a bit smaller. Better too big than too small, though (up to a point!) I’m also working out where the 100mm hole for the extractor should be i.e. below he centre of the bed (which is not the centre of the base).

Having worked out where it should be, I cut the hole for the fume extraction with a jig saw fitted with a small trammel bar. I made a bit of a mess of this! I did some tests and everything seemed OK but on the actual job, the blade started to bend and I ended up with a conical hole and a whole lot of rasping, sanding and cursing (50mm radius at this thickness is obviously pushing it). I knew I should have cut the holes in the two layers of MDF separately but I was too lazy! A stitch in time saves nine or something like that!

After all that extra work, I rounded off the top with a router.

laser cutter base with aluminium edging

Above: I have screwed the two pieces of MDF Lite together with about 24 screws (5mm) and screwed on the 2x1x1/8” aluminium angle round the edge with a lot of 4mm self-tapping screws. The top now shows only a small amount of flex, so further reinforcement may not be required.

(Yet more) thoughts.

With the unit on the base (now on its castors, I am able to easily reach the back where the laser is for the first time), I began thinking of an easier way to adjust the laser’s position. Pulling and pushing the triangular brackets up and down the extrusions of the cradle and the frame against the effects of gravity was nowhere as easy as I had thought.

With my new idea, I can allow the rear of the cradle to pivot at the level of the base and jack the front end up. That way, by sliding the back end pivot back and forth and jacking the front end up and down, I can (relatively) easily get the output from the first mirror to point in the right direction.

Once in the right place, I can secure the cradle to the main frame with the triangular plates and the spherical jointed braces (that I described earlier) and take the jack away.


Laser cutter laser cradle rear pivot adjustment

The pictures above show the arrangement of the cradle rear, adjustable pivot. Large movements can be accommodated by sliding the assembly along the extrusion while fine adjustment can be had by adjusting the screws against the retaining springs. As usual, a simple idea seems to get a bit complicated hut, hopefully, it will work!

Laser cutter, laser cradle front adjustment.

The pictures above show the arrangement to jack up the front of the laser. The brass M8 threaded rod is socketed into one of the 12 x 12mm bars and threaded into the other. The adjustment knob comes from an old lawn mower!


Now I’ve just screwed the frame to the top of the base with the 4mm self-tappers. The use of glorified wood screws in this sort of apparatus offends me (should be nuts and bolts) but once you start using not-so-glorified wood (i.e. MDF) as a base, these things probably become inevitable! (Perhaps a nice carbon fibre honeycomb panel in future lives?)

It strikes me, that at some point I will have to get the top of the frame as flat as possible (although I am guessing that with a laser cutter this is not so important as in a CNC milling machine). I am going to use my optical level ( a bit like a theodolite) which is good for getting building foundations level. It might be accurate to half a millimetre or so but unless my workshop floor is very flat (unlikely) moving the thing round on its castors will mess things up.

Wiring it up – at least making a start!

Now, I’m starting getting the electronics and the wiring sorted out. This is more designing it as you go along!

Laser cutter - electronics panel

The picture above shows a panel, 300x300x6mm, made of a reinforced plastic similar to Tufnol. This very strong material can be machined drilled and tapped etc. and has a pleasing (to me, anyway) retro aesthetic. A similar material, Paxolin, was much used in the electronics of the past, for example for terminal boards, valve (tube) holder bases etc.

I will be screwing the various circuit boards which make up the electronics onto this panel which will also be the back of a box, the front of which will be the control panel.

Laser cutter: circuit board brackets

Above: The rather hefty brackets which support the electronics panel and the (also hefty) old fashioned transformer which supplies the power for the steppers etc. (These brackets were manufactured by Picador, a long lost British firm which made a great range of cheap tools and engineering component of great use to amateurs like myself – I bought these over fifty years ago!)

I found the transformer in a skip a very long time ago along with two others which have since been re-cycled as scrap. This transformer’s secondary is rated at 22 Amps at about 14 volts. There is no stabilisation so the rectified DC voltage with no load will be over 20 volts. This does not seem to matter as it is the current which counts rather than the voltage with stepper motors (rumour has it). Time will tell! It works fine with the motors for the bed but as yet is untested with the X and Y motors.

There is a 5 volt, 1.5 Amp 7805 regulator for the digital electronics.

Lots of holes – mostly in the right place!

Laser electronics board, stage 1

The picture above shows the panel with holes (2.5mm) for the PCBs and holes round the edge tapped to M3 to secure the case sides (which have not been made yet). There are also four 6mm holes to bolt the panel to the quite hefty aluminium frames which support the panel and will be bolted to the base in the fullness of time.

There is also a grid of holes for a couple of PCBs that I have yet to design!

Laser wiring up progress

The picture above shows progress with wiring up. It looks a bit of a mess but, hopefully, it will all come together. Wires come from the eight corners of the machine and must be secured so they don’t flap around and get caught up in the mechanics. Where possible, I am fitting pieces of plastic conduit (22mm in the main) secured by ‘p’ clips to the extrusions. These are big enough to easily push the wires and their plugs through.

Diversion – Water pump parts

laser water pump parts

Above are some of the parts for the water cooling system. I am using a small submersible pump (water feature type), in a 6.5 litre plastic box whose colour, as luck would have it, matches the pump! I have fitted a float switch to warn of low water level (probably incorporates a magnet in the float and a magnetic reed switch). I’ve had this knocking about for a long time and can’t quite remember where I got it. Probably from a job lot of electrical parts.

There is also a flow meter which incorporates a little magnetic “fan” which acts on a Hall effect switch (I think) as the water rotates it (Ebay special).


Laser cutter water flow sensor connector

Above: I’ve made a hose connector in aluminium. The cylinder part is 15mm diameter so a standard plumbing compression fitting can be used.

Cool it! (I hope)

Laser cooling radiator and fan

The water will be cooled by a radiator, see picture above (actually a car oil cooler) and a fan. A duct will be needed to optimise the coupling of the fan to the radiator. There will also be a temperature sensor. All the sensors will feed into an Arduino programmed to cut the laser if things go wrong. It will also provide a readout on an LCD screen.

I’ve no idea whether the reservoir is sufficiently large, whether the pump shifts enough water and whether the cooling capacity of the fan will be adequate (this 18 watt, 150mm fan seems a bit weedy). Again, time will tell!

Heat sensor parts

Laser cutter cooling water heat sensor.

Shown above are the parts for the heat sensor. A thermocouple in the water itself would be best but they are quite expensive and need an amplifier as well. I had a Sparkfun TMP102 breakout pcb which has an I2C output that is very convenient to use with an Arduino etc. This can’t go in the water, of course, but must be in contact with a tube through which the water passes. This introduces a delay in response to temperature changes but I don’t think this will be a problem as I don’t anticipate any very rapid changes in temperature (I may be wrong here, of course – it’s been known!)

To make the sensor, I turned a double ended hose connector from aluminium with the centre left at 19mm diameter. I cut a flat on the centre section with a band saw and drilled and tapped two holes for the TMP102. The idea is to rest the sensor chip on the aluminium. I cut a bevel on the flat to avoid the resistors on the pcb touching the aluminium. I found a very thin piece of Tufnol to space the pcb so that the TMP102 chip rested squarely on the aluminium. I’ll probably use a thin smear of silicon heat conducting paste to ensure good thermal contact and fill the gap between the pcb and the “bevel” with Araldite or silicon filler when I am confident all is well.

Monitoring the cooling system

Laser cutter, circuit to monitor cooling water

The circuit

I am using another Arduino Uno to monitor the cooling system. The circuit is shown in the picture above, The idea is that when the Arduino starts up, in the setup part of the sketch, the two pots can be used to set the limiting values of temperature and flow. Pressing the buttons stores the values. In the main loop the temperature, flow rate and the state of the water level switch are constantly checked. Any fault results in the high voltage supply to the laser being cut off via the ILD74 opto isolator.

State of system shown on LCD screen

The Arduino is also connected to a 16×4 LCD screen by I2C (not shown in the diagram) so that the values selected by the pots, the current water temperature, flow rate etc. can be seen.

laser water cooling pcb

In the pictures above, you can see the bog standard LCD unit with an Adafruit add on which converts it to I2C and provides a handy library for programming purposes.

Arduino sketch

The Arduino sketch for this application is listed below. It includes a number of features provided with the Sparkfun TMP102 library which I have left in but which may not be strictly necessary here.

// J Rogers
// Laser cutter cooling water system
// 19.4.21
// Fault condition causes loop forever - requires Arduino reset to restore HV (if fault cleared)
// LOW on pin 6 causes (via opto coupler) water pin on HV supply to be high - cuts HV.
// program checks temp and flow and level before initiating HV supply
// (see Adafruit & Spartfun documentation for LCD & TMP102 operation, libraries etc.)
#include <Wire.h> 
#include <SparkFunTMP102.h> 
#include <Adafruit_LiquidCrystal.h>
int flow = 0;
int maxTemp = 25;
int minFlow = 35;
unsigned long flowTime;
bool wTemp = false;
bool wFlow = false;
bool wLevel = false;
Adafruit_LiquidCrystal lcd(0);
TMP102 sensor0;
const int ALERT_PIN = A3;
void setup() {
Serial.begin(115200);     // serial only used for testing - could be cut  
Wire.begin(); //Join I2C Bus
// set up the LCD's number of rows and columns: 
lcd.begin(16, 4);
pinMode(ALERT_PIN,INPUT);  // Declare alertPin as an input
pinMode(3, INPUT_PULLUP);  // water level switch
pinMode(4, INPUT_PULLUP);  // confirm max water temp
pinMode(5, INPUT_PULLUP);  // confirm min flow rate
pinMode(6, OUTPUT);        // cut HV on fault condition, LOW produces HIGH at HV control
// via the opto coupler
pinMode(10, INPUT);        // input from flow sensor
digitalWrite(6, LOW);  // start off with HV cut
//Return true on success or false on failure to communicate
Serial.println("Cannot connect to TMP102.");
Serial.println("Is the board connected? Is the device ID correct?");
Serial.println("Connected to TMP102!");
// Initialize sensor0 settings
// These settings are saved in the sensor, even if it loses power  
// set the number of consecutive faults before triggering alarm.
// 0-3: 0:1 fault, 1:2 faults, 2:4 faults, 3:6 faults.
sensor0.setFault(0);  // Trigger alarm immediately
// set the polarity of the Alarm. (0:Active LOW, 1:Active HIGH).
sensor0.setAlertPolarity(1); // Active HIGH
// set the sensor in Comparator Mode (0) or Interrupt Mode (1).
sensor0.setAlertMode(0); // Comparator Mode.
// set the Conversion Rate (how quickly the sensor gets a new reading)
//0-3: 0:0.25Hz, 1:1Hz, 2:4Hz, 3:8Hz
//set Extended Mode.
//0:12-bit Temperature(-55C to +128C) 1:13-bit Temperature(-55C to +150C)
// set max temp and min flow
while( digitalRead(4)){
maxTemp = map(analogRead(A0), 0, 1023, 20, 50);
lcd.print("Set max temp    ");
while( digitalRead(5)){
minFlow = map(analogRead(A1), 0, 1023, 20, 50);
lcd.print("Set min flow    ");
//set T_HIGH, the upper limit to trigger the alert on
sensor0.setHighTempC(maxTemp); // set T_HIGH in C
//set T_LOW, the lower limit to shut turn off the alert
sensor0.setLowTempC(maxTemp - 1); // set T_LOW in C
void loop(){
float temperature;
boolean alertPinState, alertRegisterState;
// Turn sensor on to start temperature measurement.
// Current consumtion typically ~10uA.
// read temperature data
temperature = sensor0.readTempC();
// Check for Alert
alertPinState = digitalRead(ALERT_PIN); // read the Alert from pin
alertRegisterState = sensor0.alert();   // read the Alert from register
// Place sensor in sleep mode to save power.
// Current consumtion typically <0.5uA.
// Print temperature and alarm state
Serial.print("Temperature: ");
Serial.print("\tAlert Pin: ");
//Serial.print("\tAlert Register: ");
// check flow rate
// count number of pulses from sensor in 5 secs
flow = 0;
flowTime = millis()+ 5000;
while(millis() < flowTime){
if(digitalRead(10) && millis() < flowTime){
// wait for pulse to end
while(digitalRead(10) && millis() < flowTime){      
Serial.print("Flow = ");  
lcd.print("Temp  ");
lcd.print("Flow  ");
lcd.print("Level ");
// Check temperature not over limit
lcd.print("FAULT: temp");
digitalWrite(6, LOW);  // cut high voltage
// loop forever
wTemp = true;
//Flow too low...
if(flow < minFlow){
lcd.print("FAULT: flow");
digitalWrite(6, LOW);    // cut high voltage
// loop forever
wFlow = true;
if(digitalRead(3) == HIGH){
lcd.print("Level ");
lcd.print("FAULT: level");
digitalWrite(6, LOW);    // cut high voltage
// loop forever
wLevel = true;
if(wTemp && wFlow && wLevel){
digitalWrite(6, HIGH);  // All ok so initiate HV supply
lcd.print("SYSTEM OK");    


I have designed a cross between Veroboard (strip board) and an Arduino proto shield to connect up the Arduino to the outside world. (Although the pins are standard 0.1 inches apart, the groups are displaced by multiples of 0.5 inch so straight Veroboard will not do.) With surprisingly large number of wired links between tracks I seemed to need, it would have been better to have designed a pcb dedicated to this application but I suppose I could use the design on some other project.

A problem with this pcb is that it needs header pins on both sides, so some will have to be soldered on the track side. This is a bit of a pain as the pins have to be pushed through the plastic separator so that whole pin is sticking out of the bottom (of the separator). They can then be inserted in the pcb, from the track side, prevented from completely passing through (by a piece of tape, perhaps), soldered and the separator pushed back down. It’s all a bit of a mess, I’m afraid! In the past, I have made two-sided pcbs but the fiddle is mostly not worth the bother for my simple stuff.

Fitting the RPi in position

Just now I am fitting up the Raspberry Pi computer (most of it, physically, is the monitor and keyboard, of course) onto the unit. It will sit on a Kee Klamp type pole clamped to one of the uprights of the laser cutter base/trolley. I’m not sure about the aesthetics (will look a bit agricultural?) but it should be adjustable and reasonably ergonomic (I hope). I need the Pi in position so I can check that the gantry will still move with all the extra weight of all the bits and bobs I have added since my drawing tests previously described.

Laser cutter Raspberry Pi fitted

With this project, I have been introduced to the tube and clamp system for the first time. The type I have used (there are several other very similar types, I think, see here ) is Interclamp from These are certainly robust but the hole for the fittings is rather large for the specified tube and this can lead to a lack of precision which is noticible in small structures in particular. The add-on “T”s are also a bit wobbly. The lack of precision results from the fact that the holes for the tube are “as cast” and not machined (I guess for cheapness). Just saying. I remember working with some aluminium scaffolding towers in a past life (restoring the Royal Pavilion, Brighton). The fittings were beautifully made and, I suppose, I was expecting that with the Interclamps.

I’ve made a simple support for the keyboard using a piece of angle and two pieces of ½ x ½ inch aluminium bar. The support fits in between the feet which locate it. I like this small keyboard, especially for this application. It features a roller ball on the right and two “mouse” buttons on the left. You can pick it up and operate the ball and the buttons with your thumbs while holding it. In my messy workshop, a mouse would be impractical and the Pi “official” touchscreen is too small for any detailed work.

I have fitted the keyboard support to the monitor pole with U-bolts for the time being. Eventually, when I send in my next order to the Metal Store, I’ll get some fittings that will allow the keyboard to swing round the pole more easily, like the monitor.

In the meantime, I can go ahead and test my gantry movements. First, however, I will have to change config.h in the GRBL setup not to move z to clear the work space and recompile GRBL on the Arduino.


But first, a catchup, in picture form, showing construction progress so far.

Laser cutter, progress on construction

Key to the above…

  1. Compressed air tube.
  2. Lens unit mirror.
  3. Arduino – monitors water flow, temperature, tank level etc.
  4. Grbl Arduino and CNC Shield.
  5. Pcb – monitors limit switches, trips high voltage power supply etc.
  6. Pcb – drives bed stepper motors.
  7. Air compressor – not yet positioned
  8. Cooling water tank.
  9. Laser cradle adjustment, horizontal.
  10. Laser cradle brace (one of two).
  11. Laser cradle adjustment, angle.
  12. Section of cable conduit.
  13. Water cooling radiator and fan – not yet positioned.
  14. Cooling water tank.
  15. Target for testing laser (Aldi coffee can).

Interclamp fittings for monitor & keyboard

Laser cutter, RPi keyboard and monitor fittings

The picture above shows the Interclamp fittings I used to replace the U-bolts I mentioned earlier to hold the keyboard (these are the names of the fittings as listed in the on-line catalogue).

Also to be seen are the sections of bicycle inner tube fitted over the ½ x ½ inch “prongs” on which the keyboard sits which provide grip and a bit of give.

Making the control panel

Next, I’ll be making the front panel to the electronics unit which needs to accommodate the various switches, potentiometers, the LCD screen and the laser current meter. As is often the case with my projects (which are usually designed as I go along), I seem to find that I haven’t got enough space to make the placement of these items straightforward! One of the causes is the number of wires connecting everything up. I’ve grouped these together fairly logically and separated them with spiral binding which adds considerably to the bulk. However, fingers crossed, I can get it all in!

The panel itself locates in the slot round the edge of the base board and is fixed at the top with a couple of pieces of M5 studding. Ultimately, the edge of the panel will locate with the case by means of some sort of H section aluminium extrusion. (Exactly how I will make the case and in what material is still up for grabs!)

Stress, stress, stress!

I seem to have spent more time worrying about positioning the controls on the front panel than about any other part of the design. I probably should have used CAD (and a laser cutter to cut out the holes in the panel – if only I had one of those!) However, it seemed easier to cut a trial panel out of hardboard and test it out. Another of the problems is the available depth. I have to make sure the pots, switches etc. don’t foul the pcbs.

Test panels

In fact, I made two hardboard panels, one with just the pilot holes for the components (1.5mm) and one with the full size holes and cut outs. The first panel could then be used as a pattern to drill pilot holes in the real front panel.

The real front panel is more Tufnol-type composite. This particular grade is rather brittle and chips quite easily when it’s drilled or cut. Fortunately, none of this can be seen when the components are in place. I made the rectangular for the LCD panel with a fret saw and the hole for the meter with a fly cutter fitted into a brace.

Front panel almost complete

The picture above shows the panel almost completed. The arrangement was dictated mainly by proximity to the circuit boards behind. It’s not very aesthetically pleasing but the asymmetrical placing at least makes it easier to remember what each switch etc. is supposed to do.