diff --git a/app/data/cfg.json b/app/data/cfg.json index 573de1b..2334ef9 100644 --- a/app/data/cfg.json +++ b/app/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.0", + "version": "1.8.1", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/app/package-lock.json b/app/package-lock.json index 0c5b791..d73190a 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.8.0", + "version": "1.8.1", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/app/package.json b/app/package.json index 66eb29d..3a60590 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.8.0", + "version": "1.8.1", "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 573de1b..2334ef9 100644 --- a/data/cfg.json +++ b/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.0", + "version": "1.8.1", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/package-lock.json b/package-lock.json index 3bdcc7b..7d865f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mcopy", - "version": "1.8.0", + "version": "1.8.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mcopy", - "version": "1.8.0", + "version": "1.8.1", "license": "MIT", "dependencies": { "arduino": "file:app/lib/arduino", diff --git a/package.json b/package.json index 51e3d64..8db4b1b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mcopy", - "version": "1.8.0", + "version": "1.8.1", "description": "Small gauge film optical printer platform", "main": "build.js", "directories": { diff --git a/processing/mcopy/cfg.json b/processing/mcopy/cfg.json index 573de1b..2334ef9 100644 --- a/processing/mcopy/cfg.json +++ b/processing/mcopy/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.0", + "version": "1.8.1", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/scad/rails_2020.scad b/scad/rails_2020.scad index 7035bc9..850ce25 100644 --- a/scad/rails_2020.scad +++ b/scad/rails_2020.scad @@ -1,3 +1,10 @@ +/** + * Optical Printer Rails + * + * Camera Drive = +X + * Lens Drive = -X + **/ + use <2020_profile.scad> //include include <./common/common.scad> @@ -7,6 +14,13 @@ include <./common/rods.scad> RailSpacing = 100; ThreadedRodSpacing = 50; RailEndX = 140; +TNutVoid = 17; + +module rail_debug (H = 175) { + color("lime") linear_extrude(height=H) { + 2020_profile(); + } +} module m3_bolt_void (pos = [0, 0, 0], BoltH = 20, CapH = 3) { D = 3.25; @@ -35,6 +49,13 @@ module bolt_voids_motor (pos = [0, 0, 0]) { } } +module T_nut_void (pos = [0, 0, 0], rot = [0, 0, 0]) { + translate(pos) rotate(rot) { + cylinder(r = R(TNutDiameter2 + 0.1), h = TNutVoid + .01, center = true, $fn = 60); + translate([0, 0, -(TNutVoid / 2) + (6 / 2)]) cylinder(r = R(TNutDiameter1 + 0.1), h = 6.01, center = true, $fn = 60); + } +} + module rail_end (pos = [0, 0, 0], rot = [90, 0, 0], Motors = true) { translate(pos) rotate(rot) difference () { difference () { @@ -50,10 +71,14 @@ module rail_end (pos = [0, 0, 0], rot = [90, 0, 0], Motors = true) { bolt_voids_2020([-RailSpacing / 2, 0, 0]); rotate([0, 180, 0]) bolt_voids_2020([-RailSpacing / 2, 0, 0]); if (Motors) { + + //camera drive motor translate([ThreadedRodSpacing / 2, 0, 0]) { cylinder(r = R(NEMA17PadD + 0.5), h = 60, center = true, $fn = 100); bolt_voids_motor([0, 0, 16]); } + + //lens drive motor translate([-ThreadedRodSpacing / 2, 0, 0]) { cylinder(r = R(NEMA17PadD + 0.5), h = 60, center = true, $fn = 100); bolt_voids_motor([0, 0, 16]); @@ -72,9 +97,64 @@ module rail_end (pos = [0, 0, 0], rot = [90, 0, 0], Motors = true) { } } -rail_end(); +module sled (pos = [0, 0, 0], rot = [90, 0, 0], Length = 50) { + X = RailEndX; + Y = 50; + Z = Length; + translate(pos) rotate(rot) difference () { + translate([0, 5, 0]) rounded_cube([X, Y, Z], d = 10, center = true, $fn = 50); + //extrusion rails + translate([-RailSpacing / 2, 0, 0]) cube([21, 21, Z + 1], center = true); + translate([RailSpacing / 2, 0, 0]) cube([21, 21, Z + 1], center = true); + //linear motion rod void + cylinder(r = R(LinearMotionDiameter + 0.2), h = Z + 1, center = true, $fn = 60); + + //linear motion rod bearing voids + translate([0, 0, (Length / 2) - (LinearBearingHeight / 2) + 0.01]) cylinder(r = R(LinearBearingOuterDiameter + 0.2), h = LinearBearingHeight, center = true, $fn = 100); + translate([0, 0, -(Length / 2) + (LinearBearingHeight / 2) - 0.01]) cylinder(r = R(LinearBearingOuterDiameter + 0.2), h = LinearBearingHeight, center = true, $fn = 100); + + //threaded rod voids + translate([ThreadedRodSpacing / 2, 0, 0]) cylinder(r = R(ThreadDiameter + 0.2), h = Z + 1, center = true, $fn = 60); + translate([-ThreadedRodSpacing / 2, 0, 0]) cylinder(r = R(ThreadDiameter + 0.2), h = Z + 1, center = true, $fn = 60); + + } +} -//translate([-35, 0, -25]) linear_extrude(height=175) 2020_profile(); +module camera_sled (pos = [0, 0, 0], rot = [0, 0, 0]) { + translate(pos) sled(Length = 110); +} + +module lens_sled (pos = [0, 0, 0], rot = [90, 0, 0]) { + Y = 50; + LensDriveX = -ThreadedRodSpacing / 2; + translate(pos) rotate(rot) { + difference () { + sled(rot = [0, 0, 0], Length = Y); + T_nut_void ([LensDriveX, 0, (Y / 2) - (TNutVoid / 2) + 0.01], [180, 0, 0]); + T_nut_void ([LensDriveX, 0, -(Y / 2) + (TNutVoid / 2) - 0.01]); + //camera drive passthrough + translate([-LensDriveX, 0, 0]) cylinder(r = R(ThreadDiameter + 1), h = Y + 1, center = true, $fn = 60); + } + + //debug + translate([-ThreadedRodSpacing / 2, 0, -(Y / 2) + 8.4]) T_nut(); + //translate([-ThreadedRodSpacing / 2, 0, (Y / 2) - 7.5]) rotate([180, 0, 0]) T_nut(); + } + +} + +//rail_end(); +//camera_sled([0, -90, 0]); +//lens_sled([0, -90, 0]); +//difference () { +//intersection() { + //lens_sled([0, -90, 0]); + //translate([-30, -90 + 30 - 1, 10]) cube([90, 60, 45], center = true); + //translate([0, -90, 50]) cube([200, 100, 100], center = true); +//} + +//debug +//translate([-RailSpacing / 2, 0, 0]) rotate([90, 0, 0]) rail_debug(175); //translate([RailSpacing / 2, 0, 0]) rotate([90, 0, 0]) linear_extrude(height=175) 2020_profile(); //translate([ThreadedRodSpacing / 2, 40, 0]) rotate([90, 0, 0]) color("blue") NEMA17();