1
0
mirror of https://github.com/nophead/NopSCADlib.git synced 2025-09-03 12:22:46 +02:00

Compare commits

...

18 Commits

Author SHA1 Message Date
Chris Palmer
f5980b4703 Made the ground surfaces of steppers lighter. 2020-04-02 19:54:30 +01:00
Chris Palmer
7b3d7fab55 Fixed some more colour spellings 2020-03-29 21:36:11 +01:00
Chris Palmer
654571a70e Colour now always spelt colour except the call to color(). 2020-03-29 20:39:17 +01:00
Chris Palmer
e8abcde52f Removed the height parameter from linear_extrude 2020-03-29 20:18:57 +01:00
Chris Palmer
390957fdd0 Added MT3608 and TP4065 PCBs.
Perfboards now have their own row in the test to shorten the picture.
2020-03-28 10:54:06 +00:00
Chris Palmer
bde8cbe7a6 Added cutout for trimpot10. 2020-03-28 10:51:43 +00:00
Chris Palmer
fbe8533a42 Added function to get the height of pcb carriers. 2020-03-27 17:30:35 +00:00
Chris Palmer
a9c2f854c6 Can now have rectangular lands on PCB holes. 2020-03-27 17:29:50 +00:00
Chris Palmer
6187d90c57 Added 10 turn trimpots 2020-03-27 17:28:20 +00:00
Chris Palmer
65f320141d Added printed carriers for MT3608 and TP4056 modules. 2020-03-26 22:33:05 +00:00
Chris Palmer
d367e743da Image churn due to change of computer. 2020-03-24 17:30:10 +00:00
Chris Palmer
3a4305f5ca Nuts can now have non-standard pitch, toggle switch nut pitch fixed. 2020-03-24 17:29:29 +00:00
Chris Palmer
a7dde2d4e2 Fixed short thread bug although threads should not be that short. 2020-03-24 17:28:10 +00:00
Chris Palmer
56390bf8dd Updated big picture 2020-03-24 17:27:33 +00:00
Chris Palmer
53f0bbcd6e Fixed long SCS_bearing blocks to use two short bearings and added circlips. 2020-03-24 17:24:08 +00:00
Chris Palmer
f2ec3e71f4 Added circlips. 2020-03-24 17:22:32 +00:00
Chris Palmer
c1b5bd1b87 Added seal lip to linear_bearings. 2020-03-24 17:20:59 +00:00
Chris Palmer
268c066965 Added documentation for platters and panels in usage.md. 2020-03-15 21:11:15 +00:00
117 changed files with 858 additions and 429 deletions

View File

@@ -234,6 +234,19 @@ In OpenCSG 3D difference and intersection are relatively slow and the negative v
as possible is done by unioning primitives and extruded 2D shapes. Any 3D differences or intersections are wrapped in ```render()``` so that CGAL will compute a polyhedron
that is cached and reused. This will be very slow the first time it renders but very fast afterwards.
### Panels and Platters
The ```stls``` and ```dxfs``` scripts produce a file for each part but often it is desirable to print or route collections of parts laid out together.
This can be done by adding scad files to folders called ```platters``` for STL files and ```panels``` for DXF files.
These can aggregate and lay out parts by including ```NopSCADlib/core.scad``` and using modules ```use_stl(name)``` and ```use_dxf(name)```.
These modules import the already generated singular STL and DXF files, so they are relatively fast. The name does not include the suffix.
The scad files typically also need to include other files from the project to get the dimensions of the parts to calculate their positions.
The composite part files have the same name as the scad file that generates them, with the suffix changed to ```.stl``` or ```.dxf```.
The generated files are placed in ```stls/printed``` and ```dxfs/routed```.
Any parts that are not covered by the platters / panels are copied into the ```printed``` / ```routed``` directories, so that they contain everything to be made.
### Multiple configurations
Some parametric designs might have several configurations, for example a 3D printer with different size options. If several configurations need to be supported at the

View File

@@ -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];

Binary file not shown.

Before

Width:  |  Height:  |  Size: 786 KiB

After

Width:  |  Height:  |  Size: 775 KiB

View File

@@ -29,6 +29,7 @@ use <tests/blowers.scad>
use <tests/bulldogs.scad>
use <tests/buttons.scad>
use <tests/cable_strips.scad>
use <tests/circlips.scad>
use <tests/components.scad>
use <tests/d_connectors.scad>
use <tests/displays.scad>
@@ -147,11 +148,10 @@ translate([x5, cable_grommets_y + 250])
translate([950, 600])
box_test();
translate([890, 730])
translate([890, 750])
printed_boxes();
translate([850, 1300])
translate([850, 1330])
bbox_test();
@@ -159,8 +159,9 @@ inserts_y = 0;
nuts_y = inserts_y + 20;
washers_y = nuts_y + 120;
screws_y = washers_y + 120;
o_rings_y = screws_y + 130;
springs_y = o_rings_y + 20;
circlips_y = screws_y + 160;
springs_y = circlips_y + 20;
o_rings_y = springs_y;
sealing_strip_y = springs_y + 20;
tubings_y = sealing_strip_y + 20;
pillars_y = tubings_y + 20;
@@ -170,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;
@@ -190,10 +191,13 @@ translate([x0, washers_y])
translate([x0, screws_y])
screws();
translate([x0, circlips_y])
circlips();
translate([x0, o_rings_y])
o_rings();
translate([x0, springs_y])
translate([x0 + 20, springs_y])
springs();
translate([x0 + 50, sealing_strip_y])
@@ -208,7 +212,7 @@ translate([x0, pillars_y])
translate([x0, leadnuts_y ])
leadnuts();
translate([x0 + 80, leadnuts_y])
translate([x0 + 60, leadnuts_y])
ball_bearings();
translate([x0, pulleys_y])
@@ -376,7 +380,7 @@ translate([x4 + 150, belts_y + 58]) {
translate([x4, rails_y + 130])
rails();
translate([900, fans_y + 50])
translate([800, fans_y + 50])
cable_strips();
translate([x4, kp_pillow_blocks_y])

View File

@@ -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;

View File

@@ -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);
@@ -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);

View File

@@ -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);
}
}
}

View File

@@ -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])

View File

@@ -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]) {

View File

@@ -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)

View File

@@ -56,7 +56,7 @@ module foot(type = foot) { //! Generate STL
circle4n(r);
}
}
linear_extrude(height = t)
linear_extrude(t)
difference() {
circle(r1 + eps);
@@ -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);

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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)]]);

View File

@@ -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])

View File

@@ -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);

View File

@@ -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)

155
readme.md
View File

