You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
219 lines
6.6 KiB
219 lines
6.6 KiB
/*
|
|
* Astro Parts -- Generic Split Ring
|
|
*
|
|
* Copyright (c) 2021 Steve Cross <flip@foxhollow.cc>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*/
|
|
|
|
// The EOS 60/600D have a 40mm offset from bottom of camera to center of the
|
|
// imaging sensor and sits on a 31mm shim plate.. this means the total distance
|
|
// from the plate to the center of the sensor is 71mm. This is what we
|
|
// will call "the standard".
|
|
|
|
// [unit: mm]
|
|
// This is the "standard" offset that needs to be consistent
|
|
// across all lens and camera combinations in order for one
|
|
// set of printed rings to be interchangeable with any other
|
|
// combination of lens and/or camera.
|
|
standard_offset = 71;
|
|
|
|
// [unit: mm]
|
|
// how many millimeters from the bottom of the lens mount point to the top of
|
|
// the dovetail bar. do **not** deduct the ring thickness from this number!
|
|
// bar_offset = 40;
|
|
|
|
// [unit: mm]
|
|
// [override]
|
|
// the diameter of the lens or camera
|
|
mounting_point_diameter = 62;
|
|
|
|
// [unit: mm]
|
|
// how wide should the bar spacer at the bottom of the split ring
|
|
// be.. this should match the width of the top of whatever mounting
|
|
// plate is being used
|
|
dovetail_width = 35;
|
|
|
|
// [unit: mm]
|
|
// how big of a gap should there be between the top and the
|
|
// bottom half of the rings. This is to ensure that when you
|
|
// bolt the rings together, it can hold nice and tight.
|
|
ring_split_w = 2;
|
|
|
|
// [unit: mm]
|
|
// how wide should the ring assembly be. Wider will provide more strength
|
|
// and stability, but can only be as wide as the lens allows. Must be at
|
|
// least wide enough to handle the diameter of the base nut (13mm)
|
|
ring_w = 15;
|
|
|
|
// [unit: mm]
|
|
tab_w = 15;
|
|
|
|
// [unit: mm]
|
|
tab_bolt_shaft_d = 4.8;
|
|
|
|
// [unit: mm]
|
|
tab_nut_d = 7.45; // measured 6.99
|
|
|
|
// [unit: mm]
|
|
tab_nut_h = 2.75; // measure 2.57
|
|
|
|
// [unit: mm]
|
|
wall_thickness = 5;
|
|
|
|
// [unit: mm]
|
|
// TODO: MAKE_SHARED
|
|
base_bolt_shaft_d = 6.9;
|
|
|
|
// [unit: mm]
|
|
// Diameter of the nut
|
|
// TODO: MAKE_SHARED
|
|
base_nut_diameter = 12.9;
|
|
|
|
// [unit: mm]
|
|
// TODO: MAKE_SHARED
|
|
base_nut_height = 4;
|
|
|
|
// [unit: mm]
|
|
// How far from the bottom of the base stand should the nut sit
|
|
base_nut_offset = 10;
|
|
|
|
// [unit: mm]
|
|
// How much padding should be added to the ring inner diameter
|
|
// to account for the padding that is to be placed between
|
|
// the ring and the camera or lens
|
|
ring_offset_for_padding = 2;
|
|
|
|
|
|
bar_offset = standard_offset - (mounting_point_diameter/2);
|
|
|
|
ring_inner_d = mounting_point_diameter + ring_offset_for_padding;
|
|
ring_outer_d = ring_inner_d + (wall_thickness*2);
|
|
overall_width = ring_outer_d + (tab_w * 2);
|
|
top_height = ring_outer_d / 2;
|
|
bottom_height = ring_outer_d/2 + bar_offset-wall_thickness;
|
|
ring_split_offset = ring_split_w / 2;
|
|
|
|
$fn = 360;
|
|
|
|
|
|
// rotate([90, 0, 0])
|
|
// difference() {
|
|
// cube([test_height, test_width, test_depth]);
|
|
|
|
// translate([test_width/2, test_height/2, -1])
|
|
// cylinder(h=test_height+2, d=tab_bolt_shaft_d);
|
|
|
|
// translate([test_width/2, test_height/2, -1])
|
|
// cylinder(h=test_height/2, d=tab_nut_d, $fn=6);
|
|
// };
|
|
|
|
translate([-10+ring_split_offset, 0, 0])
|
|
fh_make_split_ring_top();
|
|
|
|
translate([10-ring_split_offset, 0, 0])
|
|
fh_make_split_ring_bottom();
|
|
|
|
module fh_make_split_ring_bottom() {
|
|
difference() {
|
|
fh_make_split_ring();
|
|
translate([-ring_outer_d/2-1+ring_split_offset, -overall_width/2-1, -1])
|
|
cube([ring_outer_d/2+1, overall_width+2, ring_w + 2]);
|
|
}
|
|
}
|
|
|
|
module fh_make_split_ring_top() {
|
|
difference() {
|
|
fh_make_split_ring();
|
|
translate([0-ring_split_offset, -overall_width/2-1, -1])
|
|
cube([bottom_height+2, overall_width+2, ring_w + 2]);
|
|
}
|
|
}
|
|
|
|
module fh_make_split_ring() {
|
|
|
|
difference() {
|
|
union() {
|
|
// outer ring
|
|
cylinder(h=ring_w, d=ring_outer_d, $fn=360);
|
|
|
|
// coupling tabs
|
|
cube2([wall_thickness*2+ring_split_w, overall_width, ring_w]);
|
|
|
|
// bottom mounting post
|
|
translate([ring_inner_d/2, -dovetail_width/2, 0])
|
|
cube([bar_offset, dovetail_width, ring_w]);
|
|
}
|
|
|
|
// punch out center of ring
|
|
translate([0, 0, -1])
|
|
cylinder(h=ring_w+2, d=ring_inner_d, $fn=360);
|
|
|
|
// punch out base bolt hole
|
|
translate([ring_inner_d/2-2.5, 0, ring_w/2])
|
|
rotate([0, 90, 0])
|
|
cylinder(d=base_bolt_shaft_d, h=bar_offset+5, center=false, $fn=360);
|
|
|
|
// punch out the base nut hole
|
|
translate([ring_inner_d/2-1, 0, ring_w/2])
|
|
rotate([90, 0, 90])
|
|
cylinder(bar_offset-base_nut_offset+1, d=base_nut_diameter, center=false, $fn=6);
|
|
|
|
// punch out L tab bolt hole
|
|
translate([-wall_thickness-1, ring_outer_d/2 + tab_w/2, ring_w/2])
|
|
rotate([0, 90, 0])
|
|
cylinder(d=tab_bolt_shaft_d, h=wall_thickness*2+2, center=false, $fn=360);
|
|
|
|
// punch out R tab bolt hole
|
|
translate([-wall_thickness-1, -ring_outer_d/2 - tab_w/2, ring_w/2])
|
|
rotate([0, 90, 0])
|
|
cylinder(d=tab_bolt_shaft_d, h=wall_thickness*2+2, center=false, $fn=360);
|
|
|
|
// punch out L the tab nut hole
|
|
translate([wall_thickness - tab_nut_h + ring_split_offset, ring_outer_d/2 + tab_w/2, ring_w/2])
|
|
rotate([90, 0, 90])
|
|
cylinder(wall_thickness+1, d=tab_nut_d, center=false, $fn=6);
|
|
|
|
// punch out the R tab nut hole
|
|
translate([wall_thickness - tab_nut_h + ring_split_offset, -ring_outer_d/2 - tab_w/2, ring_w/2])
|
|
rotate([90, 0, 90])
|
|
cylinder(wall_thickness+1, d=tab_nut_d, center=false, $fn=6);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
module cube2(dimensions) {
|
|
translate([-dimensions[0]/2, -dimensions[1]/2, 0])
|
|
cube(dimensions);
|
|
}
|
|
|
|
|
|
// test_height = 15;
|
|
// test_width = 15;
|
|
// test_depth = 15;
|
|
|
|
|
|
// rotate([90, 0, 0])
|
|
// translate([-test_height*2, 0, 0])
|
|
// difference() {
|
|
// cube([test_height, test_width, test_depth]);
|
|
|
|
// translate([test_width/2, test_height/2, -1])
|
|
// cylinder(h=test_height+2, d=base_bolt_shaft_d);
|
|
|
|
// translate([test_width/2, test_height/2, -1])
|
|
// cylinder(h=test_height/2, d=base_nut_diameter, $fn=6);
|
|
// };
|
|
|