Initial commit
commit
47aae659ab
|
@ -0,0 +1,3 @@
|
|||
*.stl
|
||||
*.swp
|
||||
*.zip
|
|
@ -0,0 +1,18 @@
|
|||
# Dipole Antenna Balun Enclosure
|
||||
|
||||
This is a printable enclosure and cover to build a balun for a Dipole. The
|
||||
parametric design allows you to specify the dimensions of the box and the
|
||||
clearances for various hardware components.
|
||||
|
||||
## Hardware
|
||||
|
||||
* M3 Heat-press inserts (x4)
|
||||
* M3 screws (x4)
|
||||
* SO-239 connector
|
||||
* M4 Bolt for binding posts (x2)
|
||||
* M4 washers
|
||||
* M4 nuts (x4)
|
||||
* Optional Toroidal Choke
|
||||
* Wire (length depending on balun design)
|
||||
* Solder
|
||||
* Crimp-on ring terminals (x3)
|
|
@ -0,0 +1,216 @@
|
|||
// Enclosure Width (x)
|
||||
width=80;
|
||||
|
||||
// Enclosure Length (y)
|
||||
length=80;
|
||||
|
||||
// Enclosure Depth (z)
|
||||
depth=30;
|
||||
|
||||
// Wall/Floor thickness
|
||||
wall=2;
|
||||
|
||||
// Cover Screw Diameter (clearance)
|
||||
cover_screw_diameter=3.5;
|
||||
|
||||
// Heat-press insert height
|
||||
insert_height=5;
|
||||
|
||||
// Heat-press insert diameter
|
||||
insert_diameter=5;
|
||||
|
||||
// Diameter of binding posts
|
||||
pole_clearance=4.5;
|
||||
|
||||
// Generate cover model
|
||||
include_cover = true;
|
||||
|
||||
// Choose a radius that ensures adequate wall thickness
|
||||
radius = max(insert_diameter, cover_screw_diameter) / 2 + wall;
|
||||
|
||||
$fn=32;
|
||||
|
||||
enclosure(
|
||||
width = width,
|
||||
length = length,
|
||||
depth = depth,
|
||||
wall = wall,
|
||||
cover_screw_diameter = cover_screw_diameter,
|
||||
insert_height = insert_height,
|
||||
insert_diameter = insert_diameter,
|
||||
pole_clearance = pole_clearance
|
||||
);
|
||||
|
||||
if (include_cover == true) {
|
||||
translate([width+10, 0, 0])
|
||||
enclosure_cover(
|
||||
width = width,
|
||||
length = length,
|
||||
thickness = wall,
|
||||
radius = radius
|
||||
);
|
||||
}
|
||||
|
||||
module enclosure_cover(
|
||||
width,
|
||||
length,
|
||||
thickness,
|
||||
radius,
|
||||
screw_diameter=3.5,
|
||||
) {
|
||||
difference() {
|
||||
radiused_box(width, length, thickness, radius);
|
||||
for (i = [[0, 0], [1, 0], [0, 1], [1, 1]]) {
|
||||
translate([
|
||||
radius + (i[0]*(width - 2*radius)),
|
||||
radius + (i[1]*(length - 2*radius)),
|
||||
0
|
||||
])
|
||||
cylinder(r=screw_diameter/2, h=thickness+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module enclosure(width, length, depth,
|
||||
wall = 3,
|
||||
cover_screw_diameter = 3, // diameter of corner screws (clearance)
|
||||
insert_height = 0, // height of heat-press insert
|
||||
insert_diameter = 0, // diameter of heat-press insert
|
||||
pole_clearance = 4.5 // diameter binding posts for each pole
|
||||
) {
|
||||
radius = max(insert_diameter, cover_screw_diameter) / 2 + wall;
|
||||
|
||||
// Top
|
||||
translate([radius, length, 0])
|
||||
hanging_tab(
|
||||
width = width-(2*radius),
|
||||
length = 15,
|
||||
diameter = 8,
|
||||
thickness = wall*3
|
||||
);
|
||||
|
||||
difference() {
|
||||
radiused_box(width, length, depth, radius);
|
||||
|
||||
translate([wall, wall, wall])
|
||||
radiused_box(
|
||||
width = width-2*wall,
|
||||
length = length-2*wall,
|
||||
depth = depth,
|
||||
radius = radius-wall
|
||||
);
|
||||
|
||||
// SO-239 mount, centered on front
|
||||
translate([width/2, wall+1, (depth-wall)/2+wall])
|
||||
rotate([90, 0, 0])
|
||||
so_239_mount(height=wall+2);
|
||||
|
||||
// Binding posts
|
||||
translate([-1, (2*length)/3, depth/2])
|
||||
rotate([0, 90, 0])
|
||||
cylinder(r=pole_clearance/2, h=width+2);
|
||||
}
|
||||
|
||||
// screw bosses in each corner
|
||||
for (i = [[0, 0], [1, 0], [0, 1], [1, 1]]) {
|
||||
translate([
|
||||
radius + (i[0]*(width - 2*radius)),
|
||||
radius + (i[1]*(length - 2*radius)),
|
||||
0
|
||||
])
|
||||
screw_boss(
|
||||
radius,
|
||||
depth,
|
||||
inner_diameter = cover_screw_diameter,
|
||||
depth = depth-wall, // not a blind hole, leave a floor thickness
|
||||
counterbore_depth = insert_height,
|
||||
counterbore_diameter = insert_diameter
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
module hanging_tab(
|
||||
width = 50,
|
||||
diameter = 5,
|
||||
length = 10,
|
||||
thickness = 5
|
||||
) {
|
||||
difference() {
|
||||
union() {
|
||||
translate([length, 0, 0])
|
||||
cube([width-(2*length), length, thickness]);
|
||||
cube([width, length/2, thickness]);
|
||||
translate([length, length/2, 0])
|
||||
cylinder(r=length/2, h=thickness);
|
||||
translate([width-length, length/2, 0])
|
||||
cylinder(r=length/2, h=thickness);
|
||||
}
|
||||
|
||||
// Round the edges, add a fillet
|
||||
translate([0, length/2, -1])
|
||||
cylinder(r=length/2, h=thickness+2);
|
||||
translate([width, length/2, -1])
|
||||
cylinder(r=length/2, h=thickness+2);
|
||||
|
||||
// Slot
|
||||
translate([length, length/2, -1])
|
||||
cylinder(r=diameter/2, h=thickness+2);
|
||||
translate([width-length, length/2, -1])
|
||||
cylinder(r=diameter/2, h=thickness+2);
|
||||
translate([length, (length-diameter)/2, -1])
|
||||
cube([width-(2*length), diameter, thickness+2]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Describes clearance holes for a SO-239 connector
|
||||
*/
|
||||
module so_239_mount(
|
||||
center_diameter = 15,
|
||||
bolt_spacing = 18,
|
||||
bolt_diameter = 3.5,
|
||||
height = 10
|
||||
) {
|
||||
cylinder(r=center_diameter/2, h=height);
|
||||
for (i = [[-1, 1], [-1, -1], [1, 1], [1, -1]]) {
|
||||
translate([i[0]*bolt_spacing/2, i[1]*bolt_spacing/2, 0])
|
||||
cylinder(r=bolt_diameter/2, h=height);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Describes a cylinder with a center bore for accepting a screw,
|
||||
* and a counterbore for a heat-press insert
|
||||
*/
|
||||
module screw_boss(
|
||||
radius,
|
||||
height,
|
||||
inner_diameter,
|
||||
depth,
|
||||
counterbore_depth=0,
|
||||
counterbore_diameter=0
|
||||
) {
|
||||
difference() {
|
||||
cylinder(r=radius, h=height);
|
||||
translate([0, 0, height-depth])
|
||||
cylinder(r=inner_diameter/2, h=height+depth);
|
||||
translate([0, 0, height - counterbore_depth])
|
||||
cylinder(r=counterbore_diameter/2, h=counterbore_depth+1);
|
||||
}
|
||||
}
|
||||
|
||||
module radiused_box(width, length, depth, radius=0) {
|
||||
translate([0, radius, 0])
|
||||
cube([width, length-2*radius, depth]);
|
||||
translate([radius, 0, 0])
|
||||
cube([width-2*radius, length, depth]);
|
||||
translate([radius, radius, 0])
|
||||
cylinder(r=radius, h=depth);
|
||||
translate([width-radius, radius, 0])
|
||||
cylinder(r=radius, h=depth);
|
||||
translate([radius, length-radius, 0])
|
||||
cylinder(r=radius, h=depth);
|
||||
translate([width-radius, length-radius, 0])
|
||||
cylinder(r=radius, h=depth);
|
||||
}
|
||||
|
Loading…
Reference in New Issue