From 1f18b59f9d55ca3496284e291a98f746ba55dcdc Mon Sep 17 00:00:00 2001 From: mattmcw Date: Sat, 14 Sep 2024 11:17:31 -0400 Subject: [PATCH] Round the filmpath bevels. Safer areas touching film. --- app/data/cfg.json | 2 +- app/package-lock.json | 2 +- app/package.json | 2 +- data/cfg.json | 2 +- package-lock.json | 4 +- package.json | 2 +- processing/mcopy/cfg.json | 2 +- scad/mcopy_gate.scad | 108 ++++++++++++++++++++++++++------------ 8 files changed, 83 insertions(+), 41 deletions(-) diff --git a/app/data/cfg.json b/app/data/cfg.json index d04401b..c394ac9 100644 --- a/app/data/cfg.json +++ b/app/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.128", + "version": "1.8.129", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/app/package-lock.json b/app/package-lock.json index c545bcf..ab81a42 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.8.128", + "version": "1.8.129", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/app/package.json b/app/package.json index 5559610..e4582c6 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.8.128", + "version": "1.8.129", "description": "GUI for the mcopy small gauge film optical printer platform", "main": "main.js", "scripts": { diff --git a/data/cfg.json b/data/cfg.json index d04401b..c394ac9 100644 --- a/data/cfg.json +++ b/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.128", + "version": "1.8.129", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/package-lock.json b/package-lock.json index 664afe7..4b30cf6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mcopy", - "version": "1.8.128", + "version": "1.8.129", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mcopy", - "version": "1.8.128", + "version": "1.8.129", "license": "MIT", "dependencies": { "alert": "file:app/lib/alert", diff --git a/package.json b/package.json index 8745917..b16b58e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mcopy", - "version": "1.8.128", + "version": "1.8.129", "description": "Small gauge film optical printer platform", "main": "build.js", "directories": { diff --git a/processing/mcopy/cfg.json b/processing/mcopy/cfg.json index d04401b..c394ac9 100644 --- a/processing/mcopy/cfg.json +++ b/processing/mcopy/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.128", + "version": "1.8.129", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/scad/mcopy_gate.scad b/scad/mcopy_gate.scad index 5d24563..544dcab 100644 --- a/scad/mcopy_gate.scad +++ b/scad/mcopy_gate.scad @@ -12,7 +12,7 @@ BackPlateVoidY = 8.71; FrontPlateClearanceX = 10.5; -FrontPlateSpacerX = 15; +FrontPlateSpacerX = 17; FrontPlateSpacerZ = 0.5; PerfSpacingX = 12.1; @@ -23,35 +23,37 @@ AlignmentSpacingY = 22.7; PlateBoltSpacingY = 14; PlateBoltX = 2.58; -BoltD = 2; +BoltD = 2.55; +AlignmentD = 2; + +Standard16OffsetY = 0.75; Super16X = 12.4; Super16Y = 7.5; module perf_void (pos = [0, 0, 0]) { - translate(pos) cube([2.3, 1.79, 10], center = true); + translate(pos) cube([2.5, 1.99, 10], center = true); } module perfs_void () { - perf_void([PerfSpacingX / 2, PerfSpacingY / 2, 0]); - perf_void([-PerfSpacingX / 2, PerfSpacingY / 2, 0]); - perf_void([PerfSpacingX / 2, -PerfSpacingY / 2, 0]); - perf_void([-PerfSpacingX / 2, -PerfSpacingY / 2, 0]); + perf_void([PerfSpacingX / 2, PerfSpacingY / 2 + Standard16OffsetY, 0]); + perf_void([-PerfSpacingX / 2, PerfSpacingY / 2 + Standard16OffsetY, 0]); + perf_void([PerfSpacingX / 2, -PerfSpacingY / 2 + Standard16OffsetY, 0]); + perf_void([-PerfSpacingX / 2, -PerfSpacingY / 2 + Standard16OffsetY, 0]); } module front_plate_void (pos = [0, 0, 0]) { translate(pos) { //large void - cube([FrontPlateVoidX + 3.5, FrontPlateVoidY, PlateZ + 1], center = true); + cube([FrontPlateVoidX + 1.5, FrontPlateVoidY, PlateZ + 1], center = true); //film Clearance - film_clearance_void([0, 0, -1 - 0.2]); + film_clearance_void([0, 0, -1 ]); //perfs perfs_void(); } } module front_plate () { - difference () { union () { rounded_cube([PlateX, PlateY, PlateZ], d = 2, $fn = 25, center = true); @@ -59,6 +61,8 @@ module front_plate () { translate([-(PlateX / 2) + (FrontPlateSpacerX / 2), 0, (-PlateZ / 2) - (FrontPlateSpacerZ / 2)]) cube([FrontPlateSpacerX, PlateY, FrontPlateSpacerZ], center = true); } front_plate_void([(PlateX / 2) - (FrontPlateVoidX / 2) - 2.41, 0, -0.2]); + film_entry_bevel([0, (PlateY / 2) + 0.25, -1.5]); + film_entry_bevel([0, (-PlateY / 2) - 0.25, -1.5]); //corners translate([(-PlateX / 2), (PlateY / 2) - 0.8, 0]) rotate([0, 0, 35]) cube([7.1 * 2, 7.1, PlateZ + 2], center = true); translate([(-PlateX / 2), (-PlateY / 2) + 0.8, 0]) rotate([0, 0, -35]) cube([7.1 * 2, 7.1, PlateZ + 2], center = true); @@ -66,8 +70,11 @@ 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); //alignment rod voids - translate([(-PlateX / 2) + AlignmentX, AlignmentSpacingY / 2, 0]) cylinder(r = R(BoltD + 0.1), h = 10, center = true , $fn = 30); - translate([(-PlateX / 2) + AlignmentX, -AlignmentSpacingY / 2, 0]) cylinder(r = R(BoltD + 0.1), 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.25), h = 10, center = true , $fn = 30); + //gate bolt void + 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); } } @@ -91,10 +98,10 @@ module gate_mask_slide (pos = [0, 0, 0], pad = 0.0, format = "") { FormatBevelY = format == "super16" ? 5 : 5.5; translate(pos) { - //gate_mask_text(format); difference () { union () { translate([0, 0, Z]) cube([20, FrontPlateVoidY + pad, PlateZ + 2], center = true); + translate([-8, 0, Z]) cube([20, 8 + pad, PlateZ + 2], center = true); intersection () { translate([0, 0, Z]) cube([20, 100, PlateZ + 2], center = true); union () { @@ -103,12 +110,16 @@ module gate_mask_slide (pos = [0, 0, 0], pad = 0.0, format = "") { } } if (format != "") { - translate([(20 / 2) + .6, 0, -3.5]) rotate([0, 90, 0]) rounded_cube([PlateZ + 2 + 5, FrontPlateVoidY + 8, 2], d = 2, $fn = 20, center = true); + translate([(20 / 2) + 0.1, 0, -3.5]) rotate([0, 90, 0]) rounded_cube([PlateZ + 2 + 5, FrontPlateVoidY + 8, 2], d = 2, $fn = 20, center = true); } } - // difference if (format != "") { + //alignment + translate([-14.5, 0, 0]) { + 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(); + } gate_mask_text(format); difference () { film_clearance_void([0, 0, 1 + 0.2]); @@ -124,9 +135,10 @@ module gate_mask_slide (pos = [0, 0, 0], pad = 0.0, format = "") { } if (format == "standard16") { - 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, 0]) { + 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); + } } else if (format == "super16") { translate([(-BackPlateVoidX / 2) + (Super16X / 2), 0, 0]) { cube([Super16X, Super16Y, 10], center = true); @@ -140,6 +152,8 @@ module gate_mask_slide (pos = [0, 0, 0], pad = 0.0, format = "") { } + + module gate_mask_slide_standard16 (pos = [0, 0, 0]) { gate_mask_slide(pos, pad = 0.0, format = "standard16"); } @@ -150,20 +164,43 @@ module gate_mask_slide_super16 (pos = [0, 0, 0]) { module film_clearance_void (pos = [0, 0, 0]) { Z = -0.5; + $fn = 30; translate(pos) { - //film clearance - cube([FrontPlateClearanceX, PlateY + 1, PlateZ], center = true); - //bevels - intersection () { + difference () { union () { - translate([FrontPlateClearanceX / 2, 0, 0]) rotate([0, 45, 0]) cube([2, PlateY + 1, 2], center = true); - translate([-FrontPlateClearanceX / 2, 0, 0]) rotate([0, 45, 0]) cube([2, PlateY + 1, 2], center = true); + //film clearance + cube([FrontPlateClearanceX, PlateY + 1, PlateZ], center = true); + //bevels + intersection () { + union () { + translate([FrontPlateClearanceX / 2, 0, 0]) rotate([0, 45, 0]) cube([2, PlateY + 1, 2], center = true); + translate([-FrontPlateClearanceX / 2, 0, 0]) rotate([0, 45, 0]) cube([2, PlateY + 1, 2], center = true); + } + cube([FrontPlateClearanceX + 40, PlateY + 1, PlateZ], center = true); + } } - cube([FrontPlateClearanceX + 40, PlateY + 1, PlateZ], center = true); + translate([(FrontPlateClearanceX / 2) + 1.2, 0, 1]) rotate([90, 0, 0]) cylinder(r = R(2), h = PlateY + 2, center = true); + translate([(-FrontPlateClearanceX / 2) - 1.2, 0, 1]) rotate([90, 0, 0]) cylinder(r = R(2), h = PlateY + 2, center = true); + translate([(FrontPlateClearanceX / 2) + 1.2, 0, -1]) rotate([90, 0, 0]) cylinder(r = R(2), h = PlateY + 2, center = true); + translate([(-FrontPlateClearanceX / 2) - 1.2, 0, -1]) rotate([90, 0, 0]) cylinder(r = R(2), h = PlateY + 2, center = true); } } } +module film_entry_bevel (pos = [0, 0, 0]) { + $fn = 50; + D = 4; + Offset = 2.2; + translate(pos) difference() { + cube([40, 5, 5], 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); + + } +} + module back_plate_void (pos = [0, 0, 0]) { translate(pos) { //large void @@ -184,7 +221,7 @@ module back_plate () { difference () { union () { rounded_cube([PlateX, PlateY, PlateZ], d = 2, $fn = 25, center = true); - translate([0, 0, -(PlateZ / 2) - (ExtraPlateZ / 2)]) rounded_cube([PlateX, PlateY, 2], d = ExtraPlateZ, $fn = 25, center = true); + translate([0, 0, -(PlateZ / 2) - (ExtraPlateZ / 2)]) rounded_cube([PlateX, PlateY, 2], d = 2, $fn = 25, center = true); } back_plate_void([(PlateX / 2) - (FrontPlateVoidX / 2) - 2.41, 0, 0]); //corners @@ -193,23 +230,28 @@ module back_plate () { //bolts 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); + + film_entry_bevel([0, (PlateY / 2) + 0.25, 1.5]); + film_entry_bevel([0, (-PlateY / 2) - 0.25, 1.5]); } + //alignment rods - translate([(-PlateX / 2) + AlignmentX, AlignmentSpacingY / 2, RodZ / 2]) cylinder(r = R(BoltD), h = RodZ, center = true , $fn = 30); - translate([(-PlateX / 2) + AlignmentX, -AlignmentSpacingY / 2, RodZ / 2]) cylinder(r = R(BoltD), h = RodZ, center = true , $fn = 30); + 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 () { - //front_plate(); - translate([0, 0, -3]) back_plate(); - gate_mask_slide_standard16([(PlateX / 2) - (FrontPlateVoidX / 2) - 2.41, 0, -3]); - gate_mask_slide_super16([(PlateX / 2) - (FrontPlateVoidX / 2) - 2.41, 0, -3+3]); + front_plate(); + translate([0, 0, -8]) back_plate(); + //gate_mask_slide_standard16([(PlateX / 2) - (FrontPlateVoidX / 2) - 1.9 + 20, 0, -8]); + //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, -1.5]) cube([16, 50, 0.1], center = true); } -PART="gate_mask_slide_super16"; +PART="front_plate"; if (PART == "front_plate") { rotate([0, 180, 0]) front_plate();