149 lines
4.7 KiB
OpenSCAD
149 lines
4.7 KiB
OpenSCAD
//
|
|
// NopSCADlib Copyright Chris Palmer 2018
|
|
// nop.head@gmail.com
|
|
// hydraraptor.blogspot.com
|
|
//
|
|
// This file is part of NopSCADlib.
|
|
//
|
|
// NopSCADlib 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 3 of
|
|
// the License, or (at your option) any later version.
|
|
//
|
|
// NopSCADlib 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 NopSCADlib.
|
|
// If not, see <https://www.gnu.org/licenses/>.
|
|
//
|
|
|
|
//
|
|
//! 20mm panel mount fuse holder.
|
|
//
|
|
include <../utils/core/core.scad>
|
|
include <spades.scad>
|
|
use <../utils/tube.scad>
|
|
use <../utils/thread.scad>
|
|
|
|
module fuseholder_hole(h = 100) //! Hole with flats for fuseholder
|
|
extrude_if(h)
|
|
intersection() {
|
|
circle(d = 12);
|
|
|
|
square([100, 11], center = true);
|
|
}
|
|
|
|
function fuseholder_diameter() = 18.8; //! Outside diameter of flange
|
|
|
|
module fuseholder(thickness) { //! Fuseholder with nut in place for specified panel thickness
|
|
vitamin(str("fuseholder(6): Fuse holder 20mm"));
|
|
flange_d = fuseholder_diameter();
|
|
flange_t = 2;
|
|
height = 33.2;
|
|
thread_d = 12;
|
|
thread_p = 1;
|
|
thread = 15;
|
|
bot_d = 10.4;
|
|
top_d = 8.7;
|
|
flat = 10.8;
|
|
nut_d = 18.8;
|
|
nut_t = 6;
|
|
nut_flange_t = 1.5;
|
|
spade = 5.4;
|
|
contact_slot_z = 20;
|
|
contact_slot_w = 3.2;
|
|
contact_slot_d = 7;
|
|
|
|
contact_w = 2.8;
|
|
contact_t = 0.3;
|
|
contact_l1 = 11;
|
|
contact_l2 = 6;
|
|
//
|
|
// Nut
|
|
//
|
|
colour = grey(40);
|
|
vflip()
|
|
translate_z(thickness)
|
|
explode(height) {
|
|
color(colour) {
|
|
tube(or = nut_d / 2, ir = thread_d / 2, h = nut_flange_t, center = false);
|
|
|
|
linear_extrude(nut_t)
|
|
difference() {
|
|
circle(d = nut_d, $fn = 6);
|
|
|
|
circle(d = thread_d);
|
|
}
|
|
}
|
|
if(show_threads)
|
|
female_metric_thread(thread_d, thread_p, nut_t, false, colour = colour);
|
|
}
|
|
//
|
|
// Body
|
|
//
|
|
explode(height + 5, offset = -height - 4) {
|
|
color(colour) {
|
|
tube(or = flange_d / 2, ir = 5.2, h = flange_t, center = false);
|
|
|
|
cylinder(r = 5, h = flange_t - 1);
|
|
|
|
linear_extrude(flange_t)
|
|
difference() {
|
|
circle(r = 5);
|
|
|
|
square([8, 1.5], center = true);
|
|
}
|
|
|
|
vflip() {
|
|
if(!show_threads)
|
|
linear_extrude(thread)
|
|
intersection() {
|
|
circle(d = thread_d - 0.3);
|
|
|
|
square([100, 10.8], center = true);
|
|
}
|
|
render() difference() {
|
|
translate_z(thread)
|
|
cylinder(d1 = bot_d, d2 = top_d, h = height - flange_t - thread);
|
|
|
|
for(side = [-1, 1])
|
|
translate([side * (contact_slot_d / 2 + 1) - 1, -contact_slot_w / 2, contact_slot_z])
|
|
cube([2, contact_slot_w, 100]);
|
|
}
|
|
}
|
|
if(show_threads)
|
|
vflip()
|
|
render() intersection() {
|
|
male_metric_thread(thread_d, thread_p, thread, false, colour = colour);
|
|
|
|
translate_z(thread / 2)
|
|
cube([100, 10.8, thread + 1], center = true);
|
|
}
|
|
}
|
|
//
|
|
// Side contacts
|
|
//
|
|
color(silver) vflip()
|
|
for(side = [-1, 1])
|
|
translate([side * contact_slot_d / 2, 0, contact_slot_z])
|
|
rotate([0, -70, 90 - side * 90])
|
|
linear_extrude(contact_t, center = true) difference() {
|
|
hull() {
|
|
square([eps, contact_w], center = true);
|
|
|
|
translate([(side > 0 ? contact_l1 : contact_l2) - contact_w / 2, 0])
|
|
circle(d = contact_w);
|
|
}
|
|
translate([(side > 0 ? contact_l1 : contact_l2) - contact_w / 2, 0])
|
|
circle(d = 1);
|
|
}
|
|
//
|
|
// Bottom contact
|
|
//
|
|
translate_z(-height + flange_t)
|
|
vflip()
|
|
rotate(45)
|
|
spade(spade3, spade);
|
|
}
|
|
}
|