Project Name :- HF06 Robot

Status:-  Declassified as of 07/01/2012

Department:- Helium Frog Robot Development Works - Area 13

Back to Main Page

A brief introduction

A search of the internet has revealed that no one as far as I can tell has made a SCARA type robot using Reprapped parts. I believe this would be usefull as an accurate and simple pick and place robot could have many uses, particularly if they are cheap. The design being developed here should be able to be put together for around 400 all in. A further goal is to make the robot capable of self replication, that is to reproduce its own parts by means of an ABS extruder mounted in the tool head. The robot arm is unlikely to produce parts as good as a cartesian reprap, but it should be close if I can get the mechanism virtually backlash free and correctly geared.

All parts for the revised design are now printed and assembled. Today I spent some time testing the software with the new setup. The Z axis is now really quick and has improved the robot considerably. I still need to work on a good gripper assembly.

The SCARA robot project should now be considered complete. I have a robot capable of picking and placing objects with reasonable accuracy. The developmnet phase has now begun. The worst part of the MK1 design is that the Z axis is very slow. Again it doesn't seem to have sunk in that home made lead screw robots are really a waste of time. With that in mind I have begun an improved design as shown below.

The design will use a NEMA 23 motor to drive the Z axis. This should provide sufficient power to lift the horizontal assembly. The only downside is that when the motor is switched off the axis could fall. I am hoping that a combination of the cantilever loading, large motor and gearing it shouldn't be an issue, otherwise I will have to add some sort of solenoid brake mechanism. A natural place for this would be on the top gear positioned from the rear. The mechanism would be engaged when the power is off and only disconnected when the firmware is cycling and motors are on.

Today I uploaded a video on Youtube of the robot doing some basic moves.

Move speed rises in the video from 30mm/sec, 50mm/sec, 80mm/sec to 100mm/sec. I am disappointed with the Z axis speed as this can only get to 5mm/sec. This restricts the cycle time of pick and place operations considerably. I shall have to investigate a better way. In the mean time I have ordered some M8 brass nuts, which may help reduce the friction.

There has been much progress on the robot build. The aluminium motor gears have finally arrived, but whilst waiting I tried several different forms of printed gear and one came out quite well. This has been installed and is working. I will leave that for the moment on test and replace it later should it cause problems. The Arduino firmware is written and all the main routines work. I have a fully functioning robot that accepts G1 codes and moves accurately from A to B. In addition I have completed the G28 homing routine and this works really well. I am adding in more code all the time to improve the firmware and so far have added in some end stop protection routines, an M114 verbose mode switch, so the user can select whether the robot reports positions as it moves and a G4 dwell command. Tonight I began work on a simple vacuum pickup end effector which uses some soft rubber pipe as the vacuum cup. It works quite well picking up the glass marbles of my solitaire board, but I have noticed that the vacuum doesn't release immediately (it takes about 1/2 to 1 second before the vaccum drops off and releases the marble. The vacuum line really needs venting to air for quick pick and place. This calls for a solenoid valve. Scouring the net, the cheapest proper 3/2 valve is about 60 or about 20 if I can wait for delivery from Hong Kong, but simpler vacuum valves are used on vehicle EGR (Exhaust Gas Recirculation) systems and also on some car heaters. A second hand one is about 12. As for the speed of the robot, the arm is capable of moving at 100mm/sec with ease, but is a bit shaky at the ends of movement. If I add in acceleration, the robot should be able to move comfortably in X and Y at this speed. Z axis movement is of course really slow with lead screw drive, so I have added in firmware checks, so that any move that exceeds the maximum Z axis speed will be controlled. I hope to be able to post a video of the robot in action quite soon.

The HF06 SCARA is now wired and moving. I relocated the robot on the base at 90 degrees to the table as this is easier when programming. I also took delivery of a vacuum pump which I will initially use for pick and place testing. The first task will be to pick and place marbles from a solitaire board (This has also arrived at Helium Frog HQ). The vacuum pump is wired and the firmware rewritten to use M10 and M11 to control it. I am still awaiting an aluminium gear for the secondary arm axis, but all motors are turning and the primary and secondary axes are working well as are the end stops. It looks like next week will be dedicated to writing the firmware.

All the parts are now printed and the robot is assembled. Unfortunately the HF05 Prusa is not able to print the 8 tooth motor timing gears with sufficient accuracy so I will have to purchase some aluminium ones until I can refine the design of the parts. Now the robot is assembled I can see how rigid the structure is. It appears the secondary arm is a little flimsy and there is a lot of movement in Z, but otherwise it appears rigid. The belts are still not tightened so this may improve things. It is still too early to tell whether this machine will be able to print itself or will be restricted to pick and place only.