@@ -25,21 +25,21 @@ See [usage](docs/usage.md) for requirements, installation instructions and a usa
<tr><td> <a href = "#Bulldogs">Bulldogs</a> </td><td> <a href = "#Light_strips">Light_strips</a> </td><td> <a href = "#SCS_bearing_blocks">SCS_bearing_blocks</a> </td><td> <a href = "#Corner_block">Corner_block</a> </td><td> <a href = "#Hanging_hole">Hanging_hole</a> </td><td> <a href = "#Rounded_rectangle">Rounded_rectangle</a> </td></tr>
<tr><td> <a href = "#Buttons">Buttons</a> </td><td> <a href = "#Linear_bearings">Linear_bearings</a> </td><td> <a href = "#SK_brackets">SK_brackets</a> </td><td> <a href = "#Door_hinge">Door_hinge</a> </td><td> <a href = "#Layout">Layout</a> </td><td> <a href = "#Sphere">Sphere</a> </td></tr>
<tr><td> <a href = "#Cable_strips">Cable_strips</a> </td><td> <a href = "#Mains_sockets">Mains_sockets</a> </td><td> <a href = "#SSRs">SSRs</a> </td><td> <a href = "#Door_latch">Door_latch</a> </td><td> <a href = "#Maths">Maths</a> </td><td> <a href = "#Teardrops">Teardrops</a> </td></tr>
<tr><td> <a href = "#Components">Components</a> </td><td> <a href = "#Meter">Meter</a> </td><td> <a href = "#Screws">Screws</a> </td><td> <a href = "#Fan_guard">Fan_guard</a> </td><td> <a href = "#Offset">Offset</a> </td><td></td></tr>
<tr><td> <a href = "#D_connectors">D_connectors</a> </td><td> <a href = "#Microswitches">Microswitches</a> </td><td> <a href = "#Sealing_strip">Sealing_strip</a> </td><td> <a href = "#Fixing_block">Fixing_block</a> </td><td> <a href = "#Quadrant">Quadrant</a> </td><td></td></tr>
<tr><td> <a href = "#Displays">Displays</a> </td><td> <a href = "#Microview">Microview</a> </td><td> <a href = "#Sheets">Sheets</a> </td><td> <a href = "#Flat_hinge">Flat_hinge</a> </td><td> <a href = "#Round">Round</a> </td><td></td></tr>
<tr><td> <a href = "#Extrusion_brackets">Extrusion_brackets</a> </td><td> <a href = "#Modules">Modules</a> </td><td> <a href = "#Spades">Spades</a> </td><td> <a href = "#Foot">Foot</a> </td><td> <a href = "#Rounded_cylinder">Rounded_cylinder</a> </td><td></td></tr>
<tr><td> <a href = "#Extrusions">Extrusions</a> </td><td> <a href = "#Nuts">Nuts</a> </td><td> <a href = "#Spools">Spools</a> </td><td> <a href = "#Handle">Handle</a> </td><td> <a href = "#Rounded_polygon">Rounded_polygon</a> </td><td></td></tr>
<tr><td> <a href = "#Fans">Fans</a> </td><td> <a href = "#O_ring">O_ring</a> </td><td> <a href = "#Springs">Springs</a> </td><td> <a href = "#PCB_mount">PCB_mount</a> </td><td> <a href = "#Sector">Sector</a> </td><td></td></tr>
<tr><td> <a href = "#Fuseholder">Fuseholder</a> </td><td> <a href = "#Opengrab">Opengrab</a> </td><td> <a href = "#Stepper_motors">Stepper_motors</a> </td><td> <a href = "#PSU_shroud">PSU_shroud</a> </td><td> <a href = "#Sweep">Sweep</a> </td><td></td></tr>
<tr><td> <a href = "#Geared_steppers">Geared_steppers</a> </td><td> <a href = "#PCB">PCB</a> </td><td> <a href = "#Toggles">Toggles</a> </td><td> <a href = "#Printed_box">Printed_box</a> </td><td> <a href = "#Thread">Thread</a> </td><td></td></tr>
<tr><td> <a href = "#Green_terminals">Green_terminals</a> </td><td> <a href = "#PCBs">PCBs</a> </td><td> <a href = "#Transformers">Transformers</a> </td><td> <a href = "#Ribbon_clamp">Ribbon_clamp</a> </td><td> <a href = "#Tube">Tube</a> </td><td></td></tr>
<tr><td> <a href = "#Hot_ends">Hot_ends</a> </td><td> <a href = "#PSUs">PSUs</a> </td><td> <a href = "#Tubings">Tubings</a> </td><td> <a href = "#SSR_shroud">SSR_shroud</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#Hygrometer">Hygrometer</a> </td><td> <a href = "#Pillars">Pillars</a> </td><td> <a href = "#Variacs">Variacs</a> </td><td> <a href = "#Screw_knob">Screw_knob</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#IECs">IECs</a> </td><td> <a href = "#Pin_headers">Pin_headers</a> </td><td> <a href = "#Veroboard">Veroboard</a> </td><td> <a href = "#Socket_box">Socket_box</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#Inserts">Inserts</a> </td><td> <a href = "#Pulleys">Pulleys</a> </td><td> <a href = "#Washers">Washers</a> </td><td> <a href = "#Strap_handle">Strap_handle</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#Jack">Jack</a> </td><td></td><td> <a href = "#Wire">Wire</a> </td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td> <a href = "#Zipties">Zipties</a> </td><td></td><td></td><td></td></tr>
<tr><td> <a href = "#Circlips">Circlips</a> </td><td> <a href = "#Meter">Meter</a> </td><td> <a href = "#Screws">Screws</a> </td><td> <a href = "#Fan_guard">Fan_guard</a> </td><td> <a href = "#Offset">Offset</a> </td><td></td></tr>
<tr><td> <a href = "#Components">Components</a> </td><td> <a href = "#Microswitches">Microswitches</a> </td><td> <a href = "#Sealing_strip">Sealing_strip</a> </td><td> <a href = "#Fixing_block">Fixing_block</a> </td><td> <a href = "#Quadrant">Quadrant</a> </td><td></td></tr>
<tr><td> <a href = "#D_connectors">D_connectors</a> </td><td> <a href = "#Microview">Microview</a> </td><td> <a href = "#Sheets">Sheets</a> </td><td> <a href = "#Flat_hinge">Flat_hinge</a> </td><td> <a href = "#Round">Round</a> </td><td></td></tr>
<tr><td> <a href = "#Displays">Displays</a> </td><td> <a href = "#Modules">Modules</a> </td><td> <a href = "#Spades">Spades</a> </td><td> <a href = "#Foot">Foot</a> </td><td> <a href = "#Rounded_cylinder">Rounded_cylinder</a> </td><td></td></tr>
<tr><td> <a href = "#Extrusion_brackets">Extrusion_brackets</a> </td><td> <a href = "#Nuts">Nuts</a> </td><td> <a href = "#Spools">Spools</a> </td><td> <a href = "#Handle">Handle</a> </td><td> <a href = "#Rounded_polygon">Rounded_polygon</a> </td><td></td></tr>
<tr><td> <a href = "#Extrusions">Extrusions</a> </td><td> <a href = "#O_ring">O_ring</a> </td><td> <a href = "#Springs">Springs</a> </td><td> <a href = "#PCB_mount">PCB_mount</a> </td><td> <a href = "#Sector">Sector</a> </td><td></td></tr>
<tr><td> <a href = "#Fans">Fans</a> </td><td> <a href = "#Opengrab">Opengrab</a> </td><td> <a href = "#Stepper_motors">Stepper_motors</a> </td><td> <a href = "#PSU_shroud">PSU_shroud</a> </td><td> <a href = "#Sweep">Sweep</a> </td><td></td></tr>
<tr><td> <a href = "#Fuseholder">Fuseholder</a> </td><td> <a href = "#PCB">PCB</a> </td><td> <a href = "#Toggles">Toggles</a> </td><td> <a href = "#Printed_box">Printed_box</a> </td><td> <a href = "#Thread">Thread</a> </td><td></td></tr>
<tr><td> <a href = "#Geared_steppers">Geared_steppers</a> </td><td> <a href = "#PCBs">PCBs</a> </td><td> <a href = "#Transformers">Transformers</a> </td><td> <a href = "#Ribbon_clamp">Ribbon_clamp</a> </td><td> <a href = "#Tube">Tube</a> </td><td></td></tr>
<tr><td> <a href = "#Green_terminals">Green_terminals</a> </td><td> <a href = "#PSUs">PSUs</a> </td><td> <a href = "#Tubings">Tubings</a> </td><td> <a href = "#SSR_shroud">SSR_shroud</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#Hot_ends">Hot_ends</a> </td><td> <a href = "#Pillars">Pillars</a> </td><td> <a href = "#Variacs">Variacs</a> </td><td> <a href = "#Screw_knob">Screw_knob</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#Hygrometer">Hygrometer</a> </td><td> <a href = "#Pin_headers">Pin_headers</a> </td><td> <a href = "#Veroboard">Veroboard</a> </td><td> <a href = "#Socket_box">Socket_box</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#IECs">IECs</a> </td><td> <a href = "#Pulleys">Pulleys</a> </td><td> <a href = "#Washers">Washers</a> </td><td> <a href = "#Strap_handle">Strap_handle</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#Inserts">Inserts</a> </td><td></td><td> <a href = "#Wire">Wire</a> </td><td></td><td></td><td></td></tr>
<tr><td> <a href = "#Jack">Jack</a> </td><td></td><td> <a href = "#Zipties">Zipties</a> </td><td></td><td></td><td></td></tr>
</table>
---
@@ -385,6 +385,48 @@ When the sides are constrained then a circular model is more accurate.
| 3 | ```cable_strip(20, 25, 100, 30)``` | Polypropylene strip 189mm x 24mm x 0.8mm |
<a href="#top">Top</a>
---
<a name="Circlips"></a>
## Circlips
Circlips aka tapered retaining rings.
[vitamins/circlips.scad](vitamins/circlips.scad) Object definitions.
[vitamins/circlip.scad](vitamins/circlip.scad) Implementation.
[tests/circlips.scad](tests/circlips.scad) Code for this example.
### Properties
| Function | Description |
|:--- |:--- |
| ```circlip_a(type)``` | Size of the lugs |
| ```circlip_b(type)``` | Widest part of the taper |
| ```circlip_d1(type)``` | Nominal OD, i.e. diameter of tube |
| ```circlip_d2(type)``` | Groove diameter, i.e. OD when installed |
| ```circlip_d3(type)``` | Relaxed OD when not installed |
| ```circlip_d5(type)``` | Plier hole diameter |
| ```circlip_thickness(type)``` | Thickness |
### Modules
| Module | Description |
|:--- |:--- |
| ```internal_circlip(type, open = 0)``` | Draw specified internal circlip, open = 0, for nominal size installed, 1 for relaxed uninstalled, -1 for squeezed to install |
![circlips](tests/png/circlips.png)
### Vitamins
| Qty | Module call | BOM entry |
| ---:|:--- |:---|
| 3 | ```circlip(circlip_12i)``` | Circlip internal 12mm |
| 3 | ```circlip(circlip_15i)``` | Circlip internal 15mm |
| 3 | ```circlip(circlip_19i)``` | Circlip internal 19mm |
| 3 | ```circlip(circlip_21i)``` | Circlip internal 21mm |
| 3 | ```circlip(circlip_28i)``` | Circlip internal 28mm |
<a href="#top">Top</a>
---
@@ -1687,6 +1729,7 @@ If a nut is given a child then it gets placed on its top surface.
### Properties
| Function | Description |
|:--- |:--- |
| ```nut_pitch(type)``` | Pitch if not standard metric course thread |
| ```nut_radius(type)``` | Radius across the corners |
| ```nut_size(type)``` | Diameter of the corresponding screw |
| ```nut_square_size(type)``` | Diameter of the corresponding screw |
@@ -1862,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 |
@@ -1880,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 |
@@ -1946,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 |
@@ -1964,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 |
@@ -1986,6 +2033,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 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 |
@@ -2005,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 |
@@ -2026,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>
@@ -2334,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 |
@@ -2616,10 +2669,12 @@ SCSnUU and SCSnLUU bearing blocks
| ```scs_bearing(type)``` | Linear bearing used |
| ```scs_block_center_height(type)``` | Height of the center of the block |
| ```scs_block_side_height(type)``` | Height of the side of the block, this determines the minimum screw length |
| ```scs_circlip(type)``` | Circlip used |
| ```scs_hole_offset(type)``` | Offset of bearing hole from base of block |
| ```scs_screw(type)``` | Screw type |
| ```scs_screw_separation_x(type)``` | Screw separation in X direction |
| ```scs_screw_separation_z(type)``` | Screw separation in Z direction |
| ```scs_spacer(type)``` | Spacer used in long bearings |
### Functions
| Function | Description |
@@ -2694,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.
@@ -2716,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 |
@@ -3437,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 |
![wire](tests/png/wire.png)
@@ -3744,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 |
![carriers](tests/png/carriers.png)
@@ -3762,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>
@@ -4845,6 +4909,7 @@ Maths utilities for manipulating vectors and matrices.
| ```euler(R)``` | Convert a rotation matrix to a Euler rotation vector. |
| ```identity(n, x = 1)``` | Construct an arbitrary size identity matrix |
| ```reverse(v)``` | Reverse a vector |
| ```rot3_z(a)``` | Generate a 3x3 matrix to rotate around z |
| ```rotate(a, v)``` | Generate a 4x4 rotation matrix, ```a``` can be a vector of three angles or a single angle around ```z```, or around axis ```v``` |
| ```scale(v)``` | Generate a 4x4 matrix that scales by ```v```, which can be a vector of xyz factors or a scalar to scale all axes equally |
| ```transform(v, m)``` | Apply 4x4 transform to a 3 vector by extending it and cropping it again |

