Getting Support

IMG_1027.JPG

I need a tripod stand for my iPhone 4.

Fortunately, there’s a nice design for one of these, ready for download on Thingiverse: http://www.thingiverse.com/thing:4335

A minor problem with this object is, that Bradley Rigdon, the creator of this design, owns a couple of Dimension 3D printers. Since these professional printers automatically print with support material, large overhangs and such are no problem for them. And there are some large overhangs in the iPhone 4 tripod design…

It’s no secret, that the standard MakerBot Cupcake doesn’t have a second extruder for printing support material. Nonetheless, some people (including yours truly) recently started experimenting with Skeinforge’s built-in support stucture feature. It turns out, that these support structures don’t necessarily need a second extruder with dedicated support material.

Keen to experiment, I turned on the support feature in Skeinforge and sliced the downloaded STL (BTW, which needed resizing by factor 25.4, since the original STL was exported in inches).

0Degrees.png

In the relatively old version of Skeinforge, I still use for several reasons (v2009-11-06), the support settings are part of the Raft preferences:

Bildschirmfoto 2010-10-23 um 21.46.28.png

I printed the generated gcode in white ABS with my -more or less- standard MakerBot.

Removing the support structures after printing is relatively easy as long as you choose “Support on Exterior only” in the above settings.

Besides the relative coarse bottom side (which was likely more a problem with some Skeinforge settings unrelated to the support structure), the main problem with the printed object was the tiny wall on one side. You’ll know which wall I mean and what’s the problem when you compare the following picture with the object’s STL-screenshot above:

IMG_1040.JPG

One thing I learned in the last year, printing 3D objects with my MakerBot: avoid printing single, tall, thin walls in upright position, unless you want to break them away later (intensionally or unintensionally…).

The missing wall on the above object broke away when I tried to attach the object to my iPhone for the first time.

The easiest solution for such a problem is usually to print the object “on its side”, i.e. rotate the whole thing by 90°:

Bildschirmfoto 2010-10-23 um 22.23.31.png

But in this case you’d run right into the next problem: Now you’d need to manage the 90° overhang (marked with the red circle). In order to use Skeinforge’s support structures for that, you’d need to switch the “Support Material Choice” setting to “Support Everywhere” (instead of “Support on Exterior only”). But removing those “inside” supports after printing isn’t easy and the support structures would likely degrade the surface of the rail on the upper side of the object, critical for the fit of the iPhone.

My solution for the dilemma was to print the object only slightly rotated:

-30Degrees.png

I started with 30° rotation from the upright orientation. Since I used support structures anyway, the weird angle shouldn’t be a problem to print. By choosing a rotation angle smaller than 45° the resulting additional overhangs of the former vertical walls shouldn’t need additional support (Skeinforge automatically don’t generate support structures for those overhangs; see “Support Minimum Angle” in the above settings).

By rotating the object, the iffy wall is now also sliced in an angle, which greatly improves its stability:

Bildschirmfoto 2010-10-23 um 22.45.43.png

The print looked ok on first sight…

IMG_0981.JPG

… and the stability of the printed object was indeed greatly improved.

But unfortunately, printing the 30° overhangs didn’t work very well:

IMG_1041.JPG

I did some additional adjustments in the Skeinforge settings:

Bildschirmfoto 2010-10-23 um 22.55.32.png

To give the curved lower part more plastic to stick on, I changed the “Thread Sequence Choice” (Fill Preferences) from the default value “Perimeter > Loops > Infill” to “Loops > Infill > Perimeter”.

I also reduced the rotation of the object from 30° down to 15°, which still should be enough to give the front wall sufficient stability:

-15Degrees.png

This time, the print looked good:

The refined settings seem to do the trick.

Here’s the printed part after breaking away the support material:

And here’s a comparison of all three different prints (left to right: 15°, 30°, 0°):

IMG_1006.JPG

The stability-improved vertical (diagonal) structure  (from left to right: 0°, 30°, 15°):

IMG_1024.JPG

One more lineup (left to right: 0°,  30°, 15°):

IMG_1031.JPG

And now to an interesting question: Does the part work?

See for yourself:

Looking good!

After the successful first test, I coated the whole thing with liquid rubber (Plasti Dip):

IMG_1047.JPG

The rubber coating isn’t needed for grip (of the iPhone). But I thought, a little bit color couldn’t hurt. And also I like the rubbery texture on printed objects :)

Keep it simple

My Z-Probe prototype used a standard sized servo. Of course, this kind of servo seems a little bit oversized for this use. Thus, I looked around for smaller alternatives.

I found some nice micro servos on ebay:

IMG_0892.JPG

These servos not only are tiny, they are also cheap. I bought 3 of them for 4 Euros a piece.

I started to redesign the printed parts of the z-probe prototype. But compared to these micro servos, the mechanical construction was huge. Too huge!

After thinking about this for a while, I found a solution: Keep it simple!

Here’s what I came up with:

It’s basically just the servo with an opto endstop pcb glued to it…

Its smaller, it’s simpler, it’s adjustable and it works great.

Here’s a how to build the probe:

I also simplified the z-probe firmware, based on the latest G3Firmware. Since the firmware now natively supports servos (for the Unicorn pen plotter), I was able to reduce the code patches to just a few lines for the z-probe commands.

Unfortunately I wasn’t able to update my forked firmware repository on GITHub. I’m (still) really uncomfortable with using git! Each time, it’s a pain in the ass to merge new revisions from the remote repository with my forked repositories (locally and/or on GITHub). I’m pretty sure, that this is supposed to be easy, but there always are problems, errors or conflicts. And I’m still looking for a good tutorial for these hacker tasks…

