diff --git a/app/data/cfg.json b/app/data/cfg.json index 12ee438..714d080 100644 --- a/app/data/cfg.json +++ b/app/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.41", + "version": "1.8.42", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/app/package-lock.json b/app/package-lock.json index 9677178..55b5185 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.8.41", + "version": "1.8.42", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/app/package.json b/app/package.json index 79da04f..efb41ef 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.8.41", + "version": "1.8.42", "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 12ee438..714d080 100644 --- a/data/cfg.json +++ b/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.41", + "version": "1.8.42", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/package-lock.json b/package-lock.json index 678ccee..edd80ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mcopy", - "version": "1.8.41", + "version": "1.8.42", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mcopy", - "version": "1.8.41", + "version": "1.8.42", "license": "MIT", "dependencies": { "arduino": "file:app/lib/arduino", diff --git a/package.json b/package.json index 2602262..3d19b6f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mcopy", - "version": "1.8.41", + "version": "1.8.42", "description": "Small gauge film optical printer platform", "main": "build.js", "directories": { diff --git a/processing/mcopy/cfg.json b/processing/mcopy/cfg.json index 12ee438..714d080 100644 --- a/processing/mcopy/cfg.json +++ b/processing/mcopy/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.41", + "version": "1.8.42", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/scad/mcopy_projector.scad b/scad/mcopy_projector.scad index 3f4fdb6..5ebb326 100644 --- a/scad/mcopy_projector.scad +++ b/scad/mcopy_projector.scad @@ -17,7 +17,7 @@ FrameBoltD = 9; KeyDistance = 57.4 - .2; KeyVoidD = BearingInnerDiameter + 0.3; KeyVoidD2 = 14.2; -KeyWidth = 2.25; +KeyWidth = 2.5; //2.25; StepperMountZ = 20; StepperMountInnerD = 30; @@ -36,7 +36,7 @@ LEDH = 8.6; ServoX = 55; ServoY = 7; -ServoBoltD = 4.5; +ServoBoltD = 3.5; ServoZ = 20; ServoSpaceZ = 9.5; ServoSpaceX = 48; @@ -76,10 +76,10 @@ module cap_void (pos = [0, 0, 0], cap = 20) { } } -module bolt_and_cap_void (pos = [0, 0, 0], rot = [0, 0, 0], cap = 10, bolt = 10) { +module bolt_and_cap_void (pos = [0, 0, 0], rot = [0, 0, 0], cap = 10, bolt = 10, pad = 0) { translate(pos) rotate(rot) { - cylinder(r = R(6.25), h = cap, center = true, $fn = 30); - translate([0, 0, -(cap / 2) - (bolt / 2) + 0.1]) cylinder(r = R(3.5), h = bolt, center = true, $fn = 30); + cylinder(r = R(6.25) + pad, h = cap, center = true, $fn = 30); + translate([0, 0, -(cap / 2) - (bolt / 2) + 0.1]) cylinder(r = R(3.5) + pad, h = bolt, center = true, $fn = 30); } } @@ -365,6 +365,8 @@ module gate_key (pos = [0, 0, 0], rot = [0, 0, 0], KeyRot = 0) { } module panel (pos = [0, 0, 0], rot = [0, 0, 0], Mounts = "2020") { + RegistrationBoltsX = -52; + RegistrationBoltsY = 15; MountBoltsX = (-PanelX / 2) + 10; translate(pos) rotate(rot) { difference () { @@ -381,7 +383,13 @@ module panel (pos = [0, 0, 0], rot = [0, 0, 0], Mounts = "2020") { bolt_and_cap_void([MountBoltsX, 0, 4.5]); bolt_and_cap_void([MountBoltsX, (PanelY / 2) - 10, 4.5]); bolt_and_cap_void([MountBoltsX, (-PanelY / 2) + 10, 4.5]); + + bolt_and_cap_void([RegistrationBoltsX, RegistrationBoltsY, -1.15], [0, -90, 0], pad = -0.3); + bolt_and_cap_void([RegistrationBoltsX, -RegistrationBoltsY, -1.15], [0, -90, 0], pad = -0.3); } + //registration line + translate([-50, 0, 3]) rotate([45, 0, 0]) cube([20, 1, 1], center = true); + //key + bearing voids bearing_void([0, KeyDistance / 2, (PanelZ / 2) - (8 / 2) - 2], 8.01); bearing_void([0, -KeyDistance / 2, (PanelZ / 2) - (8 / 2) - 2], 8.01); @@ -407,7 +415,7 @@ module panel (pos = [0, 0, 0], rot = [0, 0, 0], Mounts = "2020") { translate([GateBoltX, GateBoltY, -20]) hex(9.2, 50); translate([GateBoltX, -GateBoltY, -20]) hex(9.2, 50); } - color("red") cube([30, 8.8, 10], center = true); + //color("red") cube([30, 8.8, 10], center = true); } } @@ -419,13 +427,20 @@ module orbital_mount (pos = [0, 0, 0], rot = [0, 0, 0]) { TopZ = 4; Notch = 0.5; Notches = 60; - BoltsX = 53; - BoltsY = 25; + + ExtrusionBoltsX = 53; + ExtrusionBoltsY = 25; + + RegistrationBoltsX = 41; + RegistrationBoltsY = 15; $fn = 300; translate(pos) rotate(rot) { difference () { cylinder(r = R(OuterD), h = BottomZ + TopZ, center = true); - cylinder(r = R(VoidD), h = BottomZ + TopZ + 1, center = true); + difference () { + cylinder(r = R(VoidD), h = BottomZ + TopZ + 1, center = true); + translate([105, 0, 0]) cube([OuterD, OuterD, BottomZ + TopZ + 1 + 1], center = true); + } translate([0, 0, BottomZ - (TopZ / 2) - 0.49]) difference () { cylinder(r = R(OuterD) + 1, h = TopZ, center = true); cylinder(r = R(InnerD), h = TopZ + 1, center = true); @@ -436,9 +451,14 @@ module orbital_mount (pos = [0, 0, 0], rot = [0, 0, 0]) { for (i = [0 : 3]) { rotate([0, 0, i * (360 / 4)]) translate([OuterD / 2, 0, 0]) rotate([0, 0, 45]) cube([1, 1, BottomZ + TopZ + 1], center = true); } - bolt_and_cap_void([BoltsX, BoltsY, -4], [180, 0, 0]); - bolt_and_cap_void([BoltsX, -BoltsY, -4], [180, 0, 0]); + bolt_and_cap_void([ExtrusionBoltsX, ExtrusionBoltsY, -4], [180, 0, 0]); + bolt_and_cap_void([ExtrusionBoltsX, -ExtrusionBoltsY, -4], [180, 0, 0]); + bolt_and_cap_void([RegistrationBoltsX, RegistrationBoltsY, -4], [180, 0, 0]); + bolt_and_cap_void([RegistrationBoltsX, -RegistrationBoltsY, -4], [180, 0, 0]); + //registration line + translate([37, 0, 0]) rotate([0, 0, 45]) cube([1, 1, 20], center = true); } + } } @@ -448,6 +468,24 @@ module servo_mount_bolt_void (pos = [0, 0, 0], rot = [0, 0, 0]) { } } +module servo_mount_bolts_void () { + X = ServoSpaceX / 2; + Z = ServoSpaceZ / 2; + translate([ X, 0, Z]) rotate([90, 90, 0]) cylinder(r = R(ServoBoltD), h = ServoY + 1, center = true, $fn = 60); + translate([-X, 0, Z]) rotate([90, 90, 0]) cylinder(r = R(ServoBoltD), h = ServoY + 1, center = true, $fn = 60); + translate([ X, 0, -Z]) rotate([90, 90, 0]) cylinder(r = R(ServoBoltD), h = ServoY + 1, center = true, $fn = 60); + translate([-X, 0, -Z]) rotate([90, 90, 0]) cylinder(r = R(ServoBoltD), h = ServoY + 1, center = true, $fn = 60); + + translate([-X, -7, -Z]) rotate([90, 90, 0]) cylinder(r = R(6), h = 10, center = true, $fn = 60); + translate([-X, -7, Z]) rotate([90, 90, 0]) cylinder(r = R(6), h = 10, center = true, $fn = 60); +} + +module servo_mount_void () { + cube([ServoVoidX, ServoY, ServoZ + 1], center = true); + translate([0, ServoY - 1, 0]) cube([ServoX + 1, ServoY, 1], center = true); + servo_mount_bolts_void(); +} + //MG995 module servo_mount (pos = [0, 0, 0], rot = [0, 0, 0]) { translate (pos) rotate (rot) { @@ -459,27 +497,48 @@ module servo_mount (pos = [0, 0, 0], rot = [0, 0, 0]) { translate([-19, 0, 0]) cube([17, ServoY + 1, 20 ], center = true, $fn = 40); } } - cube([ServoVoidX, ServoY + 1, ServoZ + 1], center = true); - translate([0, ServoY - 1, 0]) cube([ServoX + 1, ServoY, 1], center = true); + servo_mount_void(); - translate([ServoSpaceX / 2, 0, ServoSpaceZ / 2]) rotate([90, 90, 0]) cylinder(r = R(ServoBoltD), h = ServoY + 1, center = true, $fn = 60); - translate([-ServoSpaceX / 2, 0, ServoSpaceZ / 2]) rotate([90, 90, 0]) cylinder(r = R(ServoBoltD), h = ServoY + 1, center = true, $fn = 60); - translate([ServoSpaceX / 2, 0, -ServoSpaceZ / 2]) rotate([90, 90, 0]) cylinder(r = R(ServoBoltD), h = ServoY + 1, center = true, $fn = 60); - translate([-ServoSpaceX / 2, 0, -ServoSpaceZ / 2]) rotate([90, 90, 0]) cylinder(r = R(ServoBoltD), h = ServoY + 1, center = true, $fn = 60); - - //void for motor + //angled void for motor translate([0, 7.5, -15]) rotate([45, 0, 0]) cube([ServoX+20, 10, 10], center = true); //cut off end translate([0, 0, 15.4]) cube([ServoX+30, 10, 10], center = true); //cut off top translate([30, 0, 0]) cube([20, 10, 40], center = true); + bolt_and_cap_void([-35, 0, 20], [0, 0, 0], bolt = 15); + translate([-35, 0, 6]) m3_nut(2.5); + translate([-35, 5, 6]) cube([6.75, 10, 2.5], center = true); } - } //debug //translate([(55 / 2)-17.5, 0, 0]) sphere(r = 6 / 2, $fn = 60); } +module servo_mount_cover (pos = [0, 0, 0], rot = [0, 0, 0]) { + translate (pos) rotate (rot) { + difference () { + union () { + translate([1.5, 0, -1.5]) rotate([90, 0, 0]) rounded_cube([ServoX + 3, ServoZ + 10 + 3, ServoY ], d = 4, center = true, $fn = 40); + difference () { + translate([-34, 0, 0]) cube([17, ServoY, ServoZ + 10 ], center = true, $fn = 40); + translate([-19, 0, 0]) cube([17, ServoY + 1, 20 ], center = true, $fn = 40); + } + difference () { + translate([1.5, -3, -1.5]) rotate([90, 0, 0]) rounded_cube([ServoX + 3, ServoZ + 10 + 3, ServoY ], d = 4, center = true, $fn = 40); + translate([-13.25, -3, 0]) cube([ServoX + 3 + 1, ServoY + 1, ServoZ + 10 + 7], center = true); + translate([0, -3, 5]) cube([ServoX + 3 + 5, ServoY + 1, ServoZ + 10], center = true); + } + } + servo_mount_void(); + servo_mount(); + translate([-22.25 - 4, 0, -15.4]) cube([ServoX+30, 10, 10], center = true); + bolt_and_cap_void([-35, 0, 20], [0, 0, 0]); + translate([-35, 0, 0]) cube([20, 20, 20], center = true); + } + + } +} + module projector () { } @@ -490,11 +549,11 @@ module debug () { //NEMA17([0, -KeyDistance / 2, -50]); //gate_key([0, KeyDistance / 2, -14], [0, 0, -90 + 45], KeyRot=90); //gate_key([0, -KeyDistance / 2, -14], [0, 0, 180 + 45 ]); - translate([0, -KeyDistance / 2, 0]) { + /*translate([0, -KeyDistance / 2, 0]) { color("blue") LED_housing([0, -17.25, -4.5 - 13], [90, -90, 134], Void = true); color("green") LED_housing([0, -17.25, -4.5 - 13], [-90, 90, 134], OffsetZ = -24.25, Void = true); LED_enclosure([0, 0, -15]); - } + }*/ /*translate([0, KeyDistance / 2, 0]) { color("blue") LED_housing([0, -17.25, -4.5 - 13], [90, -90, 134], Void = true); color("green") LED_housing([0, -17.25, -4.5 - 13], [-90, 90, 134], OffsetZ = -24.25, Void = true); @@ -507,7 +566,7 @@ module debug () { //one mount //translate([0, -50, 0]) cube([60, 100, 150], center = true); // - //translate([35, 5, 0]) cube([60, 25, 150], center = true); + translate([35, 5, 0]) cube([60, 25, 150], center = true); } } @@ -516,15 +575,17 @@ module debug () { } //color("red") translate([(-PanelX / 2) + 10, 0, (-PanelZ / 2) -10]) rotate([90, 0, 0]) 2020_tslot(PanelY); //orbital_mount([(-PanelX / 2) - 4.5, 0, 40], [0, 90, 0]); - + color("red") servo_mount_cover([33, 8+10, -45], [0, 90, 0]); } -PART = "led_enclosure"; +PART = "panel"; if (PART == "gate_key") { - gate_key(KeyRot = 90); + gate_key(KeyRot = 0); } else if (PART == "panel") { rotate([180, 0, 0]) panel(); +} else if (PART == "servo_mount_cover"){ + servo_mount_cover([0, 0, 0], [0, 90, 0]); } else if (PART == "led_housing"){ LED_housing(); } else if (PART == "led_enclosure"){