Machinekit and Additive Manufacturing

It's been a while since my last post, so it's about time for an update.

Since I stopped with the Opiliones project I've still been working on my 3D printering. I'll call it an Additive Manufacturing machine (AM) because I think the name 'printer' indicates it's as simple as pushing a button and having a physical product within the minute. And that's simply not true, It's manufacturing and not printing.

I've been working with LinuxCNC, a BeagleBone Black and a BeBoPr-Bridge board (Cape) since end of december last year. LinuxCNC (and it's recent fork Machinekit) is software for controlling machines...

Recently there has been a lot of development in this area, IMO one very important one is the blending of many short lines (very common output of slicing software) into smooth motion. This is important because when you are making a product, the quality of the extrusion benefits from a smooth constant motion.

I've been hacking away recently in making the configuration files fit my machine. One thing that I use when setting up a machine is adjusting the flow rate during running a program. But this is difficult if the extrusion is controlled by position. You'd have to remember the current position and from that point on you'd need to multiply the positions from that offset point. A lot of calculations and it's currently not available. During the discussions on the Machinekit group the idea came to make the extrusion dependant on the actual nozzle speed.

One of the fun things about being open (source) is that when you want to have extra functionality you can add it yourself. It takes some learning curve sometimes (LinuxCNC, linux, working with git, pull requests etc) but in the end you can actually improve and have exactly what you (think you) need.

So I ended up with:

  • Changing the configuration files so that LinuxCNC calculates speed of the extruder based on the nozzle speed (the extruder axis is velocity controlled instead of position controlled).
  • Adding functions for setting width of the line being extruded and the height of that line (the current layer).
  • (Un)linking the extruder with the nozzle velocity.
  • Writing scripts that post processes the slicer g-code output (remove all A-axis positions) and inserts the dimensions into the g-code.

Now you don't necessarily have to slice, you can draw on your bed, like with Logo Turtle on the MSX 1 (If you don't know what an MSX 1 is, you probably are a lot younger than me) put the pen down, draw a line, put the pen up (but in G-code).

What's so extremely powerful is the HAL module. You want something added? Then take the blocks you need, multiplying, limiting, etcetera and virtually rewire your machine behaviour.

Because the HAL is so powerful it took little effort to add the bonus function: Live nozzle pressure adjustment. An extra adjustment of the extruder for the current speed. Why? Because inside the nozzle there is a pressure depending on the extruding velocity. So when you start extruding (v=0) you have to build up pressure (having too little plastic while accelerating) and when decelerating you have too much pressure, resulting in a release when you are stopped. This is something you frequently see on sides of the product. See picture below of standard blobs, with plain and simple extrusion.  The 3 lines at the bottom makes an "S" movement with disconnecting the extruder speed with the nozzle on the vertical movement, but without retracting. The top 3 lines is the "S" movement, but with retracting.

Standard extruding

Because it just takes some virtual rewiring of the HAL i've added the derivate of speed function (ddt) and used that as an input for a lookup table (lincurve, thanks Andy) which adds velocity when accelerating, adds none during constant speed, and subtracts velocity while decelerating. Effectively taking care of the pressure hysteresis inside the nozzle. Want to have other/more specific/finegrained control then you just insert points in the lookup table. Imagine doing that to a elastic bowden extruder? I have my extruder mounted on the effector, with just 8 cm between the drive wheels and the nozzle of my E3D hot-end but even there this phenomenon is there. See result below after adjusting, no blobs at the end of the lines.

Pressure adjusted extrusionhere's a comparison of the "normal" extruding at the left, and the "pressure adjusted velocity controlled extrusion" at the right.

Difference between "normal" and "pressure adjusted" extrusion

And last but not least velocity controlled extrusion in action.

update 1: see this post how you can use this for PCB additive manufacturing
update 2: see this post how you can lay down wire in a pattern
update 3: I've updated the velocity extruding. Go here if you're interested

Thanks a lot to the guys at the Machinekit and LinuxCNC users list.

More info?

Until merged in the main branch, my working branche on the velocity extruding is here.

Have fun!


Connector duplo with wooden railway

I made this connector for my kids, and I would not want to hold this back for other super-daddy's to print for their kids.

You are free to print this for your kids. By downloading you agree you will not charge anybody money for the 3D print of this design.

So, here is the link to the following 3D printable .stl file.

Make sure you cool amply during printing because of the overhang.


Uitleg over het nut van school

Ik hoorde net Simon en Lucas praten en Lucas zei: "Ik wil helemaal niet naar school." Volgens Simon kon je allemaal dingen leren op school. We hebben gisteravond ook de sjoelbak op tafel gezet, dus ze zijn (Simon) continu aan het optellen. Dus Simon vertelde aan Lucas dat je daar optellen leerde. "Weet jij dan wat (25 + 4) is?", vraagt Lucas. En Simon legt uit: "Ik weet dat (5 + 4) 9 is, en als ik dat dan twee leveltjes hoger doe dan weet ik dat dat 29 is."

Mooie uitleg toch?

3D printer beurs

Gisteren heb ik met Kees Koese op een mini beurs over 3D printen gestaan. Bij het opbouwen de avond ervoor was er nog een tafeltje vrij direct bij de ingang. hebben we toen maar direct bezet. Erg veel positieve aandacht gehad. Het staat in de Tubantia en De Gelderlander te staan. Leuk hoor!


