Work on the single-lamp design (TODO: Needs a BOM pass)

This commit is contained in:
Matt McWilliams 2025-03-12 15:20:21 -04:00
parent 0b4ff27f06
commit bceedf24b7
2 changed files with 99 additions and 57 deletions

View File

@ -43,8 +43,7 @@
@online{spudic-device,
author={Hrvoje Spudić},
title={DIY 16mm optical sound recorder, v2:
The device.},
title={DIY 16mm optical sound recorder, v2: The device.},
url={https://hrvojespudic.net/optical-sound-2-pt-2},
urldate={2025-02-24}
}

View File

@ -1,19 +1,24 @@
//include <./lamp.scad>;
//include <./box_laser.scad>;
include <./common/common.scad>;
use <./common/common.scad>;
include <./common/motors.scad>;
include <./common/2020_tslot.scad>;
include <./takeup/takeup.scad>;
use <./sprocketed_roller/scad/sprocketed_roller.scad>;
use <./filmless.scad>;
$fn = 100;
FrameX = 400;
FrameY = 260;
FrameZ = -16;
SprocketBaseD = 19.05; //8 frames
SprocketBaseH = 2.7;
FrameC = (SprocketBaseD * PI) / 8;
IN = 25.4;
Film16mmStandard = 10.26;
@ -112,7 +117,7 @@ LampRailsOffsetZ = 1 / 2;
LampGateCarrierThreadedSpacingX = 30;
LampCarrierX = 40;
LampSingleX = 70;
LampSingleX = 84;
LEDWidthX = 20;
GateCarrierX = 37;
@ -362,24 +367,23 @@ module lamp_bolts_voids (pos = [0, 0, 0], H = 10, Pad = 0) {
}
}
module lamp_post (pos = [0, 0, 0]) {
module lamp_post (pos = [0, 0, 0], H = 20) {
$fn = 40;
H = 20;
translate(pos) difference () {
cylinder(r = R(8), h = H, center = true);
cylinder(r = R(4.4), h = H + 1, center = true);
}
}
module lamp_posts (pos = [0, 0, 0], H = 10) {
X = LampBoltX/2;
Y = LampBoltY/2;
module lamp_posts (pos = [0, 0, 0], H = 20) {
X = LampBoltX / 2;
Y = LampBoltY / 2;
$fn = 30;
translate(pos) {
lamp_post([X, Y, 0]);
lamp_post([-X, Y, 0]);
lamp_post([X, -Y, 0]);
lamp_post([-X, -Y, 0]);
lamp_post([X, Y, 0], H);
lamp_post([-X, Y, 0], H);
lamp_post([X, -Y, 0], H);
lamp_post([-X, -Y, 0], H);
}
}
@ -483,6 +487,7 @@ module gate_carrier (pos = [0, 0, 0], rot = [0, 0, 0]) {
SidesX = 2;
SidesY = -1.2;
SpringRail = 4.5;
TabX = 6;
translate(pos) rotate(rot) {
difference () {
union () {
@ -529,6 +534,8 @@ module gate_carrier (pos = [0, 0, 0], rot = [0, 0, 0]) {
}
//registration tabs
translate([(GateCarrierX / 2) - (TabX / 2), 8.5, (-GateCarrierZ / 2) + (4 / 2)]) cube([TabX - 0.4, 20, 2], center = true);
translate([(-GateCarrierX / 2) + (TabX / 2), 8.5, (-GateCarrierZ / 2) + (4 / 2)]) cube([TabX - 0.4, 20, 2], center = true);
}
}
@ -601,6 +608,7 @@ module picture_gate (pos = [0, 0, 0], rot = [0, 0, 0], Type = "full", Width = 2)
}
}
/*
module lamp_dual (pos = [0, 0, 0]) {
Z = 10;
WallZ = Z;
@ -636,44 +644,50 @@ module lamp_dual (pos = [0, 0, 0]) {
translate([0, 10.6+7, Z]) cube([5.5, 34, 18], center = true);
translate([0, 5, Z]) cube([3, 20, 18], center = true);
}
}
}*/
module lamp_single (pos = [0, 0, 0]) {
Height = 20 + 5;
BaseZ = 2;
Z = 12;
WallZ = Z;
GateZ = Z;
PostsZ = Z - 1;
PostsZ = (Height / 2) + 1;
TabX = 6;
TabsOffsetY = 6;
translate(pos) {
intersection () {
difference () {
union () {
rounded_cube([LampSingleX, 70, 2], d = 4, center = true);
translate([0, -15, 20 / 2]) cube([70, 10, 22], center = true);
translate([0, 0, 20 / 2]) difference() {
rounded_cube([70, 70, 22], d = 4, center = true);
rounded_cube([70 - 5, 70 - 10, 22 + 1], d = 4, center = true);
//base
rounded_cube([LampSingleX, 74, BaseZ], d = 4, center = true, $fn = 30);
translate([0, -12, Height / 2]) cube([LampSingleX, 10, BaseZ + Height], center = true);
translate([0, 0, Height / 2]) difference() {
rounded_cube([LampSingleX, 74, BaseZ + Height], d = 4, center = true, $fn = 30);
translate([0, 2, 0]) rounded_cube([LampSingleX - 7, 70 - 10, BaseZ + Height + 1], d = 4, center = true, $fn = 30);
}
lamp_posts([0, 14.75, PostsZ]);
lamp_posts([0, 14.75, PostsZ], Height);
//translate([-18, 1, 20 / 2]) cube([4.75, 32, 21], center = true);
}
//void for gate carrier, front
translate([0, 1, 9.99]) cube([25, 32, 22], center = true);
translate([0, 1, Height / 2 ]) cube([25, 32, BaseZ + Height + 1], center = true);
//void for gate carrier, bottom
translate([0, -4, 0]) cube([GateCarrierX + 0.25, 12, 50], center = true);
translate([0, -4, 0]) cube([GateCarrierX + 0.25, 12, 55], center = true);
//void for lamp slide
translate([0, 10, 0]) cube([LEDWidthX + 0.25, 40, 50], center = true);
translate([0, 10, 0]) cube([LEDWidthX + 0.25, 40, 55], center = true);
//void for gate
translate([0, -4, 0]) cube([LEDWidthX + 0.25, 32, 50], center = true);
translate([0, -4, 0]) cube([LEDWidthX + 0.25, 32, 55], center = true);
translate([0, -48, 0]) cylinder(r = R(60), h = 4 + 1, center = true, $fn = 200);
lamp_bolts_voids([0, 14.75, -2], 50, 0.2);
translate([LampGateCarrierThreadedSpacingX / 2, 31, 9 + LampRailsOffsetZ]) rotate([90, 0, 0]) {
translate([LampGateCarrierThreadedSpacingX / 2, 32.5, 9 + LampRailsOffsetZ]) rotate([90, 0, 0]) {
cylinder(r = R(4.25), h = 20, center = true, $fn = 40);
rotate([0, 0, 30]) m4_nut();
}
translate([-LampGateCarrierThreadedSpacingX / 2, 31, 9 + LampRailsOffsetZ]) rotate([90, 0, 0]) {
translate([-LampGateCarrierThreadedSpacingX / 2, 32.5, 9 + LampRailsOffsetZ]) rotate([90, 0, 0]) {
cylinder(r = R(4.25), h = 20, center = true, $fn = 40);
rotate([0, 0, 30]) m4_nut();
}
@ -683,23 +697,38 @@ module lamp_single (pos = [0, 0, 0]) {
cube([LEDWidthX + 0.25, 20, 2.8], center = true);
translate([((LEDWidthX + 0.25) / 2) - (3.5 / 2), 0, (5.5 / 2) - (1.5 / 2)]) cube([3.5, 20, 6.8], center = true);
translate([((-LEDWidthX - 0.25) / 2) + (3.5 / 2), 0, (5.5 / 2) - (1.5 / 2)]) cube([3.5, 20, 6.8], center = true);
}
}
//voids for gate carrier tabs
translate([(GateCarrierX / 2) - (TabX / 2), TabsOffsetY, 0]) cube([TabX, 20, 2.8], center = true);
translate([(-GateCarrierX / 2) + (TabX / 2), TabsOffsetY, 0]) cube([TabX, 20, 2.8], center = true);
//DC power jack void
translate([-LampSingleX / 2, 13, 12]) rotate([0, 90, 0]) cylinder(r = R(11), h = 20, center = true, $fn = 80);
}
translate([0, 66.5, 0]) cylinder(r = R(170), h = 100, center = true, $fn = 500);
}
translate([0, 26.5, 3.8]) difference () {
translate([0, 1, -1]) cube([LEDWidthX - 6.75, 8, 4], center = true);
}
translate([0, 26.5, 3.8 + 0.4]) difference () {
translate([0, 2, -1]) cube([LEDWidthX - 6.75, 10, 4], center = true);
m4_nut();
cylinder(r = R(4), h = 20, $fn = 40, center = true);
}
translate([LampGateCarrierThreadedSpacingX / 2, 12, (11 / 2) - (2 / 2)]) difference() {
translate([-0.7, 0, 0]) cube([(GateCarrierX - LEDWidthX) / 2, 20, 11], center = true);
translate([0, 0, 10.2 / 2]) rotate([90, 0, 0]) cylinder(r = R(4.1), h = 20 + 1, center = true, $fn = 40);
}
translate([-LampGateCarrierThreadedSpacingX / 2, 12, (11 / 2) - (2 / 2)]) difference() {
translate([0.7, 0, 0]) cube([(GateCarrierX - LEDWidthX) / 2, 20, 11], center = true);
translate([0, 0, 10.2 / 2]) rotate([90, 0, 0]) cylinder(r = R(4.1), h = 20 + 1, center = true, $fn = 40);
difference () {
union () {
translate([LampGateCarrierThreadedSpacingX / 2, 12, (11 / 2) - (2 / 2)]) difference() {
translate([0.375, 0, 0]) cube([(GateCarrierX - LEDWidthX) / 2 + 2, 20, 11], center = true);
translate([0, 0, 10.2 / 2]) rotate([90, 0, 0]) cylinder(r = R(4.1), h = 20 + 1, center = true, $fn = 40);
}
translate([-LampGateCarrierThreadedSpacingX / 2, 12, (11 / 2) - (2 / 2)]) difference() {
translate([-0.375, 0, 0]) cube([(GateCarrierX - LEDWidthX) / 2 + 2, 20, 11], center = true);
translate([0, 0, 10.2 / 2]) rotate([90, 0, 0]) cylinder(r = R(4.1), h = 20 + 1, center = true, $fn = 40);
}
}
//voids for gate carrier tabs
translate([(GateCarrierX / 2) - (TabX / 2), TabsOffsetY, 0]) cube([TabX, 20, 2.8], center = true);
translate([(-GateCarrierX / 2) + (TabX / 2), TabsOffsetY, 0]) cube([TabX, 20, 2.8], center = true);
}
}
}
@ -715,18 +744,20 @@ module lamp_single_assembly (pos = [0, 0, 0]) {
module lamp_cover (pos = [0, 0, 0]) {
RollerVoidY = -17.5;
RollerShelfD = 44.75;
echo(LampY + 15);
translate(pos) {
difference () {
union () {
intersection () {
rounded_cube([LampSingleX, 70, 2], d = 4, center = true);
translate([0, 66.5, 0]) cylinder(r = R(170), h = 100, center = true, $fn = 500);
translate([0, 0.25, 0]) rounded_cube([LampSingleX, 74, 2], d = 4, center = true, $fn = 30);
translate([0, 66.75, 0]) cylinder(r = R(170), h = 100, center = true, $fn = 500);
}
translate([0, -17, -1]) cube([15, 2, 3], center = true);
//over hangs
translate([0, -16, -3.4]) cube([20.25, 2, 6], center = true);
}
lamp_bolts_voids([0, 15, 0]);
translate([0, -23, 0]) cube([40, 10, 10], center = true);
translate([0, (-42.39 / 2) + RollerVoidY, 0]) cylinder(r = R(RollerShelfD), h = 10, center = true, $fn = 240);
translate([0, (-42.39 / 2) + RollerVoidY, 0]) cylinder(r = R(RollerShelfD), h = 20, center = true, $fn = 240);
}
}
}
@ -802,6 +833,9 @@ module panel (pos = [0, 0, 0]) {
//voids for motor pad
translate([0, RollerY + 7.4, SprocketedRollerZ]) cube([27, 43, 6], center = true);
panel_bearing_void([0, RollerY, 2.5]);
//lamp bolt void
translate([0, 46.75, 0]) cylinder(r = R(4.25), h = 20, center = true);
}
difference () {
union () {
@ -1246,6 +1280,7 @@ module motor_controller_panel (pos = [0, 0, 0]) {
}
}
/*
module sprocketed_roller_upright (pos = [0, 0, 0]) {
translate (pos) {
difference () {
@ -1254,6 +1289,7 @@ module sprocketed_roller_upright (pos = [0, 0, 0]) {
}
}
}
*/
module sprocketed_roller_invert (pos = [0, 0, 0]) {
D = (FrameC * Sprockets) / PI;
@ -1269,8 +1305,10 @@ module sprocketed_roller_invert (pos = [0, 0, 0]) {
}
}
/*
//currently in testing
module sprocketed_roller_upright_solid (pos = [0, 0, 0]) {
$fn = 120;
OverhangD = 42.85;
OverhangH = 2.5;
ChannelD = 1;
@ -1309,6 +1347,7 @@ module sprocketed_roller_upright_solid (pos = [0, 0, 0]) {
}
}
}
*/
//BOM: 1, M3 hex cap bolt 12mm, N/A, Attaches the sprocketed_roller to the geared motor
//BOM: 1, 608-RS Ball Bearing, 608-RS, Reduces wobble in the rollers spin
@ -1525,9 +1564,8 @@ module debug () {
//sprocketed_roller_upright();
//translate([50, 0, 0]) cube([100, 100, 100], center = true);
}
//translate([0, RollerY, 18]) rotate([180, 0, 0]) sprocketed_roller_upright_solid();
debug_lamp();
//centered_geared_motor([0, RollerY, MotorZ], [180, 0, 90]);
//lamp
//difference () {
//lamp_dual([0, LampY, 0 + 1]);
@ -1642,7 +1680,7 @@ module debug () {
//motor_controller_panel([0, -75, PanelOffsetZ]);
//electronics
//ESP32_board([0, -90, -25], [180, 0, 0]);
ESP32_board([0, -90, -25], [180, 0, 0]);
L298N_module([-32, -85, -9], [180, 0, -90]);
L298N_module([32, -85, -9], [180, 0, 90]);
electronics_panel([0, -100, -3]);
@ -1655,13 +1693,16 @@ module debug_lamp () {
//translate([LampGateCarrierThreadedSpacingX / 2, 34, 11 + LampRailsOffsetZ]) rotate([90, 0, 0]) cylinder(r = R(4), h = 130, center = true);
//panel([0, -10, -1.5]);
//
lamp_single([0, 10.25, 2]);
//lamp_cover([0, 10, 24]);
//translate([0, -30, 3.5]) rotate([0, 0, 10]) sprocketed_roller_invert_solid();
lamp_LEDs([0, 28, 11]);
gate_carrier([0, 1.6 + 0.25, 10.75]);
lamp_single([0, 10.25, 1]);
lamp_cover([0, 10, 28]);
picture_gate([0, -6.2, 11], Type = "full"); //standard
translate([0, RollerY - 10, 2.75]) sprocketed_roller_invert_solid();
centered_geared_motor([0, RollerY - 10, MotorZ], [180, 0, 90]);
lamp_LEDs([0, 28, 10]);
gate_carrier([0, 1.6 + 0.25, 9.75]);
picture_gate([0, -6.2, 10], Type = "full"); //standard
}
//BOM: 840, 2020 Aluminum extrusion mm,N/A,Top and bottom frame 2x 420mm
@ -1670,17 +1711,17 @@ module contact_printer () {
//debug module for BOM
}
PART = "lamp_LEDs";
PART = "lamp_cover";
LIBRARY = true;
if (PART == "panel") {
rotate([180, 0, 0]) panel();
} else if (PART == "lamp_dual") {
lamp_dual();
/*} else if (PART == "lamp_dual") {
lamp_dual();*/
} else if (PART == "lamp_single") {
lamp_single();
} else if (PART == "lamp_cover") {
lamp_cover();
rotate([180, 0, 0]) lamp_cover();
} else if (PART == "takeup_panel_picture"){
takeup_panel_picture();
} else if (PART == "takeup_panel_picture_motor_mount") {
@ -1702,11 +1743,13 @@ if (PART == "panel") {
} else if (PART == "super_gate") {
rotate([-90, 0, 0]) picture_gate(Type = "super16");
} else if (PART == "sound_gate") {
rotate([-90, 0, 0]) picture_gate(Type = "sound");
rotate([-90, 0, 0]) picture_gate(Type = "sound");
/*
} else if (PART == "sprocketed_roller") {
rotate([180, 0, 0]) sprocketed_roller_upright();
} else if (PART == "sprocketed_roller_solid") {
rotate([180, 0, 0]) sprocketed_roller_upright_solid();
*/
} else if (PART == "sprocketed_roller_invert") {
sprocketed_roller_invert();
} else if (PART == "sprocketed_roller_invert_solid") {
@ -1736,7 +1779,7 @@ if (PART == "panel") {
} else if (PART == "gate_holder") {
gate_holder();
} else if (PART == "gate_carrier") {
rotate([-90, 0, 0]) gate_carrier();
rotate([0, 0, 0]) gate_carrier();
} else if (PART == "filter_carrier") {
rotate([-90, 0, 0]) filter_carrier();
} else if (PART == "lamp_LEDs") {