Printing of the main parts is now nearing completion. The main frame seems very rigid and will only get more so when I have mounted the electronic plate at the rear. The stainless steel rod for the Z axis rails arrived today. I took the opportunity of also ordering some 10mm diameter along with the 8mm I will be using. I am hoping that as the axes are quite short, the bearings will support the offset loads. I will only know this when its all assembled with motors. There is of course the possibility of adding a counterweight at the rear of the robot.

Whilst printing and dry assembling the parts I noticed that the main Z axis lacked any rigidity, so a rethink was called for. The frame is now redesigned with rear support braces and a plate to mount the electronics, which doubles as a cross brace. The first print of the base proved very difficult and it cracked half way up due to internal stresses in the part. This has now been redesigned so it is smaller and can be printed in another orientation. Tonight I successfully printed it without any issues. As this is the largest part and it is now done, this gives me confidence that the other parts will print without problems. I can already see many areas for improvement, but I shall resist the temptation to modify and reprint as I am sure to come across many other faults which will need to be included.

Printing parts is still ongoing and I have made a start on the tooling head design. This is difficult as I don't really know what will be fitted to the end, extruder, vacuum cup, gripper or pen plotter, so I have decided to leave the arm about 30mm short so to give room for a variety of end designs. Yesterday I printed the longest part I have ever done at around 165mm without any warping (see below), so this looks good for printing the largest parts which are the vertical axes. The parts are still a little rough and stringy printed at 0.5mm layer height, but they are strong, flat and usable. Printing on the HF05 Prusa robot is much quicker than the Makerbot I am used to, so this makes development much quicker. The belts also arrived today and a trial fit around the printed gears showed that they mesh very well so backlash shouldn't be an issue. I have also taken a look at acceleration which I probably won't include in my first firmware, but I would like to add it as soon as possible. My firmware runs slightly differently form most of the Reprap code in that it is more of a "closed loop" constantly calculating where the arms should be at any point in time and adjusting the motor positions. I had to do it this way for the delta robot as cartesian linear moves do not mean linear angular steps and the SCARA has similar issues. After some work, I produced another Excel spreadsheet which calculates travel distance in the acceleration, plateau and deceleration phase. A little complex for my old brain, but now its done it shouldn't be too hard to swap it over to C code for the Arduino.

After a few extruder problems with my HF05 Prusa robot I was able to start printing the parts for the SCARA. As of today I have about 30% of the parts printed, but the larger parts are still to be done. I am concerned that I may get warping, but so far all is OK even with parts 110mm wide. All the time I am refining the HF05 print settings and modifying the firmware to improve the print quality.

The design phase is now nearing completion. I still have to design a few areas such as the tooling mount, but tonight I started to print the first part. In industry this is called "Parallel Engineering", designing and manufacturing at the same time to reduce lead time. Its a good idea in theory, but can be a can of worms if you don't get things right and need to modify your work! Theoretical work has also begun on the firmware and another excel worksheet has been produced which converts cartesian coordinates (XYZ) to primary and secondary arm angles. The calculations are relatively straightforward and much easier than for the HF02 Delta Robot.At first it wasn't clear how the calculations for angles over 90 degrees would be achieved as ArcTan values are not easy to determine without a lot of if-then loops in the program. Fortunately the Arduino programmers have implemented an ATAN2 function which means that this becomes a trivial matter of just supplying the X and Y values and the output angle is correct for all quadrants. The excel spreadheet now works for all angles 0 to 270 which is more than enough. It cannot handle negative Y values, but these are not required and it also struggles with zero coordinates as you get a division by zero, but I will check for this in code and set zeros to 0.00001 to overcome this. To get this robot up and running I will probably put a pen plotter in at first to check out how accurate it is before spending time on a bowden extruder. First task is to get the thing moving and accepting G code. I suspect there may be frame stiffness issues, so time may be needed to refine and reprint a few parts.

Work continues on the detailed design. After looking around for the available belt lengths I found that the design as it stood required a belt which was in between easily available lengths. With this in mind I spent a few hours developing an Excel spreadsheet which calculated distances between pulley centres given pulley size and belt length. In the finish the choice was to go for T5 belts, 66 tooth 6mm wide. These are easily available and only cost a few quid each. An added bonus of increasing the belt length a little is that the primary arm motor is positioned further out back. This helps to counterbalance the weight of the arm, reducing the cantilever load on the z axis bearings. In order to position the secondary arm motor and allow for clearance the arm lengths needed to go from 130mm to 135mm. This gives a slightly increased working envelope at the expense of accuracy. I can always experiment later with unequal length arms as I refine the design. Below is a close up of the horizontal assembly.

