// -*- C -*-
-fdia=2.85;
-lightduty=false;
+// Filament spool for filament coils as supplied by Faberdashery
+//
+// 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)
+// CupSecuringClup 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)
+// CupSecuringClup 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)
+//
+// 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;
storarm_thick = 10;
storarm_axleslop = 4;
+storarm_base_w = 30;
+storarm_base_h = 100;
+storarm_base_d = 15;
+storarm_base_mind = 2;
+
+storarm_cope_hubaxle_mk1 = true;
+
+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_mainlen = hubaxlelen*2 + storarm_axleslop
+ + (storarm_cope_hubaxle_mk1 ? 10 : 0);
storarm_totlen = storarm_mainlen + storarm_hooklen;
+storarm_mid_off_y = storarm_axlerad;
+
+storarm_base_off_y = storarm_mid_off_y + storarm_base_h/2;
+
module StorageArmDiagPartSide(xmin, xmax){
xsz = xmax-xmin;
yuse = storarm_thick/2;
}
}
-module StorageArm(){ ////toplevel
+module StorageArmBaseTemplate(){
+ square([storarm_base_w, storarm_base_h]);
+}
+
+module StorageArmAtMountingHoles(){
+ bes = storarm_besides_hole + storarm_screw_hole;
+
+ x0 = bes;
+ x1 = storarm_base_w-bes;
+ y1 = storarm_base_h - bes;
+ y0 = bes;
+
+ for (pos=[ [x0, y1],
+ [x1, y1],
+ [x1, y0] ]) {
+ rotate([0,90,0])
+ translate([pos[0] - storarm_base_w,
+ pos[1] - storarm_base_off_y, -storarm_base_d])
+ children();
+ }
+}
+
+module StorageArmRight(){ ////toplevel
shear = storarm_hookheight / (storarm_mainlen/2);
StorageArmDiagPart(-1, storarm_mainlen/2+1, shear, 0);
translate([0, storarm_hookheight, 0])
StorageArmDiagPart(storarm_mainlen, storarm_totlen,
shear/2, -storarm_hookheight/2);
+
+ difference(){
+ union(){
+ hull(){
+ translate([-storarm_base_d, -storarm_base_off_y, storarm_base_w])
+ rotate([0,90,0])
+ linear_extrude(height=storarm_base_mind)
+ StorageArmBaseTemplate();
+ StorageArmDiagPart(-1, 0, shear, 0);
+ }
+ StorageArmAtMountingHoles(){
+ 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]);
+ }
}
//AxleWasher();
//AxlePin();
//AxleFrictionWasher();
-StorageArm();
+//StorageArmLeft();
+//StorArmHoleTest();
//Demo();