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);
}
About these ads

  1. #1 by Erik on 2013-02-24 - 20:22

    Ah… you haven’t been to the NC coast in a while, perhaps. From Hatteras north to VA line is basically empty during the week and a DC Suburb on the weekend. You wouldn’t recognize the place. Sad, in some ways, but I bet the DC lawyers don’t realize their vacation houses are right in the cradle of Monster Truck Racing (over on the mainland in Currituck, actually a little south of there).

    • #2 by Ed on 2013-02-24 - 20:44

      you haven’t been to the NC coast in a while, perhaps

      Guilty as charged!

      Actually, the Raleigh area was fairly well gentrified, even far out in the non-development area where we lived, so I’m also guilty of perpetuating stereotypes. On the other paw, there were plenty of junkers in out of the way places…