diff --git a/resources/3D_Design2.png b/resources/3D_Design2.png index 8da9e1c..17a23d3 100644 Binary files a/resources/3D_Design2.png and b/resources/3D_Design2.png differ diff --git a/resources/3D_Print5.jpg b/resources/3D_Print5.jpg index fc2964d..036a1ea 100644 Binary files a/resources/3D_Print5.jpg and b/resources/3D_Print5.jpg differ diff --git a/scad/components/buttons.scad b/scad/components/buttons.scad index 1ca4cdb..c033794 100644 --- a/scad/components/buttons.scad +++ b/scad/components/buttons.scad @@ -16,3 +16,26 @@ module button() rotate([0,180,0]) screwPost(ButtonPegDepth, ButtonPegDiameter+2, ButtonPegDiameter, ButtonPegDepth, 1); } +module makeCableStrainRelief() +{ + StrainReliefHeight=4+SKIN; + + difference() + { + union() + { + // cable strain relief + translate([ScrewPostDiameter, 0, 0]) + rotate([180,0,0]) screwPost(StrainReliefHeight, ScrewPostDiameter, ScrewDiameter, StrainReliefHeight, 0); + translate([-RearWallCableGapWidth, 0, 0]) + rotate([180,0,0]) screwPost(StrainReliefHeight, ScrewPostDiameter, ScrewDiameter, StrainReliefHeight, 0); + + translate([-RearWallCableGapWidth+ScrewPostDiameter/3, -(StrainReliefHeight-SKIN)/2, -(StrainReliefHeight-SKIN)]) + cube([RearWallCableGapWidth+1, (StrainReliefHeight-SKIN), StrainReliefHeight-SKIN]); // 0.5mm to allow a bit space for the cable + translate([-RearWallCableGapWidth,-ScrewPostDiameter/2,-SKIN]) + cube([RearWallCableGapWidth+ScrewPostDiameter, ScrewPostDiameter, SKIN]); + } + translate([ScrewPostDiameter,0,-SKIN]) hole(ScrewDiameter, SKIN); + translate([-RearWallCableGapWidth,0,-SKIN]) hole(ScrewDiameter, SKIN); + } +} diff --git a/scad/components/rear.scad b/scad/components/rear.scad index cd86b56..a641e80 100644 --- a/scad/components/rear.scad +++ b/scad/components/rear.scad @@ -43,16 +43,6 @@ module makeRear() translate([BoxX_Width-FrontGapX/2, SKIN , BoxZ_Depth-RearWallZOffset-RearWallZLedge/2]) rotate([270, 0, 0]) screwPost(ScrewPostHeight, ScrewPostDiameter, ScrewDiameter, ScrewPostHeight, ScrewPostFillet); - // cable strain relief - translate([BoxX_Width-RearWallGap-RearWallCableGapXOffset+ScrewPostDiameter, BoxY_Height-CableStrainReliefYOffset, BoxZ_Depth-RearWallZOffset-SKIN]) - rotate([180,0,0]) screwPost(ScrewPostHeight, ScrewPostDiameter, ScrewDiameter, ScrewPostHeight, ScrewPostFillet); - translate([BoxX_Width-RearWallGap-RearWallCableGapXOffset-RearWallCableGapWidth, BoxY_Height-CableStrainReliefYOffset, BoxZ_Depth-RearWallZOffset-SKIN]) - rotate([180,0,0]) screwPost(ScrewPostHeight, ScrewPostDiameter, ScrewDiameter, ScrewPostHeight, ScrewPostFillet); - StrainReliefHeight=2; - CableThickness = 0; - translate([BoxX_Width-RearWallGap-RearWallCableGapXOffset-RearWallCableGapWidth+ScrewPostDiameter/2, BoxY_Height-CableStrainReliefYOffset-StrainReliefHeight/2, BoxZ_Depth-RearWallZOffset-SKIN-ScrewPostHeight+CableThickness]) - cube([RearWallCableGapWidth, StrainReliefHeight, ScrewPostHeight-CableThickness]); // 0.5mm to allow a bit space for the cable - // support triangles for stability SupportWidth = RearWallZLedge-SKIN*2; // left @@ -66,26 +56,3 @@ module makeRear() rotate([270, 180, 0]) prism(SKIN, SupportWidth, SupportWidth); } -module makeCableStrainRelief() -{ - StrainReliefHeight=4+SKIN; - - difference() - { - union() - { - // cable strain relief - translate([ScrewPostDiameter, 0, 0]) - rotate([180,0,0]) screwPost(StrainReliefHeight, ScrewPostDiameter, ScrewDiameter, StrainReliefHeight, 0); - translate([-RearWallCableGapWidth, 0, 0]) - rotate([180,0,0]) screwPost(StrainReliefHeight, ScrewPostDiameter, ScrewDiameter, StrainReliefHeight, 0); - - translate([-RearWallCableGapWidth+ScrewPostDiameter/3, -(StrainReliefHeight-SKIN)/2, -(StrainReliefHeight-SKIN)]) - cube([RearWallCableGapWidth+1, (StrainReliefHeight-SKIN), StrainReliefHeight-SKIN]); // 0.5mm to allow a bit space for the cable - translate([-RearWallCableGapWidth,-ScrewPostDiameter/2,-SKIN]) - cube([RearWallCableGapWidth+ScrewPostDiameter, ScrewPostDiameter, SKIN]); - } - translate([ScrewPostDiameter,0,-SKIN]) hole(ScrewDiameter, SKIN); - translate([-RearWallCableGapWidth,0,-SKIN]) hole(ScrewDiameter, SKIN); - } -} diff --git a/scad/components/top_and_bottom.scad b/scad/components/top_and_bottom.scad index d96c31c..2f63009 100644 --- a/scad/components/top_and_bottom.scad +++ b/scad/components/top_and_bottom.scad @@ -12,6 +12,17 @@ module imprint(x,y,z) } } +// cable strain relief (attached to the top shell) +module makeTopCableStrainRelief(height) +{ + translate([ScrewPostDiameter, 0, 0]) + rotate([180,0,0]) screwPost(height, ScrewPostDiameter+1, ScrewDiameter, height, 0); + translate([-RearWallCableGapWidth, 0, 0]) + rotate([180,0,0]) screwPost(height, ScrewPostDiameter+1, ScrewDiameter, height, 0); + StrainReliefWidth=3; + translate([-RearWallCableGapWidth+ScrewPostDiameter/2, -StrainReliefWidth/2, -height]) + cube([RearWallCableGapWidth, StrainReliefWidth, height]); +} // little mounting point, so the base plate does not drop when glueing to the top shell module makeGlueHelper(Width) @@ -47,6 +58,11 @@ module makeGlueMountingPoints() { union() { + // strain relief, attached to the top shell (which is the most rigid structure) + if (STRAIN_RELIEF == "yes") + translate([BoxX_Width-RearWallGap-RearWallCableGapXOffset-7, BoxY_Height, BoxZ_Depth-RearWallZLedge-RearWallZOffset]) + rotate([65+180,0,0]) makeTopCableStrainRelief(7); + for (z=[FrontZ, RearZ, (FrontZ+RearZ)/2]) { // right diff --git a/scad/main.scad b/scad/main.scad index 5684a96..91f2b3b 100644 --- a/scad/main.scad +++ b/scad/main.scad @@ -23,6 +23,9 @@ IMPRINT = "MADE IN GERMANY"; // 30 // Distance of the components (when showing 'exploded' elements) SEPARATION = 30; // [0: 1: 100] +// Add cable strain-relief to top shell +STRAIN_RELIEF = "yes"; // [no:No,yes:Yes] + /* [Hidden] */ // Use prototype cutouts to save filament? prototype = "no"; // [no:No,yes:Yes]