Advertisements

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

  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…