Character platform and retainer ring
This commit is contained in:
21
accessories/character_retainer_platform.scad
Normal file
21
accessories/character_retainer_platform.scad
Normal file
@@ -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();
|
||||||
27
enclosure/character_retainer_ring.scad
Normal file
27
enclosure/character_retainer_ring.scad
Normal file
@@ -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();
|
||||||
@@ -24,7 +24,17 @@ module keycap() {
|
|||||||
cylinder(h = 10, d = 20, $fn = 128);
|
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();
|
//usb_cutout();
|
||||||
//speaker_grille();
|
//speaker_grille();
|
||||||
|
character_retainer_cutout();
|
||||||
@@ -4,7 +4,7 @@ use <cutouts.scad>
|
|||||||
|
|
||||||
// FABULA open source storyteller enclosure
|
// 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;
|
box_cut_height = 10;
|
||||||
pcb_screw_size = 3;
|
pcb_screw_size = 3;
|
||||||
@@ -53,6 +53,7 @@ module fabula_enclosure_top() {
|
|||||||
translate([35.5, -12.5, -30]) keycap();
|
translate([35.5, -12.5, -30]) keycap();
|
||||||
translate([44.5, 23.5, -30]) keycap();
|
translate([44.5, 23.5, -30]) keycap();
|
||||||
translate([61, -2, -30]) keycap();
|
translate([61, -2, -30]) keycap();
|
||||||
|
translate([-50, 0, -30.5]) rotate([0, 0, 90]) character_retainer_cutout();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
use <internal_components.scad>
|
use <internal_components.scad>
|
||||||
use <fabula_enclosure.scad>
|
use <fabula_enclosure.scad>
|
||||||
use <keys.scad>
|
use <keys.scad>
|
||||||
|
use <character_retainer_ring.scad>
|
||||||
|
|
||||||
|
explode_view = false;
|
||||||
|
|
||||||
|
|
||||||
module test_fit_components() {
|
module test_fit_components() {
|
||||||
@@ -18,8 +21,15 @@ module test_fit_components() {
|
|||||||
translate([12.6, -35.6, 43]) next_keycap();
|
translate([12.6, -35.6, 43]) next_keycap();
|
||||||
translate([-23.4, -44.6, 43]) prev_keycap();
|
translate([-23.4, -44.6, 43]) prev_keycap();
|
||||||
translate([2.05, -61.05, 43]) vol_down_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();
|
//test_fit_components();
|
||||||
translate([0, 0, 20]) rotate([0, 0, -90]) rotate([180, 0, 0]) fabula_enclosure_bottom();
|
//translate([0, 0, explode_view ? -20 : 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();
|
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
|
||||||
Reference in New Issue
Block a user