Compare commits
22 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
8f282775a4 | ||
|
bf833b0452 | ||
|
52011fd6f7 | ||
|
9da8634769 | ||
|
147ff9b24f | ||
|
b4379907a2 | ||
|
3be88f6517 | ||
|
d42f99e437 | ||
|
65455930f8 | ||
|
7e0c5fdb6e | ||
|
bc4e18d788 | ||
|
f5980b4703 | ||
|
7b3d7fab55 | ||
|
654571a70e | ||
|
e8abcde52f | ||
|
390957fdd0 | ||
|
bde8cbe7a6 | ||
|
fbe8533a42 | ||
|
a9c2f854c6 | ||
|
6187d90c57 | ||
|
65f320141d | ||
|
d367e743da |
@@ -164,7 +164,7 @@ This is achieved by having a pair of modules: -
|
||||
module handle_assembly() pose([225, 0, 150], [0, 0, 14]) //! Printed part with inserts in place
|
||||
assembly("handle") {
|
||||
translate_z(handle_height())
|
||||
color(pp1_colour) vflip() handle_stl();
|
||||
stl_colour(pp1_colour) vflip() handle_stl();
|
||||
|
||||
handle_screw_positions()
|
||||
vflip()
|
||||
|
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 137 KiB |
@@ -1,67 +1,119 @@
|
||||
[
|
||||
{
|
||||
"name": "base_assembly",
|
||||
"big": null,
|
||||
"count": 1,
|
||||
"assemblies": {},
|
||||
"vitamins": {
|
||||
"insert(F1BM3): Heatfit insert M3": 2
|
||||
"insert(F1BM3): Heatfit insert M3": {
|
||||
"count": 2
|
||||
}
|
||||
},
|
||||
"printed": {
|
||||
"socket_box.stl": 1
|
||||
"socket_box.stl": {
|
||||
"count": 1,
|
||||
"colour": "dimgrey"
|
||||
}
|
||||
},
|
||||
"routed": {}
|
||||
},
|
||||
{
|
||||
"name": "feet_assembly",
|
||||
"big": null,
|
||||
"count": 1,
|
||||
"assemblies": {
|
||||
"base_assembly": 1
|
||||
},
|
||||
"vitamins": {
|
||||
"washer(M3_washer): Washer M3 x 7mm x 0.5mm": 8,
|
||||
"screw(M3_dome_screw, 10): Screw M3 dome x 10mm": 4,
|
||||
"nut(M3_nut, nyloc = true): Nut M3 x 2.4mm nyloc": 4
|
||||
"washer(M3_washer): Washer M3 x 7mm x 0.5mm": {
|
||||
"count": 8
|
||||
},
|
||||
"screw(M3_dome_screw, 10): Screw M3 dome x 10mm": {
|
||||
"count": 4
|
||||
},
|
||||
"nut(M3_nut, nyloc = true): Nut M3 x 2.4mm nyloc": {
|
||||
"count": 4
|
||||
}
|
||||
},
|
||||
"printed": {
|
||||
"foot.stl": 4
|
||||
"foot.stl": {
|
||||
"count": 4,
|
||||
"colour": "darkorange"
|
||||
}
|
||||
},
|
||||
"routed": {}
|
||||
},
|
||||
{
|
||||
"name": "mains_in_assembly",
|
||||
"big": null,
|
||||
"count": 1,
|
||||
"assemblies": {
|
||||
"feet_assembly": 1
|
||||
},
|
||||
"vitamins": {
|
||||
": Wire green & yellow 30/0.25mm strands, length 150mm - not shown": 1,
|
||||
": Wire blue 30/0.25mm strands, length 150mm - not shown": 1,
|
||||
": Wire brown 30/0.25mm strands, length 150mm - not shown": 2,
|
||||
"tubing(HSHRNK32): Heatshrink sleeving ID 3.2mm x 15mm - not shown": 3,
|
||||
"iec(IEC_inlet_atx): IEC inlet for ATX": 1,
|
||||
"screw(M3_cs_cap_screw, 12): Screw M3 cs cap x 12mm": 2,
|
||||
"washer(M3_washer): Washer M3 x 7mm x 0.5mm": 2,
|
||||
"nut(M3_nut, nyloc = true): Nut M3 x 2.4mm nyloc": 2
|
||||
": Wire green & yellow 30/0.25mm strands, length 150mm - not shown": {
|
||||
"count": 1
|
||||
},
|
||||
": Wire blue 30/0.25mm strands, length 150mm - not shown": {
|
||||
"count": 1
|
||||
},
|
||||
": Wire brown 30/0.25mm strands, length 150mm - not shown": {
|
||||
"count": 2
|
||||
},
|
||||
"tubing(HSHRNK32): Heatshrink sleeving ID 3.2mm x 15mm - not shown": {
|
||||
"count": 3
|
||||
},
|
||||
"iec(IEC_inlet_atx): IEC inlet for ATX": {
|
||||
"count": 1
|
||||
},
|
||||
"screw(M3_cs_cap_screw, 12): Screw M3 cs cap x 12mm": {
|
||||
"count": 2
|
||||
},
|
||||
"washer(M3_washer): Washer M3 x 7mm x 0.5mm": {
|
||||
"count": 2
|
||||
},
|
||||
"nut(M3_nut, nyloc = true): Nut M3 x 2.4mm nyloc": {
|
||||
"count": 2
|
||||
}
|
||||
},
|
||||
"printed": {},
|
||||
"routed": {}
|
||||
},
|
||||
{
|
||||
"name": "main_assembly",
|
||||
"big": null,
|
||||
"count": 1,
|
||||
"assemblies": {
|
||||
"mains_in_assembly": 1
|
||||
},
|
||||
"vitamins": {
|
||||
": Wire green & yellow 30/0.25mm strands, length 150mm - not shown": 1,
|
||||
": Wire blue 30/0.25mm strands, length 150mm - not shown": 1,
|
||||
"tubing(HSHRNK32): Heatshrink sleeving ID 3.2mm x 15mm - not shown": 5,
|
||||
": Ferrule for 1.5mm^2 wire - not shown": 3,
|
||||
"mains_socket(Contactum): Mains socket 13A": 1,
|
||||
"screw(M3_cs_cap_screw, 20): Screw M3 cs cap x 20mm": 2,
|
||||
"jack_4mm_shielded(\"blue\", 3, \"royalblue\"): 4mm shielded jack socket blue": 2,
|
||||
"jack_4mm_shielded(\"brown\", 3, \"sienna\"): 4mm shielded jack socket brown": 1,
|
||||
"jack_4mm_shielded(\"green\", 3): 4mm shielded jack socket green": 2
|
||||
": Wire green & yellow 30/0.25mm strands, length 150mm - not shown": {
|
||||
"count": 1
|
||||
},
|
||||
": Wire blue 30/0.25mm strands, length 150mm - not shown": {
|
||||
"count": 1
|
||||
},
|
||||
"tubing(HSHRNK32): Heatshrink sleeving ID 3.2mm x 15mm - not shown": {
|
||||
"count": 5
|
||||
},
|
||||
": Ferrule for 1.5mm^2 wire - not shown": {
|
||||
"count": 3
|
||||
},
|
||||
"mains_socket(Contactum): Mains socket 13A": {
|
||||
"count": 1
|
||||
},
|
||||
"screw(M3_cs_cap_screw, 20): Screw M3 cs cap x 20mm": {
|
||||
"count": 2
|
||||
},
|
||||
"jack_4mm_shielded(\"blue\", 3, \"royalblue\"): 4mm shielded jack socket blue": {
|
||||
"count": 2
|
||||
},
|
||||
"jack_4mm_shielded(\"brown\", 3, \"sienna\"): 4mm shielded jack socket brown": {
|
||||
"count": 1
|
||||
},
|
||||
"jack_4mm_shielded(\"green\", 3): 4mm shielded jack socket green": {
|
||||
"count": 2
|
||||
}
|
||||
},
|
||||
"printed": {},
|
||||
"routed": {}
|
||||
|
@@ -173,7 +173,7 @@ module socket_box_stl() {
|
||||
//
|
||||
module base_assembly()
|
||||
assembly("base") {
|
||||
color(pp1_colour) render() /*clip(ymax = 0)*/ socket_box_stl();
|
||||
stl_colour(pp1_colour) render() /*clip(ymax = 0)*/ socket_box_stl();
|
||||
|
||||
mains_socket_hole_positions(socket)
|
||||
translate_z(height)
|
||||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 179 KiB After Width: | Height: | Size: 179 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 280 KiB |
Before Width: | Height: | Size: 287 KiB After Width: | Height: | Size: 286 KiB |
Before Width: | Height: | Size: 205 KiB After Width: | Height: | Size: 242 KiB |
Before Width: | Height: | Size: 207 KiB After Width: | Height: | Size: 215 KiB |
Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 199 KiB |
@@ -84,7 +84,7 @@ Mains isolated and variable supply with metering.
|
||||
|
||||
<a name="TOP"></a>
|
||||
## SunBot
|
||||
A solar tracker to keep solar powerbanks pointing at the sun.
|
||||
A solar tracker to keep a solar panel pointing at the sun.
|
||||
|
||||

|
||||
|
||||
|
@@ -51,7 +51,7 @@ $fa = 6;
|
||||
$fs = extrusion_width / 2;
|
||||
|
||||
function round_to_layer(z) = ceil(z / layer_height) * layer_height;
|
||||
// Some additional named colors
|
||||
// Some additional named colours
|
||||
grey20 = [0.2, 0.2, 0.2];
|
||||
grey30 = [0.3, 0.3, 0.3];
|
||||
grey40 = [0.4, 0.4, 0.4];
|
||||
|
BIN
libtest.png
Before Width: | Height: | Size: 781 KiB After Width: | Height: | Size: 775 KiB |
@@ -171,8 +171,8 @@ hot_ends_y = pulleys_y + 60;
|
||||
linear_bearings_y = hot_ends_y + 50;
|
||||
sheets_y = linear_bearings_y + 100;
|
||||
pcbs_y = sheets_y + 40;
|
||||
displays_y = pcbs_y + 150;
|
||||
fans_y = displays_y + 100;
|
||||
displays_y = pcbs_y + 170;
|
||||
fans_y = displays_y + 80;
|
||||
transformers_y = fans_y + 120;
|
||||
psus_y = transformers_y + 190;
|
||||
|
||||
@@ -380,7 +380,7 @@ translate([x4 + 150, belts_y + 58]) {
|
||||
translate([x4, rails_y + 130])
|
||||
rails();
|
||||
|
||||
translate([800, fans_y])
|
||||
translate([800, fans_y + 50])
|
||||
cable_strips();
|
||||
|
||||
translate([x4, kp_pillow_blocks_y])
|
||||
|
@@ -129,7 +129,7 @@ module box_corner_profile(type) { //! Generates the corner profile STL for 3D pr
|
||||
|
||||
length = box_height(type) - 2 * box_margin(type);
|
||||
difference() {
|
||||
linear_extrude(height = length, center = true, convexity = 5)
|
||||
linear_extrude(length, center = true, convexity = 5)
|
||||
box_corner_profile_2D(type);
|
||||
|
||||
for(z = [-1, 1])
|
||||
@@ -148,24 +148,24 @@ module box_corner_profile_section(type, section, sections) { //! Generates inter
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
linear_extrude(height = h, convexity = 5)
|
||||
linear_extrude(h, convexity = 5)
|
||||
box_corner_profile_2D(type);
|
||||
|
||||
if(!last_section) // male end always at the top
|
||||
translate_z(section_length - 1)
|
||||
for(i = [0 : 1], offset = i * layer_height)
|
||||
linear_extrude(height = overlap + 1 - offset)
|
||||
linear_extrude(overlap + 1 - offset)
|
||||
offset(1 + offset - layer_height)
|
||||
offset(-overlap_wall - 1)
|
||||
box_corner_profile_2D(type);
|
||||
}
|
||||
if(section > 0)
|
||||
translate_z(last_section ? h : 0) { // female at bottom unless last section
|
||||
linear_extrude(height = 2 * (overlap + layer_height), center = true, convexity = 5)
|
||||
linear_extrude(2 * (overlap + layer_height), center = true, convexity = 5)
|
||||
offset(-overlap_wall)
|
||||
box_corner_profile_2D(type);
|
||||
|
||||
linear_extrude(height = 2 * layer_height, center = true, convexity = 5)
|
||||
linear_extrude(2 * layer_height, center = true, convexity = 5)
|
||||
offset(-overlap_wall + layer_height)
|
||||
box_corner_profile_2D(type);
|
||||
}
|
||||
@@ -223,7 +223,7 @@ module box_bezel(type, bottom) { //! Generates top and bottom bezel STLs
|
||||
// slots for side panels
|
||||
//
|
||||
translate_z(-box_profile_overlap(type))
|
||||
linear_extrude(height = 2 * box_profile_overlap(type), center = true)
|
||||
linear_extrude(2 * box_profile_overlap(type), center = true)
|
||||
for(i = [-1, 1]) {
|
||||
translate([i * (box_width(type) / 2 + t / 2 - sheet_slot_clearance / 2), 0])
|
||||
square([t, box_depth(type) - 2 * box_corner_gap(type)], center = true);
|
||||
@@ -240,7 +240,7 @@ module box_bezel(type, bottom) { //! Generates top and bottom bezel STLs
|
||||
// leave plastic over the corner profiles
|
||||
//
|
||||
translate_z(-box_profile_overlap(type) - 1)
|
||||
linear_extrude(height = box_profile_overlap(type) + box_corner_gap(type) + 2)
|
||||
linear_extrude(box_profile_overlap(type) + box_corner_gap(type) + 2)
|
||||
union() {
|
||||
difference() {
|
||||
square([box_width(type) - 2 * box_inset(type),
|
||||
@@ -273,7 +273,7 @@ module box_bezel_section(type, bottom, rows, cols, x, y) { //! Generates interlo
|
||||
end_clearance = 0.5;
|
||||
module male() {
|
||||
rotate([90, 0, 90])
|
||||
linear_extrude(height = dowel_length - 2 * end_clearance, center = true)
|
||||
linear_extrude(dowel_length - 2 * end_clearance, center = true)
|
||||
difference() {
|
||||
union() {
|
||||
h = dh - layer_height;
|
||||
|
@@ -33,7 +33,7 @@ assembly("box") {
|
||||
y = [-1,-1,1,1][corner];
|
||||
translate([x * (box_width(type) / 2 + 25 * exploded()), y * (box_depth(type) / 2 + 25 * exploded())])
|
||||
rotate(corner * 90) {
|
||||
color(pp2_colour) render()
|
||||
stl_colour(pp2_colour) render()
|
||||
box_corner_profile(type);
|
||||
|
||||
translate([box_hole_inset(type), box_hole_inset(type)])
|
||||
@@ -50,7 +50,7 @@ assembly("box") {
|
||||
translate_z(z * (box_height(type) / 2 - box_corner_gap(type) + 50 * exploded()))
|
||||
rotate([z * 90 - 90, 0, 0])
|
||||
if(bezels && (z > 0 ? top : base))
|
||||
color(pp1_colour) render() box_bezel(type, z < 0);
|
||||
stl_colour(pp1_colour) render() box_bezel(type, z < 0);
|
||||
|
||||
translate_z(z * (box_height(type) / 2 + sheet_thickness + 50 * exploded()))
|
||||
box_screw_hole_positions(type)
|
||||
|
@@ -59,7 +59,7 @@ module ribbon_grommet(ways, thickness) { //! Generate the STL for a printed ribb
|
||||
union() {
|
||||
for(side = [-1, 1])
|
||||
translate_z(side * (width - wall) / 2)
|
||||
linear_extrude(height = wall, center = true, convexity = 5)
|
||||
linear_extrude(wall, center = true, convexity = 5)
|
||||
difference() {
|
||||
hull() {
|
||||
translate([-length / 2, 0])
|
||||
@@ -73,7 +73,7 @@ module ribbon_grommet(ways, thickness) { //! Generate the STL for a printed ribb
|
||||
square([slot_length, slot_height]);
|
||||
}
|
||||
|
||||
linear_extrude(height = width -1, center = true)
|
||||
linear_extrude(width -1, center = true)
|
||||
difference() {
|
||||
ribbon_grommet_hole(ways, expand = false, h = 0);
|
||||
|
||||
@@ -133,12 +133,12 @@ module round_grommet_hole(diameter, h = 100) //! Make a hole for a round grommet
|
||||
drill(corrected_radius(diameter / 2) + wall + clearance, h);
|
||||
|
||||
module round_grommet_assembly(diameter, thickness, od = undef) {
|
||||
color(pp1_colour)
|
||||
stl_colour(pp1_colour)
|
||||
translate_z(wall)
|
||||
vflip()
|
||||
round_grommet_top(diameter, thickness, od);
|
||||
|
||||
color(pp2_colour)
|
||||
stl_colour(pp2_colour)
|
||||
translate_z(-thickness)
|
||||
vflip()
|
||||
round_grommet_bottom(diameter, od);
|
||||
@@ -170,14 +170,14 @@ module mouse_grommet(r, thickness) { //! Make the STL for a mouse grommet
|
||||
union() {
|
||||
for(side = [-1, 1])
|
||||
translate_z(side * (width - wall) / 2)
|
||||
linear_extrude(height = wall, center = true)
|
||||
linear_extrude(wall, center = true)
|
||||
difference() {
|
||||
mouse_grommet_hole(r, z = r + wall, h = 0, expand = wall + overlap);
|
||||
|
||||
translate([0, wall])
|
||||
mouse_grommet_hole(r, h = 0, expand = 0);
|
||||
}
|
||||
linear_extrude(height = width - 1, center = true)
|
||||
linear_extrude(width - 1, center = true)
|
||||
difference() {
|
||||
mouse_grommet_hole(r, h = 0, z = r + wall, expand = wall);
|
||||
|
||||
@@ -188,7 +188,7 @@ module mouse_grommet(r, thickness) { //! Make the STL for a mouse grommet
|
||||
}
|
||||
|
||||
module mouse_grommet_assembly(r, thickness)
|
||||
color(pp1_colour)
|
||||
stl_colour(pp1_colour)
|
||||
rotate([-90, 0, 0])
|
||||
mouse_grommet(r, thickness);
|
||||
|
||||
|
@@ -18,12 +18,14 @@
|
||||
//
|
||||
|
||||
//
|
||||
//! Adapts ESP12 module to 0.1" grid. See <https://hydraraptor.blogspot.com/2018/04/esp-12-module-breakout-adaptor.html>.
|
||||
//! Adapts ESP12 modules and various small PCBs to 0.1" grid. See <https://hydraraptor.blogspot.com/2018/04/esp-12-module-breakout-adaptor.html>.
|
||||
//
|
||||
$extrusion_width = 0.5;
|
||||
|
||||
include <../utils/core/core.scad>
|
||||
|
||||
function carrier_height() = 3; //! Height of PCB carrier
|
||||
|
||||
module ESP12F_carrier_stl() { //! Generate the STL for an ESP12 carrier
|
||||
stl("ESP12F_carrier");
|
||||
pins = 8;
|
||||
@@ -33,7 +35,7 @@ module ESP12F_carrier_stl() { //! Generate the STL for an ESP12 carrier
|
||||
hole2 = pitch2 - 3 * extrusion_width;
|
||||
length1 = (pins - 1) * pitch1 + hole + squeezed_wall * 2;
|
||||
length2 = (pins - 1) * pitch2 + hole + squeezed_wall * 2;
|
||||
height = 3;
|
||||
height = carrier_height();
|
||||
|
||||
wpitch1 = (pins - 1) * pitch1;
|
||||
wpitch2 = ceil(wpitch1 / 2.54) * 2.54;
|
||||
@@ -61,3 +63,71 @@ module ESP12F_carrier_stl() { //! Generate the STL for an ESP12 carrier
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module TP4056_carrier_stl() { //! Generate the STL for an TP4056 carrier, two required
|
||||
stl("TP4056_carrier");
|
||||
pitch = 2.54;
|
||||
outer_pitch = 13.9;
|
||||
inner_pitch = 7.54;
|
||||
hole = pitch - 3 * extrusion_width;
|
||||
pins = 6;
|
||||
length1 = outer_pitch + hole + squeezed_wall * 2;
|
||||
length2 = (pins - 1) * pitch + hole + squeezed_wall * 2;
|
||||
height = carrier_height();
|
||||
|
||||
width = hole + squeezed_wall * 2;
|
||||
spacing = inch(0.9);
|
||||
|
||||
difference() {
|
||||
hull() {
|
||||
translate_z(height - eps / 2)
|
||||
cube([width, length1, eps], center = true);
|
||||
|
||||
translate_z(eps / 2)
|
||||
cube([width, length2, eps], center = true);
|
||||
}
|
||||
|
||||
for(i = [0 : pins - 1])
|
||||
let(x = [-outer_pitch / 2, - inner_pitch / 2, 0, 0, inner_pitch / 2, outer_pitch / 2][i])
|
||||
if(x)
|
||||
hull() {
|
||||
translate([0, x, height])
|
||||
cube([hole, hole, eps], center = true);
|
||||
|
||||
translate([0, i * pitch - (pins - 1) * pitch / 2])
|
||||
cube([hole, hole, eps], center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module MT3608_carrier_stl() { //! Generate the STL for an MT3608 carrier, two required
|
||||
stl("MT3608_carrier");
|
||||
pcb_width = 17;
|
||||
w_pitch_top = 6.81;
|
||||
w_pitch_bot = inch(0.3);
|
||||
l_pitch_top = 30.855;
|
||||
l_pitch_bot = inch(1.2);
|
||||
hole = 1;
|
||||
height = carrier_height();
|
||||
wall = 2 * extrusion_width;
|
||||
width = hole + 2 * wall;
|
||||
offset = (l_pitch_top - l_pitch_bot) / 2;
|
||||
|
||||
difference() {
|
||||
hull() {
|
||||
translate([offset, 0, height - eps / 2])
|
||||
rounded_rectangle([width, pcb_width - 2, eps], 1);
|
||||
|
||||
translate_z(eps / 2)
|
||||
rounded_rectangle([width, pcb_width - 2, eps], 1);
|
||||
}
|
||||
for(side = [-1, 1])
|
||||
hull() {
|
||||
translate([offset, side * w_pitch_top / 2, height])
|
||||
cube([hole, hole, eps], center = true);
|
||||
|
||||
translate([0, side * w_pitch_bot / 2])
|
||||
cube([hole, hole, eps], center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -120,7 +120,7 @@ module corner_block_assembly(screw = def_screw, name = false) //! The printed bl
|
||||
assembly(str("corner_block_M", 20 * screw_radius(screw))) {
|
||||
insert = screw_insert(screw);
|
||||
|
||||
color(name ? pp2_colour : pp1_colour)
|
||||
stl_colour(name ? pp2_colour : pp1_colour)
|
||||
render() corner_block(screw, name) children();
|
||||
|
||||
corner_block_h_holes(screw)
|
||||
|
@@ -60,7 +60,7 @@ module door_hinge(door_thickness) { //! Generates STL fo
|
||||
|
||||
union() {
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(height = width, center = true)
|
||||
linear_extrude(width, center = true)
|
||||
difference() {
|
||||
hull() {
|
||||
translate([dia / 2, thickness + door_thickness / 2])
|
||||
@@ -76,7 +76,7 @@ module door_hinge(door_thickness) { //! Generates STL fo
|
||||
translate([dia / 2, thickness + door_thickness / 2])
|
||||
teardrop(r = screw_clearance_radius(pin_screw), h = 0);
|
||||
}
|
||||
linear_extrude(height = thickness)
|
||||
linear_extrude(thickness)
|
||||
difference() {
|
||||
hull() {
|
||||
translate([0, -width / 2])
|
||||
@@ -108,7 +108,7 @@ module door_hinge_stat_stl() { //! Generates the STL for the stationary part
|
||||
stl("door_hinge_stat");
|
||||
|
||||
union() {
|
||||
linear_extrude(height = thickness)
|
||||
linear_extrude(thickness)
|
||||
difference() {
|
||||
rounded_square([stat_length, stat_width], rad);
|
||||
|
||||
@@ -117,7 +117,7 @@ module door_hinge_stat_stl() { //! Generates the STL for the stationary part
|
||||
}
|
||||
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(height = stat_width, center = true)
|
||||
linear_extrude(stat_width, center = true)
|
||||
difference() {
|
||||
hull() {
|
||||
translate([0, dia / 2 + stat_clearance])
|
||||
@@ -141,7 +141,7 @@ module door_hinge_assembly(top, door_thickness = 6) { //! The moving assembly th
|
||||
|
||||
translate([0, pin_y - (thickness + door_thickness / 2), dir * width / 2]) {
|
||||
rotate([90, 0, 180])
|
||||
color(pp2_colour) door_hinge(door_thickness);
|
||||
stl_colour(pp2_colour) door_hinge(door_thickness);
|
||||
|
||||
rotate([90, 0, 0])
|
||||
door_hinge_hole_positions()
|
||||
@@ -165,7 +165,7 @@ module door_hinge_static_assembly(top, sheet_thickness = 3) { //! The stationary
|
||||
|
||||
translate([pin_x, 0, -dir * (stat_width / 2 + washer_thickness(screw_washer(pin_screw)))])
|
||||
rotate([90, 0, 0]) {
|
||||
color(pp1_colour) door_hinge_stat_stl();
|
||||
stl_colour(pp1_colour) door_hinge_stat_stl();
|
||||
|
||||
door_hinge_stat_hole_positions() {
|
||||
screw_and_washer(stat_screw, stat_screw_length);
|
||||
|
@@ -65,7 +65,7 @@ module door_latch_assembly(sheet_thickness = 3) { //! The assembly for a specifi
|
||||
|
||||
translate([0, -height - washer_thickness(washer)])
|
||||
rotate([-90, 0, 0]) {
|
||||
color(pp1_colour) render() door_latch_stl();
|
||||
stl_colour(pp1_colour) render() door_latch_stl();
|
||||
|
||||
translate_z(nut_trap_depth)
|
||||
vflip()
|
||||
|
@@ -81,7 +81,7 @@ module fixing_block(screw = def_screw) { //! Generate the STL
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
linear_extrude(height = fb_height, convexity = 5)
|
||||
linear_extrude(fb_height, convexity = 5)
|
||||
difference() {
|
||||
hull() {
|
||||
for(side = [-1, 1]) {
|
||||
@@ -109,7 +109,7 @@ module fixing_block_assembly(screw = def_screw) pose([55, 180, 25], [0, 4.8, 4.8
|
||||
assembly(str("fixing_block_M", 20 * screw_radius(screw))) {
|
||||
translate_z(fixing_block_height(screw))
|
||||
rotate([0, 180, 0])
|
||||
color(pp1_colour) render() fixing_block(screw);
|
||||
stl_colour(pp1_colour) render() fixing_block(screw);
|
||||
|
||||
insert = screw_insert(screw);
|
||||
|
||||
|
@@ -82,7 +82,7 @@ module hinge_male(type, female = false) { //! The half with the stationary
|
||||
teardrop_r = kr / cos(22.5); // The corner on the teardrop
|
||||
inset = sqrt(sqr(teardrop_r + gap) - sqr(kr - t)) - kr;
|
||||
|
||||
linear_extrude(height =t)
|
||||
linear_extrude(t)
|
||||
difference() {
|
||||
hull() {
|
||||
for(side = [-1, 1])
|
||||
@@ -102,7 +102,7 @@ module hinge_male(type, female = false) { //! The half with the stationary
|
||||
rotate([90, 0, -90])
|
||||
for(z = [0 : (female ? fn : mn) - 1])
|
||||
translate_z(-dir * w / 2 + z * dir * pitch + (female ? -fw - mw - gap : 0))
|
||||
linear_extrude(height = female ? fw : mw)
|
||||
linear_extrude(female ? fw : mw)
|
||||
difference() {
|
||||
hull() {
|
||||
rotate(180)
|
||||
@@ -133,17 +133,17 @@ assembly(str("hinge_", type[0])) { //! Assembled hinge
|
||||
|
||||
vitamin(str(": Hinge pin ", w, " x ", 2 * hr, "mm"));
|
||||
|
||||
color(pp1_colour) hinge_male(type);
|
||||
stl_colour(pp1_colour) hinge_male(type);
|
||||
|
||||
translate([0, -kr, kr]) {
|
||||
rotate([0, 90, 0])
|
||||
explode(w + 10)
|
||||
color("silver") cylinder(r = hr , h = w, center = true);
|
||||
stl_colour("silver") cylinder(r = hr , h = w, center = true);
|
||||
|
||||
rotate([-angle, 0, 0])
|
||||
translate([0, -kr, -kr])
|
||||
rotate(180)
|
||||
color(pp2_colour) hinge_female(type);
|
||||
stl_colour(pp2_colour) hinge_female(type);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -56,7 +56,7 @@ module foot(type = foot) { //! Generate STL
|
||||
circle4n(r);
|
||||
}
|
||||
}
|
||||
linear_extrude(height = t)
|
||||
linear_extrude(t)
|
||||
difference() {
|
||||
circle(r1 + eps);
|
||||
|
||||
@@ -73,7 +73,7 @@ module foot_assembly(t = 0, type = foot, flip = false) { //! Assembly with faste
|
||||
screw_length = screw_longer_than(foot_thickness(type) + t + 2 * washer_thickness(washer) + nut_thickness(nut, true) - squeeze);
|
||||
|
||||
vflip() explode(15, true) {
|
||||
color(pp4_colour) foot(type);
|
||||
stl_colour(pp4_colour) foot(type);
|
||||
|
||||
if(t)
|
||||
explode(15, true)
|
||||
@@ -116,7 +116,7 @@ module insert_foot(type = insert_foot) { //! Generate STL for foot with insert
|
||||
}
|
||||
}
|
||||
}
|
||||
linear_extrude(height = h2 + eps)
|
||||
linear_extrude(h2 + eps)
|
||||
difference() {
|
||||
circle(r5 + eps);
|
||||
|
||||
@@ -136,7 +136,7 @@ assembly("insert_foot") {
|
||||
insert = screw_insert(screw);
|
||||
|
||||
vflip()
|
||||
color(pp1_colour) insert_foot(type);
|
||||
stl_colour(pp4_colour) insert_foot(type);
|
||||
|
||||
translate_z(-foot_thickness(type))
|
||||
insert(insert);
|
||||
|
@@ -83,7 +83,7 @@ module handle_stl() { //! generate the STL
|
||||
module handle_assembly() pose([225, 0, 150], [0, 0, 14]) //! Printed part with inserts in place
|
||||
assembly("handle") {
|
||||
translate_z(handle_height())
|
||||
color(pp1_colour) vflip() handle_stl();
|
||||
stl_colour(pp1_colour) vflip() handle_stl();
|
||||
|
||||
handle_screw_positions()
|
||||
vflip()
|
||||
|
@@ -62,7 +62,7 @@ module pcb_mount_ring()
|
||||
}
|
||||
|
||||
module pcb_mount_washer_stl() //! A plastic washer to clamp a PCB
|
||||
linear_extrude(height = washer_thickness)
|
||||
linear_extrude(washer_thickness)
|
||||
pcb_mount_ring();
|
||||
|
||||
module pcb_mount(pcb, height = 5, washers = true) { //! Make the STL of a pcb mount for the specified PCB.
|
||||
@@ -85,10 +85,10 @@ module pcb_mount(pcb, height = 5, washers = true) { //! Make the STL of a pcb mo
|
||||
cube([pillar_x_pitch(pcb) - 2 * wall, frame_w, frame_t], center = true);
|
||||
|
||||
pcb_mount_screw_positions(pcb)
|
||||
linear_extrude(height = height)
|
||||
linear_extrude(height)
|
||||
pcb_mount_ring();
|
||||
|
||||
linear_extrude(height = height + pcb_thickness(pcb) - layer_height)
|
||||
linear_extrude(height + pcb_thickness(pcb) - layer_height)
|
||||
difference() {
|
||||
pcb_mount_screw_positions(pcb)
|
||||
pcb_mount_ring();
|
||||
@@ -101,7 +101,7 @@ module pcb_mount_assembly(pcb, thickness, height = 5) { //! A PCB mount assembly
|
||||
translate_z(height)
|
||||
pcb(pcb);
|
||||
|
||||
color(pp1_colour) pcb_mount(pcb, washers = false);
|
||||
stl_colour(pp1_colour) pcb_mount(pcb, washers = false);
|
||||
|
||||
washer = screw_washer(screw);
|
||||
nut = screw_nut(screw);
|
||||
@@ -110,7 +110,7 @@ module pcb_mount_assembly(pcb, thickness, height = 5) { //! A PCB mount assembly
|
||||
|
||||
pcb_mount_screw_positions(pcb) {
|
||||
translate_z(height + t) {
|
||||
color(pp2_colour) pcb_mount_washer_stl();
|
||||
stl_colour(pp2_colour) pcb_mount_washer_stl();
|
||||
|
||||
translate_z(washer_thickness)
|
||||
screw(screw, screw_length);
|
||||
|
@@ -129,7 +129,7 @@ module pbox_base(type) { //! Generate the STL for the base
|
||||
t = pbox_base(type);
|
||||
difference() {
|
||||
union() {
|
||||
linear_extrude(height = t)
|
||||
linear_extrude(t)
|
||||
offset(base_outset - 0.2)
|
||||
pbox_inner_shape(type);
|
||||
|
||||
@@ -157,7 +157,7 @@ module pbox(type) { //! Generate the STL for the main case
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
linear_extrude(height = total_height)
|
||||
linear_extrude(total_height)
|
||||
offset(wall / 2) pbox_mid_shape(type);
|
||||
|
||||
if($children > 2)
|
||||
@@ -166,11 +166,11 @@ module pbox(type) { //! Generate the STL for the main case
|
||||
difference() {
|
||||
translate_z(top_thickness)
|
||||
union() {
|
||||
linear_extrude(height = height + eps)
|
||||
linear_extrude(height + eps)
|
||||
offset(-wall / 2) pbox_mid_shape(type);
|
||||
|
||||
translate_z(height) // Recess for the base
|
||||
linear_extrude(height = total_height - height)
|
||||
linear_extrude(total_height - height)
|
||||
offset(base_outset)
|
||||
pbox_inner_shape(type);
|
||||
}
|
||||
@@ -181,11 +181,11 @@ module pbox(type) { //! Generate the STL for the main case
|
||||
rounded_rectangle([pbox_width(type) + 2 * outset, pbox_depth(type) + 2 * outset, ledge_h], 1, center = false);
|
||||
|
||||
hull() {
|
||||
linear_extrude(height = ledge_h + eps)
|
||||
linear_extrude(ledge_h + eps)
|
||||
offset(ledge_inset)
|
||||
pbox_inner_shape(type);
|
||||
|
||||
linear_extrude(height = eps)
|
||||
linear_extrude(eps)
|
||||
offset(ledge_outset)
|
||||
pbox_inner_shape(type);
|
||||
}
|
||||
@@ -221,7 +221,7 @@ module pbox_base_screws(type, thickness = 0) //! Place the screws and
|
||||
pbox_screw_positions(type) {
|
||||
foot = pbox_foot(type);
|
||||
if(foot)
|
||||
color(pp4_colour)
|
||||
stl_colour(pp4_colour)
|
||||
foot(foot);
|
||||
|
||||
translate_z(foot ? foot_thickness(foot) : thickness)
|
||||
|
@@ -113,21 +113,21 @@ module psu_shroud(type, cable_d, name, cables = 1) { //! Generate the STL file f
|
||||
translate([centre_x, -centre_y]) {
|
||||
rounded_rectangle([depth - eps, width - eps, top], rad, center = false);
|
||||
|
||||
linear_extrude(height = height)
|
||||
linear_extrude(height)
|
||||
difference() {
|
||||
shape();
|
||||
|
||||
translate([depth / 2, width / 2 - 5])
|
||||
square([2 * (depth - extent + terminal_clearance), 10], center = true);
|
||||
}
|
||||
linear_extrude(height = height - terminal_block_height(tb) - psu_terminal_block_z(type) - terminal_clearance)
|
||||
linear_extrude(height - terminal_block_height(tb) - psu_terminal_block_z(type) - terminal_clearance)
|
||||
shape();
|
||||
}
|
||||
// cable slots
|
||||
for(i = [0 : 1 : cables - 1])
|
||||
translate([centre_x - depth / 2 + wall / 2, -centre_y + (i - cables / 2 + 0.5) * psu_shroud_cable_pitch(cable_d), height / 2])
|
||||
rotate([90, 0, 90])
|
||||
linear_extrude(height = wall, center = true)
|
||||
linear_extrude(wall, center = true)
|
||||
difference() {
|
||||
square([cable_d + eps, height], center = true);
|
||||
|
||||
@@ -147,7 +147,7 @@ assembly(str("PSU_shroud_", name)) {
|
||||
|
||||
translate_z(psu_shroud_height(type))
|
||||
vflip()
|
||||
color(pp1_colour) psu_shroud(type, cable_d, name, cables);
|
||||
stl_colour(pp1_colour) psu_shroud(type, cable_d, name, cables);
|
||||
|
||||
psu_shroud_hole_positions(type)
|
||||
vflip()
|
||||
|
@@ -83,7 +83,7 @@ module ribbon_clamp_assembly(ways) pose([55, 180, 25]) //! Printed part with in
|
||||
assembly(str("ribbon_clamp_", ways)) {
|
||||
h = ribbon_clamp_height();
|
||||
|
||||
color(pp1_colour) render()
|
||||
stl_colour(pp1_colour) render()
|
||||
translate_z(h) vflip() ribbon_clamp(ways);
|
||||
|
||||
ribbon_clamp_hole_positions(ways)
|
||||
|
@@ -48,7 +48,7 @@ module screw_knob(screw) { //! Generate the STL for a knob to fit the specified
|
||||
rotate(45)
|
||||
circle(r = nut_trap_radius(screw_nut(screw)), $fn = 6);
|
||||
}
|
||||
linear_extrude(height = knob_thickness, convexity = 3)
|
||||
linear_extrude(knob_thickness, convexity = 3)
|
||||
difference() {
|
||||
polygon(points = [for(a = [0 : 359]) [wave(a) * sin(a), wave(a) * cos(a)]]);
|
||||
|
||||
@@ -62,7 +62,7 @@ module screw_knob_assembly(screw, length) //! Assembly with the screw in place
|
||||
assembly(str("screw_knob_M", 20 * screw_radius(screw), "_", length)) {
|
||||
translate_z(knob_height)
|
||||
vflip()
|
||||
color(pp1_colour) screw_knob(screw);
|
||||
stl_colour(pp1_colour) screw_knob(screw);
|
||||
|
||||
translate_z(knob_height - knob_nut_trap_depth(screw))
|
||||
rotate(-45)
|
||||
|
@@ -52,12 +52,12 @@ module socket_box(type) { //! Generate STL of the backbox for the specified sock
|
||||
insert_hole_radius = insert_hole_radius(insert);
|
||||
|
||||
difference() {
|
||||
linear_extrude(height = height, convexity = 5)
|
||||
linear_extrude(height, convexity = 5)
|
||||
face_plate(type);
|
||||
|
||||
difference() {
|
||||
translate_z(base_thickness)
|
||||
linear_extrude(height = height, convexity = 5)
|
||||
linear_extrude(height, convexity = 5)
|
||||
offset(-wall) offset(1) face_plate(type);
|
||||
|
||||
for(side = [-1, 1])
|
||||
@@ -92,7 +92,7 @@ assembly(str("socket_box_", type[0])) {
|
||||
screw = mains_socket_screw(type);
|
||||
insert = screw_insert(screw);
|
||||
|
||||
color(pp1_colour) render() socket_box(type);
|
||||
stl_colour(pp1_colour) render() socket_box(type);
|
||||
|
||||
mains_socket_hole_positions(type)
|
||||
translate_z(height)
|
||||
|
@@ -73,7 +73,7 @@ module ssr_shroud(type, cable_d, name) { //! Generate the STL file for a spec
|
||||
translate([center_x, 0]) {
|
||||
rounded_rectangle([depth - eps, width - eps, top], rad, center = false);
|
||||
|
||||
linear_extrude(height = height) difference() {
|
||||
linear_extrude(height) difference() {
|
||||
round(or = wall / 2 - eps, ir = 0) difference() {
|
||||
rounded_square([depth, width], rad);
|
||||
|
||||
@@ -91,7 +91,7 @@ module ssr_shroud(type, cable_d, name) { //! Generate the STL file for a spec
|
||||
for(side = [-1, 1])
|
||||
translate([cable_x, side * (width / 2 - wall / 2), height / 2])
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(height = wall, center = true)
|
||||
linear_extrude(wall, center = true)
|
||||
difference() {
|
||||
square([cable_d + eps, height], center = true);
|
||||
|
||||
@@ -111,7 +111,7 @@ assembly(str("SSR_shroud_", name)) {
|
||||
|
||||
translate_z(ssr_shroud_height(type))
|
||||
vflip()
|
||||
color(pp1_colour) ssr_shroud(type, cable_d, name);
|
||||
stl_colour(pp1_colour) ssr_shroud(type, cable_d, name);
|
||||
|
||||
ssr_shroud_hole_positions(type)
|
||||
insert(insert);
|
||||
@@ -135,7 +135,7 @@ module ssr_shroud_fastened_assembly(type, cable_d, thickness, name) //! Assembly
|
||||
|
||||
*translate_z(cable_d / 2)
|
||||
rotate([90, 0, 0])
|
||||
color(grey20)
|
||||
stl_colour(grey20)
|
||||
cylinder(d = cable_d, h = 20, center = true);
|
||||
}
|
||||
}
|
||||
|
@@ -77,7 +77,7 @@ module strap(length, type = strap) { //! Generate the STL for the rubber strap
|
||||
len = length - 2 * (wall + clearance);
|
||||
w = strap_width(type);
|
||||
|
||||
linear_extrude(height = strap_thickness(type), convexity = 3)
|
||||
linear_extrude(strap_thickness(type), convexity = 3)
|
||||
difference() {
|
||||
rounded_square([len, w], w / 2 - eps);
|
||||
|
||||
@@ -119,12 +119,12 @@ module strap_end(type = strap) { //! Generate the STL for end piece
|
||||
}
|
||||
|
||||
union() {
|
||||
linear_extrude(height = z1)
|
||||
linear_extrude(z1)
|
||||
with_hole()
|
||||
outer();
|
||||
|
||||
translate_z(z1)
|
||||
linear_extrude(height = strap_height(type) - z1)
|
||||
linear_extrude(strap_height(type) - z1)
|
||||
difference() {
|
||||
outer();
|
||||
|
||||
@@ -137,11 +137,11 @@ module strap_end(type = strap) { //! Generate the STL for end piece
|
||||
}
|
||||
}
|
||||
|
||||
linear_extrude(height = strap_height(type) - layer_height)
|
||||
linear_extrude(strap_height(type) - layer_height)
|
||||
with_hole()
|
||||
strap_boss_shape(type);
|
||||
|
||||
linear_extrude(height = z2)
|
||||
linear_extrude(z2)
|
||||
with_hole()
|
||||
offset(cnc_bit_r)
|
||||
offset(-step - cnc_bit_r)
|
||||
@@ -160,7 +160,7 @@ module strap_end(type = strap) { //! Generate the STL for end piece
|
||||
//
|
||||
module strap_end_assembly(type = strap)
|
||||
assembly("strap_end") {
|
||||
color(pp1_colour)
|
||||
stl_colour(pp1_colour)
|
||||
strap_end(type);
|
||||
|
||||
translate_z(strap_height(type) + strap_key(type))
|
||||
@@ -175,7 +175,7 @@ module strap_assembly(length, type = strap) { //! Assembly with screws in place
|
||||
|
||||
screw_length = screw_shorter_than(washer_thickness(washer) + washer_thickness(penny) + insert_length(insert) + panel_clearance + counterbore);
|
||||
|
||||
color(pp4_colour) strap(length, type);
|
||||
stl_colour(pp4_colour) strap(length, type);
|
||||
|
||||
strap_screw_positions(length, type)
|
||||
translate_z(strap_height(type))
|
||||
|
98
readme.md
@@ -903,7 +903,7 @@ Parametric green terminal blocks
|
||||
| ```gt_top(type)``` | Depth at the top |
|
||||
| ```gt_tube_h(type)``` | Height of optional tubes around the screws |
|
||||
| ```gt_y_offset(type)``` | Offset of the pins from centre of the depth |
|
||||
| ```gt_y_offset2(type)``` | Offset of the pins screws from the screws |
|
||||
| ```gt_y_offset2(type)``` | Offset of the pins from the screws |
|
||||
|
||||
### Modules
|
||||
| Module | Description |
|
||||
@@ -1905,7 +1905,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
| ```barrel_jack(cutout = false)``` | Draw barrel power jack |
|
||||
| ```buzzer(height, diameter, colour)``` | Draw PCB buzzer with specified height, diameter and color |
|
||||
| ```buzzer(height, diameter, colour)``` | Draw PCB buzzer with specified height, diameter and colour |
|
||||
| ```chip(length, width, thickness, colour, cutout = false)``` | Draw a coloured cube to represent a chip, or other rectangular component |
|
||||
| ```flat_flex(cutout = false)``` | Draw flat flexistrip connector as used on RPI0 |
|
||||
| ```flex(cutout = false)``` | Draw flexistrip connector |
|
||||
@@ -1923,7 +1923,9 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| ```pcb_screw_positions(type)``` | Positions children at the mounting hole positions |
|
||||
| ```pcb_spacer(screw, height, wall = 1.8, taper = 0)``` | Generate STL for PCB spacer |
|
||||
| ```rj45(cutout = false)``` | Draw RJ45 Ethernet connector |
|
||||
| ```standoff(h, d, h2, d2)``` | Draw a standoff |
|
||||
| ```terminal_35(ways, colour = "blue")``` | Draw 3.5mm terminal block |
|
||||
| ```trimpot10(vertical, cutout = false)``` | Draw a ten turn trimpot |
|
||||
| ```uSD(size, cutout = false)``` | Draw uSD socket |
|
||||
| ```usb_Ax1(cutout = false)``` | Draw USB type A single socket |
|
||||
| ```usb_Ax2(cutout = false)``` | Draw USB type A dual socket |
|
||||
@@ -1989,7 +1991,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
| ```barrel_jack(cutout = false)``` | Draw barrel power jack |
|
||||
| ```buzzer(height, diameter, colour)``` | Draw PCB buzzer with specified height, diameter and color |
|
||||
| ```buzzer(height, diameter, colour)``` | Draw PCB buzzer with specified height, diameter and colour |
|
||||
| ```chip(length, width, thickness, colour, cutout = false)``` | Draw a coloured cube to represent a chip, or other rectangular component |
|
||||
| ```flat_flex(cutout = false)``` | Draw flat flexistrip connector as used on RPI0 |
|
||||
| ```flex(cutout = false)``` | Draw flexistrip connector |
|
||||
@@ -2007,7 +2009,9 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| ```pcb_screw_positions(type)``` | Positions children at the mounting hole positions |
|
||||
| ```pcb_spacer(screw, height, wall = 1.8, taper = 0)``` | Generate STL for PCB spacer |
|
||||
| ```rj45(cutout = false)``` | Draw RJ45 Ethernet connector |
|
||||
| ```standoff(h, d, h2, d2)``` | Draw a standoff |
|
||||
| ```terminal_35(ways, colour = "blue")``` | Draw 3.5mm terminal block |
|
||||
| ```trimpot10(vertical, cutout = false)``` | Draw a ten turn trimpot |
|
||||
| ```uSD(size, cutout = false)``` | Draw uSD socket |
|
||||
| ```usb_Ax1(cutout = false)``` | Draw USB type A single socket |
|
||||
| ```usb_Ax2(cutout = false)``` | Draw USB type A dual socket |
|
||||
@@ -2025,10 +2029,11 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| 1 | ```d_plug(DCONN15, pcb = true)``` | D-type 15 way PCB mount plug |
|
||||
| 1 | ```pcb(DuetE)``` | Duet 2 Ethernet electronics |
|
||||
| 1 | ```pcb(Duex2)``` | Duex2 expansion board |
|
||||
| 1 | ```pcb(Duex5)``` | Duex5 expasnion board |
|
||||
| 1 | ```pcb(Duex5)``` | Duex5 expansion board |
|
||||
| 1 | ```pcb(EnviroPlus)``` | Enviro+ |
|
||||
| 1 | ```pcb(ExtruderPCB)``` | Extruder connection PCB |
|
||||
| 1 | ```pcb(Keyes5p1)``` | Keyes5.1 Arduino Uno expansion board |
|
||||
| 1 | ```pcb(MT3608)``` | MT3608 boost converter module |
|
||||
| 1 | ```pcb(Melzi)``` | Melzi electronics |
|
||||
| 4 | | Micro SD card |
|
||||
| 1 | ```molex_254(2)``` | Molex KK header 2 way |
|
||||
@@ -2048,15 +2053,20 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| 1 | ```pcb(RAMPSEndstop)``` | RAMPS Endstop Switch |
|
||||
| 1 | ```pcb(RPI3)``` | Raspberry Pi 3 |
|
||||
| 1 | ```pcb(RPI0)``` | Raspberry Pi Zero |
|
||||
| 16 | ```screw(M2_cap_screw, 25)``` | Screw M2 cap x 25mm |
|
||||
| 12 | ```screw(M2_cap_screw, 16)``` | Screw M2 cap x 16mm |
|
||||
| 4 | ```screw(M2_cap_screw, 20)``` | Screw M2 cap x 20mm |
|
||||
| 2 | ```screw(M2p5_cap_screw, 16)``` | Screw M2.5 cap x 16mm |
|
||||
| 12 | ```screw(M2p5_cap_screw, 20)``` | Screw M2.5 cap x 20mm |
|
||||
| 4 | ```screw(M2p5_cap_screw, 20)``` | Screw M2.5 cap x 20mm |
|
||||
| 4 | ```screw(M2p5_cap_screw, 25)``` | Screw M2.5 cap x 25mm |
|
||||
| 4 | ```screw(M2p5_cap_screw, 30)``` | Screw M2.5 cap x 30mm |
|
||||
| 4 | ```screw(M2p5_pan_screw, 20)``` | Screw M2.5 pan x 20mm |
|
||||
| 8 | ```screw(M2p5_pan_screw, 25)``` | Screw M2.5 pan x 25mm |
|
||||
| 4 | ```screw(M2p5_pan_screw, 35)``` | Screw M2.5 pan x 35mm |
|
||||
| 8 | ```screw(M3_cap_screw, 30)``` | Screw M3 cap x 30mm |
|
||||
| 12 | ```screw(M2p5_pan_screw, 25)``` | Screw M2.5 pan x 25mm |
|
||||
| 4 | ```screw(M3_cap_screw, 16)``` | Screw M3 cap x 16mm |
|
||||
| 4 | ```screw(M3_cap_screw, 30)``` | Screw M3 cap x 30mm |
|
||||
| 4 | ```screw(M3_cap_screw, 35)``` | Screw M3 cap x 35mm |
|
||||
| 12 | ```screw(M4_cap_screw, 35)``` | Screw M4 cap x 35mm |
|
||||
| 8 | ```screw(M4_cap_screw, 30)``` | Screw M4 cap x 30mm |
|
||||
| 4 | ```screw(M4_cap_screw, 35)``` | Screw M4 cap x 35mm |
|
||||
| 1 | ```pcb(TP4056)``` | TP4056 Li-lon Battery charger module |
|
||||
| 3 | ```terminal_35(2)``` | Terminal block 2 way 3.5mm |
|
||||
| 2 | ```green_terminal(gt_2p54, 4)``` | Terminal block 4 way 0.1" |
|
||||
| 1 | | USB A to Mini B lead |
|
||||
@@ -2069,24 +2079,24 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
### Printed
|
||||
| Qty | Filename |
|
||||
| ---:|:--- |
|
||||
| 4 | pcb_spacer20140.stl |
|
||||
| 4 | pcb_spacer20150.stl |
|
||||
| 4 | pcb_spacer20160.stl |
|
||||
| 4 | pcb_spacer20170.stl |
|
||||
| 4 | pcb_spacer2060.stl |
|
||||
| 4 | pcb_spacer2070.stl |
|
||||
| 4 | pcb_spacer2080.stl |
|
||||
| 4 | pcb_spacer2090.stl |
|
||||
| 4 | pcb_spacer25100.stl |
|
||||
| 4 | pcb_spacer25110_2.stl |
|
||||
| 4 | pcb_spacer25120_2.stl |
|
||||
| 4 | pcb_spacer25110.stl |
|
||||
| 4 | pcb_spacer25120.stl |
|
||||
| 4 | pcb_spacer25130_2.stl |
|
||||
| 4 | pcb_spacer25240.stl |
|
||||
| 2 | pcb_spacer2550.stl |
|
||||
| 4 | pcb_spacer2580.stl |
|
||||
| 4 | pcb_spacer2590.stl |
|
||||
| 4 | pcb_spacer30180.stl |
|
||||
| 4 | pcb_spacer30190.stl |
|
||||
| 4 | pcb_spacer30230.stl |
|
||||
| 4 | pcb_spacer25140_2.stl |
|
||||
| 4 | pcb_spacer25150_2.stl |
|
||||
| 4 | pcb_spacer25170.stl |
|
||||
| 2 | pcb_spacer2570.stl |
|
||||
| 4 | pcb_spacer30160.stl |
|
||||
| 4 | pcb_spacer30210.stl |
|
||||
| 4 | pcb_spacer3050.stl |
|
||||
| 4 | pcb_spacer40180.stl |
|
||||
| 4 | pcb_spacer40190.stl |
|
||||
| 4 | pcb_spacer40200.stl |
|
||||
| 4 | pcb_spacer40210.stl |
|
||||
| 4 | pcb_spacer40220.stl |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
@@ -2377,10 +2387,10 @@ Linear rails with carriages.
|
||||
### Modules
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
| ```carriage(type, rail, end_color = grey20, wiper_color = grey20)``` | Draw the specified carriage |
|
||||
| ```carriage(type, rail, end_colour = grey20, wiper_colour = grey20)``` | Draw the specified carriage |
|
||||
| ```carriage_hole_positions(type)``` | Position children over screw holes |
|
||||
| ```rail(type, length)``` | Draw the specified rail |
|
||||
| ```rail_assembly(type, length, pos, carriage_end_color = grey20, carriage_wiper_color = grey20)``` | Rail and carriage assembly |
|
||||
| ```rail_assembly(type, length, pos, carriage_end_colour = grey20, carriage_wiper_colour = grey20)``` | Rail and carriage assembly |
|
||||
| ```rail_hole_positions(type, length, first = 0, screws = 100, both_ends = true)``` | Position children over screw holes |
|
||||
| ```rail_screws(type, length, thickness, screws = 100)``` | Place screws in the rail |
|
||||
|
||||
@@ -2739,7 +2749,7 @@ The "Soft" parameter can be used to determinesif the sheet material needs machin
|
||||
* If soft, wood screws will be used, with a pilot hole.
|
||||
* If not soft, either tapped holes or a clearance hole and nuts will be used to retain screws.
|
||||
|
||||
The "Color" parameter is a quad-array: [R, G, B, Alpha], or can be a named color, see [OpenSCAD_User_Manual](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#color).
|
||||
The "Colour" parameter is a quad-array: [R, G, B, Alpha], or can be a named colour, see [OpenSCAD_User_Manual](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#color).
|
||||
|
||||
For speed sheets should be modelled in 2D by subtracting holes from 2D templates made by ```sheet_2D()``` and then extruded to 3D with ```render_2D_sheet()```.
|
||||
Note that modules that drill holes will return a 2D object if ```h``` is set to 0 to facilitate this.
|
||||
@@ -2761,8 +2771,8 @@ Note that modules that drill holes will return a 2D object if ```h``` is set to
|
||||
### Modules
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
| ```render_2D_sheet(type, color = false)``` | Extrude a 2D sheet template and give it the correct colour |
|
||||
| ```render_sheet(type, color = false)``` | Render a sheet in the correct colour after holes have been subtracted |
|
||||
| ```render_2D_sheet(type, colour = false)``` | Extrude a 2D sheet template and give it the correct colour |
|
||||
| ```render_sheet(type, colour = false)``` | Render a sheet in the correct colour after holes have been subtracted |
|
||||
| ```sheet(type, w, d, corners = [0, 0, 0, 0])``` | Draw specified sheet |
|
||||
| ```sheet_2D(type, w, d, corners = [0, 0, 0, 0])``` | 2D sheet template with specified size and optionally rounded corners |
|
||||
|
||||
@@ -3482,7 +3492,7 @@ Just a BOM entry at the moment and cable bundle size functions for holes, plus c
|
||||
| ```cable_tie_holes(cable_r, h = 100)``` | Holes to thread a ziptie through a panel to make a cable tie. |
|
||||
| ```mouse_hole(cable, h = 100, teardrop = false)``` | A mouse hole to allow a panel to go over a wire bundle. |
|
||||
| ```ribbon_cable(ways, length)``` | Add ribbon cable to the BOM |
|
||||
| ```wire(color, strands, length, strand = 0.2)``` | Add stranded wire to the BOM |
|
||||
| ```wire(colour, strands, length, strand = 0.2)``` | Add stranded wire to the BOM |
|
||||
|
||||

|
||||
|
||||
@@ -3789,17 +3799,24 @@ of conductive panels, an extra layer of insulation.
|
||||
---
|
||||
<a name="Carriers"></a>
|
||||
## Carriers
|
||||
Adapts ESP12 module to 0.1" grid. See <https://hydraraptor.blogspot.com/2018/04/esp-12-module-breakout-adaptor.html>.
|
||||
Adapts ESP12 modules and various small PCBs to 0.1" grid. See <https://hydraraptor.blogspot.com/2018/04/esp-12-module-breakout-adaptor.html>.
|
||||
|
||||
|
||||
[printed/carriers.scad](printed/carriers.scad) Implementation.
|
||||
|
||||
[tests/carriers.scad](tests/carriers.scad) Code for this example.
|
||||
|
||||
### Functions
|
||||
| Function | Description |
|
||||
|:--- |:--- |
|
||||
| ```carrier_height()``` | Height of PCB carrier |
|
||||
|
||||
### Modules
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
| ```ESP12F_carrier_stl()``` | Generate the STL for an ESP12 carrier |
|
||||
| ```MT3608_carrier_stl()``` | Generate the STL for an MT3608 carrier, two required |
|
||||
| ```TP4056_carrier_stl()``` | Generate the STL for an TP4056 carrier, two required |
|
||||
|
||||

|
||||
|
||||
@@ -3807,6 +3824,8 @@ Adapts ESP12 module to 0.1" grid. See <https://hydraraptor.blogspot.com/2018/04/
|
||||
| Qty | Filename |
|
||||
| ---:|:--- |
|
||||
| 1 | ESP12F_carrier.stl |
|
||||
| 1 | MT3608_carrier.stl |
|
||||
| 1 | TP4056_carrier.stl |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
@@ -5152,11 +5171,15 @@ Simple tube or ring
|
||||
---
|
||||
<a name="BOM"></a>
|
||||
## BOM
|
||||
Bill Of Materials generation via echo and the ```bom.py``` script. Also handles exploded assembly views and posing. Assembly instructions can precede the module
|
||||
definition that makes the assembly.
|
||||
Bill Of Materials generation via echo and the ```bom.py``` script. Also handles exploded assembly views and posing.
|
||||
Assembly instructions can precede the module definition that makes the assembly.
|
||||
|
||||
The example below shows how to define a vitamin and incorporate it into an assembly with sub-assemblies and make an exploded view. The resulting flat BOM is shown but
|
||||
heirachical BOMs are also generated for real projects.
|
||||
Assembly views shown in the instructions can be large or small and this is deduced by looking at the size of the printed parts involved and if any routed
|
||||
parts are used.
|
||||
This heuristic isn't always correct, so the default can be overridden by setting the ```big``` parameter of ```assembly``` to ```true``` or ```false```.
|
||||
|
||||
The example below shows how to define a vitamin and incorporate it into an assembly with sub-assemblies and make an exploded view.
|
||||
The resulting flat BOM is shown but heirachical BOMs are also generated for real projects.
|
||||
|
||||
|
||||
[utils/core/bom.scad](utils/core/bom.scad) Implementation.
|
||||
@@ -5175,7 +5198,7 @@ heirachical BOMs are also generated for real projects.
|
||||
### Modules
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
| ```assembly(name)``` | Name an assembly that will appear on the BOM, there needs to a module named ```<name>_assembly``` to make it |
|
||||
| ```assembly(name, big = undef)``` | Name an assembly that will appear on the BOM, there needs to a module named ```<name>_assembly``` to make it. ```big``` can force big or small assembly diagrams. |
|
||||
| ```dxf(name)``` | Name a dxf that will appear on the BOM, there needs to a module named ```<name>_dxf``` to make it |
|
||||
| ```explode(d, explode_children = false, offset = [0,0,0])``` | Explode children by specified Z distance or vector ```d```, option to explode grand children |
|
||||
| ```hidden()``` | Make item invisible, except on the BOM |
|
||||
@@ -5186,6 +5209,7 @@ heirachical BOMs are also generated for real projects.
|
||||
| ```pose_hflip(exploded = undef)``` | Pose an STL or assembly for rendering to png by flipping around the Y axis, ```exploded = true for``` just the exploded view or ```false``` for unexploded only. |
|
||||
| ```pose_vflip(exploded = undef)``` | Pose an STL or assembly for rendering to png by flipping around the X axis, ```exploded = true for``` just the exploded view or ```false``` for unexploded only. |
|
||||
| ```stl(name)``` | Name an stl that will appear on the BOM, there needs to a module named ```<name>_stl``` to make it |
|
||||
| ```stl_colour(colour = pp1_colour, alpha = 1)``` | Colour an stl where it is placed in an assembly. ```alpha``` can be used to make it appear transparent. |
|
||||
| ```vitamin(description)``` | Describe a vitamin for the BOM entry and precede it with a module call that creates it, eg. "wigit(42): Type 42 widget" |
|
||||
|
||||

|
||||
|
@@ -29,6 +29,7 @@ import openscad
|
||||
from time import *
|
||||
from set_config import *
|
||||
import json
|
||||
import re
|
||||
|
||||
def find_scad_file(mname):
|
||||
for filename in os.listdir(source_dir):
|
||||
@@ -45,9 +46,20 @@ def find_scad_file(mname):
|
||||
return filename
|
||||
return None
|
||||
|
||||
class Part:
|
||||
def __init__(self, args):
|
||||
self.count = 1
|
||||
for arg in args:
|
||||
arg = arg.replace('true', 'True').replace('false', 'False').replace('undef', 'None')
|
||||
exec('self.' + arg)
|
||||
|
||||
def data(self):
|
||||
return self.__dict__
|
||||
|
||||
class BOM:
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
self.big = None
|
||||
self.count = 1
|
||||
self.vitamins = {}
|
||||
self.printed = {}
|
||||
@@ -60,14 +72,20 @@ class BOM:
|
||||
assemblies[ass] = self.assemblies[ass].count
|
||||
return {
|
||||
"name" : self.name,
|
||||
"big" : self.big,
|
||||
"count" : self.count,
|
||||
"assemblies" : assemblies,
|
||||
"vitamins" : self.vitamins,
|
||||
"printed" : self.printed,
|
||||
"routed" : self.routed
|
||||
"vitamins" : {v : self.vitamins[v].data() for v in self.vitamins},
|
||||
"printed" : {p : self.printed[p].data() for p in self.printed},
|
||||
"routed" : {r : self.routed[r].data() for r in self.routed}
|
||||
}
|
||||
|
||||
def add_part(self, s):
|
||||
args = []
|
||||
match = re.match(r'^(.*?\.stl|.*?\.dxf)\((.*)\)$', s) #look for name.stl(...) or name.dxf(...)
|
||||
if match:
|
||||
s = match.group(1)
|
||||
args = [match.group(2)]
|
||||
if s[-4:] == ".stl":
|
||||
parts = self.printed
|
||||
else:
|
||||
@@ -76,15 +94,19 @@ class BOM:
|
||||
else:
|
||||
parts = self.vitamins
|
||||
if s in parts:
|
||||
parts[s] += 1
|
||||
parts[s].count += 1
|
||||
else:
|
||||
parts[s] = 1
|
||||
parts[s] = Part(args)
|
||||
|
||||
def add_assembly(self, ass):
|
||||
def add_assembly(self, ass, args = []):
|
||||
if ass in self.assemblies:
|
||||
self.assemblies[ass].count += 1
|
||||
else:
|
||||
self.assemblies[ass] = BOM(ass)
|
||||
bom = BOM(ass)
|
||||
for arg in args:
|
||||
arg = arg.replace('true', 'True').replace('false', 'False').replace('undef', 'None')
|
||||
exec('bom.' + arg, locals())
|
||||
self.assemblies[ass] = bom
|
||||
|
||||
def make_name(self, ass):
|
||||
if self.count == 1:
|
||||
@@ -119,10 +141,10 @@ class BOM:
|
||||
for ass in sorted(self.assemblies):
|
||||
bom = self.assemblies[ass]
|
||||
if part in bom.vitamins:
|
||||
file.write("%2d|" % bom.vitamins[part])
|
||||
file.write("%2d|" % bom.vitamins[part].count)
|
||||
else:
|
||||
file.write(" |")
|
||||
print("%3d" % self.vitamins[part], description, file=file)
|
||||
print("%3d" % self.vitamins[part].count, description, file=file)
|
||||
|
||||
if self.printed:
|
||||
if self.vitamins:
|
||||
@@ -133,10 +155,10 @@ class BOM:
|
||||
for ass in sorted(self.assemblies):
|
||||
bom = self.assemblies[ass]
|
||||
if part in bom.printed:
|
||||
file.write("%2d|" % bom.printed[part])
|
||||
file.write("%2d|" % bom.printed[part].count)
|
||||
else:
|
||||
file.write(" |")
|
||||
print("%3d" % self.printed[part], part, file=file)
|
||||
print("%3d" % self.printed[part].count, part, file=file)
|
||||
|
||||
if self.routed:
|
||||
print(file=file)
|
||||
@@ -146,10 +168,10 @@ class BOM:
|
||||
for ass in sorted(self.assemblies):
|
||||
bom = self.assemblies[ass]
|
||||
if part in bom.routed:
|
||||
file.write("%2d|" % bom.routed[part])
|
||||
file.write("%2d|" % bom.routed[part].count)
|
||||
else:
|
||||
file.write(" |")
|
||||
print("%3d" % self.routed[part], part, file=file)
|
||||
print("%3d" % self.routed[part].count, part, file=file)
|
||||
|
||||
if self.assemblies:
|
||||
print(file=file)
|
||||
@@ -161,17 +183,22 @@ def parse_bom(file = "openscad.log", name = None):
|
||||
main = BOM(name)
|
||||
main.ordered_assemblies = []
|
||||
stack = []
|
||||
|
||||
prog = re.compile(r'^(.*)\((.*)\)$')
|
||||
for line in open(file):
|
||||
pos = line.find('ECHO: "~')
|
||||
if pos > -1:
|
||||
s = line[pos + 8 : line.rfind('"')]
|
||||
if s[-1] == '{':
|
||||
ass = s[:-1]
|
||||
args = []
|
||||
match = prog.match(ass) #look for (...)
|
||||
if match:
|
||||
ass = match.group(1)
|
||||
args = match.group(2).split(',')
|
||||
if stack:
|
||||
main.assemblies[stack[-1]].add_assembly(ass) #add to nested BOM
|
||||
stack.append(ass)
|
||||
main.add_assembly(ass) #add to flat BOM
|
||||
main.add_assembly(ass, args) #add to flat BOM
|
||||
if ass in main.ordered_assemblies:
|
||||
main.ordered_assemblies.remove(ass)
|
||||
main.ordered_assemblies.insert(0, ass)
|
||||
@@ -221,7 +248,7 @@ def boms(target = None, assembly = None):
|
||||
#
|
||||
# Run openscad
|
||||
#
|
||||
openscad.run("-D","$bom=2","-D","$preview=true","-o", "openscad.echo", "-d", bom_dir + "/bom.deps", bom_maker_name)
|
||||
openscad.run("-D", "$bom=2", "-D", "$preview=true", "--hardwarnings", "-o", "openscad.echo", "-d", bom_dir + "/bom.deps", bom_maker_name)
|
||||
os.remove(bom_maker_name)
|
||||
print("Generating bom ...", end=" ")
|
||||
|
||||
|
@@ -29,6 +29,7 @@ import openscad
|
||||
from tests import do_cmd, update_image, colour_scheme, background
|
||||
from deps import mtime
|
||||
from colorama import init
|
||||
import json
|
||||
|
||||
def usage():
|
||||
print("\nusage:\n\trender [target_config] - Render images of the stl and dxf files.");
|
||||
@@ -48,6 +49,20 @@ def render(target, type):
|
||||
#
|
||||
parts = bom_to_parts(bom_dir, type)
|
||||
#
|
||||
# Read the json bom to get the colours
|
||||
#
|
||||
bom_file = bom_dir + "/bom.json"
|
||||
with open(bom_file) as json_file:
|
||||
flat_bom = json.load(json_file)
|
||||
|
||||
things = { 'stl' : 'printed', 'dxf' : 'routed' }[type]
|
||||
colours = {}
|
||||
for ass in flat_bom:
|
||||
for part in ass[things]:
|
||||
obj = ass[things][part]
|
||||
if "colour" in obj:
|
||||
colours[part] = obj["colour"]
|
||||
#
|
||||
# Remove unused png files
|
||||
#
|
||||
for file in os.listdir(target_dir):
|
||||
@@ -55,7 +70,9 @@ def render(target, type):
|
||||
if not file[:-4] + '.' + type in parts:
|
||||
print("Removing %s" % file)
|
||||
os.remove(target_dir + '/' + file)
|
||||
|
||||
#
|
||||
# Render the parts
|
||||
#
|
||||
for part in parts:
|
||||
part_file = target_dir + '/' + part
|
||||
png_name = target_dir + '/' + part[:-4] + '.png'
|
||||
@@ -64,10 +81,16 @@ def render(target, type):
|
||||
#
|
||||
if mtime(part_file) > mtime(png_name):
|
||||
png_maker_name = "png.scad"
|
||||
pp1 = [0, 146/255, 0]
|
||||
colour = pp1
|
||||
if part in colours:
|
||||
colour = colours[part]
|
||||
if not '[' in colour:
|
||||
colour = '"' + colour + '"'
|
||||
with open(png_maker_name, "w") as f:
|
||||
f.write('color([0, 146/255, 0]) import("%s");\n' % part_file)
|
||||
f.write('color(%s) import("%s");\n' % (colour, part_file))
|
||||
cam = "--camera=0,0,0,70,0,315,500" if type == 'stl' else "--camera=0,0,0,0,0,0,500"
|
||||
render = "--preview" if type == 'stl' else "--render"
|
||||
render = "--preview" if type == 'stl' or colour != pp1 else "--render"
|
||||
tmp_name = 'tmp.png'
|
||||
openscad.run(colour_scheme, "--projection=p", "--imgsize=4096,4096", cam, render, "--autocenter", "--viewall", "-o", tmp_name, png_maker_name);
|
||||
do_cmd(("magick "+ tmp_name + " -trim -resize 280x280 -background %s -gravity Center -extent 280x280 -bordercolor %s -border 10 %s"
|
||||
|
@@ -232,9 +232,10 @@ def tests(tests):
|
||||
j = name.find(']]') + 2
|
||||
name = name.replace(name[i : j], '[ ... ]')
|
||||
desc = vit[1]
|
||||
body += ['| %3d | %s | %s |' % (things[item], name, desc)]
|
||||
body += ['| %3d | %s | %s |' % (things[item]["count"], name, desc)]
|
||||
else:
|
||||
body += ['| %3d | %s |' % (things[item], name)]
|
||||
count = things[item] if thing == 'assemblies' else things[item]["count"]
|
||||
body += ['| %3d | %s |' % (count, name)]
|
||||
body += ['']
|
||||
|
||||
body += ['\n<a href="#top">Top</a>']
|
||||
|
@@ -52,22 +52,23 @@ def bom_to_assemblies(bom_dir, bounds_map):
|
||||
# Decide if we need big or small assembly pictures
|
||||
#
|
||||
for bom in flat_bom:
|
||||
big = False
|
||||
for ass in bom["assemblies"]:
|
||||
for b in flat_bom:
|
||||
if b["name"] == ass:
|
||||
if b["big"]:
|
||||
if bom["big"] == None:
|
||||
big = False
|
||||
for ass in bom["assemblies"]:
|
||||
for b in flat_bom:
|
||||
if b["name"] == ass:
|
||||
if b["big"]:
|
||||
big = True
|
||||
break
|
||||
if not big:
|
||||
for stl in bom["printed"]:
|
||||
bounds = bounds_map[stl]
|
||||
width = bounds[1][0] - bounds[0][0]
|
||||
depth = bounds[1][1] - bounds[0][1]
|
||||
if max(width, depth) > 80:
|
||||
big = True
|
||||
break
|
||||
if not big:
|
||||
for stl in bom["printed"]:
|
||||
bounds = bounds_map[stl]
|
||||
width = bounds[1][0] - bounds[0][0]
|
||||
depth = bounds[1][1] - bounds[0][1]
|
||||
if max(width, depth) > 80:
|
||||
big = True
|
||||
break
|
||||
bom["big"] = big or bom["routed"]
|
||||
break
|
||||
bom["big"] = big or bom["routed"]
|
||||
#
|
||||
# Remove the main assembly if it is a shell
|
||||
#
|
||||
@@ -247,9 +248,9 @@ def views(target, do_assemblies = None):
|
||||
for t in types:
|
||||
for thing in ass[t]:
|
||||
if thing in things[t]:
|
||||
things[t][thing] += ass[t][thing]
|
||||
things[t][thing] += ass[t][thing]["count"]
|
||||
else:
|
||||
things[t][thing] = ass[t][thing]
|
||||
things[t][thing] = ass[t][thing]["count"]
|
||||
for ass in flat_bom:
|
||||
name = titalise(ass["name"][:-9]).replace(' ',' ')
|
||||
print('| <span style="writing-mode: vertical-rl; text-orientation: mixed;">%s</span> ' % name, file = doc_file, end = '')
|
||||
@@ -264,7 +265,7 @@ def views(target, do_assemblies = None):
|
||||
print(('| ' * len(flat_bom) + '| | **%s** |') % heading, file = doc_file)
|
||||
for thing in sorted(things[t], key = lambda s: s.split(":")[-1]):
|
||||
for ass in flat_bom:
|
||||
count = ass[t][thing] if thing in ass[t] else 0
|
||||
count = ass[t][thing]["count"] if thing in ass[t] else 0
|
||||
print('| %s ' % pad(count if count else '.', 2, 1), file = doc_file, end = '')
|
||||
name = ass["name"]
|
||||
if name in totals:
|
||||
@@ -300,7 +301,7 @@ def views(target, do_assemblies = None):
|
||||
print("|Qty|Description|", file = doc_file)
|
||||
print("|---:|:----------|", file = doc_file)
|
||||
for v in sorted(vitamins, key = lambda s: s.split(":")[-1]):
|
||||
print("|%d|%s|" % (vitamins[v], v.split(":")[1]), file = doc_file)
|
||||
print("|%d|%s|" % (vitamins[v]["count"], v.split(":")[1]), file = doc_file)
|
||||
print("\n", file = doc_file)
|
||||
|
||||
printed = ass["printed"]
|
||||
@@ -309,7 +310,7 @@ def views(target, do_assemblies = None):
|
||||
keys = sorted(list(printed.keys()))
|
||||
for i in range(len(keys)):
|
||||
p = keys[i]
|
||||
print('%s %d x %s |' % ('\n|' if not (i % 3) else '', printed[p], p), file = doc_file, end = '')
|
||||
print('%s %d x %s |' % ('\n|' if not (i % 3) else '', printed[p]["count"], p), file = doc_file, end = '')
|
||||
if (i % 3) == 2 or i == len(printed) - 1:
|
||||
n = (i % 3) + 1
|
||||
print('\n|%s' % ('---|' * n), file = doc_file)
|
||||
@@ -325,7 +326,7 @@ def views(target, do_assemblies = None):
|
||||
keys = sorted(list(routed.keys()))
|
||||
for i in range(len(keys)):
|
||||
r = keys[i]
|
||||
print('%s %d x %s |' % ('\n|' if not (i % 3) else '', routed[r], r), file = doc_file, end = '')
|
||||
print('%s %d x %s |' % ('\n|' if not (i % 3) else '', routed[r]["count"], r), file = doc_file, end = '')
|
||||
if (i % 3) == 2 or i == len(routed) - 1:
|
||||
n = (i % 3) + 1
|
||||
print('\n|%s' % ('---|' * n), file = doc_file)
|
||||
|
@@ -67,7 +67,7 @@ module widgit_dxf() {
|
||||
//! * Push the insert into the base with a soldering iron heated to 200°C
|
||||
module widgit_base_assembly()
|
||||
assembly("widgit_base") {
|
||||
color(pp1_colour)
|
||||
stl_colour(pp1_colour)
|
||||
widgit_stl();
|
||||
|
||||
translate_z(height)
|
||||
|
@@ -98,6 +98,8 @@ test_pcb = ["TestPCB", "Test PCB",
|
||||
[ 12, 444, 0, "2p54socket", 8, 1, undef, undef, undef, "red" ],
|
||||
[ 10, 470, 0, "standoff", 5, 4.5, 12.5, 2.54],
|
||||
[ 6, 480, 180, "uSD", [12, 11.5, 1.4]],
|
||||
[ 20, -5, 180, "trimpot10"],
|
||||
[ 20, -15, 0, "trimpot10", true],
|
||||
],
|
||||
// accessories
|
||||
[]
|
||||
|
@@ -21,11 +21,16 @@ include <../vitamins/pcbs.scad>
|
||||
|
||||
use <../utils/layout.scad>
|
||||
|
||||
module pcbs()
|
||||
module pcbs() {
|
||||
layout([for(p = pcbs) pcb_width(p)], 10)
|
||||
translate([0, pcb_length(pcbs[$i]) / 2])
|
||||
rotate(90)
|
||||
pcb_assembly(pcbs[$i], 5 + $i, 3);
|
||||
|
||||
translate([0, 120])
|
||||
layout([for(p = perfboards) pcb_length(p)], 10)
|
||||
translate([0, -pcb_width(perfboards[$i]) / 2])
|
||||
pcb_assembly(perfboards[$i], 5 + $i, 3);
|
||||
}
|
||||
if($preview)
|
||||
pcbs();
|
||||
|
@@ -22,14 +22,14 @@ use <../printed/cable_grommets.scad>
|
||||
|
||||
module cable_grommets() {
|
||||
rotate(90)
|
||||
color(pp1_colour) ribbon_grommet(20, 3);
|
||||
stl_colour(pp1_colour) ribbon_grommet(20, 3);
|
||||
|
||||
translate([20, 0])
|
||||
round_grommet_assembly(6, 3);
|
||||
|
||||
translate([40, 0])
|
||||
rotate(90)
|
||||
color(pp1_colour) mouse_grommet(5, 3);
|
||||
stl_colour(pp1_colour) mouse_grommet(5, 3);
|
||||
}
|
||||
|
||||
if($preview)
|
||||
|
@@ -19,7 +19,16 @@
|
||||
include <../utils/core/core.scad>
|
||||
use <../printed/carriers.scad>
|
||||
|
||||
module carriers()
|
||||
color(pp1_colour) ESP12F_carrier_stl();
|
||||
module carriers() {
|
||||
stl_colour(pp1_colour) ESP12F_carrier_stl();
|
||||
|
||||
translate([0, 15])
|
||||
rotate(90)
|
||||
stl_colour(pp1_colour) TP4056_carrier_stl();
|
||||
|
||||
translate([0, 25])
|
||||
rotate(90)
|
||||
stl_colour(pp1_colour) MT3608_carrier_stl();
|
||||
}
|
||||
|
||||
carriers();
|
||||
|
@@ -20,7 +20,7 @@ include <../global_defs.scad>
|
||||
use <../utils/dogbones.scad>
|
||||
|
||||
module dogbones() {
|
||||
#linear_extrude(height = eps)
|
||||
#linear_extrude(eps)
|
||||
dogbone_square([10, 20]);
|
||||
|
||||
#translate([15, 0])
|
||||
|
@@ -24,6 +24,6 @@ use <../utils/layout.scad>
|
||||
|
||||
module fan_guards()
|
||||
layout([for(f = fans) fan_width(f)], 10)
|
||||
color(pp1_colour) fan_guard(fans[$i], spokes = fan_width(fans[$i]) > 60 ? 8 : 4);
|
||||
stl_colour(pp1_colour) fan_guard(fans[$i], spokes = fan_width(fans[$i]) > 60 ? 8 : 4);
|
||||
|
||||
fan_guards();
|
||||
|
@@ -20,7 +20,7 @@
|
||||
include <../utils/core/core.scad>
|
||||
|
||||
module globals() {
|
||||
linear_extrude(height = eps) {
|
||||
linear_extrude(eps) {
|
||||
semi_circle(r = 10);
|
||||
|
||||
translate([30, 0])
|
||||
|
@@ -27,7 +27,7 @@ module inserts() {
|
||||
translate([10 * i, 0])
|
||||
insert(inserts[i]);
|
||||
|
||||
color(pp1_colour)
|
||||
stl_colour(pp1_colour)
|
||||
translate([len(inserts) * 10, 0]) {
|
||||
insert_lug(inserts[0], 2, 1);
|
||||
|
||||
|
@@ -22,7 +22,7 @@ use <../utils/layout.scad>
|
||||
diams = [3, 7, 5, 11];
|
||||
|
||||
module layouts() {
|
||||
linear_extrude(height = eps)
|
||||
linear_extrude(eps)
|
||||
layout(diams, gap = 1)
|
||||
circle(d = diams[$i]);
|
||||
}
|
||||
|
@@ -29,7 +29,7 @@ module light_strips()
|
||||
for(end = [-1, 1])
|
||||
translate([end * (light_strip_cut_length(light, segs) / 2 - d / 2), 0])
|
||||
rotate([90, 0, 90])
|
||||
color(pp1_colour) render()
|
||||
stl_colour(pp1_colour) render()
|
||||
translate_z(-d / 2)
|
||||
light_strip_clip(light);
|
||||
}
|
||||
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 118 KiB |
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 117 KiB |
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 90 KiB |
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 166 KiB |
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 160 KiB |
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 151 KiB After Width: | Height: | Size: 150 KiB |
@@ -34,7 +34,7 @@ module polyholes() {
|
||||
children();
|
||||
}
|
||||
|
||||
color(pp1_colour) linear_extrude(height = 3, center = true)
|
||||
stl_colour(pp1_colour) linear_extrude(3, center = true)
|
||||
difference() {
|
||||
square([100, 27]);
|
||||
|
||||
@@ -52,7 +52,7 @@ module polyholes() {
|
||||
sizes = [1.5, 2, 3, 4];
|
||||
for(i = [0 : len(sizes) - 1])
|
||||
translate([i * 10, -10]) {
|
||||
color(pp1_colour)
|
||||
stl_colour(pp1_colour)
|
||||
poly_tube(ir = ir, or = cir + sizes[i] * extrusion_width, h = 1);
|
||||
|
||||
rod(2 * ir, 3);
|
||||
|
@@ -93,7 +93,7 @@ module box1_base_stl()
|
||||
|
||||
module box1_assembly()
|
||||
assembly("box1") {
|
||||
color(pp1_colour) render() box1_case_stl();
|
||||
stl_colour(pp1_colour) render() box1_case_stl();
|
||||
|
||||
pbox_inserts(box1);
|
||||
|
||||
@@ -142,7 +142,7 @@ module box2_base_stl()
|
||||
|
||||
module box2_assembly()
|
||||
assembly("box2") {
|
||||
color(pp1_colour) render() box2_case_stl();
|
||||
stl_colour(pp1_colour) render() box2_case_stl();
|
||||
|
||||
pbox_inserts(box2);
|
||||
|
||||
|
@@ -22,7 +22,7 @@ use <../utils/quadrant.scad>
|
||||
|
||||
|
||||
module quadrants() {
|
||||
linear_extrude(height = eps)
|
||||
linear_extrude(eps)
|
||||
quadrant(10, 4);
|
||||
}
|
||||
|
||||
|
@@ -28,14 +28,14 @@ module shape()
|
||||
}
|
||||
|
||||
module rounds() {
|
||||
linear_extrude(height = eps)
|
||||
linear_extrude(eps)
|
||||
round(or = 4, ir = 2)
|
||||
shape();
|
||||
|
||||
|
||||
translate([50, 0])
|
||||
round_3D(or = 4, ir = 2, chamfer_base = true, $fn = 16)
|
||||
linear_extrude(height = 40, center = true)
|
||||
linear_extrude(40, center = true)
|
||||
shape();
|
||||
}
|
||||
|
||||
|
@@ -22,7 +22,7 @@ use <../utils/rounded_cylinder.scad>
|
||||
|
||||
|
||||
module rounded_cylinders() {
|
||||
linear_extrude(height = eps)
|
||||
linear_extrude(eps)
|
||||
rounded_corner(10, 20, 3, 5);
|
||||
|
||||
translate([30, 10])
|
||||
|
@@ -46,7 +46,7 @@ module rounded_polygons() {
|
||||
length = rounded_polygon_length(profile, tangents);
|
||||
|
||||
rotate([70, 0, 315])
|
||||
linear_extrude(height = eps)
|
||||
linear_extrude(eps)
|
||||
rounded_polygon(profile, tangents);
|
||||
|
||||
translate([0, -10])
|
||||
|
@@ -20,7 +20,7 @@
|
||||
include <../utils/core/core.scad>
|
||||
|
||||
module rounded_rectangles() {
|
||||
linear_extrude(height = eps)
|
||||
linear_extrude(eps)
|
||||
rounded_square([30, 20], 3);
|
||||
|
||||
translate([40, 0])
|
||||
|
@@ -22,7 +22,7 @@ use <../utils/sector.scad>
|
||||
|
||||
|
||||
module sectors() {
|
||||
linear_extrude(height = eps)
|
||||
linear_extrude(eps)
|
||||
sector(50, 45, 180);
|
||||
}
|
||||
|
||||
|
@@ -20,10 +20,10 @@
|
||||
include <../utils/core/core.scad>
|
||||
|
||||
module teardrops() {
|
||||
color(pp1_colour)
|
||||
stl_colour(pp1_colour)
|
||||
rotate([90, 0, -45])
|
||||
difference() {
|
||||
linear_extrude(height = 3) {
|
||||
linear_extrude(3) {
|
||||
difference() {
|
||||
square([80, 40]);
|
||||
|
||||
|
@@ -22,7 +22,7 @@ use <../utils/tube.scad>
|
||||
|
||||
|
||||
module tubes() {
|
||||
linear_extrude(height = eps)
|
||||
linear_extrude(eps)
|
||||
ring(10, 8);
|
||||
|
||||
translate([50, 10])
|
||||
|
@@ -54,9 +54,9 @@ module wires() {
|
||||
%cylinder(r = bundle_r, h = wire_l - 10, center = true);
|
||||
}
|
||||
|
||||
color(pp1_colour) {
|
||||
stl_colour(pp1_colour) {
|
||||
rotate([90, 0, 90])
|
||||
linear_extrude(height = thickness)
|
||||
linear_extrude(thickness)
|
||||
difference() {
|
||||
translate([-w / 2, 0])
|
||||
square([w, h]);
|
||||
@@ -65,7 +65,7 @@ module wires() {
|
||||
}
|
||||
|
||||
translate_z(-thickness)
|
||||
linear_extrude(height = thickness)
|
||||
linear_extrude(thickness)
|
||||
difference() {
|
||||
translate([thickness -d, -w / 2])
|
||||
square([d, w]);
|
||||
|
@@ -26,7 +26,7 @@ include <../utils/core/core.scad>
|
||||
module label(str, scale = 0.25, valign = "baseline", halign = "left") //! Draw text that always faces the camera
|
||||
color("black")
|
||||
%rotate($vpr != [0, 0, 0] ? $vpr : [70, 0, 315])
|
||||
linear_extrude(height = eps)
|
||||
linear_extrude(eps)
|
||||
scale(scale)
|
||||
text(str, valign = valign, halign = halign);
|
||||
|
||||
|
@@ -18,11 +18,15 @@
|
||||
//
|
||||
|
||||
//
|
||||
//! Bill Of Materials generation via echo and the ```bom.py``` script. Also handles exploded assembly views and posing. Assembly instructions can precede the module
|
||||
//! definition that makes the assembly.
|
||||
//! Bill Of Materials generation via echo and the ```bom.py``` script. Also handles exploded assembly views and posing.
|
||||
//! Assembly instructions can precede the module definition that makes the assembly.
|
||||
//!
|
||||
//! The example below shows how to define a vitamin and incorporate it into an assembly with sub-assemblies and make an exploded view. The resulting flat BOM is shown but
|
||||
//! heirachical BOMs are also generated for real projects.
|
||||
//! Assembly views shown in the instructions can be large or small and this is deduced by looking at the size of the printed parts involved and if any routed
|
||||
//! parts are used.
|
||||
//! This heuristic isn't always correct, so the default can be overridden by setting the ```big``` parameter of ```assembly``` to ```true``` or ```false```.
|
||||
//!
|
||||
//! The example below shows how to define a vitamin and incorporate it into an assembly with sub-assemblies and make an exploded view.
|
||||
//! The resulting flat BOM is shown but heirachical BOMs are also generated for real projects.
|
||||
//
|
||||
function bom_mode(n = 1) = $_bom >= n && (is_undef($on_bom) || $on_bom); //! Current BOM mode, 0 = none, 1 = printed and routed parts and assemblies, 2 includes vitamins as well
|
||||
function exploded() = is_undef($exploded_parent) ? $exploded : 0; //! Returns the value of ```$exploded``` if it is defined, else ```0```
|
||||
@@ -80,10 +84,11 @@ module pose_vflip(exploded = undef) //! Pose an STL or assembly for render
|
||||
children();
|
||||
|
||||
|
||||
module assembly(name) { //! Name an assembly that will appear on the BOM, there needs to a module named ```<name>_assembly``` to make it
|
||||
if(bom_mode())
|
||||
echo(str("~", name, "_assembly{"));
|
||||
|
||||
module assembly(name, big = undef) { //! Name an assembly that will appear on the BOM, there needs to a module named ```<name>_assembly``` to make it. ```big``` can force big or small assembly diagrams.
|
||||
if(bom_mode()) {
|
||||
args = is_undef(big) ? "" : str("(big=", big, ")");
|
||||
echo(str("~", name, "_assembly", args, "{"));
|
||||
}
|
||||
no_pose()
|
||||
if(is_undef($child_assembly))
|
||||
let($child_assembly = true)
|
||||
@@ -96,14 +101,26 @@ module assembly(name) { //! Name an assembly that will appear on
|
||||
echo(str("~}", name, "_assembly"));
|
||||
}
|
||||
|
||||
module stl_colour(colour = pp1_colour, alpha = 1) { //! Colour an stl where it is placed in an assembly. ```alpha``` can be used to make it appear transparent.
|
||||
$stl_colour = colour;
|
||||
color(colour, alpha)
|
||||
children();
|
||||
}
|
||||
|
||||
module stl(name) { //! Name an stl that will appear on the BOM, there needs to a module named ```<name>_stl``` to make it
|
||||
if(bom_mode())
|
||||
echo(str("~", name, ".stl"));
|
||||
if(bom_mode()) {
|
||||
colour = is_undef($stl_colour) ? pp1_colour : $stl_colour;
|
||||
echo(str("~", name, ".stl(colour='", colour, "')"));
|
||||
}
|
||||
}
|
||||
|
||||
module dxf(name) { //! Name a dxf that will appear on the BOM, there needs to a module named ```<name>_dxf``` to make it
|
||||
if(bom_mode())
|
||||
echo(str("~", name, ".dxf"));
|
||||
if(bom_mode()) {
|
||||
if(is_undef($dxf_colour))
|
||||
echo(str("~", name, ".dxf"));
|
||||
else
|
||||
echo(str("~", name, ".dxf(colour='", $dxf_colour, "')"));
|
||||
}
|
||||
}
|
||||
|
||||
function value_string(value) = is_string(value) ? str("\"", value, "\"") : str(value); //! Convert ```value``` to a string or quote it if it is already a string
|
||||
|
@@ -43,7 +43,7 @@ module ellipse(xr, yr) scale([1, yr / xr]) circle4n(xr);
|
||||
|
||||
module extrude_if(h, center = true) //! Extrudes 2D object to 3D when ```h``` is nonzero, otherwise leaves it 2D
|
||||
if(h)
|
||||
linear_extrude(height = h, center = center, convexity = 2) // 3D
|
||||
linear_extrude(h, center = center, convexity = 2) // 3D
|
||||
children();
|
||||
else
|
||||
children(); // 2D
|
||||
|
@@ -28,6 +28,6 @@ module rounded_square(size, r, center = true) //! Like ```square()``` but with w
|
||||
|
||||
module rounded_rectangle(size, r, center = true, xy_center = true) //! Like ```cube()``` but corners rounded in XY plane and separate centre options for xy and z.
|
||||
{
|
||||
linear_extrude(height = size[2], center = center)
|
||||
linear_extrude(size[2], center = center)
|
||||
rounded_square([size[0], size[1]], r, xy_center);
|
||||
}
|
||||
|
@@ -47,7 +47,7 @@ module hanging_hole(z, ir, h = 100, h2 = 100) { //! Hole radius ```ir``` hanging
|
||||
|
||||
difference() {
|
||||
translate_z(-below)
|
||||
linear_extrude(height = below + 2 * layer_height)
|
||||
linear_extrude(below + 2 * layer_height)
|
||||
children();
|
||||
|
||||
rotate(infill_angle)
|
||||
|
@@ -29,5 +29,5 @@ module ring(or, ir) //! Create a ring with specified external and internal radii
|
||||
}
|
||||
|
||||
module tube(or, ir, h, center = true) //! Create a tube with specified external and internal radii and height ```h```
|
||||
linear_extrude(height = h, center = center, convexity = 5)
|
||||
linear_extrude(h, center = center, convexity = 5)
|
||||
ring(or, ir);
|
||||
|
@@ -44,7 +44,7 @@ module ball_bearing(type) { //! Draw a ball bearing
|
||||
id = bb_bore(type);
|
||||
|
||||
module tube(od, id, h)
|
||||
linear_extrude(height = h, center = true, convexity = 5)
|
||||
linear_extrude(h, center = true, convexity = 5)
|
||||
difference() {
|
||||
circle(d = od);
|
||||
circle(d = id);
|
||||
|
@@ -75,7 +75,7 @@ module battery(type) { //! Draw a battery
|
||||
if(battery_usb_offset(type))
|
||||
translate([battery_diameter(type) / 2, 0, len / 2 - battery_usb_offset(type) + h / 2])
|
||||
rotate([-90, 0, 90])
|
||||
linear_extrude(height = l + 1)
|
||||
linear_extrude(l + 1)
|
||||
offset(delta = t)
|
||||
D();
|
||||
}
|
||||
@@ -87,14 +87,14 @@ module battery(type) { //! Draw a battery
|
||||
if(battery_usb_offset(type))
|
||||
translate([battery_diameter(type) / 2 - 1, 0, len / 2 - battery_usb_offset(type) + h / 2])
|
||||
rotate([-90, 0, 90]) {
|
||||
linear_extrude(height = l)
|
||||
linear_extrude(l)
|
||||
difference() {
|
||||
offset(t) D();
|
||||
D();
|
||||
}
|
||||
|
||||
translate_z(l - 1)
|
||||
linear_extrude(height = 1)
|
||||
linear_extrude(1)
|
||||
D();
|
||||
}
|
||||
|
||||
@@ -132,7 +132,7 @@ module battery_contact(type, pos = true) { //! Draw a positive or negative batte
|
||||
|
||||
translate([0, -h / 2, t])
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(height = t)
|
||||
linear_extrude(t)
|
||||
difference() {
|
||||
hull() {
|
||||
translate([-tw / 2, -1])
|
||||
|
@@ -62,7 +62,7 @@ module belt(type, points, gap = 0, gap_pt = undef, belt_colour = grey20, tooth_c
|
||||
square([gap, thickness + eps], center = true);
|
||||
|
||||
color(belt_colour)
|
||||
linear_extrude(height = width, center = true)
|
||||
linear_extrude(width, center = true)
|
||||
difference() {
|
||||
offset(thickness - belt_pitch_height(type)) shape();
|
||||
offset(-belt_pitch_height(type) + belt_tooth_height(type)) shape();
|
||||
@@ -70,7 +70,7 @@ module belt(type, points, gap = 0, gap_pt = undef, belt_colour = grey20, tooth_c
|
||||
|
||||
}
|
||||
color(tooth_colour)
|
||||
linear_extrude(height = width, center = true)
|
||||
linear_extrude(width, center = true)
|
||||
difference() {
|
||||
offset(-belt_pitch_height(type) + belt_tooth_height(type)) shape();
|
||||
offset(-belt_pitch_height(type)) shape();
|
||||
|
@@ -72,7 +72,7 @@ module blower(type) { //! Draw specified blower
|
||||
|
||||
color(fan_colour) {
|
||||
// screw lugs
|
||||
linear_extrude(height = blower_lug(type), center = false)
|
||||
linear_extrude(blower_lug(type), center = false)
|
||||
for(hole = blower_screw_holes(type))
|
||||
difference() {
|
||||
hull() {
|
||||
@@ -94,7 +94,7 @@ module blower(type) { //! Draw specified blower
|
||||
*%square([length, width]);
|
||||
|
||||
// base
|
||||
linear_extrude(height = blower_base(type))
|
||||
linear_extrude(blower_base(type))
|
||||
difference() {
|
||||
shape();
|
||||
|
||||
@@ -102,7 +102,7 @@ module blower(type) { //! Draw specified blower
|
||||
circle(d = 2);
|
||||
}
|
||||
// sides
|
||||
linear_extrude(height = depth)
|
||||
linear_extrude(depth)
|
||||
difference() {
|
||||
shape();
|
||||
|
||||
@@ -112,7 +112,7 @@ module blower(type) { //! Draw specified blower
|
||||
|
||||
// top
|
||||
translate_z(depth -blower_top(type))
|
||||
linear_extrude(height = blower_top(type))
|
||||
linear_extrude(blower_top(type))
|
||||
difference() {
|
||||
shape();
|
||||
|
||||
|
@@ -34,7 +34,7 @@ function cable_strip_thickness() = cable_strip_thickness;
|
||||
use <../utils/bezier.scad>
|
||||
use <../utils/sweep.scad>
|
||||
|
||||
cable_strip_color = "green";
|
||||
cable_strip_colour = "green";
|
||||
|
||||
function cable_strip_control_points(depth, min_z, pos) = let(z = min(min_z, min_z + pos))
|
||||
[
|
||||
@@ -62,7 +62,7 @@ module bezier_cable_strip(ways, depth, length, below, extra, pos = 0) { //! Draw
|
||||
|
||||
path = [v[0] + extra_v, each bezier_path(v, steps), v[3] + extra_v];
|
||||
|
||||
color(cable_strip_color)
|
||||
color(cable_strip_colour)
|
||||
translate_z(-extra)
|
||||
sweep(path, rectangle_points(width, thickness));
|
||||
*echo(cable_strip_lengh = length);
|
||||
@@ -89,7 +89,7 @@ module cable_strip(ways, depth, travel, extra = 15, pos = 0) { //! Draw a cable
|
||||
|
||||
vitamin(str("cable_strip(", ways, ", ", depth, ", ", travel, arg(extra, 15), "): Polypropylene strip ", total, "mm x ", w, "mm x ", thickness, "mm"));
|
||||
|
||||
color(cable_strip_color) linear_extrude(height = w, center = true, convexity = 4)
|
||||
color(cable_strip_colour) linear_extrude(w, center = true, convexity = 4)
|
||||
difference() {
|
||||
union() {
|
||||
translate([-bottom, radius])
|
||||
@@ -142,7 +142,7 @@ module elliptical_cable_strip(ways, p1, p2, pmax, extra = 15) {
|
||||
[delta[2] / delta[0], 0, 1, delta[2] / 2],
|
||||
[0, 0, 0, 1] ])
|
||||
|
||||
color(cable_strip_color) linear_extrude(height = w, center = true, convexity = 4)
|
||||
color(cable_strip_colour) linear_extrude(w, center = true, convexity = 4)
|
||||
difference() {
|
||||
union() {
|
||||
square([(a + thickness) * 2, extra * 2], center = true);
|
||||
|
@@ -57,7 +57,7 @@ module internal_circlip(type, open = 0) { //! Draw specified internal circlip, o
|
||||
y_offset = (sqr(p.x) + sqr(p.y) - sqr(or - b)) / (or - b - p.y) / 2;
|
||||
ir = or - b + y_offset;
|
||||
color(circlip_colour)
|
||||
linear_extrude(height = circlip_thickness(type), center = true)
|
||||
linear_extrude(circlip_thickness(type), center = true)
|
||||
round((a - d5) / 5)
|
||||
union() {
|
||||
difference() {
|
||||
|
@@ -147,7 +147,7 @@ module al_clad_resistor(type, value, leads = true) { //! Draw an aluminium clad
|
||||
|
||||
color("silver") {
|
||||
rotate([90, 0, 90])
|
||||
linear_extrude(height = length, center = true)
|
||||
linear_extrude(length, center = true)
|
||||
hull() {
|
||||
translate([0, al_clad_height(type) / 2])
|
||||
intersection() {
|
||||
@@ -158,7 +158,7 @@ module al_clad_resistor(type, value, leads = true) { //! Draw an aluminium clad
|
||||
translate([0, thickness / 2])
|
||||
square([body, thickness], center = true);
|
||||
}
|
||||
linear_extrude(height = thickness)
|
||||
linear_extrude(thickness)
|
||||
difference() {
|
||||
for(end = [-1, 1])
|
||||
translate([end * (length - tab) / 2, end * (width - width / 2) / 2])
|
||||
@@ -176,7 +176,7 @@ module al_clad_resistor(type, value, leads = true) { //! Draw an aluminium clad
|
||||
for(end = [-1, 1])
|
||||
translate([end * (al_clad_wire_length(type) - terminal_l) / 2, 0, height / 2])
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(height = terminal_t, center = true) difference() {
|
||||
linear_extrude(terminal_t, center = true) difference() {
|
||||
square([terminal_l, terminal_h], center = true);
|
||||
|
||||
circle(r = 1);
|
||||
@@ -226,7 +226,7 @@ module TO220(description, leads = 3, lead_length = 16) { //! Draw a TO220 packa
|
||||
|
||||
translate([0, -length + hole_y]) {
|
||||
color("silver") {
|
||||
linear_extrude(height = TO220_thickness())
|
||||
linear_extrude(TO220_thickness())
|
||||
difference() {
|
||||
translate([-width / 2, inset])
|
||||
square([width, length - inset]);
|
||||
@@ -305,7 +305,7 @@ module panel_USBA() { //! Draw a panel mount USBA connector
|
||||
|
||||
vflip() {
|
||||
color("dimgrey") {
|
||||
linear_extrude(height = thickness)
|
||||
linear_extrude(thickness)
|
||||
difference() {
|
||||
hull()
|
||||
for(side = [-1, 1])
|
||||
@@ -345,14 +345,14 @@ module panel_USBA() { //! Draw a panel mount USBA connector
|
||||
}
|
||||
|
||||
translate_z(height3)
|
||||
linear_extrude(height = l - height3)
|
||||
linear_extrude(l - height3)
|
||||
difference() {
|
||||
rounded_square([length2, width], r = r1);
|
||||
|
||||
square([w - flange_t, h - flange_t], center = true);
|
||||
}
|
||||
|
||||
linear_extrude(height = height3)
|
||||
linear_extrude(height3)
|
||||
difference() {
|
||||
rounded_square([length2, width], r = r1);
|
||||
|
||||
@@ -363,7 +363,7 @@ module panel_USBA() { //! Draw a panel mount USBA connector
|
||||
*cube([12, 4.5, 32], center = true);
|
||||
|
||||
color("silver") {
|
||||
linear_extrude(height = l)
|
||||
linear_extrude(l)
|
||||
difference() {
|
||||
square([w, h], center = true);
|
||||
|
||||
@@ -373,7 +373,7 @@ module panel_USBA() { //! Draw a panel mount USBA connector
|
||||
translate_z(l - flange_t / 2)
|
||||
cube([w, h, flange_t], center = true);
|
||||
|
||||
linear_extrude(height = flange_t)
|
||||
linear_extrude(flange_t)
|
||||
difference() {
|
||||
union() {
|
||||
square([h_flange_l, h + 2 * h_flange_h], center = true);
|
||||
@@ -418,7 +418,7 @@ module thermal_cutout(type) { //! Draw specified thermal cutout
|
||||
spade = spade6p4;
|
||||
|
||||
color("silver") {
|
||||
linear_extrude(height = tc_thickness(type))
|
||||
linear_extrude(tc_thickness(type))
|
||||
difference() {
|
||||
hull()
|
||||
for(side = [-1, 1])
|
||||
|
@@ -23,9 +23,9 @@
|
||||
include <../utils/core/core.scad>
|
||||
use <../utils/thread.scad>
|
||||
|
||||
d_pillar_color = grey90;
|
||||
d_plug_shell_color = grey80;
|
||||
d_plug_insulator_color = grey20;
|
||||
d_pillar_colour = grey90;
|
||||
d_plug_shell_colour = grey80;
|
||||
d_plug_insulator_colour = grey20;
|
||||
|
||||
function d_flange_length(type) = type[1]; //! Length of the flange
|
||||
function d_lengths(type) = type[2]; //! Lengths of the D for plug and socket
|
||||
@@ -56,20 +56,20 @@ module d_pillar() { //! Draw a pillar for a D-connector
|
||||
|
||||
translate_z(-screw_length)
|
||||
if(show_threads)
|
||||
male_metric_thread(screw, pitch, screw_length, false, top = 0, colour = d_pillar_color);
|
||||
male_metric_thread(screw, pitch, screw_length, false, top = 0, colour = d_pillar_colour);
|
||||
else
|
||||
color(d_pillar_color)
|
||||
color(d_pillar_colour)
|
||||
cylinder(d = screw, h = screw_length + 1);
|
||||
|
||||
color(d_pillar_color) {
|
||||
linear_extrude(height = height)
|
||||
color(d_pillar_colour) {
|
||||
linear_extrude(height)
|
||||
difference() {
|
||||
circle(r = rad, $fn = 6);
|
||||
circle(d = screw);
|
||||
}
|
||||
}
|
||||
if(show_threads)
|
||||
female_metric_thread(screw, pitch, height, false, colour = d_pillar_color);
|
||||
female_metric_thread(screw, pitch, height, false, colour = d_pillar_colour);
|
||||
}
|
||||
|
||||
module d_plug(type, socket = false, pcb = false, idc = false) { //! Draw specified D plug, which can be IDC, PCB or plain solder bucket
|
||||
@@ -106,8 +106,8 @@ module d_plug(type, socket = false, pcb = false, idc = false) { //! Draw specifi
|
||||
//
|
||||
// Shell
|
||||
//
|
||||
color(d_plug_shell_color) {
|
||||
linear_extrude(height = d_flange_thickness(type))
|
||||
color(d_plug_shell_colour) {
|
||||
linear_extrude( d_flange_thickness(type))
|
||||
difference() {
|
||||
rounded_square([flange_length, flange_width], 2);
|
||||
|
||||
@@ -115,7 +115,7 @@ module d_plug(type, socket = false, pcb = false, idc = false) { //! Draw specifi
|
||||
circle(hole_r);
|
||||
}
|
||||
|
||||
linear_extrude(height = front_height, convexity = 5)
|
||||
linear_extrude(front_height, convexity = 5)
|
||||
difference() {
|
||||
D(d_length, d_width, 2.5);
|
||||
D(d_length - 2 * dwall, d_width - 2 * dwall, 2.5 - dwall);
|
||||
@@ -123,21 +123,21 @@ module d_plug(type, socket = false, pcb = false, idc = false) { //! Draw specifi
|
||||
|
||||
if(!idc)
|
||||
rotate([0,180,0])
|
||||
linear_extrude(height = back_height, convexity = 5)
|
||||
linear_extrude(back_height, convexity = 5)
|
||||
D(d_lengths(type)[0] + 2 * dwall, d_widths(type)[0] + 2 * dwall, 2.5 + dwall);
|
||||
|
||||
}
|
||||
//
|
||||
// Insulator
|
||||
//
|
||||
color(d_plug_insulator_color) {
|
||||
color(d_plug_insulator_colour) {
|
||||
translate_z(d_flange_thickness(type) + eps)
|
||||
rotate([0, 180, 0])
|
||||
linear_extrude(height = back_height + 1 + d_flange_thickness(type), convexity = 5)
|
||||
linear_extrude(back_height + 1 + d_flange_thickness(type), convexity = 5)
|
||||
D(d_length - dwall, d_width - dwall, 2.5 - dwall/2);
|
||||
|
||||
if(socket)
|
||||
linear_extrude(height = front_height - eps, convexity = 5)
|
||||
linear_extrude(front_height - eps, convexity = 5)
|
||||
difference() {
|
||||
D(d_length - dwall, d_width - dwall, 2.5 - dwall/2);
|
||||
|
||||
@@ -169,11 +169,11 @@ module d_plug(type, socket = false, pcb = false, idc = false) { //! Draw specifi
|
||||
|
||||
if(pcb)
|
||||
rotate([0, 180, 0]) {
|
||||
linear_extrude(height = back_height + 1 + 4.5)
|
||||
linear_extrude(back_height + 1 + 4.5)
|
||||
pin_positions()
|
||||
circle(r = 0.75 / 2, $fn = 12);
|
||||
|
||||
linear_extrude(height = back_height + 1 + 1)
|
||||
linear_extrude(back_height + 1 + 1)
|
||||
pin_positions()
|
||||
circle(r = 0.75, $fn = 12);
|
||||
}
|
||||
@@ -183,7 +183,7 @@ module d_plug(type, socket = false, pcb = false, idc = false) { //! Draw specifi
|
||||
pin_positions()
|
||||
rotate(180 + ($i % 2) * 180)
|
||||
render() difference() {
|
||||
linear_extrude(height = 8)
|
||||
linear_extrude(8)
|
||||
difference() {
|
||||
circle(1);
|
||||
|
||||
|
@@ -80,10 +80,10 @@ module fan(type) { //! Draw specified fan, origin in the centre
|
||||
if(middle > 0) {
|
||||
for(z = [-1, 1])
|
||||
translate_z(z * (depth - thickness) / 2)
|
||||
linear_extrude(height = thickness, center = true)
|
||||
linear_extrude(thickness, center = true)
|
||||
shape();
|
||||
|
||||
linear_extrude(height = middle, center = true)
|
||||
linear_extrude(middle, center = true)
|
||||
difference() {
|
||||
shape();
|
||||
difference() {
|
||||
@@ -100,13 +100,13 @@ module fan(type) { //! Draw specified fan, origin in the centre
|
||||
}
|
||||
}
|
||||
else
|
||||
linear_extrude(height = depth, center = true)
|
||||
linear_extrude(depth, center = true)
|
||||
shape();
|
||||
|
||||
// Blades
|
||||
blade_ir = fan_hub(type) / 2 - 1;
|
||||
blade_len = fan_bore(type) / 2 - 0.75 - blade_ir;
|
||||
linear_extrude(height = depth - 1, center = true, convexity = 4, twist = -30, slices = round(depth / 2))
|
||||
linear_extrude(depth - 1, center = true, convexity = 4, twist = -30, slices = round(depth / 2))
|
||||
for(i = [0 : fan_blades(type) - 1])
|
||||
rotate((360 * i) / fan_blades(type))
|
||||
translate([blade_ir, -1.5 / 2])
|
||||
|
@@ -68,7 +68,7 @@ module fuseholder(thickness) { //! Fuseholder with nut in place for specified pa
|
||||
color(colour) {
|
||||
tube(or = nut_d / 2, ir = thread_d / 2, h = nut_flange_t, center = false);
|
||||
|
||||
linear_extrude(height = nut_t)
|
||||
linear_extrude(nut_t)
|
||||
difference() {
|
||||
circle(d = nut_d, $fn = 6);
|
||||
|
||||
@@ -87,7 +87,7 @@ module fuseholder(thickness) { //! Fuseholder with nut in place for specified pa
|
||||
|
||||
cylinder(r = 5, h = flange_t - 1);
|
||||
|
||||
linear_extrude(height = flange_t)
|
||||
linear_extrude(flange_t)
|
||||
difference() {
|
||||
circle(r = 5);
|
||||
|
||||
@@ -96,7 +96,7 @@ module fuseholder(thickness) { //! Fuseholder with nut in place for specified pa
|
||||
|
||||
vflip() {
|
||||
if(!show_threads)
|
||||
linear_extrude(height = thread)
|
||||
linear_extrude(thread)
|
||||
intersection() {
|
||||
circle(d = thread_d - 0.3);
|
||||
|
||||
@@ -127,7 +127,7 @@ module fuseholder(thickness) { //! Fuseholder with nut in place for specified pa
|
||||
for(side = [-1, 1])
|
||||
translate([side * contact_slot_d / 2, 0, contact_slot_z])
|
||||
rotate([0, -70, 90 - side * 90])
|
||||
linear_extrude(height = contact_t, center = true) difference() {
|
||||
linear_extrude(contact_t, center = true) difference() {
|
||||
hull() {
|
||||
square([eps, contact_w], center = true);
|
||||
|
||||
|
@@ -61,7 +61,7 @@ module geared_stepper(type) { //! Draw the specified geared stepper
|
||||
|
||||
cylinder(d = gs_boss_d(type), h = 2 * gs_boss_h(type), center = true);
|
||||
|
||||
linear_extrude(height = gs_lug_t(type))
|
||||
linear_extrude(gs_lug_t(type))
|
||||
difference() {
|
||||
hull()
|
||||
geared_stepper_screw_positions(type)
|
||||
@@ -78,7 +78,7 @@ module geared_stepper(type) { //! Draw the specified geared stepper
|
||||
color(brass) {
|
||||
d = gs_shaft_d(type);
|
||||
h = gs_shaft_length(type);
|
||||
linear_extrude(height = h)
|
||||
linear_extrude(h)
|
||||
intersection() {
|
||||
circle(d = d);
|
||||
|
||||
@@ -95,7 +95,7 @@ module geared_stepper(type) { //! Draw the specified geared stepper
|
||||
|
||||
h2 = gs_bulge2_h(type);
|
||||
translate([0, - offset, h1 + 1 - h2])
|
||||
linear_extrude(height = h2)
|
||||
linear_extrude(h2)
|
||||
round(0.5)
|
||||
intersection() {
|
||||
circle(gs_bulge2_d(type));
|
||||
|
@@ -36,7 +36,7 @@ function gt_front_t(type) = type[10]; //! Thickness of frame around the fr
|
||||
function gt_box_w(type) = type[11]; //! Width inside the cable entry box
|
||||
function gt_box_h(type) = type[12]; //! Height of the cable entry box
|
||||
function gt_y_offset(type) = type[13]; //! Offset of the pins from centre of the depth
|
||||
function gt_y_offset2(type) = type[14]; //! Offset of the pins screws from the screws
|
||||
function gt_y_offset2(type) = type[14]; //! Offset of the pins from the screws
|
||||
function gt_tube_h(type) = type[15]; //! Height of optional tubes around the screws
|
||||
|
||||
module green_terminal(type, ways, skip = [], colour = "lime") { //! Draw green terminal blocks, skip can be used to remove pins.
|
||||
@@ -80,7 +80,7 @@ module green_terminal(type, ways, skip = [], colour = "lime") { //! Draw green t
|
||||
|
||||
color(colour) {
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(height = pitch, center = true, convexity = 5)
|
||||
linear_extrude(pitch, center = true, convexity = 5)
|
||||
polygon(points = [ // Vertical section
|
||||
[y + depth / 2, 0],
|
||||
[y + depth / 2, ledge_height / 2 - box_h1 / 2],
|
||||
@@ -105,7 +105,7 @@ module green_terminal(type, ways, skip = [], colour = "lime") { //! Draw green t
|
||||
]);
|
||||
|
||||
translate([y2, 0, ledge_height / 2 + box_h2 / 2]) // Screw socket
|
||||
linear_extrude(height = height - ledge_height / 2 - box_h2 / 2)
|
||||
linear_extrude(height - ledge_height / 2 - box_h2 / 2)
|
||||
difference() {
|
||||
square([screw_r * 2 + 0.1, pitch], center = true);
|
||||
|
||||
@@ -113,7 +113,7 @@ module green_terminal(type, ways, skip = [], colour = "lime") { //! Draw green t
|
||||
}
|
||||
|
||||
|
||||
linear_extrude(height = ledge_height)
|
||||
linear_extrude(ledge_height)
|
||||
intersection() {
|
||||
horizontal_section();
|
||||
|
||||
@@ -121,7 +121,7 @@ module green_terminal(type, ways, skip = [], colour = "lime") { //! Draw green t
|
||||
square([10, 10]);
|
||||
}
|
||||
|
||||
linear_extrude(height = back)
|
||||
linear_extrude(back)
|
||||
intersection() {
|
||||
horizontal_section();
|
||||
|
||||
@@ -131,7 +131,7 @@ module green_terminal(type, ways, skip = [], colour = "lime") { //! Draw green t
|
||||
|
||||
if(tube_h)
|
||||
translate([y2, 0, height])
|
||||
linear_extrude(height = tube_h - height)
|
||||
linear_extrude(tube_h - height)
|
||||
intersection() {
|
||||
ring(or = top / 2, ir = screw_r);
|
||||
|
||||
@@ -141,37 +141,37 @@ module green_terminal(type, ways, skip = [], colour = "lime") { //! Draw green t
|
||||
}
|
||||
if(!skip)
|
||||
color("silver") {
|
||||
slot_depth = 1;
|
||||
screw_top = height - 0.5;
|
||||
pin_l = 3.3;
|
||||
translate([y2, 0]) {
|
||||
translate_z(screw_top - 2 * slot_depth) // screw head
|
||||
cylinder(r = screw_r, h = slot_depth);
|
||||
slot_depth = 1;
|
||||
screw_top = height - 0.5;
|
||||
pin_l = 3.3;
|
||||
translate([y2, 0]) {
|
||||
translate_z(screw_top - 2 * slot_depth) // screw head
|
||||
cylinder(r = screw_r, h = slot_depth);
|
||||
|
||||
translate_z(screw_top - slot_depth) // screw head
|
||||
linear_extrude(height = slot_depth)
|
||||
difference() {
|
||||
circle(screw_r);
|
||||
translate_z(screw_top - slot_depth) // screw head
|
||||
linear_extrude(slot_depth)
|
||||
difference() {
|
||||
circle(screw_r);
|
||||
|
||||
square([10, screw_r / 4], center = true);
|
||||
}
|
||||
}
|
||||
translate([box_back, 0, ledge_height / 2]) {
|
||||
rotate([0, 90, 0])
|
||||
linear_extrude(height = box_front - box_back)
|
||||
difference() {
|
||||
square([box_h2, box_w2], center = true);
|
||||
|
||||
square([box_h2 - 0.1, box_w2 - 0.1], center = true);
|
||||
|
||||
}
|
||||
|
||||
cube([1, box_w2, box_h2], center = true); // terminal back
|
||||
}
|
||||
|
||||
translate_z(-pin_l)
|
||||
cube([0.44, 0.75, pin_l]); // pin
|
||||
square([10, screw_r / 4], center = true);
|
||||
}
|
||||
}
|
||||
translate([box_back, 0, ledge_height / 2]) {
|
||||
rotate([0, 90, 0])
|
||||
linear_extrude(box_front - box_back)
|
||||
difference() {
|
||||
square([box_h2, box_w2], center = true);
|
||||
|
||||
square([box_h2 - 0.1, box_w2 - 0.1], center = true);
|
||||
|
||||
}
|
||||
|
||||
cube([1, box_w2, box_h2], center = true); // terminal back
|
||||
}
|
||||
|
||||
translate_z(-pin_l / 2)
|
||||
cube([0.44, 0.75, pin_l], center = true); // pin
|
||||
}
|
||||
}
|
||||
for(i = [0: ways - 1])
|
||||
translate([0, i * pitch - width / 2 + pitch / 2])
|
||||
|
@@ -69,7 +69,7 @@ module hygrometer() { //! Draw a hygrometer
|
||||
cylinder(d = apperture_d, h = eps);
|
||||
|
||||
color("black")
|
||||
linear_extrude(height = 0.2, center = true) {
|
||||
linear_extrude(0.2, center = true) {
|
||||
translate([0, 3])
|
||||
text("20_4", font = "7 segment", valign = "bottom", halign = "center", size = apperture_d / 6);
|
||||
|
||||
|
@@ -137,7 +137,7 @@ module iec(type) { //! Draw specified IEC connector
|
||||
color(grey20) {
|
||||
// Flange
|
||||
flange_t = iec_flange_t(type);
|
||||
linear_extrude(height = flange_t)
|
||||
linear_extrude(flange_t)
|
||||
difference() {
|
||||
hull() {
|
||||
rounded_square([iec_flange_w(type), iec_flange_h(type)], iec_flange_r(type));
|
||||
@@ -164,7 +164,7 @@ module iec(type) { //! Draw specified IEC connector
|
||||
}
|
||||
// Bezel
|
||||
translate_z(iec_flange_t(type))
|
||||
linear_extrude(height = iec_bezel_t(type))
|
||||
linear_extrude(iec_bezel_t(type))
|
||||
difference() {
|
||||
rounded_square([iec_bezel_w(type), iec_bezel_h(type)], iec_bezel_r(type));
|
||||
|
||||
@@ -174,7 +174,7 @@ module iec(type) { //! Draw specified IEC connector
|
||||
// Body
|
||||
h = socket_d - iec_flange_t(type) - iec_bezel_t(type);
|
||||
translate_z(-h)
|
||||
linear_extrude(height = h)
|
||||
linear_extrude(h)
|
||||
difference() {
|
||||
body_shape();
|
||||
|
||||
@@ -182,7 +182,7 @@ module iec(type) { //! Draw specified IEC connector
|
||||
}
|
||||
// Back
|
||||
translate_z(-iec_depth(type))
|
||||
linear_extrude(height = iec_depth(type) - h)
|
||||
linear_extrude(iec_depth(type) - h)
|
||||
body_shape();
|
||||
}
|
||||
if(!iec_male(type))
|
||||
|
@@ -108,10 +108,10 @@ module insert_boss(type, z, wall = 2 * extrusion_width) { //! Make a boss to tak
|
||||
hull()
|
||||
poly_ring(or, ir);
|
||||
|
||||
linear_extrude(height = z)
|
||||
linear_extrude(z)
|
||||
poly_ring(or, ir);
|
||||
|
||||
linear_extrude(height = z - insert_hole_length(type))
|
||||
linear_extrude(z - insert_hole_length(type))
|
||||
difference() {
|
||||
shape();
|
||||
|
||||
@@ -119,7 +119,7 @@ module insert_boss(type, z, wall = 2 * extrusion_width) { //! Make a boss to tak
|
||||
}
|
||||
|
||||
if(z > insert_hole_length(type) + 2 * layer_height)
|
||||
linear_extrude(height = 2 * layer_height) // cap the end if room
|
||||
linear_extrude(2 * layer_height) // cap the end if room
|
||||
shape();
|
||||
}
|
||||
|
||||
@@ -143,7 +143,7 @@ module insert_lug(insert, wall, counter_bore = 0, extension = 0, corner_r = 0, f
|
||||
}
|
||||
|
||||
translate_z(-boss_h)
|
||||
linear_extrude(height = boss_h)
|
||||
linear_extrude(boss_h)
|
||||
difference() {
|
||||
shape();
|
||||
|
||||
@@ -152,7 +152,7 @@ module insert_lug(insert, wall, counter_bore = 0, extension = 0, corner_r = 0, f
|
||||
|
||||
// insert boss counter_bore
|
||||
translate_z(-boss_h2) {
|
||||
linear_extrude(height = counter_bore + eps)
|
||||
linear_extrude(counter_bore + eps)
|
||||
difference() {
|
||||
shape();
|
||||
|
||||
@@ -162,7 +162,7 @@ module insert_lug(insert, wall, counter_bore = 0, extension = 0, corner_r = 0, f
|
||||
// support cone
|
||||
if(flying)
|
||||
hull() {
|
||||
linear_extrude(height = eps)
|
||||
linear_extrude(eps)
|
||||
shape();
|
||||
|
||||
translate([boss_r + extension - wall - eps, 0, - (2 * boss_r + extension - wall)])
|
||||
|
@@ -206,7 +206,7 @@ module post_4mm(colour, thickness, display_colour = false) { //! Draw a 4mm bind
|
||||
nut_t = 2.3;
|
||||
|
||||
color(silver)
|
||||
linear_extrude(height = nut_t) difference() {
|
||||
linear_extrude(nut_t) difference() {
|
||||
circle(d = 6.3 / cos(30), $fn = 6);
|
||||
|
||||
circle(d = thread_d);
|
||||
@@ -229,7 +229,7 @@ module post_4mm(colour, thickness, display_colour = false) { //! Draw a 4mm bind
|
||||
cylinder(d = d, h = base_h);
|
||||
|
||||
translate_z(-collar_t)
|
||||
linear_extrude(height = base_h) {
|
||||
linear_extrude(base_h) {
|
||||
circle(post_4mm_hole_radius - 0.1);
|
||||
|
||||
spigot();
|
||||
@@ -284,7 +284,7 @@ module post_4mm(colour, thickness, display_colour = false) { //! Draw a 4mm bind
|
||||
explode(-15)
|
||||
color(actual_colour) {
|
||||
translate_z(-thickness - base_h) {
|
||||
linear_extrude(height = base_h)
|
||||
linear_extrude(base_h)
|
||||
difference() {
|
||||
circle(d = d);
|
||||
|
||||
|
@@ -52,7 +52,7 @@ module heater_block(type, resistor, thermistor) {
|
||||
color(brass) {
|
||||
render() difference() {
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(height = heater_width(type), center = true) difference() {
|
||||
linear_extrude(heater_width(type), center = true) difference() {
|
||||
square([heater_length(type), h], center = true);
|
||||
|
||||
translate([resistor_x(type), 0])
|
||||
|
@@ -25,7 +25,7 @@ use <../utils/tube.scad>
|
||||
use <washer.scad>
|
||||
use <ball_bearing.scad>
|
||||
|
||||
kp_pillow_block_color = grey70;
|
||||
kp_pillow_block_colour = grey70;
|
||||
|
||||
function kp_diameter(type) = type[1]; //! Rod hole diameter
|
||||
function kp_hole_offset(type) = type[2]; //! Rod hole offset
|
||||
@@ -50,7 +50,7 @@ module kp_pillow_block(type) { //! Draw the KP pillow block
|
||||
b = type[11];
|
||||
bolthole_radius = type[12];
|
||||
|
||||
color(kp_pillow_block_color)
|
||||
color(kp_pillow_block_colour)
|
||||
translate([0, -H, 0]) {
|
||||
fillet = 1;
|
||||
squareSizeX = (L - H0) / 2 + fillet;
|
||||
|
@@ -71,17 +71,17 @@ module LDR(type, lead_length = 3) { //! Draw an LDR, can specify the lead length
|
||||
t = ldr_thickness(type);
|
||||
|
||||
color("white")
|
||||
linear_extrude(height = t - 0.4)
|
||||
linear_extrude(t - 0.4)
|
||||
shape();
|
||||
|
||||
color("orange")
|
||||
translate_z(t - 0.4)
|
||||
linear_extrude(height = 0.1)
|
||||
linear_extrude(0.1)
|
||||
shape();
|
||||
|
||||
color([0.9, 0.9, 0.9])
|
||||
translate_z(t - 0.3)
|
||||
linear_extrude(height = 0.1)
|
||||
linear_extrude(0.1)
|
||||
difference() {
|
||||
offset(-serpentine_t())
|
||||
shape();
|
||||
@@ -100,6 +100,6 @@ module LDR(type, lead_length = 3) { //! Draw an LDR, can specify the lead length
|
||||
}
|
||||
color([1, 1, 1, 0.25])
|
||||
translate_z(t - 0.3 + eps)
|
||||
linear_extrude(height = 0.3)
|
||||
linear_extrude(0.3)
|
||||
shape();
|
||||
}
|
||||
|
@@ -64,7 +64,7 @@ module leadnut(type) { //! Draw specified leadnut
|
||||
thread(bore_d, lead, h, thread_profile(pitch / 2, pitch * 0.366, 30), false, starts = lead / pitch, female = true, solid = false);
|
||||
|
||||
translate_z(leadnut_flange_offset(type))
|
||||
linear_extrude(height = leadnut_flange_t(type))
|
||||
linear_extrude(leadnut_flange_t(type))
|
||||
difference() {
|
||||
circle(d = leadnut_flange_dia(type));
|
||||
|
||||
|
@@ -40,7 +40,7 @@ module led(type, colour = "red", lead = 5) { //! Draw specified LED with desired
|
||||
rotate_extrude()
|
||||
rounded_corner(r = d / 2, h = led_height(type), r2 = d / 2);
|
||||
|
||||
linear_extrude(height = led_rim_t(type))
|
||||
linear_extrude(led_rim_t(type))
|
||||
difference() {
|
||||
circle(d = led_rim_dia(type));
|
||||
|
||||
|
@@ -85,7 +85,7 @@ module light_strip(type, segs = undef) { //! Draw specified light strip, segs ca
|
||||
|
||||
color("silver")
|
||||
rotate([90, 0, 90])
|
||||
linear_extrude(height = l, center = true)
|
||||
linear_extrude(l, center = true)
|
||||
polygon([
|
||||
[ x1, 0], [ x1, d], [ x2, d], [ x3, y5], [ x3, y4], [ x2, y4],
|
||||
[ x2, y3], [ x3, y3], [ x3, y2], [ x2, y2], [ x2, y1],
|
||||
@@ -99,42 +99,42 @@ module light_strip(type, segs = undef) { //! Draw specified light strip, segs ca
|
||||
|
||||
translate_z(y4) {
|
||||
color("white")
|
||||
linear_extrude(height = 1.6)
|
||||
linear_extrude(1.6)
|
||||
led_positions()
|
||||
square([5, 5], center = true);
|
||||
|
||||
color("yellow")
|
||||
linear_extrude(height = 1.6 + eps)
|
||||
linear_extrude(1.6 + eps)
|
||||
led_positions()
|
||||
circle(d = 3.5);
|
||||
|
||||
color("silver")
|
||||
linear_extrude(height = 0.8)
|
||||
linear_extrude(0.8)
|
||||
led_positions()
|
||||
for(side = [-1,1], end = [-1:1])
|
||||
translate([side * 2.2, end * 1.6])
|
||||
square([1, 0.9], center = true);
|
||||
|
||||
color("black")
|
||||
linear_extrude(height = 0.1)
|
||||
linear_extrude(0.1)
|
||||
segment_positions(segments - 1)
|
||||
translate([segment_length, 0])
|
||||
square([0.2, a], center = true);
|
||||
|
||||
color("silver")
|
||||
linear_extrude(height = 0.15)
|
||||
linear_extrude(0.15)
|
||||
segment_positions()
|
||||
for(end = [-1, 1], side = [-1, 1])
|
||||
translate([end * (segment_length / 2 - 1.25) + segment_length / 2, side * 2.5])
|
||||
square(2.5, center = true);
|
||||
|
||||
color("silver")
|
||||
linear_extrude(height = 0.55)
|
||||
linear_extrude(0.55)
|
||||
resistor_positions()
|
||||
square([3.2, 1.5], center = true);
|
||||
|
||||
color("black")
|
||||
linear_extrude(height = 0.55 + eps)
|
||||
linear_extrude(0.55 + eps)
|
||||
resistor_positions()
|
||||
square([2.1, 1.5 + 2 * eps], center = true);
|
||||
|
||||
@@ -152,7 +152,7 @@ function light_strip_clip_length(light) = light_strip_clip_slot(light) + 2 * wal
|
||||
function light_strip_clip_width(light) = light_strip_depth(light) + 2 * wall; //! Outside width
|
||||
|
||||
module light_strip_clip(light) { //! Make a clip to go over the strip to be incorporated into a bracket
|
||||
linear_extrude(height = light_strip_clip_depth(light), convexity = 2)
|
||||
linear_extrude(light_strip_clip_depth(light), convexity = 2)
|
||||
difference() {
|
||||
translate([-light_strip_clip_length(light) / 2, -wall])
|
||||
square([light_strip_clip_length(light), light_strip_clip_width(light)]);
|
||||
|