Advertisements

Archive for February 24th, 2013

Printing Scale Model Concrete Blocks

For reasons that undoubtedly make sense to him, my buddy Aitch is moving to coastal NC. Seeing as how we lived in Raleigh for half a decade, I figure he needs some hints on how to blend in…

Toy cars up on blocks

Toy cars up on blocks

The solid model looks about the way you’d expect:

Concrete block - solid model

Concrete block – solid model

The webs are slightly thinner than in real life, but it looks OK to me. The web came out slightly over 3 thread widths = 1.5 mm, to ensure they get a bit of fill rather than being two distinct threads. I originally tried making the web exactly 3 threads wide, which produced tiny dots of fill on the sides and corners. They printed with 0.20 infill; they’d print faster with 1.00 infill or all-solid layers.

You’ll want to create a pile o’ blocks at once, of course, although this array took about two hours:

Concrete blocks - build platform

Concrete blocks – build platform

The OpenSCAD source code:

// Scale model concrete block
// Ed Nisley KE4ZNU February 2013

// Extrusion parameters must match reality!
// Print with +0 shells and 3 solid layers

ThreadThick = 0.25;
ThreadWidth = 2.0 * ThreadThick;

function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);

Protrusion = 0.1;           // make holes end cleanly

//----------------------
// Dimensions

Scale = (1/25) * (3*ThreadWidth);

BlockWidth = Scale * 190;
BlockLength = Scale * 390;
BlockHeight = BlockWidth;

WebWidth = Scale * 30;

CoreSize = [(BlockWidth - 2*WebWidth),(BlockLength - 4*WebWidth)/2,BlockHeight];

CornerRadius = WebWidth/2;

//----------------------
// Useful routines

module ShowPegGrid(Space = 10.0,Size = 1.0) {

    Range = floor(50 / Space);

    for (x=[-Range:Range])
        for (y=[-Range:Range])
            translate([x*Space,y*Space,Size/2])
            %cube(Size,center=true);

}

//-------------------
// Component parts

module Core(Size,Radius) {
    translate([0,0,(Size[2] - Protrusion)/2])
        minkowski() {
            cube([(Size[0] - 2*Radius),(Size[1] - 2*Radius),Size[2]],center=true);
            cylinder(r=Radius,h=Protrusion,$fn=8);
        }
}

//----------------------
// Build it!

ShowPegGrid();

difference() {
    translate([0,0,BlockHeight/2])
        cube([BlockWidth,BlockLength,BlockHeight],center=true);
    for (i = [-1,1])
        translate([0,i*(CoreSize[1] + WebWidth)/2,0])
           Core(CoreSize,CornerRadius);
    for (i = [-1,1])
        translate([0,i*3*(CoreSize[1] + WebWidth)/2,0])
           Core(CoreSize,CornerRadius);
}
Advertisements

2 Comments