diff --git a/cartridge.scad b/cartridge.scad index d19f507..86c81a4 100644 --- a/cartridge.scad +++ b/cartridge.scad @@ -1,5 +1,3 @@ -$fn = $preview ? 32 : 128; - // Cartridge base dimensions cartridge_width = 102; cartridge_length = 133; @@ -61,8 +59,6 @@ nfc_coin_depth = 1; nfc_coin_diameter = 25; nfc_coin_tolerance = 0.1; -cartridge(); - module cartridge() { difference() { base(); @@ -189,37 +185,29 @@ module nfc_coin() { module footprint() { hull() { - translate([ - cartridge_length - back_vertical_fillet_radius, - back_vertical_fillet_radius, - ]) { - circle(back_vertical_fillet_radius); - // translate([0, cartridge_width - back_vertical_fillet_radius]) - // circle(back_vertical_fillet_radius); - } - translate([ - cartridge_length - back_vertical_fillet_radius, - cartridge_width - back_vertical_fillet_radius, - ]) circle(back_vertical_fillet_radius); - translate([ - tape_guide_depth + side_vertical_fillet_radius * tan(0.5 * atan(tape_guide_slope)), - side_vertical_fillet_radius, - ]) circle(side_vertical_fillet_radius); - translate([ - tape_guide_depth + side_vertical_fillet_radius * tan(0.5 * atan(tape_guide_slope)), - cartridge_width - side_vertical_fillet_radius, - ]) circle(side_vertical_fillet_radius); - translate([ - front_vertical_fillet_radius, - tape_guide_width + front_vertical_fillet_radius * tan(0.5 * atan(1 / tape_guide_slope)), - ]) circle(front_vertical_fillet_radius); - translate([ - front_vertical_fillet_radius, - cartridge_width - tape_guide_width - front_vertical_fillet_radius * tan(0.5 * atan(1 / tape_guide_slope)), - ]) circle(front_vertical_fillet_radius); + one_side_vertical_fillets(); + translate([0, cartridge_width]) mirror([0, 1]) one_side_vertical_fillets(); } } +module one_side_vertical_fillets() { + translate([ + cartridge_length - back_vertical_fillet_radius, + back_vertical_fillet_radius, + ]) + circle(back_vertical_fillet_radius); + translate([ + tape_guide_depth + side_vertical_fillet_radius * tan(0.5 * atan(tape_guide_slope)), + side_vertical_fillet_radius, + ]) + circle(side_vertical_fillet_radius); + translate([ + front_vertical_fillet_radius, + tape_guide_width + front_vertical_fillet_radius * tan(0.5 * atan(1 / tape_guide_slope)), + ]) + circle(front_vertical_fillet_radius); +} + module tracks() { track_interval = cartridge_width - 2 * track_side_inset; translate([track_front_inset, track_side_inset, cartridge_height]) diff --git a/justfile b/justfile new file mode 100644 index 0000000..9e79d4b --- /dev/null +++ b/justfile @@ -0,0 +1,6 @@ +default: (build "cartridge") (build "receptacle") + +build target: + echo 'use <{{target}}.scad>; $fn = 128; {{target}}();' > part.scad + openscad -o {{target}}.stl part.scad + rm part.scad diff --git a/receptacle.scad b/receptacle.scad new file mode 100644 index 0000000..7e3fd39 --- /dev/null +++ b/receptacle.scad @@ -0,0 +1,93 @@ +include ; + +cartridge_clearance = 0.3; + +module receptacle() { + difference() { + box(); + hole(); + feet_grooves(); + track_grooves(); + } + tape_guides(); +} + +module box() { + translate([ + -5, + -cartridge_clearance - 5, + -cartridge_clearance - 10, + ]) + cube([ + cartridge_length + 5 - grip_count * grip_wedge_width - back_vertical_fillet_radius, + cartridge_width + 10, + cartridge_height + 20, + ]); +} + +module hole() { + translate([ + -cartridge_clearance, + -cartridge_clearance, + -cartridge_clearance, + ]) + cube([ + cartridge_length + cartridge_clearance, + cartridge_width + 2 * cartridge_clearance, + cartridge_height + 2 * cartridge_clearance, + ]); +} + +module feet_grooves() { + foot_groove_interval = cartridge_width - 2 * foot_side_inset - foot_width + cartridge_clearance; + foot_groove(); + translate([0, foot_groove_interval]) foot_groove(); +} + +module foot_groove() { + translate([ + foot_front_inset - cartridge_clearance, + foot_side_inset - cartridge_clearance, + -foot_height, + ]) + cube([ + cartridge_length + 2 * cartridge_clearance, + foot_width + cartridge_clearance, + foot_height, + ]); +} + +module track_grooves() { + translate([ + track_back_inset + cartridge_clearance, + 0, + cartridge_height + cartridge_clearance + ]) + rotate([0, 90, 0]) { + translate([0, track_side_inset]) track_groove(); + translate([0, cartridge_width - track_side_inset]) track_groove(); + } +} + +module track_groove() { + cylinder( + h=cartridge_length + cartridge_clearance, + r=track_radius + cartridge_clearance, + ); +} + +module tape_guides() { + translate([0, cartridge_width]) + mirror([0, 1]) + tape_guide(); + tape_guide(); +} + +module tape_guide() { + linear_extrude(cartridge_height + 2 * cartridge_clearance) + polygon([ + [0, 0], + [0, tape_guide_width - cartridge_clearance], + [tape_guide_depth - cartridge_clearance, 0], + ]); +}