The Smell of Molten Projects in the Morning

Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.

Day: January 20, 2012

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