View File

@@ -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
[]

View File

@@ -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();

View File

@@ -19,7 +19,16 @@
include <../utils/core/core.scad>
use <../printed/carriers.scad>
module carriers()
module carriers() {
color(pp1_colour) ESP12F_carrier_stl();
translate([0, 15])
rotate(90)
color(pp1_colour) TP4056_carrier_stl();
translate([0, 25])
rotate(90)
color(pp1_colour) MT3608_carrier_stl();
}
carriers();

40
tests/circlips.scad Normal file
View File

@@ -0,0 +1,40 @@
//
// NopSCADlib Copyright Chris Palmer 2020
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// This file is part of NopSCADlib.
//
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
// GNU General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../core.scad>
use <../utils/layout.scad>
include <../vitamins/circlips.scad>
module circlips(all = false)
layout([for(c = circlips) circlip_d3(c)], 10, false) let(c = circlips[$i]) {
gap = circlip_d3(c) + 2;
internal_circlip(c, 1);
if(all) {
translate([0, gap])
internal_circlip(c, 0);
translate([0, 2 * gap])
internal_circlip(c, -1);
}
}
if($preview)
circlips(true);

View File

@@ -26,14 +26,13 @@ module resistors()
resistor(resistors[$i]);
module al_clad_resistors()
layout([for(a = al_clad_resistors) al_clad_width(a)])
layout([for(a = al_clad_resistors) al_clad_width(a)], 5, true)
rotate(90)
al_clad_resistor_assembly(al_clad_resistors[$i], 4.7)
screw(al_clad_hole(al_clad_resistors[$i]) > 3 ? M3_pan_screw : M2p5_pan_screw, 16);
module thermal_cutouts()
layout([for(t = thermal_cutouts) tc_length(t)])
layout([for(t = thermal_cutouts) tc_length(t)], 5, true)
thermal_cutout(thermal_cutouts[$i]);
module components() {
@@ -42,7 +41,7 @@ module components() {
translate([0, 50])
TO220("Generic TO220 package");
translate([30, 50])
translate([50, 50])
panel_USBA();
translate([0,80])

View File

@@ -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])

View File

@@ -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])

View File

@@ -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]);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 54 KiB

BIN
tests/png/circlips.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

After

Width:  |  Height:  |  Size: 111 KiB

View File

@@ -34,7 +34,7 @@ module polyholes() {
children();
}
color(pp1_colour) linear_extrude(height = 3, center = true)
color(pp1_colour) linear_extrude(3, center = true)
difference() {
square([100, 27]);

View File

@@ -22,7 +22,7 @@ use <../utils/quadrant.scad>
module quadrants() {
linear_extrude(height = eps)
linear_extrude(eps)
quadrant(10, 4);
}

View File

@@ -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();
}

View File

@@ -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])

View File

@@ -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])

View File

@@ -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])

View File

@@ -22,7 +22,7 @@ use <../utils/sector.scad>
module sectors() {
linear_extrude(height = eps)
linear_extrude(eps)
sector(50, 45, 180);
}

View File

