Zire 71 Printed Button Shield

After fixing that old plate, I just had to do this:

Zire 71 protector - solid model
Zire 71 protector - solid model

Which pretty much fills up the build platform:

Zire 71 protector - on build platform
Zire 71 protector - on build platform

And fits perfectly:

Zire 71 protector in place
Zire 71 protector in place

It’s printed with 100% infill to produce a solid plastic plate.

In retrospect, I think it’d work better if I put the notch on the bottom side with a bit of support, so that the glass-smooth surface faced the Zire. Maybe next time?

The OpenSCAD source code:

// Protector plate for Zire 71 PDA
// Ed Nisley KE4ZNU - Jan 2012

//-------
//- Extrusion parameters must match reality!
//  Print with +0 shells, 3 solid layers, 0.2 infill

ThreadThick = 0.25;
ThreadWidth = 2.0 * ThreadThick;

Protrusion = 0.1;           // make holes end cleanly

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

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

$fn=8*4;

Length = 110;
Width = 73;
Thickness = IntegerMultiple(2.0,ThreadThick);
CornerRadius = 5.0;

NotchLength = 20;

PocketWidth = 22;
PocketLength = 12;
PocketRadius = 3.0;
PocketOffsetX = -1;
PocketOffsetY = 10;

SlotLength = 20;
SlotWidth = IntegerMultiple(8.0,ThreadWidth);
SlotDepth = IntegerMultiple(0.75,ThreadThick);

//-------

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);
}

//-------
// Outer section of plate
//  with nice rounded edges

module PlateHalf() {

  translate([0,0,Thickness/2])
    difference() {
      minkowski(convexity=3) {
        cube([(Width - SlotWidth)/2 - 2*CornerRadius,(Length - 2*CornerRadius),(Thickness - 2*Protrusion)],center=true);
        cylinder(r=CornerRadius,h=Protrusion);
      }
      translate([PocketOffsetX,PocketOffsetY - Length/2,0])
        minkowski() {
          cube([PocketWidth - 2*PocketRadius,PocketLength - 2*PocketRadius,Thickness],center=true);
          cylinder(r=PocketRadius,h=Protrusion);
        }
    }
}

//-------

ShowPegGrid();

translate([(Width - SlotWidth)/4 + SlotWidth/2,0,0])
  PlateHalf();

translate([-(Width - SlotWidth)/4 - SlotWidth/2,0,0])
  mirror([1,0,0])
    PlateHalf();

difference() {
  translate([0,0,(Thickness - SlotDepth)/2])
    cube([SlotWidth + 2*Protrusion,Length - 2*SlotLength + SlotWidth,(Thickness - SlotDepth)],center=true);
  for (Index=[-1,1])
    translate([0,(Index*(Length/2 - SlotLength + SlotWidth/2)),-Protrusion])
      cylinder(r=SlotWidth/2,h=Thickness + 2*Protrusion);
}