MPCNC: Custom mods and part of a dickbutt

I’ve posted two custom parts for the MPCNC: a wire harness and a customizable end-stop holder.

2016-07-10 23_45_57-Estlcam Version 8.507 dickbutt.e8

This test model works as well in 2D as it does in 3D!

I tried a test run of the Optimal Fabrication Test Model (it’s dickbutt…we talked about this).

Results were…mixed. It started out strong by making key outline portions, so I left the room. I came back when I heard the spindle inexplicably struggling from downstairs. I come back to find the spindle has sunk all the way into the foam, and the nut that mounts the endmill to the tool has itself ground a sizable trench through the foam. Bits of foam are everywhere.

It turns out two separate failures happened. First, the Z coupler came loose…that’s my fault, as the plans called for nylon locknuts, but I couldn’t find any locally, so I used plain hex nuts, so the screws tightening it vibrated loose. Locknuts: ordered.

Second, there was a flaky connection on the X-axis, which is why it’s a vertical trench instead of a vaguely dickbutt-shaped trench. Apparently the wire I used doesn’t like to crimp well in Dupont connectors, so I crunched them all harder and added a bit of solder to be sure.

I 3D printed a pen holder to attach to the tool, so I can do ink-based tests while I work out the kinks. I did a dickbutt print on the same crappy foam, offsetting it a bit upward. The result is surprisingly good, given that the foam is nowhere near level, and I used the same program that assumes a 1/8″ endmill. Look at the solid ink on those eyes…nice!

2016-07-10 23.42.03

Joining GT2 belt into closed loops

The task.

I was building a little robot, and I wanted belt-driven four-wheel drive using GT2 belt (an inexpensive timing belt common in 3D printers). The problem: I only had bulk GT2 belt, not closed loops (see extremely advanced diagram on right).

For my first attempt, I used end-slips to cut out the teeth from part of the belt, then super-glued it to the back of the other side. This works okay, but the joint was very inflexible owing to the near doubling of the thickness, and it eventually came apart after a few days use.

I’ve since found a better solution. What we need is a backing: a material I could adhere to the back of both sides of the belt, and which would be strong, flexible, and compatible with superglue.

I found such a substance in my trash can! When you buy 3D printing filament, it usually 2016-06-19 19.51.38bcomes vacuum-sealed in clear plastic to keep it dry. The parts of this plastic that have been heat-pressed together are strong and flexible without stretching — it’s the perfect belt backing!

So I cut a narrow strip and super-glued it to the back of one end of the belt. Superglue dries hard, so I put down the glue in stripes so that the belt would still be flexible. After it dried a little, I glued the other end of the belt on, making sure to provide glue at the joint itself as well.

I let it dry under a weight for a few minutes, and the joint came out almost as flexible as the belt itself. The resulting bond has no give when stretched, goes over pulleys well, and survived the maximum tension I could put on the pulley by hand.

Pictures of belt on the end result (a little yellow robot):

2016-06-19 19.49.44b 2016-06-19 19.50.20b 2016-06-19 19.50.50b 2016-06-19 20.04.26b 2016-06-19 20.04.32b

MC Escher “Concentric Rinds” in 3D

I recently saw the M.C. Escher exhibit at the NC Museum of Art, and one piece that stuck with me was Concentric Rinds:

MC Escher - Concentric Rinds, 1953

The geometry bugged me for a while until I finally figured it out and sketched it up in OpenSCAD:

mc escher - concentric rinds - document

Animated:

mc escher - concentric rinds - anim - transparent

Here’s a cleaned up version of the OpenSCAD script to generate it – it’s surprisingly simple:

module torus_strip(r, width, thickness) {
    rotate_extrude(convexity = 10)
        translate([r, 0, 0])
        square([thickness,width], center=true);
}

module the_ring(r) {
    torus_strip(r, 2, 0.5);
}

$fn = 256;

rotate(180*$t) 
for (r=[50,40,30,20]) color([1-r/50+0.5,1-r/50+0.1,r/50+0.1]) {

    rotate([ 0, 0, 0]) the_ring(r);
    rotate([90, 0, 0]) the_ring(r);
    rotate([ 0,90, 0]) the_ring(r);

    for (tt=[-60,-120]) rotate([0, tt, 0]) 
        for (t=[0:45:360-1]) rotate([ t, 0, 0]) 
            the_ring(r);
        
}

It took a while to figure out the geometry, but I finally got it when I saw there were three rings that were simply orthogonal, plus two arrays of 8 rings that intersected at the octagons. That’s how I modeled it above.

I also played with the animation stuff and got this:

mc escher - concentric rinds - xformer - anim2

Which I think is also neat.

That’s all.

3D crap

2015-04-24 23.09.21cI got a 3D printer (a PrintrBot Simple Metal model 1403), and it’s been great.  I don’t have time to write much, so I’ll share highlights:

  • I’m on Thingiverse here. I’ve already put up a bunch of crap, including a customizable omni wheel design.
  • I’ve been learning OpenSCAD, a free tool that lets you write code to generate 3D solids.
  • There’s no arc function in OpenSCAD, and the solutions I found online were inefficient or only worked for certain inputs, so I wrote a new one.  See below:
module arc(r,a1,a2,ir=0) {
    // normalize to 0..360 (even for negatives)
    a1n = (a1 % 360 + 360) % 360; 
    a2n = (a2 % 360 + 360) % 360;
    difference() {
        circle(r);
        if (ir != 0) circle(ir); // if inner radius given, subtract it away
            
        // get the a1 to interpolate to, adding a revolution if going the long way
        a1next = a2n>a1n ? a1n + 360 : a1n; 
        
        polygon([
            [0,0],
            [cos(1.00*a2n + 0.00*a1next)*2*r,sin(1.00*a2n + 0.00*a1next)*2*r],
            [cos(0.66*a2n + 0.33*a1next)*2*r,sin(0.66*a2n + 0.33*a1next)*2*r],
            [cos(0.33*a2n + 0.66*a1next)*2*r,sin(0.33*a2n + 0.66*a1next)*2*r],
            [cos(0.00*a2n + 1.00*a1next)*2*r,sin(0.00*a2n + 1.00*a1next)*2*r],
        ]);
    }
}

// test array
for (a = [-360:60:360], b = [-360:60:360]) {
    translate([a,b,0])  linear_extrude(height=10) arc(25,a,b);
}

2015-04-25 15_41_57-arc.scad_ - OpenSCAD