@@ -23,7 +23,7 @@ module teardrops() {
color(pp1_colour)
rotate([90, 0, -45])
difference() {
linear_extrude(height = 3) {
linear_extrude(3) {
difference() {
square([80, 40]);

View File

@@ -22,7 +22,7 @@ use <../utils/tube.scad>
module tubes() {
linear_extrude(height = eps)
linear_extrude(eps)
ring(10, 8);
translate([50, 10])

View File

@@ -56,7 +56,7 @@ module wires() {
color(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]);

View File

@@ -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);

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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)

View File

@@ -56,6 +56,13 @@ function rotate(a, v) = //! Generate a 4x4 rotation matrix, ```a``` can be a vec
[ 0, 0, 0, 1]
];
function rot3_z(a) = //! Generate a 3x3 matrix to rotate around z
let(c = cos(a),
s = sin(a))
[ [ c, -s, 0],
[ s, c, 0],
[ 0, 0, 1] ];
function scale(v) = let(s = is_list(v) ? v : [v, v, v]) //! Generate a 4x4 matrix that scales by ```v```, which can be a vector of xyz factors or a scalar to scale all axes equally
[
[s.x, 0, 0, 0],

View File

@@ -79,7 +79,7 @@ module thread(dia, pitch, length, profile, center = true, top = -1, bot = -1, st
sides = r2sides4n(r);
step_angle = 360 / sides;
segs = ceil(turns * sides);
leadin = ceil(sides / starts);
leadin = min(ceil(sides / starts), floor(turns * sides / 2));
final = floor(turns * sides) - leadin;
path = [for(i = [0 : segs],
R = i < leadin && bot < 0 ? r + dir * (h - h * i / leadin)

View File

@@ -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);

View File

@@ -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);

View File

@@ -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])

View File

@@ -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();

View File

@@ -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();

View File

@@ -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);

90
vitamins/circlip.scad Normal file
View File

@@ -0,0 +1,90 @@
//
// NopSCADlib Copyright Chris Palmer 2020
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// This file is part of NopSCADlib.
//
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
// GNU General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
//
//! Circlips aka tapered retaining rings.
//
include <../utils/core/core.scad>
include <../utils/sector.scad>
include <../utils/round.scad>
include <../utils/maths.scad>
function circlip_d1(type) = type[1]; //! Nominal OD, i.e. diameter of tube
function circlip_d2(type) = type[2]; //! Groove diameter, i.e. OD when installed
function circlip_d3(type) = type[3]; //! Relaxed OD when not installed
function circlip_thickness(type) = type[4]; //! Thickness
function circlip_a(type) = type[5]; //! Size of the lugs
function circlip_b(type) = type[6]; //! Widest part of the taper
function circlip_d5(type) = type[7]; //! Plier hole diameter
circlip_colour = grey20;
closed_angle = 25;
module internal_circlip(type, open = 0) { //! Draw specified internal circlip, open = 0, for nominal size installed, 1 for relaxed uninstalled, -1 for squeezed to install
d1 = circlip_d1(type);
vitamin(str("circlip(", type[0], "): Circlip internal ", d1, "mm"));
d3 = circlip_d3(type);
d2 = circlip_d2(type);
a = circlip_a(type);
b = circlip_b(type);
d5 = circlip_d5(type);
od = lookup(open, [[-1, d1], [0, d2], [1, d3]]);
or = od / 2;
c = (d3 - d1);
angle = (od - d1) / d1 * 360 + closed_angle;
tab_angle = 360 * a / PI / od;
p = [0, -or + b / 2, 1] * rot3_z(angle / 2 + tab_angle);
pitch = (or - a / 2);
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(circlip_thickness(type), center = true)
round((a - d5) / 5)
union() {
difference() {
circle(or);
translate([0, -y_offset])
circle(ir);
sector(d3 / 2 + 1, 270 - angle / 2 - tab_angle, 270 + angle / 2 + tab_angle);
}
for(side = [-1, 1])
intersection() {
circle(or);
rotate(side * (angle + tab_angle) / 2)
difference() {
hull() {
translate([0, -pitch])
circle(d = a);
translate([0, -pitch - a])
circle(d = 1.5 * a);
}
translate([0, -pitch])
circle(d = d5);
}
}
}
}

28
vitamins/circlips.scad Normal file
View File

@@ -0,0 +1,28 @@
//
// NopSCADlib Copyright Chris Palmer 2020
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// This file is part of NopSCADlib.
//
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
// GNU General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
// d1 d2 d3 s a b d5
circlip_12i = ["circlip_12i", 12, 12.5, 13.0, 1.0, 3.4, 1.7, 1.5];
circlip_15i = ["circlip_15i", 15, 15.7, 16.2, 1.0, 3.7, 2.0, 1.7];
circlip_19i = ["circlip_19i", 19, 20.0, 20.5, 1.0, 4.1, 2.2, 2.0];
circlip_21i = ["circlip_21i", 21, 22.0, 22.5, 1.0, 4.2, 2.4, 2.0];
circlip_28i = ["circlip_28i", 28, 29.4, 30.1, 1.2, 4.8, 2.9, 2.0];
circlips = [circlip_12i, circlip_15i, circlip_19i, circlip_21i, circlip_28i];
use <circlip.scad>

View File

@@ -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])

View File

@@ -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);

View File

@@ -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])

View File

@@ -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);

View File

@@ -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));

View File

@@ -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);
@@ -149,7 +149,7 @@ module green_terminal(type, ways, skip = [], colour = "lime") { //! Draw green t
cylinder(r = screw_r, h = slot_depth);
translate_z(screw_top - slot_depth) // screw head
linear_extrude(height = slot_depth)
linear_extrude(slot_depth)
difference() {
circle(screw_r);
@@ -158,7 +158,7 @@ module green_terminal(type, ways, skip = [], colour = "lime") { //! Draw green t
}
translate([box_back, 0, ledge_height / 2]) {
rotate([0, 90, 0])
linear_extrude(height = box_front - box_back)
linear_extrude(box_front - box_back)
difference() {
square([box_h2, box_w2], center = true);

View File

@@ -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);

View File

@@ -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))

View File

@@ -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)])

View File

@@ -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);

View File

@@ -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])

View File

@@ -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;

View File

@@ -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();
}

View File

@@ -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));

View File

@@ -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));

View File

@@ -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)]);

View File

@@ -26,7 +26,7 @@ use <../utils/tube.scad>
bearing_colour = grey70;
groove_colour = grey60;
seal_colour = grey20;
seal_colour = grey30;
function bearing_length(type) = type[1]; //! Total length
@@ -61,5 +61,10 @@ module linear_bearing(type) { //! Draw specified linear bearing
color(bearing_colour) translate_z(offset+gs) tube(or = or, ir = casing_ir, h = offset, center = false);
}
}
color(seal_colour) tube(or = casing_ir, ir = bearing_rod_dia(type) / 2, h = length - 0.5);
rod_r = bearing_rod_dia(type) / 2;
color(seal_colour)
tube(or = casing_ir, ir = rod_r + eps, h = length - 0.5);
color(seal_colour * 0.8)
tube(or = rod_r * 1.12, ir = rod_r, h = length);
}

View File

