|
|
@ -1,4 +1,5 @@
|
|
|
|
include <./common/common.scad>;
|
|
|
|
use <./common/common.scad>;
|
|
|
|
|
|
|
|
use <./sprocketed_roller/sprocketed_roller_var.scad>;
|
|
|
|
|
|
|
|
|
|
|
|
PlateZ = 1.3 + 1;
|
|
|
|
PlateZ = 1.3 + 1;
|
|
|
|
PlateX = 35.1;
|
|
|
|
PlateX = 35.1;
|
|
|
@ -31,6 +32,47 @@ Standard16OffsetY = 0.75;
|
|
|
|
Super16X = 12.4;
|
|
|
|
Super16X = 12.4;
|
|
|
|
Super16Y = 7.5;
|
|
|
|
Super16Y = 7.5;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BodyZ = 50.66;
|
|
|
|
|
|
|
|
BodyY = 116.1;
|
|
|
|
|
|
|
|
BodyX = 18.44;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FrontBodyVoid = 12;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
KeySpacingY = 57.4 - .2;
|
|
|
|
|
|
|
|
KeyZ = -13.25;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BearingOuterDiameter = 21.6;
|
|
|
|
|
|
|
|
BearingInnerDiameter = 8.05;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IdleRollerSpacingAY = 66;
|
|
|
|
|
|
|
|
IdleRollerSpacingBY = 102;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IdleRollerAZ = 31;
|
|
|
|
|
|
|
|
IdleRollerBZ = 44.2;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//DEBUG VARIABLES
|
|
|
|
|
|
|
|
FilmZ = -3.5;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GateBoltX = 21.2;
|
|
|
|
|
|
|
|
GateBoltSpacingY = 105;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module bearing_void (pos = [0, 0, 0], rot = [0, 0, 0], width= 8) {
|
|
|
|
|
|
|
|
fuzz = 0.3;
|
|
|
|
|
|
|
|
translate (pos) rotate(rot) {
|
|
|
|
|
|
|
|
difference () {
|
|
|
|
|
|
|
|
cylinder(r = R(BearingOuterDiameter) + fuzz, h = width, center = true, $fn = 90);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module bearing_debug (pos = [0, 0, 0], rot = [0, 0, 0]) {
|
|
|
|
|
|
|
|
$fn = 60;
|
|
|
|
|
|
|
|
translate(pos) rotate(rot) difference() {
|
|
|
|
|
|
|
|
color("green") cylinder(r = R(21.5), h = 7, center = true);
|
|
|
|
|
|
|
|
cylinder(r = R(8), h = 7 + 1, center = true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
module perf_void (pos = [0, 0, 0]) {
|
|
|
|
module perf_void (pos = [0, 0, 0]) {
|
|
|
|
translate(pos) cube([2.5, 1.99, 10], center = true);
|
|
|
|
translate(pos) cube([2.5, 1.99, 10], center = true);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -71,8 +113,8 @@ module front_plate () {
|
|
|
|
translate([(-PlateX / 2) + PlateBoltX, PlateBoltSpacingY / 2, 0]) cylinder(r = R(BoltD), h = 10, center = true , $fn = 30);
|
|
|
|
translate([(-PlateX / 2) + PlateBoltX, PlateBoltSpacingY / 2, 0]) cylinder(r = R(BoltD), h = 10, center = true , $fn = 30);
|
|
|
|
translate([(-PlateX / 2) + PlateBoltX, -PlateBoltSpacingY / 2, 0]) cylinder(r = R(BoltD), h = 10, center = true , $fn = 30);
|
|
|
|
translate([(-PlateX / 2) + PlateBoltX, -PlateBoltSpacingY / 2, 0]) cylinder(r = R(BoltD), h = 10, center = true , $fn = 30);
|
|
|
|
//alignment rod voids
|
|
|
|
//alignment rod voids
|
|
|
|
translate([(-PlateX / 2) + AlignmentX, AlignmentSpacingY / 2, 0]) cylinder(r = R(AlignmentD + 0.25), h = 10, center = true , $fn = 30);
|
|
|
|
translate([(-PlateX / 2) + AlignmentX, AlignmentSpacingY / 2, 0]) cylinder(r = R(AlignmentD + 0.45), h = 10, center = true , $fn = 30);
|
|
|
|
translate([(-PlateX / 2) + AlignmentX, -AlignmentSpacingY / 2, 0]) cylinder(r = R(AlignmentD + 0.25), h = 10, center = true , $fn = 30);
|
|
|
|
translate([(-PlateX / 2) + AlignmentX, -AlignmentSpacingY / 2, 0]) cylinder(r = R(AlignmentD + 0.45), h = 10, center = true , $fn = 30);
|
|
|
|
//gate bolt void
|
|
|
|
//gate bolt void
|
|
|
|
translate([-6, 0, 0]) cylinder(r = R(BoltD), h = 20, center = true, $fn = 40);
|
|
|
|
translate([-6, 0, 0]) cylinder(r = R(BoltD), h = 20, center = true, $fn = 40);
|
|
|
|
translate([-6, 0, 10]) cylinder(r = R(4.5), h = 20, center = true, $fn = 40);
|
|
|
|
translate([-6, 0, 10]) cylinder(r = R(4.5), h = 20, center = true, $fn = 40);
|
|
|
@ -96,20 +138,20 @@ module gate_mask_text (format = "") {
|
|
|
|
module gate_mask_slide (pos = [0, 0, 0], pad = 0.0, format = "") {
|
|
|
|
module gate_mask_slide (pos = [0, 0, 0], pad = 0.0, format = "") {
|
|
|
|
Z = -1;
|
|
|
|
Z = -1;
|
|
|
|
GuideAdjust = -1.5;
|
|
|
|
GuideAdjust = -1.5;
|
|
|
|
FormatBevelY = format == "super16" ? 5 : 5.5;
|
|
|
|
FormatBevelY = format == "super16" ? 4.5 : 5;
|
|
|
|
|
|
|
|
PadZ = format == "" ? 0.3 : 0;
|
|
|
|
|
|
|
|
FrontMaskZ = 0.375;
|
|
|
|
translate(pos) {
|
|
|
|
translate(pos) {
|
|
|
|
difference () {
|
|
|
|
difference () {
|
|
|
|
union () {
|
|
|
|
union () {
|
|
|
|
translate([0, 0, Z]) cube([20, FrontPlateVoidY + pad, PlateZ + 2], center = true);
|
|
|
|
translate([0, 0, Z]) cube([20, FrontPlateVoidY + pad, PlateZ + 2], center = true);
|
|
|
|
translate([-8, 0, Z]) cube([20, 8 + pad, PlateZ + 2], center = true);
|
|
|
|
translate([-8, 0, Z]) cube([20, 8 + pad, PlateZ + 2 + PadZ], center = true);
|
|
|
|
intersection () {
|
|
|
|
intersection () {
|
|
|
|
translate([0, 0, Z]) cube([20, 100, PlateZ + 2], center = true);
|
|
|
|
translate([0, 0, Z]) cube([20, 100, PlateZ + 2], center = true);
|
|
|
|
union () {
|
|
|
|
union () {
|
|
|
|
translate([0, FrontPlateVoidY / 2 + GuideAdjust, Z]) rotate([45, 0, 0]) cube([20, PlateZ + 2 + pad, PlateZ + 2 + pad], center = true);
|
|
|
|
translate([0, FrontPlateVoidY / 2 + GuideAdjust, Z]) rotate([45, 0, 0]) cube([20, PlateZ + 2 + pad, PlateZ + 2 + pad], center = true);
|
|
|
|
translate([0, -FrontPlateVoidY / 2 - GuideAdjust, Z]) rotate([45, 0, 0]) cube([20, PlateZ + 2 + pad, PlateZ + 2 + pad], center = true);
|
|
|
|
translate([0, -FrontPlateVoidY / 2 - GuideAdjust, Z]) rotate([45, 0, 0]) cube([20, PlateZ + 2 + pad, PlateZ + 2 + pad], center = true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (format != "") {
|
|
|
|
if (format != "") {
|
|
|
|
translate([(20 / 2) + 0.1, 0, -3.5]) difference () {
|
|
|
|
translate([(20 / 2) + 0.1, 0, -3.5]) difference () {
|
|
|
@ -120,16 +162,16 @@ module gate_mask_slide (pos = [0, 0, 0], pad = 0.0, format = "") {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// difference
|
|
|
|
// difference
|
|
|
|
if (format != "") {
|
|
|
|
if (format != "") {
|
|
|
|
|
|
|
|
translate([0, 0, ((PlateZ + 2) / 2) - Z - FrontMaskZ]) cube([100, 100, PlateZ + 2], center = true);
|
|
|
|
//alignment
|
|
|
|
//alignment
|
|
|
|
translate([-14.5, 0, 0]) {
|
|
|
|
translate([-14.5, 0, 0]) {
|
|
|
|
cylinder(r = R(BoltD), h = 20, center = true, $fn = 40);
|
|
|
|
cylinder(r = R(BoltD), h = 20, center = true, $fn = 40);
|
|
|
|
translate([0, 0, -3.5]) scale([2.5/3,2.5/3,1]) m3_nut();
|
|
|
|
translate([0, 0, -3.5]) scale([2.5/3, 2.5/3, 1]) m3_nut();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
gate_mask_text(format);
|
|
|
|
gate_mask_text(format);
|
|
|
|
difference () {
|
|
|
|
difference () {
|
|
|
|
film_clearance_void([0, 0, 1 + 0.2]);
|
|
|
|
film_clearance_void([0, 0, 1 + 0.2]);
|
|
|
|
if (format == "standard16" || format == "super16") {
|
|
|
|
if (format == "standard16" || format == "super16") {
|
|
|
|
|
|
|
|
|
|
|
|
difference () {
|
|
|
|
difference () {
|
|
|
|
cube([BackPlateVoidX + 10, BackPlateVoidY + 6, 10], center = true);
|
|
|
|
cube([BackPlateVoidX + 10, BackPlateVoidY + 6, 10], center = true);
|
|
|
|
translate([0, BackPlateVoidY / 2 + FormatBevelY, 4.5]) rotate([-20, 0, 0]) cube([FrontPlateClearanceX + 3, 10, 10], center = true);
|
|
|
|
translate([0, BackPlateVoidY / 2 + FormatBevelY, 4.5]) rotate([-20, 0, 0]) cube([FrontPlateClearanceX + 3, 10, 10], center = true);
|
|
|
@ -142,23 +184,18 @@ module gate_mask_slide (pos = [0, 0, 0], pad = 0.0, format = "") {
|
|
|
|
if (format == "standard16") {
|
|
|
|
if (format == "standard16") {
|
|
|
|
translate([0, 0, 0]) {
|
|
|
|
translate([0, 0, 0]) {
|
|
|
|
cube([BackPlateVoidX, BackPlateVoidY, 10], center = true);
|
|
|
|
cube([BackPlateVoidX, BackPlateVoidY, 10], center = true);
|
|
|
|
translate([0, 0, -4.5]) trap_cube(height = 5, top_x = BackPlateVoidX, top_y = BackPlateVoidY, bottom_x = BackPlateVoidX + 5, bottom_y = BackPlateVoidY + 5, wall_thickness = 50);
|
|
|
|
translate([0, 0, -4.75]) trap_cube(height = 5, top_x = BackPlateVoidX, top_y = BackPlateVoidY, bottom_x = BackPlateVoidX + 5, bottom_y = BackPlateVoidY + 5, wall_thickness = 50);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (format == "super16") {
|
|
|
|
} else if (format == "super16") {
|
|
|
|
translate([(-BackPlateVoidX / 2) + (Super16X / 2), 0, 0]) {
|
|
|
|
translate([(-BackPlateVoidX / 2) + (Super16X / 2), 0, 0]) {
|
|
|
|
cube([Super16X, Super16Y, 10], center = true);
|
|
|
|
cube([Super16X, Super16Y, 10], center = true);
|
|
|
|
translate([0, 0, -4.5]) trap_cube(height = 5, top_x = Super16X, top_y = Super16Y, bottom_x = Super16X + 5, bottom_y = Super16Y + 5, wall_thickness = 50);
|
|
|
|
translate([0, 0, -4.75]) trap_cube(height = 5, top_x = Super16X, top_y = Super16Y, bottom_x = Super16X + 5, bottom_y = Super16Y + 5, wall_thickness = 50);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//translate([0, 0, -5]) trap_cube(height = 5, top_x = BackPlateVoidX, top_y = BackPlateVoidY, bottom_x = BackPlateVoidX + 5, bottom_y = BackPlateVoidY + 5, wall_thickness = 50);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module gate_mask_slide_standard16 (pos = [0, 0, 0]) {
|
|
|
|
module gate_mask_slide_standard16 (pos = [0, 0, 0]) {
|
|
|
|
gate_mask_slide(pos, pad = 0.0, format = "standard16");
|
|
|
|
gate_mask_slide(pos, pad = 0.0, format = "standard16");
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -201,8 +238,7 @@ module film_entry_bevel (pos = [0, 0, 0]) {
|
|
|
|
translate([0, Offset, Offset]) rotate([0, 90, 0]) cylinder(r = R(D), h = 40 + 1, center = true);
|
|
|
|
translate([0, Offset, Offset]) rotate([0, 90, 0]) cylinder(r = R(D), h = 40 + 1, center = true);
|
|
|
|
translate([0, -Offset, Offset]) rotate([0, 90, 0]) cylinder(r = R(D), h = 40 + 1, center = true);
|
|
|
|
translate([0, -Offset, Offset]) rotate([0, 90, 0]) cylinder(r = R(D), h = 40 + 1, center = true);
|
|
|
|
translate([0, Offset, -Offset]) rotate([0, 90, 0]) cylinder(r = R(D), h = 40 + 1, center = true);
|
|
|
|
translate([0, Offset, -Offset]) rotate([0, 90, 0]) cylinder(r = R(D), h = 40 + 1, center = true);
|
|
|
|
translate([0, -Offset, -Offset]) rotate([0, 90, 0]) cylinder(r = R(D), h = 40 + 1, center = true);
|
|
|
|
translate([0, -Offset, -Offset]) rotate([0, 90, 0]) cylinder(r = R(D), h = 40 + 1, center = true);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -214,7 +250,6 @@ module film_entry_side_bevel (pos = [0, 0, 0]) {
|
|
|
|
cube([5, 40, 5], center = true);
|
|
|
|
cube([5, 40, 5], center = true);
|
|
|
|
translate([-Offset, 0, Offset]) rotate([90, 0, 0]) cylinder(r = R(D), h = 40 + 1, center = true);
|
|
|
|
translate([-Offset, 0, Offset]) rotate([90, 0, 0]) cylinder(r = R(D), h = 40 + 1, center = true);
|
|
|
|
translate([-Offset, 0, -Offset]) rotate([90, 0, 0]) cylinder(r = R(D), h = 40 + 1, center = true);
|
|
|
|
translate([-Offset, 0, -Offset]) rotate([90, 0, 0]) cylinder(r = R(D), h = 40 + 1, center = true);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -223,7 +258,7 @@ module back_plate_void (pos = [0, 0, 0]) {
|
|
|
|
//large void
|
|
|
|
//large void
|
|
|
|
translate([(PlateX / 2) - (20 / 2) - (FrontPlateVoidX / 2) , 0, 0]) {
|
|
|
|
translate([(PlateX / 2) - (20 / 2) - (FrontPlateVoidX / 2) , 0, 0]) {
|
|
|
|
cube([20, FrontPlateVoidY + 0.2, 10], center = true);
|
|
|
|
cube([20, FrontPlateVoidY + 0.2, 10], center = true);
|
|
|
|
gate_mask_slide( pad = 0.2);
|
|
|
|
gate_mask_slide( pad = 0.3);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//film clearance
|
|
|
|
//film clearance
|
|
|
|
film_clearance_void([0, 0, 1 + 0.2]);
|
|
|
|
film_clearance_void([0, 0, 1 + 0.2]);
|
|
|
@ -258,18 +293,227 @@ module back_plate () {
|
|
|
|
translate([(-PlateX / 2) + AlignmentX, -AlignmentSpacingY / 2, RodZ / 2]) cylinder(r = R(AlignmentD), h = RodZ, center = true , $fn = 30);
|
|
|
|
translate([(-PlateX / 2) + AlignmentX, -AlignmentSpacingY / 2, RodZ / 2]) cylinder(r = R(AlignmentD), h = RodZ, center = true , $fn = 30);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
module debug () {
|
|
|
|
module sprocketed_roller_16mm (pos = [0, 0, 0], rot = [0, 0, 0]) {
|
|
|
|
front_plate();
|
|
|
|
$fn = 160;
|
|
|
|
translate([0, 0, -8]) back_plate();
|
|
|
|
TaperD = 19.05;
|
|
|
|
gate_mask_slide_standard16([(PlateX / 2) - (FrontPlateVoidX / 2) - 1.9, 0, -8]);
|
|
|
|
TaperH = 5;
|
|
|
|
//gate_mask_slide_super16([(PlateX / 2) - (FrontPlateVoidX / 2) - 2.41, 0, -3]);
|
|
|
|
translate(pos) rotate(rot) difference() {
|
|
|
|
//front_plate_void([(PlateX / 2) - (FrontPlateVoidX / 2) - 2.41, 0, 0]);
|
|
|
|
union () {
|
|
|
|
//film_clearance_void([0, 0, 15]);
|
|
|
|
sprocketed_roller(bevel = true);
|
|
|
|
translate([8, 0, -1.5]) cube([16, 50, 0.1], center = true);
|
|
|
|
translate([0, 0, 3.85]) cylinder(r1 = R(TaperD), r2 = R(TaperD - TaperH), h = TaperH, center = true);
|
|
|
|
|
|
|
|
translate([0, 0, 0]) cylinder(r = R(11), h = 9.5, center = true, $fn = 60);
|
|
|
|
|
|
|
|
translate([0, 0, -10]) cylinder(r = R(8.3), h = 17, center = true, $fn = 60);
|
|
|
|
|
|
|
|
translate([0, 0, -21.15]) cylinder(r = R(6), h = 10, center = true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//registration mark
|
|
|
|
|
|
|
|
translate([0, 20, 16.1]) rotate([0, 45, 0]) cube([1, 40, 1], center = true);
|
|
|
|
|
|
|
|
translate([0, 0, 15.9]) cylinder(r = R(2.5), h = 1, center = true, $fn = 30);
|
|
|
|
|
|
|
|
//pressure relief hole
|
|
|
|
|
|
|
|
cylinder(r = R(1.5), h = 50, center = true, $fn = 30);
|
|
|
|
|
|
|
|
//void for key
|
|
|
|
|
|
|
|
translate([0, 0, -21.15 - 5]) cube([7.95 + 1, 2.37, 10], center = true);
|
|
|
|
|
|
|
|
translate([(-15 / 2) - (6 / 2) + 0.2, 0, -30]) cube([15, 15, 40], center = true);
|
|
|
|
|
|
|
|
//m2.5 bolt
|
|
|
|
|
|
|
|
translate([0, 0, -15.85]) rotate([0, 90, 0]) cylinder(r = R(2.75), h = 30, center = true, $fn = 30);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
PART="gate_mask_slide_super16";
|
|
|
|
//m2.5 bolt
|
|
|
|
|
|
|
|
//m2.5 nut
|
|
|
|
|
|
|
|
module sprocketed_roller_nut_16mm (pos = [0, 0, 0], rot = [0, 0, 0]) {
|
|
|
|
|
|
|
|
$fn = 80;
|
|
|
|
|
|
|
|
translate(pos) rotate(rot) difference() {
|
|
|
|
|
|
|
|
union () {
|
|
|
|
|
|
|
|
translate([0, 0, -5]) cylinder(r = R(11), h = 7, center = true);
|
|
|
|
|
|
|
|
translate([0, 0, -6.5]) cylinder(r = R(18), h = 8, center = true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
translate([0, 0, 11.6]) difference () {
|
|
|
|
|
|
|
|
union () {
|
|
|
|
|
|
|
|
cylinder(r = R(8.7), h = 40, center = true);
|
|
|
|
|
|
|
|
translate([0, 0, -12.6 - 7.5]) cylinder(r = R(6.5), h = 8, center = true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
translate([-(15 / 2) - (6 / 2), 0, -5]) cube([15, 15, 40], center = true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
translate([0, 0, -6]) rotate([0, 90, 0]) {
|
|
|
|
|
|
|
|
cylinder(r = R(2.5), h = 30, center = true, $fn = 30);
|
|
|
|
|
|
|
|
translate([0, 0, -21]) cylinder(r = R(4.5), h = 30, center = true, $fn = 30);
|
|
|
|
|
|
|
|
translate([0, 0, 22]) scale([2.5/3, 2.5/3, 1]) m3_nut(30);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module m3_nut_bolt (pos = [0, 0, 0], rot = [0, 0, 0], nut = 5, bolt = 30) {
|
|
|
|
|
|
|
|
translate(pos) rotate(rot) {
|
|
|
|
|
|
|
|
m3_nut(nut);
|
|
|
|
|
|
|
|
cylinder(r = R(3.5), h = bolt, center = true, $fn = 30);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module body (pos = [0, 0, 0], gauge = "16mm") {
|
|
|
|
|
|
|
|
translate(pos) difference() {
|
|
|
|
|
|
|
|
union () {
|
|
|
|
|
|
|
|
cube([BodyX, BodyY, BodyZ], center = true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//bearings for keys
|
|
|
|
|
|
|
|
bearing_void([-2, KeySpacingY / 2, (BodyZ / 2) + KeyZ], [0, 90, 0], width = BodyX);
|
|
|
|
|
|
|
|
bearing_void([-2, -KeySpacingY / 2, (BodyZ / 2) + KeyZ], [0, 90, 0], width = BodyX);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
translate([0, KeySpacingY / 2, (BodyZ / 2) + KeyZ]) rotate([0, 90, 0]) cylinder(r = R(12.5), h = BodyX + 1, center = true, $fn = 60);
|
|
|
|
|
|
|
|
translate([0, -KeySpacingY / 2, (BodyZ / 2) + KeyZ]) rotate([0, 90, 0]) cylinder(r = R(12.5), h = BodyX + 1, center = true, $fn = 60);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//front block
|
|
|
|
|
|
|
|
translate([0, 0, (BodyZ / 2) - (FrontBodyVoid / 2) + 0.1]) cube([BodyX + 1, PlateY + 2, FrontBodyVoid], center = true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//side light channel
|
|
|
|
|
|
|
|
//translate([BodyX - 1.25, 0, 0]) cube([BodyX, PlateY + 2, BodyZ + 1], center = true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//slide channel
|
|
|
|
|
|
|
|
translate([-BodyX + 7.5, 0, 0]) cube([BodyX, PlateY + 2, BodyZ + 1], center = true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//add slides
|
|
|
|
|
|
|
|
m3_nut_bolt([8, 13.2, 8], [0, 90, 0]);
|
|
|
|
|
|
|
|
m3_nut_bolt([8, -13.2, 8], [0, 90, 0]);
|
|
|
|
|
|
|
|
m3_nut_bolt([8, 13.2, -18], [0, 90, 0]);
|
|
|
|
|
|
|
|
m3_nut_bolt([8, -13.2, -18], [0, 90, 0]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//filter holder bolts
|
|
|
|
|
|
|
|
m3_nut_bolt([0, 13.2, -5], [0, 90, 0]);
|
|
|
|
|
|
|
|
m3_nut_bolt([0, -13.2, -5], [0, 90, 0]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//idle rollers
|
|
|
|
|
|
|
|
m3_nut_bolt([-2, IdleRollerSpacingAY / 2, (BodyZ / 2) - IdleRollerAZ], [0, 90, 0], nut = BodyX, bolt = BodyX + 40);
|
|
|
|
|
|
|
|
m3_nut_bolt([-2, -IdleRollerSpacingAY / 2, (BodyZ / 2) - IdleRollerAZ], [0, 90, 0], nut = BodyX, bolt = BodyX + 40);
|
|
|
|
|
|
|
|
m3_nut_bolt([-2, IdleRollerSpacingAY / 2, (BodyZ / 2) - IdleRollerBZ], [0, 90, 0], nut = BodyX, bolt = BodyX + 40);
|
|
|
|
|
|
|
|
m3_nut_bolt([-2, -IdleRollerSpacingAY / 2, (BodyZ / 2) - IdleRollerBZ], [0, 90, 0], nut = BodyX, bolt = BodyX + 40);
|
|
|
|
|
|
|
|
m3_nut_bolt([-2, IdleRollerSpacingBY / 2, (BodyZ / 2) - IdleRollerBZ], [0, 90, 0], nut = BodyX, bolt = BodyX + 40);
|
|
|
|
|
|
|
|
m3_nut_bolt([-2, -IdleRollerSpacingBY / 2, (BodyZ / 2) - IdleRollerBZ], [0, 90, 0], nut = BodyX, bolt = BodyX + 40);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//mounting bolts
|
|
|
|
|
|
|
|
translate([0, GateBoltSpacingY / 2, (BodyZ / 2) - GateBoltX]) rotate([0, 90, 0]) cylinder(r = R(5.5), h = 40, center = true, $fn = 40);
|
|
|
|
|
|
|
|
translate([0, -GateBoltSpacingY / 2, (BodyZ / 2) - GateBoltX]) rotate([0, 90, 0]) cylinder(r = R(5.5), h = 40, center = true, $fn = 40);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//post voids
|
|
|
|
|
|
|
|
translate([0, 87.75 / 2, BodyZ / 2]) cylinder(r = R(8), h = 40, center = true, $fn = 80);
|
|
|
|
|
|
|
|
translate([0, -87.75 / 2, BodyZ / 2]) cylinder(r = R(8), h = 40, center = true, $fn = 80);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//spring void
|
|
|
|
|
|
|
|
translate([3, 0, BodyZ / 2]) cylinder(r = R(5), h = 50, center = true, $fn = 60);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module idle_roller_16mm (pos = [0, 0, 0], rot = [0, 0, 0]) {
|
|
|
|
|
|
|
|
$fn = 80;
|
|
|
|
|
|
|
|
translate(pos) rotate(rot) {
|
|
|
|
|
|
|
|
difference () {
|
|
|
|
|
|
|
|
union () {
|
|
|
|
|
|
|
|
cylinder(r = R(12), h = 18, center = true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
translate([0, 0, 18 - 2]) cylinder(r = R(10), h = 18, center = true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cylinder(r = R(8), h = 40, center = true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (i = [0 : $fn]) {
|
|
|
|
|
|
|
|
rotate([0, 0, i * (360 / $fn)]) translate([11, 0, 0]) rotate([90, 0, 0]) scale([1, 2, 1]) cylinder(r = R(12), h = 10, center = true, $fn = 50);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module idle_roller_post_16mm (pos = [0, 0, 0], rot = [0, 0, 0]) {
|
|
|
|
|
|
|
|
$fn = 80;
|
|
|
|
|
|
|
|
translate(pos) rotate(rot) {
|
|
|
|
|
|
|
|
difference () {
|
|
|
|
|
|
|
|
union () {
|
|
|
|
|
|
|
|
cylinder(r = R(7.2), h = 19, center = true);
|
|
|
|
|
|
|
|
translate([0, 0, (19 / 2) - (2 / 2)]) cylinder(r = R(9.2), h = 2, center = true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
cylinder(r = R(3.75), h = 40, center = true);
|
|
|
|
|
|
|
|
translate([0, 0, (19 / 2) - (3 / 2) + 0.01]) cylinder(r = R(6), h = 3, center = true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module slide_rail (pos = [0, 0, 0], side = "A") {
|
|
|
|
|
|
|
|
BoltSpacingZ = 26;
|
|
|
|
|
|
|
|
OffsetY = side == "A" ? 1.5 : -1.5;
|
|
|
|
|
|
|
|
OffsetZ = 1;
|
|
|
|
|
|
|
|
SlideY = side == "A" ? -6 : 6;
|
|
|
|
|
|
|
|
translate(pos) difference() {
|
|
|
|
|
|
|
|
cube([7, 9, BodyZ - 16], center = true);
|
|
|
|
|
|
|
|
translate([1.25, SlideY, 0]) cube([2.4, 10, BodyZ - 12 + 1], center = true);
|
|
|
|
|
|
|
|
translate([0, OffsetY, OffsetZ]) {
|
|
|
|
|
|
|
|
translate([0, 0, BoltSpacingZ / 2]) rotate([0, 90, 0]) {
|
|
|
|
|
|
|
|
cylinder(r = R(3.5), h = 10, center = true, $fn = 40);
|
|
|
|
|
|
|
|
translate([0, 0, -5]) cylinder(r = R(6), h = 10, center = true, $fn = 40);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
translate([0, 0, -BoltSpacingZ / 2]) rotate([0, 90, 0]) {
|
|
|
|
|
|
|
|
cylinder(r = R(3.5), h = 10, center = true, $fn = 40);
|
|
|
|
|
|
|
|
translate([0, 0, -5]) cylinder(r = R(6), h = 10, center = true, $fn = 40);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module slide (pos = [0, 0, 0]) {
|
|
|
|
|
|
|
|
translate(pos) {
|
|
|
|
|
|
|
|
difference() {
|
|
|
|
|
|
|
|
union () {
|
|
|
|
|
|
|
|
cube([6.5, 13, BodyZ - 10], center = true);
|
|
|
|
|
|
|
|
translate([1.25, 0, 0]) cube([1.7, 20, BodyZ - 10], center = true);
|
|
|
|
|
|
|
|
translate([0, 0, (BodyZ / 2) - 3]) cube([6.5, 20.5, 9], center = true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
translate([1, 0, (BodyZ / 2) - 1.1]) cube([6.5, 20.5 + 1, 8], center = true);
|
|
|
|
|
|
|
|
//bolts
|
|
|
|
|
|
|
|
translate([0, PlateBoltSpacingY / 2, (BodyZ / 2) - 2]) cylinder(r = R(BoltD), h = 10, center = true , $fn = 30);
|
|
|
|
|
|
|
|
translate([0, -PlateBoltSpacingY / 2, (BodyZ / 2) - 2]) cylinder(r = R(BoltD), h = 10, center = true , $fn = 30);
|
|
|
|
|
|
|
|
//hole for notch
|
|
|
|
|
|
|
|
translate([0, 0, 23 - 26.7]) rotate([0, 90, 0]) {
|
|
|
|
|
|
|
|
cylinder(r = R(6), h = 20, center = true, $fn = 80);
|
|
|
|
|
|
|
|
translate([0, 0, -3]) cylinder(r2 = R(6), r1 = R(8), h = 2, center = true, $fn = 80);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module debug () {
|
|
|
|
|
|
|
|
difference () {
|
|
|
|
|
|
|
|
union () {
|
|
|
|
|
|
|
|
FilmZ = -3.5 - 3.6; //retraction distance
|
|
|
|
|
|
|
|
//translate([0, 0, FilmZ + 1.4]) front_plate();
|
|
|
|
|
|
|
|
//translate([0, 0, FilmZ - 1.4]) back_plate();
|
|
|
|
|
|
|
|
gate_mask_slide_standard16([(PlateX / 2) - (FrontPlateVoidX / 2) - 1.9, 0, FilmZ - 1.4]);
|
|
|
|
|
|
|
|
//gate_mask_slide_super16([(PlateX / 2) - (FrontPlateVoidX / 2) - 2.41, 0, -3]);
|
|
|
|
|
|
|
|
//front_plate_void([(PlateX / 2) - (FrontPlateVoidX / 2) - 2.41, 0, 0]);
|
|
|
|
|
|
|
|
//film_clearance_void([0, 0, 15]);
|
|
|
|
|
|
|
|
translate([8, 0, FilmZ]) cube([16, 150, 0.1], center = true);
|
|
|
|
|
|
|
|
//sprocketed_roller_16mm([1.5, KeySpacingY / 2, KeyZ], [0, 90, 0]);
|
|
|
|
|
|
|
|
sprocketed_roller_16mm([1.5, -KeySpacingY / 2, KeyZ], [0, 90, 0]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bearing_debug([-6.8, KeySpacingY / 2, KeyZ], [0, 90, 0]);
|
|
|
|
|
|
|
|
bearing_debug([-6.8, -KeySpacingY / 2, KeyZ], [0, 90, 0]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
color("blue") sprocketed_roller_nut_16mm([-8.5, -KeySpacingY / 2, KeyZ], [0, 90, 0]);
|
|
|
|
|
|
|
|
translate([(-BodyX / 2) - 1, 0, -BodyZ / 2]) body(gauge = "16mm");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
idle_roller_16mm([9, IdleRollerSpacingAY / 2, (BodyZ / 2) - IdleRollerAZ - (BodyZ / 2)], [0, 90, 0]);
|
|
|
|
|
|
|
|
idle_roller_16mm([9, -IdleRollerSpacingAY / 2, (BodyZ / 2) - IdleRollerAZ - (BodyZ / 2)], [0, 90, 0]);
|
|
|
|
|
|
|
|
/*idle_roller_16mm([9, IdleRollerSpacingAY / 2, (BodyZ / 2) - IdleRollerBZ - (BodyZ / 2)], [0, 90, 0]);
|
|
|
|
|
|
|
|
idle_roller_16mm([9, -IdleRollerSpacingAY / 2, (BodyZ / 2) - IdleRollerBZ - (BodyZ / 2)], [0, 90, 0]);
|
|
|
|
|
|
|
|
idle_roller_16mm([9, IdleRollerSpacingBY / 2, (BodyZ / 2) - IdleRollerBZ - (BodyZ / 2)], [0, 90, 0]);
|
|
|
|
|
|
|
|
idle_roller_16mm([9, -IdleRollerSpacingBY / 2, (BodyZ / 2) - IdleRollerBZ - (BodyZ / 2)], [0, 90, 0]);
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
slide_rail([-BodyX + (7 / 2) - 0.6, 11.5, (-BodyZ / 2) - 6], "A");
|
|
|
|
|
|
|
|
slide_rail([-BodyX + (7 / 2) - 0.6, -11.5, (-BodyZ / 2) - 6], "B");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
slide([-BodyX + (7 / 2) - 0.6, 0, FilmZ + (-BodyZ / 2) + 1]);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
translate([0, -79, -50]) cube([100, 100, 100], center = true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PART="body_16mm";
|
|
|
|
|
|
|
|
|
|
|
|
if (PART == "front_plate") {
|
|
|
|
if (PART == "front_plate") {
|
|
|
|
rotate([0, 180, 0]) front_plate();
|
|
|
|
rotate([0, 180, 0]) front_plate();
|
|
|
@ -278,10 +522,25 @@ if (PART == "front_plate") {
|
|
|
|
} else if (PART == "gate_mask_slide") {
|
|
|
|
} else if (PART == "gate_mask_slide") {
|
|
|
|
gate_mask_slide();
|
|
|
|
gate_mask_slide();
|
|
|
|
} else if (PART == "gate_mask_slide_standard16") {
|
|
|
|
} else if (PART == "gate_mask_slide_standard16") {
|
|
|
|
gate_mask_slide_standard16();
|
|
|
|
rotate([180, 0, 0]) gate_mask_slide_standard16();
|
|
|
|
} else if (PART == "gate_mask_slide_super16") {
|
|
|
|
} else if (PART == "gate_mask_slide_super16") {
|
|
|
|
gate_mask_slide_super16();
|
|
|
|
rotate([180, 0, 0]) gate_mask_slide_super16();
|
|
|
|
|
|
|
|
} else if (PART == "sprocketed_roller_16mm") {
|
|
|
|
|
|
|
|
sprocketed_roller_16mm();
|
|
|
|
|
|
|
|
} else if (PART == "sprocketed_roller_nut_16mm") {
|
|
|
|
|
|
|
|
sprocketed_roller_nut_16mm();
|
|
|
|
|
|
|
|
} else if (PART == "idle_roller_16mm") {
|
|
|
|
|
|
|
|
idle_roller_16mm();
|
|
|
|
|
|
|
|
} else if (PART == "idle_roller_post_16mm") {
|
|
|
|
|
|
|
|
idle_roller_post_16mm();
|
|
|
|
|
|
|
|
} else if (PART == "slide") {
|
|
|
|
|
|
|
|
slide();
|
|
|
|
|
|
|
|
} else if (PART == "slide_rail_a") {
|
|
|
|
|
|
|
|
slide_rail(side = "A");
|
|
|
|
|
|
|
|
} else if (PART == "slide_rail_b"){
|
|
|
|
|
|
|
|
slide_rail(side = "B");
|
|
|
|
|
|
|
|
} else if (PART == "body_16mm") {
|
|
|
|
|
|
|
|
rotate([0, 90, 0]) body(gauge = "16mm");
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
debug();
|
|
|
|
debug();
|
|
|
|
}
|
|
|
|
}
|