Added details include end stop mounts, adjustable z axis stop and also visual angle indicators which will help when setting up the robot and to sanity check the angles in firmware. I have also reduced the motor mount bolts from M6 to M3, this gives a slightly larger swing to the primary arm to maximise workspace. Experience gained from previous builds has really helped here as I can add in things at the design stage before printing parts. Hopefully this will reduce the number of redesigns and reprints.

The SCARA robot design has now reached the point where I can examine each part and consider how easy it is to print. This means splitting up some of the components into separate parts, but the part count is still quite low. In addition to this work I am finalising the end stop locations. It will have 3 only so the robot can be datumed correctly. This gives me a chance to optimise the swing of the arms to get the maximum build envelope and also sketch out a heated bed shape. Whilst doing this I noted that the robot is better if placed at 45 degrees as this enables a good working envelope without having to reverse the robot arm elbow during linear moves. A unique feature of the SCARA is that it has a large working envelope, but it is not always possible to travel in a straight line between all points without first stopping to swing the secondary arm out and around. By careful placement of the robot, I can get a large working area whilst always having the arm bent one way, so linear travel can be achieved wherever I ask the robot to go. I still need to work on the secondary arm motor mount as it is really hideous, then on to the hot end mount. 

Progress on the design is ongoing. I am still at the stage of blocking out the main components and so far all seems to fit. It is now close to where I can begin the detailed part design to make them easy to print and add in such things as fasteners, end stops etc. One of the areas for concern is the toothed gears. These need to be quite accurate to eliminate backlash as far as possible. My parts are all printed at 0.5mm layer height, so they are pretty good, but not the best that there is out there. It seems with so many teeth on a large gear (40 teeth in my case) that the slight pitch errors can lead the belt to ride up a little, so the tooth width may need matching to the number of teeth. After a few designs and printing this is what I have come up with.
My HF05 robot still needs some more parameter tweeks, but the quality of the parts coming off it now will be good enough for printing the parts. The toothed pulley is the most design critical part, so if it can cope with this I shouldn't have too much trouble with the other bits.

Learning from the previous build has made me take my time on the design before printing any parts. It's best when developing a design to leave it for a few days and mull over the details for a few days. During one of these musings I noted that all the joints on the initial design are cantilevered and really require a bearing each side of the child arm to be most effective and to be able to carry the most load. Here is the updated design (Left) next to the first design (Right). The mechanism should be much better, but it does require the motor which drives the secondary arm to be slightly further outboard. This will increase the inertia of the arm, but I think it will be OK. The main thing is to keep the weight of the secondary arm minimised as this is where low inertia is really important on this type of robot. The arm movement will also be more restricted, for example the secondary arm could move almost 360 degrees on the first design, but the new design its restricted to say 270 degrees. Hopefully with careful design these limitations can be minimised. I also noted that having the Z axis motor under the horizontal arm means that Z travel is reduced, so the motor will be positioned on top. The robot will now be able to travel almost down to the heated bed surface, in fact the robot assembly may even need lifting on a pedestal when fitted with a hot end or gripper type end effector. This is pretty neat as I was looking for a nice place to put the electronics, so a pedestal with an open rear would be an ideal location. I think the time schedule may also need revising, I forgot that I will need to write the firmware for this one and also develop a bowden extruder. Still there is no real rush and lots of work still to do.

Initial designs have been completed over the past few months in between finishing HF05.
It appears that If I am able to microstep a 400 step motor I may be able to get the resolution similar to a RepRap machine in X and Y with only a single gear reduction belt on both the primary and secondary arm. I have gone for a reduction ratio of 1:5 (8 tooth to 40 tooth) as this means I dont have to have enormous gear diameters at the joints. Build area is at least 200 x 200 mm x 85 high (approx). The SCARA configuration means that the build area is of course not square, So it could be double this area when completed. I will map this out when the design gets finalised. I am really keen to get this one up and running as there are all sorts of new things this robot could easily do, such as tool head changing, pick and place work and because of the static workbed could be used for powder bed print trials and other more unusual rapid prototyping concepts. Oh yes and it would also look really cool on my desk!
As I have just built a Prusa robot, I have now a good knowledge of the electronics and extruder design, so I expect this project to take much less time. If I don't get too many distractions, I'm looking at around 2.5 months for this one. Again this is my hobby so if it take a little longer that isn't an issue.