@@ -87,10 +87,10 @@ module mains_socket(type) { //! Draw specified 13A socket
color("white") render() difference() {
hull() {
linear_extrude(height = eps)
linear_extrude(eps)
face_plate(type);
linear_extrude(height = height)
linear_extrude(height)
offset(-(mains_socket_width(type) - mains_socket_top_w(type)) / 2)
face_plate(type);
}
@@ -105,7 +105,7 @@ module mains_socket(type) { //! Draw specified 13A socket
}
// Hollow out the back
difference() {
linear_extrude(height = height - mains_socket_t(type))
linear_extrude(height - mains_socket_t(type))
offset(-mains_socket_t(type))
face_plate(type);

View File

@@ -56,7 +56,7 @@ module meter(type = led_meter, colour = "red", value = "888", display_colour = f
color("green")
translate_z(meter_height(type))
linear_extrude(height = meter_pcb_thickness(type))
linear_extrude(meter_pcb_thickness(type))
difference() {
union() {
square([meter_pcb_length(type), meter_pcb_width(type)], center = true);
@@ -68,7 +68,7 @@ module meter(type = led_meter, colour = "red", value = "888", display_colour = f
}
color(display_colour ? display_colour : colour)
linear_extrude(height = 0.2, center = true)
linear_extrude(0.2, center = true)
mirror([1,0,0])
text(value, font = "7 segment", valign = "center", halign = "center", size = meter_width(type) - 2, spacing = 1.2);
}
@@ -102,14 +102,14 @@ module meter_bezel(type = led_meter) { //! Generate the STL for the meter bezel
h = meter_height(type);
union() {
linear_extrude(height = h)
linear_extrude(h)
difference() {
rounded_square([l + 2 * wall, w + 2 * wall], rad);
square([l + 2 * clearance, w + 2 * clearance], center = true);
}
linear_extrude(height = flange_t)
linear_extrude(flange_t)
difference() {
rounded_square([l + 2 * wall + 2 * overlap, w + 2 * wall + 2 * overlap], rad + overlap);

View File

@@ -22,7 +22,7 @@
//
include <../utils/core/core.scad>
microswitch_contact_color = brass;
microswitch_contact_colour = brass;
function microswitch_thickness(type) = type[2]; //! Body thickness
function microswitch_width(type) = type[3]; //! Body width
@@ -63,7 +63,7 @@ module microswitch(type) { //! Draw specified microswitch
d = microswitch_button_t(type);
color(microswitch_body_clr(type))
linear_extrude(height = microswitch_thickness(type), center = true)
linear_extrude(microswitch_thickness(type), center = true)
difference() { // main body
rounded_square([microswitch_length(type), microswitch_width(type)], microswitch_radius(type));
@@ -73,7 +73,7 @@ module microswitch(type) { //! Draw specified microswitch
color(microswitch_button_clr(type)) // orange button
translate(microswitch_button_pos(type) - [0, d / 2])
linear_extrude(height = microswitch_button_w(type), center = true)
linear_extrude(microswitch_button_w(type), center = true)
hull() {
circle(d = d);
@@ -81,7 +81,7 @@ module microswitch(type) { //! Draw specified microswitch
circle(d = d);
}
color(microswitch_contact_color) // yellow contacts
color(microswitch_contact_colour) // yellow contacts
for(pos = microswitch_legs(type))
translate(pos) {
leg = microswitch_leg(type);
@@ -89,7 +89,7 @@ module microswitch(type) { //! Draw specified microswitch
if(vertical)
rotate([0, 90, 0])
linear_extrude(height = leg.x, center = true)
linear_extrude(leg.x, center = true)
difference() {
square([leg.z, leg.y], center = true);
@@ -99,7 +99,7 @@ module microswitch(type) { //! Draw specified microswitch
}
else
rotate([90, 0, 0])
linear_extrude(height = leg.y, center = true)
linear_extrude(leg.y, center = true)
difference() {
square([leg.x, leg.z], center = true);

View File

@@ -32,7 +32,7 @@ panel_clearance = 0.2;
module microview(cutout = false) { //! Draw microview or generate a panel cutout for it
rotate([0, 0, -90])
if(cutout)
linear_extrude(height = 100)
linear_extrude(100)
offset(panel_clearance)
projection()
hull()

View File

@@ -84,7 +84,7 @@ module mod(type) { //! Draw specified module
color("silver")
rotate([90, 0, 90])
linear_extrude(height = body_l, center = true)
linear_extrude(body_l, center = true)
profile();
color(grey20)
@@ -92,18 +92,18 @@ module mod(type) { //! Draw specified module
translate([end * body_l / 2, 0, 0])
rotate([90, 0, end * 90])
union() {
linear_extrude(height = end_t) // endcap
linear_extrude(end_t) // endcap
profile();
translate_z(end_t)
rotate([90, 0, 180])
linear_extrude(height = lug_t) // lug
linear_extrude(lug_t) // lug
lug();
for(side = [-1, 1]) {
translate([side * vane_p / 2, lug_t, end_t]) // buttress vanes
rotate([0, -90, 0])
linear_extrude(height = vane_t, center = true)
linear_extrude(vane_t, center = true)
polygon([[0, 0], [0, vane_h - lug_t], [vane_l, 0]]);
translate([side * vane_p / 2, h / 2, end_t]) // bosses

View File

@@ -36,6 +36,7 @@ function nut_radius(type) = type[2] / 2; //! Radius across the corners
function nut_thickness(type, nyloc = false) = nyloc ? type[4] : type[3]; //! Thickness of plain or nyloc version
function nut_washer(type) = type[5]; //! Corresponding washer
function nut_trap_depth(type) = type[6]; //! Depth of nut trap
function nut_pitch(type) = type[7]; //! Pitch if not standard metric course thread
function nut_flat_radius(type) = nut_radius(type) * cos(30); //! Radius across the flats
@@ -45,6 +46,7 @@ function nut_square_thickness(type) = type[3]; //! Thickness of the square nut
module nut(type, nyloc = false, brass = false, nylon = false) { //! Draw specified nut
thread_d = nut_size(type);
thread_p = nut_pitch(type) ? nut_pitch(type) : metric_coarse_pitch(thread_d);
hole_rad = thread_d / 2;
outer_rad = nut_radius(type);
thickness = nut_thickness(type);
@@ -56,7 +58,7 @@ module nut(type, nyloc = false, brass = false, nylon = false) { //! Draw specifi
colour = brass ? brass_colour : nylon ? grey30: grey70;
explode(nyloc ? 10 : 0) {
color(colour) {
linear_extrude(height = thickness)
linear_extrude(thickness)
difference() {
circle(outer_rad, $fn = 6);
@@ -69,7 +71,7 @@ module nut(type, nyloc = false, brass = false, nylon = false) { //! Draw specifi
}
if(show_threads)
female_metric_thread(thread_d, metric_coarse_pitch(thread_d), thickness, center = false, colour = colour);
female_metric_thread(thread_d, thread_p, thickness, center = false, colour = colour);
if(nyloc)
translate_z(thickness)
@@ -118,7 +120,7 @@ module wingnut(type) { //! Draw a wingnut
[hole_rad, thickness]
]);
for(rot = [0, 180])
rotate([90, 0, rot]) linear_extrude(height = wing_thickness, center = true)
rotate([90, 0, rot]) linear_extrude(wing_thickness, center = true)
hull() {
translate([wing_span / 2 - wing_width / 2, wing_height - wing_width / 2])
circle(wing_width / 2);
@@ -205,7 +207,7 @@ module nut_square(type, brass = false, nylon = false) { //! Draw specified squar
colour = brass ? brass_colour : nylon ? grey30 : grey70;
color(colour)
difference() {
linear_extrude(height = thickness) {
linear_extrude(thickness) {
difference() {
square([width, width], center = true);

View File

@@ -28,28 +28,34 @@ M5_nut_depth = 4;
M6_nut_depth = 5;
M8_nut_depth = 6.5;
// s r t n w t
// c a h y a r
// r d i l s a
// e i c o h p
// w u k c e
// s r t n w t t
// c a h y a r h
// r d i l s a r
// e i c o h p e
// w u k c e d
// s n r d
// e t e
// s h p
// s k t
// h
//
M2_nut = ["M2_nut", 2, 4.9, 1.6, 2.4, M2_washer, M2_nut_trap_depth];
M2p5_nut = ["M2p5_nut", 2.5, 5.8, 2.2, 3.8, M2p5_washer, M2p5_nut_trap_depth];
M3_nut = ["M3_nut", 3, 6.4, 2.4, 4, M3_washer, M3_nut_trap_depth];
M4_nut = ["M4_nut", 4, 8.1, 3.2, 5, M4_washer, M4_nut_trap_depth];
M5_nut = ["M5_nut", 5, 9.2, 4, 6.25, M5_washer, M5_nut_depth];
M6_nut = ["M6_nut", 6, 11.5, 5, 8, M6_washer, M6_nut_depth];
M6_half_nut = ["M6_half_nut", 6, 11.5, 3, 8, M6_washer, 3];
M8_nut = ["M8_nut", 8, 15, 6.5, 8, M8_washer, M8_nut_depth];
toggle_nut = ["toggle_nut", 6.1, 9.2, 1.5, 1.5, M6_washer, 1.5];
// e t e p
// s h p i
// s k t t
// h c
// h
M2_nut = ["M2_nut", 2, 4.9, 1.6, 2.4, M2_washer, M2_nut_trap_depth, 0];
M2p5_nut = ["M2p5_nut", 2.5, 5.8, 2.2, 3.8, M2p5_washer, M2p5_nut_trap_depth, 0];
M3_nut = ["M3_nut", 3, 6.4, 2.4, 4, M3_washer, M3_nut_trap_depth, 0];
M4_nut = ["M4_nut", 4, 8.1, 3.2, 5, M4_washer, M4_nut_trap_depth, 0];
M5_nut = ["M5_nut", 5, 9.2, 4, 6.25, M5_washer, M5_nut_depth, 0];
M6_nut = ["M6_nut", 6, 11.5, 5, 8, M6_washer, M6_nut_depth, 0];
M6_half_nut = ["M6_half_nut", 6, 11.5, 3, 8, M6_washer, 3, 0];
M8_nut = ["M8_nut", 8, 15, 6.5, 8, M8_washer, M8_nut_depth, 0];
toggle_nut = ["toggle_nut", 6.1, 9.2, 1.5, 1.5, M6_washer, 1.5, inch(1/40)];
M4_wingnut = ["M4_wingnut", 4, 10, 3.75,8, M4_washer, 0, 22, 10, 6, 3];
// sx ty1 ty2 hammer
M3_sliding_t_nut = ["M3_sliding_t_nut", 3, 6, 3.0, 4.0, false, 0, 10, 10, 6, false];
M4_sliding_t_nut = ["M4_sliding_t_nut", 4, 6, 3.25,4.5, false, 0, 11, 10, 6, false];
M5_sliding_t_nut = ["M5_sliding_t_nut", 5, 6, 3.25,4.5, false, 0, 11, 10, 7, false];
M3_hammer_nut = ["M3_hammer_nut", 3, 6, 2.75,4.0, false, 0, 5.5, 10, 6, true];
M4_hammer_nut = ["M4_hammer_nut", 4, 6, 3.25,4.5, false, 0, 5.5, 10, 6, true];
// DIN 562 (thin) square nuts
// s w h
@@ -65,13 +71,6 @@ M5nS_thin_nut = ["M5nS_thin_nut", 5, 8, 2.7];
M6nS_thin_nut = ["M6nS_thin_nut", 6, 10, 3.2];
M8nS_thin_nut = ["M8nS_thin_nut", 8, 13, 4];
// sx ty1 ty2 hammer
M3_sliding_t_nut = ["M3_sliding_t_nut", 3, 6, 3.0, 4.0, false, 0, 10, 10, 6, false];
M4_sliding_t_nut = ["M4_sliding_t_nut", 4, 6, 3.25,4.5, false, 0, 11, 10, 6, false];
M5_sliding_t_nut = ["M5_sliding_t_nut", 5, 6, 3.25,4.5, false, 0, 11, 10, 7, false];
M3_hammer_nut = ["M3_hammer_nut", 3, 6, 2.75,4.0, false, 0, 5.5, 10, 6, true];
M4_hammer_nut = ["M4_hammer_nut", 4, 6, 3.25,4.5, false, 0, 5.5, 10, 6, true];
nuts = [M2_nut, M2p5_nut, M3_nut, M4_nut, M5_nut, M6_nut, M8_nut];
use <nut.scad>

View File

@@ -69,7 +69,7 @@ module opengrab() { //! Draw OpenGrab module
translate_z(1)
opengrab_hole_positions() {
color(brass)
linear_extrude(height = depth - 1)
linear_extrude(depth - 1)
difference() {
circle(d = 4.7 / cos(30), $fn = 6);
@@ -85,7 +85,7 @@ module opengrab_target() { //! Draw OpenGrab target
vitamin("opengrab_target(): OpenGrab silicon steel target plate");
color(grey80)
linear_extrude(height = target)
linear_extrude(target)
difference() {
square([width, width], center = true);

View File

@@ -106,7 +106,7 @@ module usb_A(h, v_flange_l, bar, cutout) {
h + 2 * h_flange_h + 2 * panel_clearance, 100], r = cnc_bit_r, center = false);
else
color("silver") rotate([0, 90, 0]) {
linear_extrude(height = l, center = true)
linear_extrude(l, center = true)
difference() {
square([h, w], center = true);
@@ -119,7 +119,7 @@ module usb_A(h, v_flange_l, bar, cutout) {
cube([h, w, 1], center = true);
translate_z(l / 2 - flange_t)
linear_extrude(height = flange_t) difference() {
linear_extrude(flange_t) difference() {
union() {
square([h + 2 * h_flange_h, h_flange_l], center = true);
@@ -150,7 +150,7 @@ module rj45(cutout = false) { //! Draw RJ45 Ethernet connector
rotate([0, 90, 0]) {
mouth = plug_z + plug_h - tab_z;
color("silver") {
linear_extrude(height = l, center = true)
linear_extrude(l, center = true)
difference() {
square([h, w], center = true);
@@ -163,7 +163,7 @@ module rj45(cutout = false) { //! Draw RJ45 Ethernet connector
}
color(grey30) {
linear_extrude(height = l - 0.2, center = true)
linear_extrude(l - 0.2, center = true)
difference() {
square([h - 0.1, w - 0.1], center = true);
@@ -195,7 +195,7 @@ module jack(cutout = false) { //! Draw 3.5mm jack
else
color(grey20)
rotate([0, 90, 0]) {
linear_extrude(height = l / 2)
linear_extrude(l / 2)
difference() {
square([h, w], center = true);
@@ -209,7 +209,7 @@ module jack(cutout = false) { //! Draw 3.5mm jack
}
}
module buzzer(height, diameter, colour) { //! Draw PCB buzzer with specified height, diameter and color
module buzzer(height, diameter, colour) { //! Draw PCB buzzer with specified height, diameter and colour
color (colour)
tube(or = diameter / 2, ir = height > 5 ? 1 : 0.75, h = height, center = false);
color("white")
@@ -271,13 +271,13 @@ module hdmi(type, cutout = false) { //! Draw HDMI socket
if(cutout)
rotate([90, 0, 90])
linear_extrude(height = 100)
linear_extrude(100)
offset(t + panel_clearance)
D();
else
color("silver")
rotate([90, 0, 90]) {
linear_extrude(height = l, center = true)
linear_extrude(l, center = true)
difference() {
offset(t)
D();
@@ -285,7 +285,7 @@ module hdmi(type, cutout = false) { //! Draw HDMI socket
}
translate_z(-l / 2)
linear_extrude(height = 1)
linear_extrude(1)
offset(t)
D();
}
@@ -314,12 +314,12 @@ module usb_uA(cutout = false) { //! Draw USB micro A connector
if(cutout)
rotate([90, 0, 90])
linear_extrude(height = 100)
linear_extrude(100)
offset((flange_h - ih2) / 2 + 2 * panel_clearance)
D();
else
color("silver") rotate([90, 0, 90]) {
linear_extrude(height = l, center = true)
linear_extrude(l, center = true)
difference() {
offset(t)
D();
@@ -328,12 +328,12 @@ module usb_uA(cutout = false) { //! Draw USB micro A connector
}
translate_z(-l / 2)
linear_extrude(height = 1)
linear_extrude(1)
offset(t)
D();
translate_z(l / 2 - t)
linear_extrude(height = t) difference() {
linear_extrude(t) difference() {
union() {
translate([0, h - t - ih1 / 2])
square([flange_w, ih1], center = true);
@@ -375,7 +375,7 @@ module usb_B(cutout = false) { //! Draw USB B connector
else
translate_z(h / 2) rotate([90, 0, 90]) {
color("silver") {
linear_extrude(height = l, center = true)
linear_extrude(l, center = true)
difference() {
square([w, h], center = true);
@@ -388,7 +388,7 @@ module usb_B(cutout = false) { //! Draw USB B connector
}
color("white") {
linear_extrude(height = l - 0.4, center = true)
linear_extrude(l - 0.4, center = true)
difference() {
square([w - 0.2, h - 0.2], center = true);
@@ -423,7 +423,7 @@ module barrel_jack(cutout = false) { //! Draw barrel power jack
;
else {
color(grey20) rotate([0, 90, 0]) {
linear_extrude(height = l, center = true) {
linear_extrude(l, center = true) {
difference() {
translate([-h / 2, 0])
rounded_square([h, w], r);
@@ -437,7 +437,7 @@ module barrel_jack(cutout = false) { //! Draw barrel power jack
}
}
translate_z(l / 2 - front)
linear_extrude(height = front) {
linear_extrude(front) {
difference() {
translate([-h / 2, 0])
rounded_square([h, w], r);
@@ -484,7 +484,7 @@ module uSD(size, cutout = false) { //! Draw uSD socket
translate_z(size.z / 2) {
color("silver")
rotate([90, 0, 90]) {
linear_extrude(height = size.y, center = true)
linear_extrude(size.y, center = true)
difference() {
square([size.x, size.z], center = true);
square([size.x - 2 * t, size.z - 2 * t], center = true);
@@ -497,7 +497,7 @@ module uSD(size, cutout = false) { //! Draw uSD socket
color(grey20)
rotate([90, 0, 90])
translate_z(t)
linear_extrude(height = size.y - t, center = true)
linear_extrude(size.y - t, center = true)
difference() {
square([size.x - 2 * t, size.z - 2 * t], center = true);
@@ -526,7 +526,7 @@ module flex(cutout = false) { //! Draw flexistrip connector
translate_z(0.5)
cube([l, w, 1], center = true);
linear_extrude(height = h)
linear_extrude(h)
difference() {
square([l, w], center = true);
@@ -535,7 +535,7 @@ module flex(cutout = false) { //! Draw flexistrip connector
}
translate_z(h - top_t)
linear_extrude(height = top_t)
linear_extrude(top_t)
difference() {
union() {
square([top_l, w], center = true);
@@ -581,7 +581,7 @@ module flat_flex(cutout = false) { //! Draw flat flexistrip connector as used on
color(grey30) {
translate([w / 2 - w1, 0, h1 / 2])
rotate([90, 0, 90])
linear_extrude(height = w1)
linear_extrude(w1)
difference() {
square([l1, h1], center = true);
@@ -623,7 +623,7 @@ module terminal_35(ways, colour = "blue") { //! Draw 3.5mm terminal block
screw_r = 1;
color(colour) {
rotate([90, 0, 0])
linear_extrude(height = pitch, center = true)
linear_extrude(pitch, center = true)
polygon(points = [
[ depth / 2, 0],
[ depth / 2, box_z],
@@ -640,7 +640,7 @@ module terminal_35(ways, colour = "blue") { //! Draw 3.5mm terminal block
[-depth / 2, 0],
]);
linear_extrude(height = box_z + box_h)
linear_extrude(box_z + box_h)
difference() {
square([depth, pitch], center = true);
@@ -651,7 +651,7 @@ module terminal_35(ways, colour = "blue") { //! Draw 3.5mm terminal block
}
translate_z(box_z + box_h)
linear_extrude(height = height - box_z - box_h)
linear_extrude(height - box_z - box_h)
difference() {
square([2 * screw_r + 0.1, pitch], center = true);
@@ -663,7 +663,7 @@ module terminal_35(ways, colour = "blue") { //! Draw 3.5mm terminal block
translate_z(screw_z) {
cylinder(r = screw_r, h = height - screw_z - 1); // screw
linear_extrude(height = height - screw_z - 0.5)
linear_extrude(height - screw_z - 0.5)
difference() {
circle(1);
@@ -678,7 +678,7 @@ module terminal_35(ways, colour = "blue") { //! Draw 3.5mm terminal block
translate_z(box_z + box_h / 2) // terminal
rotate([0, -90, 0]) {
linear_extrude(height = depth - 2, center = true)
linear_extrude(depth - 2, center = true)
difference() {
square([box_h, box_w], center = true);
@@ -721,7 +721,7 @@ module molex_254(ways) { //! Draw molex header
cube([0.44, 0.75, above + below], center = true);
}
module standoff(h, d, h2, d2) {
module standoff(h, d, h2, d2) { //! Draw a standoff
color("white") {
cylinder(d = d, h = h);
@@ -735,6 +735,52 @@ module standoff(h, d, h2, d2) {
}
}
module trimpot10(vertical, cutout = false) { //! Draw a ten turn trimpot
l = 10;
w = 9.5;
h = 4.8;
foot_w = 1;
foot_h = 0.5;
screw_h = 1.5;
screw_d = 2.25;
slot_w = 0.6;
slot_h = 0.8;
module screw_pos()
translate([-w / 2 + screw_d / 2, -l / 2, h - screw_d / 2])
rotate([90, 0, 0])
children();
translate(vertical ? [0, -h / 2, l / 2] : [0, 0])
rotate([vertical ? -90 : 0, 0, 0]) {
if(cutout)
screw_pos()
cylinder(d = screw_d + 1, h = 100);
else
color("#2CA1FD") {
translate([0, -foot_h / 2, foot_h / 2 + h / 2])
cube([w, l - foot_h, h - foot_h], center = true);
for(x = [-1, 1], y = [-1, 1])
translate([x * (w - foot_w) / 2, y * (l - foot_w) / 2, h / 2])
cube([foot_w, foot_w, h], center = true);
}
color(brass)
screw_pos() {
cylinder(d = screw_d, h = screw_h - slot_h);
linear_extrude(screw_h)
difference() {
circle(d = screw_d);
square([slot_w, screw_d + 1], center = true);
}
}
}
}
module pcb_component(comp, cutouts = false, angle = undef) { //! Draw pcb component from description
function show(comp, part) = (comp[3] == part || comp[3] == str("-",part)) && (!cutouts || angle == undef || angle == comp.z);
function param(n, default = 0) = len(comp) > n ? comp[n] : default;
@@ -773,6 +819,7 @@ module pcb_component(comp, cutouts = false, angle = undef) { //! Draw pcb compon
if(show(comp, "pcb")) if(!cutouts) translate_z(comp[4]) pcb(comp[5]);
if(show(comp, "standoff")) if(!cutouts) standoff(comp[4], comp[5], comp[6], comp[7]);
if(show(comp, "uSD")) uSD(comp[4], cutouts);
if(show(comp, "trimpot10")) trimpot10(param(4, false), cutouts);
}
}
@@ -834,7 +881,7 @@ module pcb(type) { //! Draw specified PCB
pcb_components(type);
color(pcb_colour(type)) linear_extrude(height = t) difference() {
color(pcb_colour(type)) linear_extrude(t) difference() {
if(Len(pcb_polygon(type)))
polygon(pcb_polygon(type));
else
@@ -848,16 +895,26 @@ module pcb(type) { //! Draw specified PCB
circle(d = 1 + eps);
}
land = pcb_land_d(type);
hole = pcb_hole_d(type);
color("silver")
translate_z(t / 2)
pcb_hole_positions(type)
tube(or = max(pcb_land_d(type), 1) / 2, ir = pcb_hole_d(type) / 2, h = t + 2 * eps);
if(is_list(land))
linear_extrude(t + 2 * eps, center = true)
difference() {
square(land, center = true);
circle(d = hole);
}
else
tube(or = max(land, 1) / 2, ir = hole / 2, h = t + 2 * eps);
fr4 = pcb_colour(type) != "sienna";
plating = 0.15;
color(pcb_colour(type) == "green" ? "silver" : "gold")
translate_z(-plating)
linear_extrude(height = fr4 ? t + 2 * plating : plating)
linear_extrude(fr4 ? t + 2 * plating : plating)
if(Len(grid)) {
pcb_grid_positions(type)
difference() {
@@ -886,11 +943,11 @@ module pcb_spacer(screw, height, wall = 1.8, taper = 0) { //! Generate STL for P
or = corrected_radius(ir) + wall;
if(height > taper)
linear_extrude(height = height - taper)
linear_extrude(height - taper)
poly_ring(or, ir);
if(taper)
linear_extrude(height = height)
linear_extrude(height)
poly_ring(ir + 2 * extrusion_width, ir);
}
@@ -900,7 +957,7 @@ module pcb_base(type, height, thickness, wall = 2) { //! Generate STL for a base
or = corrected_radius(ir) + wall;
union() {
linear_extrude(height = thickness)
linear_extrude(thickness)
difference() {
hull()
pcb_screw_positions(type)
@@ -910,7 +967,7 @@ module pcb_base(type, height, thickness, wall = 2) { //! Generate STL for a base
poly_circle(ir);
}
linear_extrude(height = height)
linear_extrude(height)
pcb_screw_positions(type)
poly_ring(or, ir);
}

View File

@@ -327,6 +327,16 @@ ZC_A0591 = ["ZC_A0591", "ZC-A0591 ULN2003 driver PCB", 35, 32, 1.6, 0, 2.5, 0, "
[], [], [], [], M2p5_pan_screw];
MT3608 = ["MT3608", "MT3608 boost converter module", 37, 17, 1.2, 2, 1.5, [5, 3], "#2140BE", false, [[3.0725, 5.095], [3.0725, -5.095], [-3.0725, 5.095], [-3.0725, -5.095]],
[ [-12.05 , -6.8, 180, "trimpot10"]
]];
TP4056 = ["TP4056", "TP4056 Li-lon Battery charger module", 26.2, 17.5, 1.0, 0, 1.0, [2.4, 2.4], "#2140BE", false,
[[1.67, 1.8], [1.67, -1.8], [-1.67, 1.8], [-1.67, -1.8], [-1.67, -4.98], [-1.67, 4.98]],
[ [ 2, 17.5 / 2, 180, "usb_uA"],
]];
PERF80x20 = ["PERF80x20", "Perfboard 80 x 20mm", 80, 20, 1.6, 0, 2.3, 0, "green", true, [[2,2],[-2,2],[2,-2],[-2,-2]], [], [], [5.87, 3.49]];
PERF70x50 = ["PERF70x50", "Perfboard 70 x 50mm", 70, 50, 1.6, 0, 2.3, 0, "green", true, [[2,2],[-2,2],[2,-2],[-2,-2]], [], [], [5.87, 3.49]];
@@ -352,6 +362,8 @@ RAMPSEndstop = ["RAMPSEndstop", "RAMPS Endstop Switch",
[]];
pcbs = [RAMPSEndstop, ExtruderPCB, PI_IO, RPI0, EnviroPlus, RPI3, ArduinoUno3, ArduinoLeonardo, Keyes5p1, PERF80x20, PERF70x50, PERF70x30, PERF60x40, PERF74x51, PSU12V1A, DuetE, Duex2, Duex5, Melzi, ZC_A0591];
pcbs = [TP4056, MT3608, RAMPSEndstop, ExtruderPCB, PI_IO, ZC_A0591, RPI0, EnviroPlus, ArduinoUno3, ArduinoLeonardo, Keyes5p1, PSU12V1A, RPI3, DuetE, Duex2, Duex5, Melzi];
perfboards = [PERF74x51, PERF70x50, PERF60x40, PERF70x30, PERF80x20];
use <pcb.scad>

View File

@@ -66,7 +66,7 @@ module pillar(type) { //! Draw specified pillar
cylinder(h = top_thread_l, d = thread_d);
color(pillar_i_colour(type)) {
linear_extrude(height = height)
linear_extrude(height)
difference() {
circle(d = pillar_id(type), $fn = fn(pillar_ifn(type)));
circle(d = thread_d);
@@ -90,7 +90,7 @@ module pillar(type) { //! Draw specified pillar
}
if(pillar_od(type) > pillar_id(type))
color(pillar_o_colour(type)) linear_extrude(height = height)
color(pillar_o_colour(type)) linear_extrude(height)
difference() {
circle(d = pillar_od(type), $fn = fn(pillar_ofn(type)));

View File

@@ -81,7 +81,7 @@ module pin_header(type, cols = 1, rows = 1, smt = false, right_angle = false, cu
translate([0, right_angle ? -ra_offset - pitch / 2 : 0, right_angle ? width / 2 : 0])
rotate([right_angle ? 90 : 0, 0, 0])
color(base_colour)
linear_extrude(height = h)
linear_extrude(h)
for(x = [0 : cols - 1], y = [0 : rows - 1])
translate([pitch * (x - (cols - 1) / 2), pitch * (y - (rows - 1) / 2), pitch / 2])
hull() {
@@ -111,10 +111,10 @@ module box_header(type, cols = 1, rows = 1, smt = false, cutout = false) { //! D
pin(type, hdr_pin_length(type) - pitch + base);
color(hdr_base_colour(type)) {
linear_extrude(height = base)
linear_extrude(base)
square([w, l], center = true);
linear_extrude(height = h)
linear_extrude(h)
difference() {
square([w, l], center = true);
@@ -140,7 +140,7 @@ module idc_transition(type, cols = 5, skip = [], cutout = false) { //! Draw IDC
color(hdr_base_colour(type))
rotate([90, 0, 0])
linear_extrude(height = width, center = true, convexity = cols * rows)
linear_extrude(width, center = true, convexity = cols * rows)
difference() {
translate([0, height / 2])
square([length, height], center = true);
@@ -177,7 +177,7 @@ module pin_socket(type, cols = 1, rows = 1, right_angle = false, height = 0, smt
translate([0, right_angle ? -ra_offset - pitch / 2 : 0, right_angle ? width / 2 : 0])
rotate([right_angle ? 90 : 0, 0, 0])
translate_z(depth / 2)
linear_extrude(height = depth, center = true)
linear_extrude(depth, center = true)
difference() {
square([length, width], center = true);

View File

@@ -85,7 +85,7 @@ module terminal_block(type, ways) { //! Draw a power supply terminal block
for(i = [0 : ways])
translate([0, i * pitch + div])
rotate([90, 0, 0])
linear_extrude(height = div)
linear_extrude(div)
hull() {
r = 2;
square([depth, eps]);
@@ -170,7 +170,7 @@ module psu(type) { //! Draw a power supply
multmatrix(psu_face_transform(type, i))
translate([xo, 0, -t]) {
color("silver") linear_extrude(height = t)
color("silver") linear_extrude(t)
union() {
difference() {
square([xw, yw], center = true);
@@ -260,7 +260,7 @@ module psu(type) { //! Draw a power supply
heatsink_offset = 13.5;
color("#FCD67E")
translate([(-right - rt) / 2, (ft - bt) / 2, z - pcb_thickness])
linear_extrude(height = pcb_thickness)
linear_extrude(pcb_thickness)
difference() {
square([pl, pw], center = true);
@@ -306,7 +306,7 @@ module psu(type) { //! Draw a power supply
color("silver")
translate([l / 2, -w / 2])
rotate([90, 0, 180])
linear_extrude(height = length) {
linear_extrude(length) {
translate([right + rt, z_top])
rotate(135)
square([rt, right * sqrt(2)]);
@@ -336,7 +336,7 @@ module atx_psu_cutout(type) { //! Cut out for the rear of an ATX
holes = psu_face_holes(psu_faces(type)[f_front]);
translate([holes[0].x, -psu_width(type) / 2, psu_height(type) / 2 + holes[0].y])
rotate([90, 0, 0])
linear_extrude(height = 100, center = true)
linear_extrude(100, center = true)
round(5)
polygon([ // https://www.techpowerup.com/forums/threads/pc-component-dimensions.157239, tweaked
[18.7, -13],

View File

@@ -69,7 +69,7 @@ module pulley(type) { //! Draw a pulley
ir = pulley_ir(type);
module core() {
translate_z(pulley_hub_length(type) + ft)
linear_extrude(height = w) let($fa = 1, $fs = 0.1)
linear_extrude(w) let($fa = 1, $fs = 0.1)
difference() {
circle(or);

View File

@@ -65,7 +65,7 @@ module carriage_hole_positions(type) { //! Position children over screw holes
children();
}
module carriage(type, rail, end_color = grey20, wiper_color = grey20) { //! Draw the specified carriage
module carriage(type, rail, end_colour = grey20, wiper_colour = grey20) { //! Draw the specified carriage
total_l = carriage_length(type);
block_l = carriage_block_length(type);
block_w = carriage_width(type);
@@ -84,7 +84,7 @@ module carriage(type, rail, end_color = grey20, wiper_color = grey20) { //! Draw
color(grey90) {
rotate([90, 0, 90])
linear_extrude(height = block_l, center = true)
linear_extrude(block_l, center = true)
difference() {
translate([-block_w / 2, carriage_clearance(type)])
square([block_w, block_h - screw_depth]);
@@ -93,7 +93,7 @@ module carriage(type, rail, end_color = grey20, wiper_color = grey20) { //! Draw
}
translate_z(carriage_height(type) - screw_depth)
linear_extrude(height = screw_depth)
linear_extrude(screw_depth)
difference() {
square([block_l, block_w], center = true);
@@ -104,13 +104,13 @@ module carriage(type, rail, end_color = grey20, wiper_color = grey20) { //! Draw
module carriage_end(type, end_w, end_h, end_l) {
wiper_length = 0.5;
color(wiper_color) translate_z(-end_l/2) linear_extrude(wiper_length)
color(wiper_colour) translate_z(-end_l/2) linear_extrude(wiper_length)
difference() {
translate([-end_w/2, carriage_clearance(type)])
square([end_w, end_h]);
cutout();
}
color(end_color) translate_z(wiper_length-end_l/2) linear_extrude(end_l-wiper_length)
color(end_colour) translate_z(wiper_length-end_l/2) linear_extrude(end_l-wiper_length)
difference() {
translate([-end_w/2, carriage_clearance(type)])
square([end_w, end_h]);
@@ -166,11 +166,11 @@ module rail(type, length) { //! Draw the specified rail
}
}
module rail_assembly(type, length, pos, carriage_end_color = grey20, carriage_wiper_color = grey20) { //! Rail and carriage assembly
module rail_assembly(type, length, pos, carriage_end_colour = grey20, carriage_wiper_colour = grey20) { //! Rail and carriage assembly
rail(type, length);
translate([pos, 0])
carriage(rail_carriage(type), type, carriage_end_color, carriage_wiper_color);
carriage(rail_carriage(type), type, carriage_end_colour, carriage_wiper_colour);
}

View File

@@ -60,7 +60,7 @@ module ring_terminal(type) { //! Draw specifeid ring terminal
children();
color("silver") union() {
linear_extrude(height = t)
linear_extrude(t)
difference() {
hull_if_crimp() {
circle(d = od);
@@ -102,7 +102,7 @@ module ring_terminal(type) { //! Draw specifeid ring terminal
else
translate([0, -bend])
rotate([-angle, 0, 0])
linear_extrude(height = t)
linear_extrude(t)
difference() {
length = l - od / 2 - bend;
hull() {

View File

@@ -54,7 +54,7 @@ module rocker(type, colour) { //! Draw the specified rocker switch
explode(30) {
color(grey20) {
linear_extrude(height = rocker_flange_t(type))
linear_extrude(rocker_flange_t(type))
difference() {
rounded_square([rocker_flange_w(type), rocker_flange_h(type)], 0.5);
@@ -68,7 +68,7 @@ module rocker(type, colour) { //! Draw the specified rocker switch
color(colour ? colour : grey30)
translate_z(rocker_pivot(type))
rotate([90, 0, 90])
linear_extrude(height = rocker_w, center = true)
linear_extrude(rocker_w, center = true)
difference() {
circle(rocker_r, $fa = 1);

View File

@@ -114,7 +114,7 @@ module screw(type, length, hob_point = 0, nylon = false) { //! Draw specified sc
cylinder(r = head_rad, h = head_height - socket_depth);
translate_z(head_height - socket_depth)
linear_extrude(height = socket_depth)
linear_extrude(socket_depth)
difference() {
circle(head_rad);
@@ -128,7 +128,7 @@ module screw(type, length, hob_point = 0, nylon = false) { //! Draw specified sc
color(colour) {
r = show_threads ? rad - pitch / 2 : rad;
translate_z(-socket_depth)
linear_extrude(height = socket_depth)
linear_extrude(socket_depth)
difference() {
circle(r);
@@ -161,7 +161,7 @@ module screw(type, length, hob_point = 0, nylon = false) { //! Draw specified sc
square([socket_rad, 10]);
}
linear_extrude(height = head_height)
linear_extrude(head_height)
difference() {
circle(socket_rad + eps);
@@ -187,7 +187,7 @@ module screw(type, length, hob_point = 0, nylon = false) { //! Draw specified sc
square([socket_rad, 10]);
}
}
linear_extrude(height = head_height)
linear_extrude(head_height)
difference() {
circle(socket_rad + eps);
circle(socket_rad, $fn = 6);
@@ -211,7 +211,7 @@ module screw(type, length, hob_point = 0, nylon = false) { //! Draw specified sc
}
translate_z(-socket_depth)
linear_extrude(height = socket_depth)
linear_extrude(socket_depth)
difference() {
circle(socket_rad + 0.1);
@@ -234,7 +234,7 @@ module screw(type, length, hob_point = 0, nylon = false) { //! Draw specified sc
}
translate_z(-socket_depth)
linear_extrude(height = socket_depth)
linear_extrude(socket_depth)
difference() {
circle(socket_rad + 0.1);

Some files were not shown because too many files have changed in this diff Show More