chiark / gitweb /
filamentspool: FilamentGuideSpacer: separate out slop (nfc)
[reprap-play.git] / filamentspool.scad
index a7f2abb8ac28124569ea8117b331aad34c61876d..99246c99094b49bf1c79a2ffedd30df0604632be 100644 (file)
@@ -1,7 +1,100 @@
 // -*- C -*-
 
-fdia=2.85;
-lightduty=false;
+// filamentspool.scad
+// 3D design for filament spools to hold coils as supplied by Faberdashery
+//
+
+//
+// Copyright 2012,2013,2016 Ian Jackson
+//
+// This work is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This work is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this work.  If not, see <http://www.gnu.org/licenses/>
+//
+
+//
+// Each spool is a hub with 3 or 4 arms.  Each arm has a cup for
+// holding the filament.  The effective diameter can be adjusted by
+// setting the cup into a different seat in the arm.  The cups are
+// held on with simple clips, so the filement coil can easily be
+// removed and replaced.
+//
+// This file (and its includes) can generate:
+//
+//   - Heavy duty 4-armed spool suitable for holding a 100m
+//     Faberdashery coil on the spool arm of a Lulzbot TAZ-5.
+//
+//     Set
+//           fdia=2.85
+//           lightduty=false
+//     And print following parts
+//            Hub
+//            ArmEnd x 4
+//            FilamentCup x 4  (or FilamentCupPair x 2)
+//            CupSecuringClip x 4
+//
+//     You will also need  4 x M4 machine screws and nuts.
+//
+//   - Light duty 3-armed spool suitable for up to around 30m
+//     of Faberdashery 2.85mm PLA.
+//
+//     Set
+//           fdia=2.85
+//           lightduty=true
+//     And print following parts
+//           Hub
+//           ArmEnd x 3
+//           FilamentCup x 3  (or FilamentCup + FilamentCupPair)
+//           CupSecuringClip x 3
+//           TowerDoveClipPin x 6
+//
+//     When assembling, insert one TowerDoveClipPin from each side,
+//     joining each ArmEnd to the Hub with two TowerDoveClipPins.
+//     Modest force with pliers is good to seat them properly.
+//
+//     (note that the light duty and heavy duty CupSecuringClips
+//      are slightly different)
+//
+// When mounting either spool on the TAZ-5 spool arm, put the `pointy'
+// end of the hub towards the printer - ie, put put the spool on
+// `backwards'.  This ensures that the spool's arms will clear the
+// printer framework.
+//
+// For the above, I generally used the Cura `Standard' PLA profile.
+//
+//   - Storage arm suitable for screwing to walls, bookshelves,
+//     etc. (requires non-countersunk M4 screws); will hold two
+//     heavy duty spools each with a 100m coil.
+//
+//     Set
+//           fdia=2.85
+//           lightduty=false
+//     And print one of these, according to taste
+//            StorageArmLeft
+//            StorageArmRight
+//
+//     NB that the `light duty' version of this is shorter and
+//     will only take two `light duty' spools.
+//
+// For the above, I used the Cura `High detail' PLA profile because
+// I wanted it pretty, but the `Standard' profile should do fine.
+//
+//   - Spool (in many parts) for handing 1.75mm filament, printable
+//     on, and with parts for mounting on, a Reprappro Huxley.
+
+
+fdia=2.85; // or 1.75
+lightduty=false; // or true
+
 
 slop=0.5;
 bigslop=slop*2;
@@ -469,10 +562,15 @@ storarm_screw_hole = 4;
 storarm_screw_hole_slop = 0.5;
 storarm_besides_hole = 4;
 
+storarm_under_hole = 5;
+storarm_screw_hole_head = 8.8;
+storarm_screw_hole_head_slop = 1.5;
+
 // calculated
 
 storarm_axlerad = hubaxlerad - storarm_axleslop;
-storarm_mainlen = hubaxlelen + (storarm_cope_hubaxle_mk1 ? 10 : 0);
+storarm_mainlen = hubaxlelen*2 + storarm_axleslop
+  + (storarm_cope_hubaxle_mk1 ? 10 : 0);
 storarm_totlen = storarm_mainlen + storarm_hooklen;
 
 storarm_mid_off_y = storarm_axlerad;
