At the Hull Digital Hardware Meetup tomorrow evening, we will be doing the second tutorial on Arduino programming and interfacing. This one involves Nerf guns, so it may be little chaotic.
The tutorial notes are available on the Arduino page
I was at one of Rob’s excellent rather useful seminars yesterday. As it was about 3D printing, Rob asked me to say a little bit about my printer. Having not prepared to do anything, I relied on some bits of video I found on my tablet. Thinking about it, I realised that although this blog has quite a few posts about specific parts of the building process, there isn’t really a post just simply describing the printer. So this is it. I call it Richmond.
It’s inspired by Johannn Rocholl’s Rostock printer, but the design is my own. I wish I could blame someone else for the design flaws, but I can’t. The basic design features three columns made of extruded aluminium section (bought). Up and down each column runs a carriage (the pink bits), with spring-mounted ball bearings to make it run smoothly and without wobbling. Rob printed these for me. Here’s a close-up of one.
The blue parts are modifications (printed by me) to add extra ball-bearings. The original design simply had screw in the plastic which gradually wore loose. At the right of the picture, you can see the fishing line which is attached to the carriage to drive it. This loops around a motor-driven pulley at the bottom of the pillar and and idler pulley at the top, to make it move up and down. The grey rods are carbon fibre, and join the carriage to the tool head. The rods are in pairs, to keep them in a parallelogram shape – this means that the print head can move in three axes, but will never rotate. The tool head looks like this from above: The translucent tube in the centre guides the plastic filament into the heated part.
The print head looks like this if you happen to be underneath it (which I don’t recommend, because it heats up to 220 Celsius):
The underneath view shows you the hot end – the part that melts the plastic and squirts it out through a tiny (0.3mm) hole. The plastic filament is driven through the flexible tube to the hot end by an extruder, in which it is pressed against a rotating gear. It takes a surprising amount of force to push the filament though the tube and the hot end. Here’s the machinery that does it (with its operator):
As usual, these components were printed for me by Rob, but they are not my design. Rather, I downloaded the designs from thingiverse. There is no sense in reinventing the wheel, especially when so much effort has gone into making it work well. The plastic filament is taken from a reel, which sits close by on a home-printed stand:
The filament drive is powered by a NEMA17 stepper motor. Each carriage is also driven by one of these, mounted at the bottom of each column:
Each motor has a printed pulley on it (printed and then machined with my printed lathe, in this case) which drives the Spectra non-stretch fishing line to move the carriage. The filament is kept under tension by an adjusting screw on the carriage. How much tension? Until it goes ‘ping’ rather than ‘boing’ when you pluck it, that’s how much. As an aside, it also makes an interesting Aeolian harp if you take it outside on a windy day. Each stepper motor moves as finely as 3200 steps per revolution, so with the pulleys I have this means about 55 steps per millimetre of vertical movement.
Also mounted at the base of each pillar is an adjustable mount for the print platform (which is just a circle of glass from a local glass shop). These are ugly and badly designed, but they do the job for the time being. When I redesign the base, they will go. Using three supports means that I can ensure the print surface is as close as possible to being perpendicular to the pillars. This is important for ensuring good prints, particularly so for getting the first layer of plastic to stick to the base. If the base is not level relative to the and y movement of the print head, then it’s likely that the first layer will vary between being too thin (resulting in nothing but an impression in the masking tape) and too thick (resulting in a strand of plastic not actually stuck to the base). Bear in mind that this means the print plate has to be level to within plus or minus a tenth of a millimetre over its diameter, and you’ll see why this calibration has been such an issue for me.
The hardware is mounted on a box made out of plywood I had lying around, painted purple because I had a can of purple spray paint to hand. On the front of the box is a basic controller interface – an LCD and a simple rotary/click controller.
The LCD provides status information about the printer, and a menu system to allow various parameters to be adjusted without using an attached PC. It is possible to fit it with an SD card holder, which will allow printing completely independently, but I have no need for that. The display and controller are driven by and provide input to an an Arduino Mega controller inside the main box. The arduino is fitted with a Ramps 1.4 shield, which provides the stepper motor driver electronics and the higher power switching for the hot end. The arduino runs Marlin firmware, which generates the stepper motor motions required to translate standard cartesian G-codes to carriage movements for the delta configuration. The firmware also controls the extruder, monitors the temperature of the hot end, and drives the LCD. The power supply driving all this is also in the purple box. It’s a scrap supply from a PC, which provides handy 5V and 12V outputs, at high enough currents to drive the motors and the hot end.
Looking back, it doesn’t seem that complicated. Makes me wonder why it took me so long to build.
As a devoted reader of my blog, you will know that I’m engaged in a continuing quest to improve the precision of my 3D printer. The most recent improvement was to replace all the pivots in my original design, which were simply composed of screws passing through holes in plastic, with proper miniature ball bearings. This has had a huge benefit – there is now very little play in the movement of the print head. Printed shapes are much more precise than they were.
The next issue to tackle is one I’ve been aware of for a while, but have not had the means to fix. First, a recap: the whole print mechanism is driven by three stepper motors. Each stepper motor has a pulley mounted on its output shaft, which drives a belt made of stretch-free fishing line. Each belt goes the length of a vertical column, passes around an idler pulley at the top, and is attached to a carriage, so as the motor turns, the carriage moves up and down the column (a picture may not be worth a thousand words in this case, but if I had had one to hand it would certainly have saved me fifty or so). The amount by which the carriage moves depends on the number of steps the output shaft of the motor rotates and the diameter of the output pulley. Knowledge of these two things allows the printer firmware to be calibrated for each motor with the number of steps required per millimetre of carriage movement. Because this figure is set in firmware, it doesn’t matter what each pulley diameter actually is – I can simply measure it and do the calculation. However…
The problem I found on measuring the pulleys (kindly printed for me by Rob) is that they are not perfectly circular – the diameter varies by about half a millimetre around the circumference. Add to that the fact that when a pulley is mounted on the motor shaft there is a little added eccentricity, and you end up with a drive pulley whose radius varies by about 5% as it rotates. Over long movements, this is not a problem – the eccentricity averages out – but for small movements this results in unevenness. It’s particularly obvious on the first print layer, which is often thin. It manifests itself as patches of thin or thick deposition, and it just won’t do!
The cure is obvious: I need pulleys which, when mounted on the motor shaft, are round. The standard method of making round things is with a lathe. I would dearly love to have a proper modelmaker’s lathe, but they are expensive. I can’t really justify spending £400 to make three plastic pulleys. I tried printing some more pulleys myself, but the accuracy of my prints was no better than Rob’s (not surprising, given that the pulleys weren’t round).
I need a lathe. I have a 3D printer. You are ahead of me. I had a search online to see if anyone had published designs for a 3D printed lathe, and the only one I could find was this one, by a guy calling himself Sublime. It’s a great piece of work, but it doesn’t look precise enough for my purpose, and I don’t need the three-jaw chuck. For the time being, I only need to turn pulleys. So I stole some ideas from Sublime, and designed my own lathe. Here’s a video of it in operation:
I’m happy to say that it works. It’s far from perfect, but the pulleys I have turned with it now have a variation in radius of 0.1mm or less, which makes for much better prints. Now it’s on to the next improvement: automatic calibration of the print surface. Watch this space.
The recent modifications to my printer have made a huge difference. Not only is it printing much more accurately, but I can print item after item without recalibrating. There are further improvements to be made (aren’t there always?), but I’m now at a point where I can be reasonably confident of being able to print the parts I need to make modifications. Here’s an example:
These two clamps are created so that I can mount a scavenged motor securely for my next project. I modelled these in OpenSCAD, sliced them in Slic3er and printed them using Repetier-Host control software. Everything just worked. I haven’t mentioned Repetier-Host before, because I’ve only just become aware of it. It’s a very nice front end for the printer, and manages Slic3r. You can load and view a .STL file, slice it and print it from the same interface. It’s slicker than Pronterface, which I had been using. It’s definitely my software of choice now. It makes it really easy to adjust the printing speed during printing – meaning that you can slow down the head for fiddly areas, and speed it right up for less important bits.
Flushed with success printing useful things, I thought it was time to try some frivolity. Here’s a “Skull with pointed teeth”, from a model I found on thingiverse:
It’s about 5cm tall. It would look better printed in white plastic, but I’ve only got blue. I’m really pleased with this print. Next time, I’ll make it hollow and mount a couple of red LEDs in the eye sockets…
Finally, I decided to try something more complex. Printing objects with overhangs is not simple for this style of printer, because there is no surface deposit material on. So I have not tried it before. Slic3r has a setting you can use which will help to print overhangs by printing columns of expendable support material underneath. These can then be cut away when the print is complete. The example I tried is a minion from thingiverse (if you don’t know what a minion is, you should watch the film Despicable Me at once). Here’s a picture of it mid-print:
It’s hard to see the shape, because of all the support material (the vertical columns at the front), but you can see the honeycomb-shaped fill of the main part. When the print is finished, the poor minion looks like this:
Ten minutes with a scalpel, cutting away the scaffolding, and he looks like this:
He’s a long way from perfect, but given the size (about 6cm tall), it’s not too bad. His arms are only about 3mm thick, and they could not have been printed as part of the main figure without support. Again, it doesn’t help that he is translucent blue rather than yellow. Perhaps a paint job will improve him. A light sanding certainly would.
You will become like us. Yes, I like Doctor Who (as if that was unlikely). This isn’t about Cybermen, though, it’s about a significant upgrade to my 3D printer. As initially designed and constructed, many of the pivots in the printer are simply screws passing through holes in the PLA printed parts. Over usage, these holes have become enlarged, so that the screws are loose. This means that apart from the danger of them falling out, there is unwanted movement in the printing mechanism. This leads to inaccuracy in printing. So, as part of my plan to gradually improve the accuracy of the printer one step at a time, the next step is to replace the pivots with proper bearings. Naturally, my initial designs, printed by Rob, do not allow for the insertion of bearings. That would be far too easy. No, the pivots are part of the carriages which move up and down the columns, and are each printed in one piece. I have to design new parts which will fit on to the old carriages. Why can’t I just print new carriages? Because the printer’s not accurate enough yet.
I discover that I can now print small items (and in particular, things which are not very tall) with quite good results. This means that I can finally use the printer to print some parts for itself to upgrade it:
Those are bearing mounts. I’ve sourced a load of tiny ball bearing races off eBay (7mm od, 2mm id) for the ridiculous price of 20p each, and I’m going to replace each of the pivot screws on my carriages with them. They are really tiny. Really, really tiny. I’ve already lost one.
The bearings will be located in the parts in the first picture, which in turn are mounted on the carriages using the original pivot holes. I’m also replacing the pivot bars with newly printed ones. If all goes well, my prints will be better. It all fits together like this:
I’ll have to go through the whole calibration routine again once I’ve fitted the new parts (which is a bit annoying, as it’s actually working quite well at the moment), but I’m confident it will be worth the effort.
Yesterday, I wrote about the bad consequences of letting printed PLA get too warm – in summary, it softens and bends. In the case of my 3D printer, it resulted in the print head getting out of alignment. Thinking it over, it occurred to me that I might be able to fix the problem by reheating the plastic a bit and straightening it out. To my surprise, it worked. I boiled some water, put it in a bowl and immersed the distorted component. After a few seconds I pulled it out and flattened the distorted area. Easy. It worked for both of the components I blogged about yesterday.
A little more experimenting shows that the water temperature can be a lot less than boiling (cool enough to dip hands in, which is convenient) and still soften PLA quite effectively, giving it a few seconds of pliability before it cools to stiffness again. Even more interesting is the shape memory effect that I really wasn’t expecting. Before I played with the critical parts, I took a simple printed bar of PLA, and dunked it in hot water. While it was flexible, I bent it into a circle, and let it cool. Then I dropped it back in the hot water. It uncurled itself and resumed its original shape. I’ve since done this with more complex parts, even screwing one into a ball. I’ve put a video of this on YouTube.
It’s an entertaining but probably completely useless phenomenon.
… is that it melts when it gets hot. “Well, duh!”, as my daughters would say. PLA, the thermoplastic used in most 3D printers, is a very practical material. It’s light, strong enough for most purposes, and melts at a reasonable temperature. Which is why I’ve used it for many of the parts in my printer. Most of these parts have no chance of getting hot, so the fact that PLA softens as it heats up is of no concern.
The one area that does get hot is the area around the hot end (“duh!” again). This is expected, and the J-head hotend uses a high temperature resistant polymer called PEEK to isolate it from parts made of PLA. So far, so good. At normal printing temperatures the (PLA) hotend holder remains cool enough because of the PEEK insulation. If, however, one accidentally sets the hotend temperature to 2110°C instead of 210°C (no, the software doesn’t stop you doing that) and it takes one a few minutes to notice, then the PLA can get substantially hotter. Easily hot enough to deform, in fact. And no, I didn’t let it get to 2110°C – I spotted the problem when the temperature got to about 240°C, at which point I panicked a bit and found the BRS.
The net result is a deformed pair of print head mounting components:
The deformation isn’t hugely obvious (its around the small hole in the middle of the pink part, and on the further prong of the red one), but the net result is that the j-head is slightly loose, and is set at a slight angle to the vertical. This may help to explain why some (but not all) of my prints are slanted. I suspect that the print head offers more resistance to movement in one direction than in another, and this manifests itself in a number of missed steps on one of the stepper motor axes. Each layer may thus be slightly offset from the previous, leading to the slant. Objects which do not require many movements in the ‘difficult’ direction have fewer missed steps, and print more vertically. Perhaps. This is only speculation. Rob’s printing me a new head (that sounds weird), so I’ll see if the result is straight prints.
Calibration, that’s what you need. If you want to be the best, if you want to beat the rest, oh-ho-ho, calibration’s what you need. I apologise to anyone too young to remember the TV programme Record Breakers but i couldn’t resist. Calibration of my printer proceeds apace. Today I’ve been checking the vertical movement of each carriage independently, and guess what? If I command them all to move 100mm, they all move slightly different distances. I think this is down to variations in printed pulley size, but this time I can compensate in the firmware. So I measured the distance each carriage moved, and calculated the effective pulley diameter which would cause this movement. That value replaces the nominal one in the firmware, and all is well.
Or it would be, except that I noticed that the value of pi I was using in the firmware was 3.1515926 which as everyone knows, is wrong (it should be 3.1415926). Yes, if you are picky it should be 3.1415927, but frankly an error in the second decimal place is somewhat more important. It’s not a huge error (around 0.3%), but it just shows that when you check everything, you should check EVERYTHING. I wonder how many more little errors are lurking in the system?
Having changed possibly the most fundamental part of the calibration definitions, I now need to go back over the whole printer calibration routine, because the chances are that some of the other tweaks have actually been trying to mask these errors. What fun.
Generally regarded as a Good Thing in an Englishman, eccentricity is rarely desirable in pulleys. The drive mechanism of my printer uses six pulleys, all of which have themselves been printed. In my ongoing pursuit of accuracy, I have discovered that some of these pulleys are not entirely circular, nor are they mounted entirely concentrically on the motor spindles (though exactly what ‘concentric’ means if the pulley is not circular is perhaps open to debate). I’d really like to machine some small tolerance parts out of aluminium, but I don’t have access to a lathe (if you’ve got one, I’d love to use it for an afternoon…). So how do I work with what I’ve got? I need some way of ensuring circularity and accuracy of diameter. The material is PLA, so it’s not too difficult to shape; I should be able to use the stepper motor itself as a lathe spindle, and turn the pulley in place. My Idea is to print a bracket which will allow me to mount a dial gauge for measuring the pulley, and a makeshift cutting tool to pare it down. I designed and printed one.
Wonder of wonders, it printed pretty well! I must be doing something right. Now I can measure the variation in the pulley radius as it rotates:
It turns out that the deviation is about half a millimeter over a full revolution. Not, perhaps, a huge amount, but on a 20mm diameter pulley this is 2.5%. This does not mean that over a 100mm movement the carriage will move 2.5mm to much or too little – indeed, it’s possible that it could be completely accurate at specific points – but the linear motion will not be consistent with relation to the stepper motor steps. Straight lines will wobble. So now all (all?) I need to do is to drive the stepper motors at constant speed and pare down the pulleys to a constant and known diameter, than that’s one more inaccuracy removed. We’ll see how that goes.
There are many 3D printer designs out there. I took ideas from some of them, and designed my own. I’ve built it, and it kind of works. My prints are dogged by a number of problems. Principle amongst these has been a distinct slant to all the printed items (and by ‘distinct’, what I really mean is ‘45 degrees’). This is not conducive to making precision parts for sundry other projects, which is the main purpose of the printer. After fiddling round the edges for a while, and managing occasionally to get half-decent small prints, I realised it was time to do it properly.
In building my printer, I knew I would not have access to precision tools. Any parts I made would be cut by hand with a saw. Holes would be drilled with a hand-held drill. High accuracy was not going to be the order of the day. I naively didn’t think that this would be a problem – the machine is software controlled, after all, and it should be possible to account for misalignment of parts by judiciously tweaking the code. It’s only software, after all.
This approach is feasible. Software is flexible, and all sorts of hardware faults can be catered for in the software. If, that is (and this is a big ‘if’) you know what they are. Without accurate measuring tools, how do you know what errors need to be accommodated? With the infinite flexibility that software configuration offers, it’s easy to get into a situation where more and more settings can be tweaked, but the settings become pure guesswork. If something prints successfully, you don’t really know why, but you use those settings next time. Post hoc ergo propter hoc.
Also, adding all those settings involves time and effort. Especially if you are using printer control firmware written by someone else, and you have to hack new tweaks into it. This is labour that could be better used reducing the errors in the system rather than trying to accommodate them.
I’ve come to the staggering conclusion that it’s best to get the hardware as accurate as possible first. To most people (including may writing on the web) this is blindingly obvious. It took me a little longer to realise. Having finally got the idea through my thick skull, though I set about re-engineering the hardware. Firstly, I disassembled the arms and print head, and measured everything as accurately as I could. It turned out that two of the delta arms were 1mm longer than the rest. I picked one arm to use as a reference (and marked it) and reworked all the others so that they were as close to the same length as I could make them. I estimate variation to be no more than +-0.1mm now. Everything else seemed to be correct, so I reassembled it all. Not much change there, really. I then used a try square to adjust the print bed to be as perpendicular as I could to the vertical beams. I had previously been adjusting this to try and level the prints, when really I should have been adjusting the print mechanism to move parallel to it. Too many adjustment points, not enough logic.
The second part of the process is to use a consistent and structured set of steps to calibrate the system in a repeatable manner. I found a nice article on how to do this sensibly, from which I quote: “First, and foremost, build your printer as accurately as you can.” I second that. In the article, much of the calibration is done with small adjustments to the carriage end-stop screws. Well, my design doesn’t have them. I can shift the end stops, but not under fine control. I thought I would do this in software. So I needed to add adjusters to my carriages. How could I make them? If only I had a 3D printer…
The nice thing about small, non-precision parts is that the calibration errors don’t show themselves quite so much. So I was able to print three small blocks with holes to allow me to add adjustment screws to the carriages.
These are the first parts I’ve printed which actually form part of the printer itself. A small achievement, but quite a satisfying one.
With the new adjusters in place (superglue is a wonderful thing), and following the calibration plan closely, I’ve finally managed to print some things which are (almost) straight and (almost) the right size. Here’s a print head, straight after printing and before tidying up.
It’s not perfect. I’ve still got some tweaking to do with feed rates, temperatures and so on, but the RepRap Wiki has an excellent guide to printing problems which should help me sort these out. Things are definitely looking up, and I should be producing upgraded parts for the printer itself Real Soon Now.