Tuesday, 30 January 2018

Lego Saturn V

Recently I had a weekend in London after visiting Harry Potter world in Watford.  I took the opportunity to visit the Lego store in Leicester Square and I could not leave empty handed....

On the train back

The model consists of twelve bags of [parts each corresponding to s section in the build manual.  Incidentally the build manual is superb giving a background of the real Saturn V and how this particular kit came into being.

I decided to take photographs of the knolled parts for each bag and the end result with some extra images thrown in at certain key stages (pun intended!).

The contents of the box laid out

I started by Knolling each bag and then building that bag.

Here are some pictures of the knolled bags

And some pictures of the work in progress

Stage 1 complete

Stage 2 complete

Stages 1 and 2 side by side

Stages 1 and 2 stacked

Stages 1, 2 and 3 with the command and service modules and the escape tower

The completed build

The CM and LEM

And pride of place by the fire in the lounge

All in all great fun to build and it looks great when done.

Thursday, 5 January 2017

GPS Speedo

One of my main hobbies is old motorcycles, and one of the things all of my bikes have in common is crappy speedometers.

For some time I have been considering a GPS driven digital speedo which could be swapped between the bikes.  I have looked at using an Arduino and a GPS module in the past but was never satisfied with the display options.  Until now, I was doing some surfing round on AliExpress and came across an I2C OLED display HERE 

I decided on using the following:

  • Arduino nano clone from AliExpress HERE
  • AdaFruit Ultimate GPS breakout HERE
  • LiPo charger module from AliExpress HERE
  • LiPo battery salvaged from a broken Android tablet
Having checked that the Chinese Arduino nano clone was working fine (I have had a couple which didn't over the years) I started by exploring the AdaFruit learning pages for the GPS breakout HERE 

Having downloaded and installed the library and checked out a number of the samples I was happy with the GPS module itself although in the workshop at home it did take some time to establish a fix.

Onto the OLED display.  As this was a cheap Chinese clone, there was no nice library available.  After some playing with the AdaFruit OLED library I dismissed that as the display I had is somewhat different to the AdaFruit one.  After trying several different approaches I settled on the U8GLIB HERE which I had already got installed on my development PC at home for use with Marlin (3D printer firmware).  This library allows for several different fonts and font sizes but can be a little heavy on memory with either multiple fonts or large fonts.

Jury rigged prototype:

And got some code up and running which displayed the time and speed in suitable sized fonts and promptly ran out of memory!  After some font changes I got it to compile, albeit with 99% memory usage.

I spent some time exploring the TinyGPS+ library, which worked very well with the AdaFruit GPS mdule but found some issues when using both TinyGPS+ and the U8GLIB library.  The code worked fine when outputting the speed and time to the serial port but as soon as I started to output to the OLED it became very flaky with lock ups and just plain not updating the display.  The AdaFruit sample code I used as a base uses interrupts to read the GPS data and I suspect this is why it works OK with the display.  Further research is needed.

At this point I jury rigged the LiPo charger module and battery and set it to charge (In a baking tray just in case of flames!) and all worked OK.  The LiPo module does not do any boosting of voltage so suppplies power at the battery voltage so I connected the output from the LiPo module to the GPS and OLED prototype and left it to run to see how long it would last.  After about 20 hours I got bored and decided that would probably do!

I stuck the jury rigged prototype in the car and drove about for a few days to evaluate accuracy.  It agreed with a GPS speedo based app on my phone and was within 5% of the speed shown on the car speedo.

Being reasonably confident now with the electronics side of the project I broke out Autodesk Fusion360 and started designing the case.  I has decided on a three part case with a base holding the battery, LiPo module and Arduino nano.  A middle tier with the display and GPS module in and a top part acting as a cover.  Using the laser cutter at work I had cut a rectangular piece of perspex to act as a window.  I fired up the 3D printer and started printing parts.  There were several iterations of the case parts as I tried and developed ideas.  

Some of the 3D printed parts:

I started the build by soldering together the modules and the battery.

Assembly has started

And fitted them into the case parts with some hot glue.

Assembled and hot glued.


I added a slide switch and left ports for the mini USB connection for the Arduino and the micro USB connector for the LiPo charger module.

At this time the case is printed in PLA.  Once I have had chance to use the speedo in anger I will re print the case in ABS.  I am also going to purchase one of the silicon baking mats and see whether I can laser cut some "gaskets" for between each layer of the case. I will also design a couple of bungs for the port openings and 3D print those on the SLA printer at work using some flexible resin.

I am planning to 3D print a Go-Pro compatible mount to go on the base so I can attach it to the bikes using a go-Pro style handlebar clamp,  So that's it done for now.  I will try the speedo out once things warm up a bit and report back.

In the mean time I will do some more research into alternative ways to drive the OLED and GPS modules.

Friday, 14 August 2015

Skills shortage?

I work for a computer solutions provider dealing with, among others, manufacturing companies based in the greater midlands area and there is one thing I keep hearing over and over:

 “We have vacancies to fill but we just can’t find the right people”

We, as a software company, have also been looking for both development and support staff recently and have been faced with the same problem.

Engineering seems to be becoming a dying art, as the old guards retire no one is coming in to fill their, steel toe capped, boots.  Whether I talk to people in design, manufacture or the tool room the story is the same.

I firmly believe that in this day and age engineering is just not seen as important, or even glamorous, enough.  Part of the responsibility for this lies with the education system, part with society but also a large part with British management style.

Education pushes people to use engineering as a stepping stone into management which is reinforced by society which seems to value people in middle management more highly than the engineers they rely on to get their widgets out of the door.  Now I am not saying that management is not important, it is.  As is sales, marketing, admin and all the other disciplines which make the manufacturing sector tick.

But in order for us, British manufacturing, to recover, innovate and compete we need to appreciate the humble (and not so humble) engineer far more than we do currently.  Engineers should not feel that the only way to earn the prestige and financial rewards they deserve is be promoted to management, they should be made to feel appreciated for what they actually contribute.  Fred is not “one of the guys from the tool room” he is the craftsmen who makes the tools which allows you, the manufacturing company, to make the quality product and deliver it on time and on budget.

Apprenticeships should play a major role in securing our engineering future.  During a recent visit to the Land Rover Defender production line at Jaguar Land Rover in Solihull I learned they had just invested in three hundred new engineering apprentices and that the training and rates of pay are attractive enough to keep engineers where they belong, in engineering.

What should we do?  Employ and train more engineering apprentices and, above all, APPRECIATE AND CELEBRATE THE ENGINEER!

And, yes, I regard myself as an engineer, albeit a software engineer!  I was promoted to management, wasn’t very good and ended up as a (far from) humble software engineer again.  I consider myself lucky to work for a company who rate my contribution more highly than they rate my job title.

Ian Marshall

Software engineer by trade (30 year veteran), frustrated engineer by inclination.  Passionate about engineering in general, restoring old motorcycles, 3d printing, electronics and both CNC and manual milling and turning. And don’t get me started on how I believe 3D printing could, should and will affect engineering in the future!

Tuesday, 7 April 2015

3dr Delta printer build

In October last year I got a 3d printer for my birthday and have been designing and printing all sorts of things ever since.  A lot like my other of hobby of classic motorcycles it appears one 3d printer is never enough!  So at Christmas I decided to make a second printer and settled on the RichRap 3DR design by Richard Horne

My intention in this blog is to outline the build process and to go into more detail on the issues I came across.  Wherever possible I will include links to where I sourced an item and to any other site I found either essential, useful or just plain interesting.

This particular design uses 20mm Aluminium extrusion and 6mm smooth guide rods and utilises LM6UU linear bearings.  RichRaps design does not feature a heated bed but I wanted one so I sourced one from AliExpress.  I also sourced the LCD panel from AliExpress.  The Spectra line came from EBay. I decided to use a E3D V6 hot end as I have on on my Prusa i3 and I really like it, also the service E3D provide is superb (and they send a little Haribo bag with each order - Result).  For the life of me I cannot remember where I bought the steppers from, it was definitely EBay!

RichRap also specified Rumba electronics but I had a RAMPS 1.4 board and Mega so I decided to go with that.  I have read a number of posts on the RepRap forums suggesting that 8bit based micro controller based systems struggle with the calculations required for delta printers in real time, especially with the larger LCD I am using, and in the future may decide to go 32 bit, possibly with a SmoothieBoard.

The build

Over the Christmas period I started to print the plastic parts and gather the other parts I needed.

Plastic parts, uprights and guide rods.

Bed heater, RAMPS board, Arduino Mega,
Driver boards & Spectra line

Bearings, End effectors, rod ends, carriages
3mm threaded rods for connecting rods

RichRap specified carbon fibre tubes for the connecting rods but I have elected to use 3mm Brass threaded rod as this was easier to source.  In the end I did not use the Igus rod end bearings shown in the picture and instead went for some I sourced from E3D Online.  Also shown in the picture are two different end effectors; the lower one is the standard one specified in RichRap's parts list, the upper effector is one specifically designed for the E3D V6 hot end in the 3DR (Thingiverse thingID: 561164).

Having printed the plastic parts I started to assemble the printer.  Following the advice from RichRap in his blog post I elected to use stainless smooth rods for the carriages.  The only real issues I had were that the holes in one of the bases was a little looser than the other bases an the smooth rods wobbled a bit, fixed with some hot melt glue.

Bases and 20mm extrusions.

Underside view with the steppers in place.

Once the tops were in fitted I attached the idler wheels which are construct from two ball bearing races, a 4mm button head, nut and T-nut for the 20mm extrusion.  Unfortunately I did not take a picture before I assembled it.  Stringing the carriages to the motor pulleys and idlers was fun but after a few attempts using RichRaps instructions, a little swearing, I finally got there.

I connected the end effector using the 3mm threaded rods and the Igus rod end bearings.  When I tried to move the end effector by hand one of the carriages was reluctant to move.  This turned out to be down to one of the motors having a slightly longer shaft then the others so the pulley was binding on the back of its opening.  This was solved by spacing the motor with a couple of washers on each mounting point, fiddly but effective.

On to the electronics, As said above, I had got an LCD from AliExpress and connected this up, took the latest Marlin firmware from GitHub unzipped it onto the PC and took the 2 config files from Marlin/Marlin/example_configurations/delta/generic/ and copied them into the root Marlin folder, fired up the Arduino environment and set the motherboard setting to 33, uncommented the //#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER line and uploaded and got a boat load of errors.

This was down to me not having downloaded and installed U8glib from Google code.  This cured the problem but the display was blank!

I double checked the confuration.h file and everything looked OK so I posted on the RepRap forum, in the end it turned out the problem was with my motherboard setting.  I had set it to 33 which was the number defined in boards.h for my particular board.  As far as I could see this was correct but on a whim I changed it to MOTHERBOARD BOARD_RAMPS_13_EFB. And it sprung into life.

So feeling rather pleased with myself and overly optimistic I selected Auto Home from the Prepare menu and two carriages flew up and one down, bending the 3mm rods and jamming thorougly!  Bugger! Kind wished I had tried it before I connected the end effector - Oh well.

So I dismantled the end effector from the carriages, ordered some new 3mm rod, swapped the motor connector on the X axis  and tried it again.  All three flew up to the end stops and tried to keep going.  Killed the power and tried to move the carriages by hand and two were extremely stiff.

The idlers at the top of the columns and made up of 2 bearings, a 4mm button head, nut, a couple of washers and a t-nut for the extrusion.


The problem was caused by the Spectra Line pulling down between the two bearings and jamming up.  In doing this it had frayed somewhat so I decided to re-string two out of the three axes.  I also printed some "tyres" for the idlers which prevented the strings from getting between the bearings.  This cured the problem.

I also modified configuration.h to slow down the homing speed by changing the following line:
#define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0}
#define HOMING_FEEDRATE {50*6, 50*6, 4*6, 0}
which gave a more of a chance to cut the power when things got hairy!

The next trial, homed fantastically (and slowly).

I was, however, starting to get frustrated with plugging and unplugging cables into the RAMPS board due to its upside down position so I decided to print some mounts to put the RAMPS board, display and a fan on the top.  This entailed not only designing and printing new mounts but also making new looms for the end stop wiring and redoing the ends of the motor wiring,  I also made some new, custom, cables for the display to keep them as tidy as possible and made the power wiring run though some spiral wrap to a 4 way connector which means I can detach the power from the printer without undoing screws etc.

Finished motor mount with LCD on the left and fan in place

I attached the fan to the mount and glued the mount to the base I had printed which, in retrospect, was a mistake as I had effectively put the fan screws in from below and now couldn't remove them to get the fan off to get the electronics. 

Other than this little hiccup this has made the printer more serviceable.  I have now unscrewed the fan mounting screws with an old right angled screwdriver and have now put them back in from the top!  Live and learn (hopefully).

Having rewired the printer I then took a slight diversion and have build a stand for the printer with the power supply, a 5v USB supply and a Raspberry Pi running OctoPi built in, which the 3DR is bolted to allowing me to move it about with ease.  I will document this separately.


With the new stand now built and the 3DR firmly bolted to it via the centre boss I recommenced the commissioning of the printer.  Using Autodesk 123D Design I produced an STL file for a simple 20mm square open topped box 20mm high, sliced it with Slic3r, put it on the SD card and printed it.

First print!

Not exactly stunning.  Further investigation revealed that I had the settings all wrong in Slic3r, particularly the filament diameter which I had still got set for my Prusa i3.  I changed the settings, re-sliced and the result was much better although still not perfect.

Second print

This one was better but the corners were poor, especially the bottom right corner.

The was now a pause of a few weeks due to work commitments, but I have now taken the printer into work so I can try and finalise the settings and tune the printer.  Having got it set up in the office I was demonstrating it to a colleague who commented that the fan being exposed was dangerous.  This prompted me to demonstrate the 3D printing process and show him the process from design to print.  So we designed a fan grill in 123D Design, sliced it with Cura and printed it.

Overall the results were OK although it was not square, more like a parallelogram.  I gave the printer a once over and adjusted the tension in one of the strings, using the cable tie method mentioned in RichRap's build blog post (Part 2).  I then knocked up a simple 80mm hollow square with 5mm thick sides and printed that.  It was still not square.

The 80mm square
I have included the dimensions and the positions
of each of the towers to get some points of reference

The one area I am not convinced about is that all of the push rods are exactly the same length, so I have made a jig on the milling machine with 3mm pins exactly 155mm apart and will dismantle the printer and ensure all 6 rods are exactly the same.  Unfortunately I have got a major site going live at the moment so I will have to leave it for a few days.

Right, have taken the printer apart and ensured all of the delta arms are now 155mm long, reassembled the printer and am now going to print a 40mm square with different Cura parameters and log the results.

15 test squares which have allowed my
to explore various Cura settings and their effects

Having got the printer to at least print reasonable, repeatable prints now I downloaded a handful of STL files from ThigiVerse: Crocz,Sharkz and Eaglez and started printing.

I have noticed, however, that the quality of the bottom layers is much lower than the top layers.

Bottom                                          Top

So, I have posted on the RepRap forum and will test out any responses I get and report back, although I should note I have now got a list of things to print from my colleagues!

Following some advice from the forum, I printed a dolphin for a colleague with the following settings (Cura):

  • Layer height: 0.2mm
  • Shell thickness: 1.2mm
  • Bottom / Top thickness: 1.2mm
  • Fill density: 25%
  • Print speed: 30mm/s
  • Printing temperature: 210C
  • Bed temperature: 80C
  • Flow rate: 115%



All in all much better.  This printer is in my office at work and I am away from the office for a while now but when I am back I will re-calibrate the extruder and reprint the eagle and see what it looks like.

The bed

The printer bed is a 3mm thick aluminium plate sat on top of a Kapton heater.  I really wanted a glass bed and after much internet research I couldn't find a glass disk of the diameter, so I decided to have a go at making my own!  I purchased a circular glass cutter Here, got a sheet of glass I had salvaged from an old all-in-one printer and had a go at making my own.

The first go initially went well but failed at the last step:

The second go went much better:

Having the glass bed has improved things greatly as I am now able to remove the glass plate to remove printed parts much more easily.

A few months on...

The printer has been working in my office for a few months now and generally gives very nice prints.

Initially I made a few tweaks including moving to the smaller 20 x 4 LCD panel Here and swapping the direction of the rotary encoder by modifying Pins_RAMPS_13.h in Marlin by swapping the values of BTN_EN1 and BTN_EN2 as per this code snippet:

#ifdef ULTRA_LCD

  #ifdef NEWPANEL
    #ifdef PANEL_ONE
      #define LCD_PINS_RS 40
      #define LCD_PINS_ENABLE 42
      #define LCD_PINS_D4 65
      #define LCD_PINS_D5 66
      #define LCD_PINS_D6 44
      #define LCD_PINS_D7 64
      #define LCD_PINS_RS 16
      #define LCD_PINS_ENABLE 17
      #define LCD_PINS_D4 23
      #define LCD_PINS_D5 25
      #define LCD_PINS_D6 27
      #define LCD_PINS_D7 29

      #define BEEPER -1

      #define BTN_EN1 33
      #define BTN_EN2 31
      #define BTN_ENC 35

Moving from the bigger LCD to the 20 x 4 did seem to improve print quality so after a further few weeks I elected to remove the display altogether and use a Raspberry Pi running OctoPi.  I modified Marlin to remove the display features which again had a small positive effect on print quality.

Using OctoPi allows me to control the printer via a web browser which makes it pleasant to use and allow my colleagues to print without hassle.

While I still get the odd failed print and sometimes the initial layers are not perfect I am happy with the quality.

The future

I have been considering a few upgrades, the main one being the electronics.  Once I get a bit of spare time I will get a Duet controller with the PanelDue.  As and when I get round to this I will update this blog with my experiences.