Anyway, until I’m in the mood to check out git again, here are the few code changes necessary to support the z-probe in the newest firmware revision:

v2/src/shared/Commands.hh:
105 105 #define SLAVE_CMD_GET_SP			32
106 106 #define SLAVE_CMD_GET_PLATFORM_SP		33
107 107
    108+#define SLAVE_CMD_ENGAGE_Z_PROBE		128
    109+
108 110 #endif // SHARED_COMMANDS_H_
v2/src/Extruder/Host.hh:
18 18 #ifndef HOST_HH_
19 19 #define HOST_HH_
20 20
   21+// ZProbe settings
   22+// 750ms
   23+#define ZPROBE_TIMEOUTINTERVAL ((micros_t)750000L)
   24+
   25+// Angles in Degree
   26+#define Z_PROBE_ENGAGE_ANGLE  0
   27+#define Z_PROBE_DISENGAGE_ANGLE 50
   28+
21 29 void runHostSlice();
v2/src/Extruder/Host.cc:
149 149 			to_host.append8(RC_OK);
150 150 			return true;
    151+		case SLAVE_CMD_ENGAGE_Z_PROBE:
    152+			{
    153+				uint8_t angle = ((bool)from_host.read8(2))?Z_PROBE_ENGAGE_ANGLE:Z_PROBE_DISENGAGE_ANGLE;
    154+				board.setServo(1,angle);
    155+				micros_t endDelay = board.getCurrentMicros()+ZPROBE_TIMEOUTINTERVAL;
    156+				while(board.getCurrentMicros()<endDelay); // Wait for Servo
    157+				board.setServo(1,-1); // Switch Servo off
    158+			}
    159+			to_host.append8(RC_OK);
    160+			return true;
151 161 		case SLAVE_CMD_GET_SP:
152 162 			to_host.append8(RC_OK);
153 163 			to_host.append16(board.getExtruderHeater().get_set_temperature());

The ReplicatorG patch can be also simplified (no more EEPROM preferences for the Z-Probe). But I didn’t find time for this yet. For the time beeing, you can simply use the patched version from here.

Well, I still have 2 servos left…

I wonder what I can do with one of these and a slightly modified version of this thing, directly glued to the servo arm. I’m pretty sure it’ll work just as fine as that thing, only with 16 parts less…

Keep it simple!

Boxing (Round 2)

IMG_0725.JPG

With a second working 3d printer in the house, I needed an extra filament spindle box. It was easy enough to build the first one for my Makerbot, so why not build a second, improved one?

The most wanted improvement was a window.

It turns out, that it’s not only nice looking but sometimes also important to see what’s going on inside the box. So I changed the design slightly to sport a window on the front.

Since it turned out, that the second disk above the filament spool on the turntable isn’t really needed (the spindle’s construction is self-supporting and the box’s top keeps the filament on the spindle), I recycled the spare plywood disk in the second filament box: It got promoted to be the turntable. (If you don’t have an extra plywood disk at hand, see here how to cut the disk out of a rectangular sheet of plywood with a Dremel).

Needing even less wooden parts (no front side, no plywood for the turntable), the remaining material was even cheaper to get. Including the sheet of transparent plastic (“Hobby Glass”, a sheet of 2mm transparent LDPE, 25x50cm), the whole stuff cost me less than 5€ (!).

IMG_0710.JPG

Here’s the updated part list for the box:

QtySize (mm)Material
2310 x 310MDF 10mm
2310 x 120MDF 10mm
1290 x 120MDF 10mm
1280 x 280Plywood 4mm
1~ 300 x 130 Transparent plastic, acrylic, glass...

There were some requests for detailed drawings, so here you go:

(These drawings are also available as PDF. I added them to thing 3640 on thingiverse.com.)

The change in design is, that -instead of a front wall- there’s a groove for a sheet of transparent plastic (or acrylic, or glass, or whatever).

If you got a circular saw, the grooves are quite easy to make: Adjust the circular saw blade’s height to about half the MDF thickness (i.e. if you use 10mm MDF, adjust the saw to 5mm). Then use the saw’s stop to saw the groove 10mm from the front side of the bottom, top, left and right parts (I hope I’ve got the technical terms about right in English…).

If you don’t have a circular saw at hand (I don’t!), you might use a Dremel to cut the grooves. That’s slightly more work and probably not as exact, but it’s good enough:

IMG_0708.JPG

After cutting the grooves and drilling all holes, the assembly of the box is quite easy. I used some glue for additional stability.

IMG_0712.JPG

Then I did measure the final width of the front window (including the depth of the grooves).

Cutting the LDPE sheet was very easy: After slightly slitting the sheet with a box cutter, the sheet can be broken at a table’s edge. It’s like cutting glass, only with a knife and without the cullets.

IMG_0722.JPG

Now I was able to mark the final height of the window:

IMG_0721.JPG

Another LDPE-cut later, the box was almost finished:

IMG_0723.JPG

I didn’t change the inner construction of the box. So all printed parts, ball bearings and rods are the same as in the first box.

I added one last improvement to the box’s turntable: Since the filament roll tends to loosen up a little bit on the turntable, it can happen that some loose filament “falls” from the turntable. That’s usually not a big problem, but it could lead to a turntable-jam.

To avoid that, I used some paper (160g/m2) to build kind of a “cake setting ring” around the turntable (maybe one could actually use a real cake setting ring for this?).

IMG_0729.JPG

The paper ring catches the loose filament windings, but it doesn’t interfere with the unwinding mechanism itself.