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.