diff --git a/accessories/character_retainer_platform.scad b/accessories/character_retainer_platform.scad new file mode 100644 index 0000000..66c82ab --- /dev/null +++ b/accessories/character_retainer_platform.scad @@ -0,0 +1,21 @@ +// This is the base of the character used to play a story. +// It is meant to be pressed on the retainer ring on the Fabula Storyteller and snap in place. +// The retainer ring has tree bumps that snap in the gap at 4mm height + + +module character_retainer_platform() { + $fn = 128; + cylinder(d1 = 38, d2 = 40, h = 2); + translate([0, 0, 2]) cylinder(d2 = 38, d1 = 40, h = 1); + translate([0, 0, 3]) cylinder(d = 38, h = 1); + translate([0, 0, 4]) cylinder(d1 = 38, d2 = 40, h = 1); + difference() { + translate([0, 0, 5]) cylinder(d = 40, h = 3); + // This is the gap to place a 2,5cm diameter adhesive NFC tag. + // Set your slicer to pause the print at 5,5mm height and insert + // the tag during the print + translate([0, 0, 5]) cylinder(d = 28, h = 1); + } +} + +character_retainer_platform(); diff --git a/enclosure/character_retainer_ring.scad b/enclosure/character_retainer_ring.scad new file mode 100644 index 0000000..083bbbb --- /dev/null +++ b/enclosure/character_retainer_ring.scad @@ -0,0 +1,27 @@ +// The support the character is inserted in when playing a story. +// Mounted on the shell with two screws. +// To be printed in clear plastic because it receives the light from the RGB led. + +module character_retainer_ring() { + $fn = 128; + screw_hole_diameter = 2; + difference() { + // Body + cylinder(d = 59.5, h = 4); + cylinder(d = 40.5, h = 10, center = true); + // 5mm LED hole + translate([0, 25, 0]) sphere(d = 5, center = true); + // Screw holes + translate([25, 0, 0]) cylinder(d = screw_hole_diameter, h = 6, center = true); + translate([-25, 0, 0]) cylinder(d = screw_hole_diameter, h = 6, center = true); + } + + // Retainers + translate([0, 0, 3]) { + rotate([0, 0, 30])translate ([19, -2, 0]) cube([1.5, 4, 1]); + rotate([0, 0, 150]) translate ([19, -2, 0]) cube([1.5, 4, 1]); + rotate([0, 0, 270]) translate ([19, -2, 0]) cube([1.5, 4, 1]); + } +} + +character_retainer_ring(); diff --git a/enclosure/cutouts.scad b/enclosure/cutouts.scad index 5d0663d..5cd9d75 100644 --- a/enclosure/cutouts.scad +++ b/enclosure/cutouts.scad @@ -24,7 +24,17 @@ module keycap() { cylinder(h = 10, d = 20, $fn = 128); } - +module character_retainer_cutout() { + $fn = 128; + // Ring cutout + cylinder(d = 60, h = 5); + // 5mm LED hole + translate([0, 25, 10]) cylinder(d = 5, h = 15, center = true); + // Screw holes + translate([25, 0, 10]) cylinder(d = screw_hole_diameter, h = 15, center = true); + translate([-25, 0, 10]) cylinder(d = screw_hole_diameter, h = 15, center = true); +} //usb_cutout(); -//speaker_grille(); \ No newline at end of file +//speaker_grille(); +character_retainer_cutout(); \ No newline at end of file diff --git a/enclosure/fabula_enclosure.scad b/enclosure/fabula_enclosure.scad index d35ef43..7045df2 100644 --- a/enclosure/fabula_enclosure.scad +++ b/enclosure/fabula_enclosure.scad @@ -4,7 +4,7 @@ use // FABULA open source storyteller enclosure -// TODO: open hardware logo, Fabula logo, move switch cutout, tag slot with led mount +// TODO: open hardware logo, Fabula logo, tag slot with led mount box_cut_height = 10; pcb_screw_size = 3; @@ -53,6 +53,7 @@ module fabula_enclosure_top() { translate([35.5, -12.5, -30]) keycap(); translate([44.5, 23.5, -30]) keycap(); translate([61, -2, -30]) keycap(); + translate([-50, 0, -30.5]) rotate([0, 0, 90]) character_retainer_cutout(); } } diff --git a/enclosure/test_fit.scad b/enclosure/test_fit.scad index 52aae0b..2c227bb 100644 --- a/enclosure/test_fit.scad +++ b/enclosure/test_fit.scad @@ -3,6 +3,9 @@ use use use +use + +explode_view = false; module test_fit_components() { @@ -18,8 +21,15 @@ module test_fit_components() { translate([12.6, -35.6, 43]) next_keycap(); translate([-23.4, -44.6, 43]) prev_keycap(); translate([2.05, -61.05, 43]) vol_down_keycap(); + + // Components mounted on the external shell + translate([0, 50, 45]) character_retainer_ring(); } //test_fit_components(); -translate([0, 0, 20]) rotate([0, 0, -90]) rotate([180, 0, 0]) fabula_enclosure_bottom(); -translate([0, 0, 20]) rotate([0, 0, -90]) rotate([180, 0, 0]) fabula_enclosure_top(); \ No newline at end of file +//translate([0, 0, explode_view ? -20 : 20]) rotate([0, 0, -90]) rotate([180, 0, 0]) fabula_enclosure_bottom(); +translate([0, 0, explode_view ? 100 : 20]) rotate([0, 0, -90]) rotate([180, 0, 0]) fabula_enclosure_top(); + +//DEBUG +//translate([0, 50, 45]) character_retainer_ring(); +//DEBUG \ No newline at end of file