Slaap zacht, lieve, lieve Pug

Vanavond thuisgekomen.

Geen getrappel, gekwispel en gezwaai.

Alleen maar stilte, geen gedraai.

Het is het beste, dat zeggen we dan maar.

Het enige goede is het einde aan de pijn.

Een stukje leeg, dat krijgen wij terug.

Dat is goed want hoe groter jouw leegte,

Hoe groter het gemis.

Jij was het 5de deel van ons gezin.

Het mooiste is wat wij hebben gekregen,

Jou als beste vriend, in zon, wind en regen.

Geen laatste ronde meer, de komende tijd.

Gelukkig dat jij nu bent bevrijd.

Pak ze, die fazanten, kippen, reeën en de rest.

Jij was voor ons het allerbest.

Pug, we missen je!


Magnetic ball joint seat geometry... May the force be with you!

First I'd like to give due credits to Kees Koese who started with the idea of the magnetic ball joint and made the original design of the effector plate. Give his website a visit to have a look at his multispindle drilling machines. Technicians will like it :)

This post is a how and why about the geometry of the ball seat in the effector plate. Since the original effector plate was made with SLS printing we wanted to be able to print this with FDM printing (both being entirely different processes).

During the first test prints there was still manual rework needed. I wanted to end up having to do nothing at all regarding removing filaments, grinding etc. I think making geometry only with the printer without having to rework it is why 3D printing can be such a fantastic way to manufacture.

Before going into details I was amazed how rewarding and exciting it is to draw your thought/improvement in your favourite CAD program (mine is SolidWorks) and having it on your desk in 30 minutes... Every engineers dream.

The picture below shows the original geometry Kees drew a few (almost 6) months ago. It depicts the ball seat with the area (cylinder) where the magnet needs to fit. Because of the original being SLS printed there were virtually no limits regarding overhang or printing resolution. Notice the second (bigger and lower) sphere that ensures the ball will fit in the topmost seat.

magnetic ball bearing seat 1

When initially printing this test piece to check if the resulting dimensions were good enough to fit the cylindrical magnet (this situation needs a ∅10.5 mm diameter to result in a snug fit of the ∅10 mm magnet) I had a lot of problems printing because of 2 non-printing areas coming together in mid-air. Also the points where the 2 areas merged were sharp so the filament  kept sticking to the nozzle on it's way back. (a lot of words for saying the result was horrible...)

What to do... Make sure there were no pointy encounters so that meant closing the gap between the seat and the cylinder volume. See below:

magnetic ball bearing seat 2This was not the way to go. The wall thickness was so thin (wall thin-ness) that it could not be closed (and the ugly thin-ness needed to be drilled away manually... bah...). Because the overhang is at a 15 degree angle there is not enough previous layer to adhere to. Improving (but not really) solving) this could be done by adding wall thickness. But alas... Every solution frequently introduces it's own problem... The distance between magnet and ball was getting so big the magnet lost it's force-field on the ball... Thanks for nothing Master Yoda!

There had to be a way to ensure a minimal gap between magnet and ball without the overhang problem and without wall-thinness situation... If you have something you don't want: (re)move it... See below:

magnetic ball bearing seat 3

All that's needed is a defined sphere and a axial constraint preventing the magnet being pulled onto the face of the ball (creating friction when the ball is turning). If you add a partial ceiling coming from the side (instead of bottom or top) of the cylindrical hole then during printing you will see a very gentle alteration of the contour of the non-printing area. Then there is enough support from the previous layer to create the overhang.

Final measurement and test were done with calliper (measuring the distance over Ball and Magnet, subtracting the ball diameter and length of the magnet) and multimeter.

I measured a gap of 0.1 - 0.15 mm and when doing the beeeep testing for I got no beeeep. (measuring short circuit between ball and magnet).

This evening Master Simon helped me taking a picture of the actual force of the ball joint connection. Result: One connection can pull 1690 gram. Take that Master Yoda?

Below some pictures of the test, some prints and last but certainly not least the geometry of the connection.

Pulling water in Sigg bottles. I am holding the blue printed part.

pulling force of magnetic joint

Resulting weight being pulled:

Weight being pulled by magnetic joint

Seat of ball with magnet underneath (view from top):

Seat of magnetic ball joint (top view)Fit of magnet in area under steel ball (view from bottom):

Fit of magnet in area beneath steel ballMisprints being mentioned in this post, next to the result:

MisprintsFinally after having bored you to death the resulting geometry. First the cut-revolve of seat and magnet volume:

magnetic ball bearing geometry section view

Second the cut-extrude at ∅10.5 with a width of 8 mm. Seen from above. This prevents the magnet from getting in contact with the ball. I also added a radius of R1 at the inside of the cylinder making the sliced contour even more printer friendly.

magnetic ball bearing geometry axial stopENJOY !





Resultaat van een uurtje ontspanning

Er is niets zo ontspannend als het demonteren van oude apparaten (nee, ik hoef niet direct alle zooi te hebben). Een leraar op de HTS zij ons in de eerste les mechanica: "Wilt u weten hoe iets werkt? .... Slopen!". Ziehier de overblijfselen van 4 oude inkjetprinters (waaronder 1 all-in-one). Stappenmotoren, microswitches, encoders, tandwieltjes, schroefjes en veertjes.