@@ -528,7 +626,7 @@ module StorageArmAtMountingHoles(){
   }
 }
 
-module StorageArm(){ ////toplevel
+module StorageArmRight(){ ////toplevel
   shear = storarm_hookheight / (storarm_mainlen/2);
 
   StorageArmDiagPart(-1, storarm_mainlen/2+1, shear, 0);
@@ -549,9 +647,95 @@ module StorageArm(){ ////toplevel
        StorageArmDiagPart(-1, 0, shear, 0);
       }
       StorageArmAtMountingHoles(){
-       cylinder(r=1, h=10);
+       cylinder(r= storarm_screw_hole_head/2,
+                h=10);
+      }
+    }
+    StorageArmAtMountingHoles(){
+      translate([0,0,-1])
+       cylinder(r= (storarm_screw_hole + storarm_screw_hole_slop)/2 ,
+                h=20);
+      translate([0,0,storarm_under_hole])
+       cylinder(r= (storarm_screw_hole_head + storarm_screw_hole_head_slop)/2,
+                h=20);
+    }
+  }
+}
+
+module StorageArmLeft(){ ////toplevel
+  mirror([1,0,0]) StorageArmRight();
+}
+
+module StorArmHoleTest(){ ////toplevel
+  sz = storarm_screw_hole_head + storarm_besides_hole*2;
+  intersection(){
+    StorageArmRight();
+    translate([-50, -storarm_base_off_y, -1])
+      cube([100, sz, sz+1]);
+  }
+}
+
+
+//----- filament guide spacer -----
+
+guide_armdia = 15.0;
+guide_armwidth = 10.2;
+
+guidefilclip_outerdia = 22.8;
+
+guidespacer_armslop = 0.75;
+
+guidespacer_prongprotrude = 4;
+guidespacer_thick = 1.6;
+guidespacer_len = 15.3 + 0.75;
+
+// calculated
+
+guidespacer_armdia = guide_armdia + guidespacer_armslop;
+guidespacer_armwidth = guide_armwidth + guidespacer_armslop;
+
+guidespacer_wingheight = (guidefilclip_outerdia - guidespacer_armdia)/2;
+
+module FilamentGuideArmTemplate(extra=0){
+  intersection(){
+    circle(r= (guidespacer_armdia/2) + extra);
+    square(center=true, [guidespacer_armwidth+extra*2,
+                        guidespacer_armdia + extra*2 + 10]);
+  }
+}
+
+module FilamentGuideSpacerInnerTemplate(){
+  FilamentGuideArmTemplate();
+  translate([0, -guidespacer_armdia/2])
+    square(center=true, [guidespacer_armwidth - guidespacer_prongprotrude,
+                        guidespacer_armdia]);
+}
+
+module FilamentGuideSpacer(){ ////toplevel
+  difference(){
+    union(){
+      linear_extrude(height= guidespacer_len)
+       FilamentGuideArmTemplate(extra= guidespacer_thick);
+      for (angle=[26, 60]) {
+       for (m=[0,1]) {
+         mirror([m,0,0]) {
+           rotate([0,0,angle]) {
+             hull(){
+               for (t=[[0, guidespacer_wingheight],
+                       [guidespacer_len-1, -guidespacer_wingheight]])
+                 translate([0,0, t[0] + 0.5])
+                   cube([guidespacer_thick, guidespacer_armdia + t[1]*2,
+                     1],
+                        center=true);
+             }
+           }
+         }
+       }
       }
     }
+    translate([0,0,-1])
+      linear_extrude(height= guidespacer_len+5)
+      FilamentGuideSpacerInnerTemplate();
   }
 }
 
@@ -572,5 +756,6 @@ module Demo(){
 //AxleWasher();
 //AxlePin();
 //AxleFrictionWasher();
-StorageArm();
+//StorageArmLeft();
+//StorArmHoleTest();
 //Demo();