Compare commits
63 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
f49bb63266 | ||
|
258109811b | ||
|
b39fd536c2 | ||
|
a5a87d260d | ||
|
b09efb10e0 | ||
|
53acaac379 | ||
|
9b40e0dcef | ||
|
00ca412441 | ||
|
1e6d7f5dd6 | ||
|
ec07d95657 | ||
|
0dab0dca08 | ||
|
6e6cd45295 | ||
|
3a7fde6c56 | ||
|
c5bb898856 | ||
|
11ebe2225d | ||
|
a1e25bb878 | ||
|
9689683b7e | ||
|
08946e3d70 | ||
|
15c2946e91 | ||
|
34019196cd | ||
|
436fc71cf3 | ||
|
fd67c166f7 | ||
|
634deab911 | ||
|
e2feceb608 | ||
|
d1258e0b0c | ||
|
bd61a1dc55 | ||
|
055e83902f | ||
|
feec1e7ae5 | ||
|
be76af2fc4 | ||
|
9c1a9bf357 | ||
|
9647fb474b | ||
|
49fdfea792 | ||
|
ac0bacfeda | ||
|
6288059d99 | ||
|
0f1dff230a | ||
|
e379fa8ada | ||
|
313d7508df | ||
|
083caca4e8 | ||
|
49329df00c | ||
|
edc0b86bb1 | ||
|
5fbff060b0 | ||
|
b94ca4ad3a | ||
|
bc5515d35e | ||
|
44d213deaa | ||
|
145c5d9b1a | ||
|
7abbbd9b96 | ||
|
5b160cee88 | ||
|
3f31607840 | ||
|
1efed649cf | ||
|
b70c2f993c | ||
|
56e252f3dc | ||
|
f12b36ea04 | ||
|
bd5811e69b | ||
|
ede4da6f1d | ||
|
51cc2fd679 | ||
|
4ce2f53e20 | ||
|
e338c47e73 | ||
|
8328a70f42 | ||
|
cc794cd7c3 | ||
|
df28bd5116 | ||
|
61de6041d8 | ||
|
608168de8e | ||
|
fc45a40bd3 |
70
CHANGELOG.md
@@ -3,6 +3,76 @@
|
||||
This changelog is generated by `changelog.py` using manually added semantic version tags to classify commits as breaking changes, additions or fixes.
|
||||
|
||||
|
||||
#### [v15.13.4](https://github.com/nophead/NopSCADlib/releases/tag/v15.13.4 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v15.13.3...v15.13.4 "diff with v15.13.3")
|
||||
* 2021-05-30 [`ec07d95`](https://github.com/nophead/NopSCADlib/commit/ec07d95657d52aab375b3b2acb95c87b369d2194 "show commit") [M.B.](# "Martin Budden") Added assertion to check colour format in module thread.
|
||||
|
||||
#### [v15.13.3](https://github.com/nophead/NopSCADlib/releases/tag/v15.13.3 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v15.13.2...v15.13.3 "diff with v15.13.2")
|
||||
* 2021-05-19 [`0dab0dc`](https://github.com/nophead/NopSCADlib/commit/0dab0dca08485d1717ee516a61831fcd6963e335 "show commit") [C.P.](# "Chris Palmer") Added missing includes `core.scad` which generates warnings with latest OpenSCAD snapshots.
|
||||
|
||||
* Note, however, NopSCADlib does not work with the current OpenSCAD snapshot.
|
||||
|
||||
#### [v15.13.2](https://github.com/nophead/NopSCADlib/releases/tag/v15.13.2 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v15.13.1...v15.13.2 "diff with v15.13.1")
|
||||
* 2021-05-15 [`9689683`](https://github.com/nophead/NopSCADlib/commit/9689683b7efbde882c057a903dd7fa018107d029 "show commit") [M.B.](# "Martin Budden") Typo in `global_defs`.
|
||||
|
||||
#### [v15.13.1](https://github.com/nophead/NopSCADlib/releases/tag/v15.13.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v15.13.0...v15.13.1 "diff with v15.13.0")
|
||||
* 2021-05-18 [`11ebe22`](https://github.com/nophead/NopSCADlib/commit/11ebe2225db09bdd45089e4ebf5c1037243bf45c "show commit") [C.P.](# "Chris Palmer") Removed spurious convexity in difference from `rounded_polygon()`.
|
||||
|
||||
### [v15.13.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.13.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.12.0...v15.13.0 "diff with v15.12.0")
|
||||
* 2021-05-02 [`3401919`](https://github.com/nophead/NopSCADlib/commit/34019196cdac6b08e57d773e138a22394b609ea5 "show commit") [C.P.](# "Chris Palmer") Updated readme
|
||||
|
||||
* 2021-05-02 [`436fc71`](https://github.com/nophead/NopSCADlib/commit/436fc71cf319c1e71b6cbd240b76d7cad5ecd8ba "show commit") [M.B.](# "Martin Budden") Added `blower_size` function.
|
||||
|
||||
### [v15.12.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.12.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.11.1...v15.12.0 "diff with v15.11.1")
|
||||
* 2021-04-26 [`e2feceb`](https://github.com/nophead/NopSCADlib/commit/e2feceb608b4491424c0e4c1e7c191f7d8aeceec "show commit") [C.P.](# "Chris Palmer") Updated readme
|
||||
|
||||
* 2021-04-25 [`9c1a9bf`](https://github.com/nophead/NopSCADlib/commit/9c1a9bf3572c07a57b5bd1fde1d9a4aba14e5ea8 "show commit") [M.B.](# "Martin Budden") Add facility to orient `core_xy` with left motor being lower or upper motor.
|
||||
|
||||
#### [v15.11.1](https://github.com/nophead/NopSCADlib/releases/tag/v15.11.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v15.11.0...v15.11.1 "diff with v15.11.0")
|
||||
* 2021-04-25 [`feec1e7`](https://github.com/nophead/NopSCADlib/commit/feec1e7ae5a5217586e0ab9e7b002e8af8f7c749 "show commit") [C.P.](# "Chris Palmer") Updated readme.
|
||||
|
||||
* 2021-04-25 [`be76af2`](https://github.com/nophead/NopSCADlib/commit/be76af2fc490e10e4dd115a56019e33005f87db9 "show commit") [M.B.](# "Martin Budden") Fixed typo in `leadnut.scad`.
|
||||
|
||||
### [v15.11.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.11.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.10.1...v15.11.0 "diff with v15.10.1")
|
||||
* 2021-04-25 [`49fdfea`](https://github.com/nophead/NopSCADlib/commit/49fdfea7926d677b6e0a9eee2fbd928f2935e1eb "show commit") [C.P.](# "Chris Palmer") Added 35BYGHJ75 geared stepper.
|
||||
|
||||
#### [v15.10.1](https://github.com/nophead/NopSCADlib/releases/tag/v15.10.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v15.10.0...v15.10.1 "diff with v15.10.0")
|
||||
* 2021-04-25 [`ac0bacf`](https://github.com/nophead/NopSCADlib/commit/ac0bacfeda43af62256e7bd3184df695b3e01d37 "show commit") [C.P.](# "Chris Palmer") Removed echo in rails test.
|
||||
|
||||
### [v15.10.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.10.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.9.0...v15.10.0 "diff with v15.9.0")
|
||||
* 2021-04-13 [`e379fa8`](https://github.com/nophead/NopSCADlib/commit/e379fa8ada4a4089fc24ce5fc2c140a2531e2e95 "show commit") [C.P.](# "Chris Palmer") Updated readme.
|
||||
|
||||
* 2021-04-13 [`5fbff06`](https://github.com/nophead/NopSCADlib/commit/5fbff060b019a983eba93eb8c5b16adfb6a3f7ee "show commit") [M.B.](# "Martin Budden") Added a `pcb_component` function.
|
||||
|
||||
### [v15.9.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.9.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.8.0...v15.9.0 "diff with v15.8.0")
|
||||
* 2021-04-13 [`edc0b86`](https://github.com/nophead/NopSCADlib/commit/edc0b86bb1cd52e90fe353c4aea9539e95aa5aee "show commit") [C.P.](# "Chris Palmer") Updated images and readme.
|
||||
|
||||
* 2021-03-31 [`b70c2f9`](https://github.com/nophead/NopSCADlib/commit/b70c2f993c351bf71da57cfc169ed02a235cf4f3 "show commit") [M.B.](# "Martin Budden") Added box sections.
|
||||
|
||||
### [v15.8.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.8.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.7.0...v15.8.0 "diff with v15.7.0")
|
||||
* 2021-04-12 [`145c5d9`](https://github.com/nophead/NopSCADlib/commit/145c5d9b1a7c873940abf266a321edabdff3b7a0 "show commit") [C.P.](# "Chris Palmer") Updated readme.
|
||||
|
||||
* 2021-04-12 [`1efed64`](https://github.com/nophead/NopSCADlib/commit/1efed649cf54607b9d39d4b7f422dd385ccb441f "show commit") [M.B.](# "Martin Budden") Added PSU size function.
|
||||
|
||||
### [v15.7.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.7.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.6.1...v15.7.0 "diff with v15.6.1")
|
||||
* 2021-04-12 [`3f31607`](https://github.com/nophead/NopSCADlib/commit/3f31607840d162f63d12eb2317d2f28af1ecf492 "show commit") [C.P.](# "Chris Palmer") Added No8 screws.
|
||||
|
||||
#### [v15.6.1](https://github.com/nophead/NopSCADlib/releases/tag/v15.6.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v15.6.0...v15.6.1 "diff with v15.6.0")
|
||||
* 2021-04-05 [`f12b36e`](https://github.com/nophead/NopSCADlib/commit/f12b36ea046b5a784dd81b3c4e95eaf4cf24a58d "show commit") [C.P.](# "Chris Palmer") Corrected MGN12 rail end value.
|
||||
Added assert for rail end value too big.
|
||||
|
||||
### [v15.6.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.6.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.5.0...v15.6.0 "diff with v15.5.0")
|
||||
* 2021-04-03 [`51cc2fd`](https://github.com/nophead/NopSCADlib/commit/51cc2fd6791065e1c94c761abf7dac0271e6ab28 "show commit") [C.P.](# "Chris Palmer") Carriages now appear on the BOM and both variants are shown in the rail test.
|
||||
|
||||
* 2021-03-31 [`608168d`](https://github.com/nophead/NopSCADlib/commit/608168de8e56bfdde5ba605d27baca1900895926 "show commit") [M.B.](# "Martin Budden") Added MGN7H and MGN9H carriages.
|
||||
|
||||
### [v15.5.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.5.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.4.0...v15.5.0 "diff with v15.4.0")
|
||||
* 2021-04-02 [`cc794cd`](https://github.com/nophead/NopSCADlib/commit/cc794cd7c3cd3e3f63d15ebbe5dabb773812ae72 "show commit") [C.P.](# "Chris Palmer") Updated readme.
|
||||
|
||||
* 2021-03-31 [`fc45a40`](https://github.com/nophead/NopSCADlib/commit/fc45a40bd3c3b524d9edc226952482296e776831 "show commit") [M.B.](# "Martin Budden") Added translated children to pulley.
|
||||
|
||||
### [v15.4.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.4.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.3.1...v15.4.0 "diff with v15.3.1")
|
||||
* 2021-04-02 [`b2d712b`](https://github.com/nophead/NopSCADlib/commit/b2d712bca94165a338e5f904880d12f9c4c5ecd0 "show commit") [C.P.](# "Chris Palmer") Added `quadratic_real_roots()` and `cubic_real_roots()`.
|
||||
|
||||
#### [v15.3.1](https://github.com/nophead/NopSCADlib/releases/tag/v15.3.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v15.3.0...v15.3.1 "diff with v15.3.0")
|
||||
* 2021-04-02 [`f3376ed`](https://github.com/nophead/NopSCADlib/commit/f3376edaf186b32f442b94d6d0b42f1ba0c7612c "show commit") [C.P.](# "Chris Palmer") Documented `xor()` function.
|
||||
|
||||
|
@@ -27,15 +27,16 @@
|
||||
// Setting $_bom in the local file overrides it in the local file but not in the libs.
|
||||
//
|
||||
rr_green = [0, 146/255, 0]; // RepRap logo colour
|
||||
crimson = [220/255, 20/255, 60/255];
|
||||
|
||||
$_bom = is_undef($bom) ? 0 : $bom; // 0 no bom, 1 assemblies and stls, 2 vitamins as well
|
||||
$exploded = is_undef($explode) ? 0 : $explode; // 1 for exploded view
|
||||
layer_height = is_undef($layer_height) ? 0.25 : $layer_height; // layer heigth when printing
|
||||
layer_height = is_undef($layer_height) ? 0.25 : $layer_height; // layer height when printing
|
||||
extrusion_width = is_undef($extrusion_width) ? 0.5 : $extrusion_width; // filament width when printing
|
||||
nozzle = is_undef($nozzle) ? 0.45 : $nozzle; // 3D printer nozzle
|
||||
cnc_bit_r = is_undef($cnc_bit_r) ? 1.2 : $cnc_bit_r; // minimum tool radius when milling 2D objects
|
||||
pp1_colour = is_undef($pp1_colour) ? rr_green : $pp1_colour; // printed part colour 1, RepRap logo colour
|
||||
pp2_colour = is_undef($pp2_colour) ? "Crimson" : $pp2_colour; // printed part colour 2
|
||||
pp2_colour = is_undef($pp2_colour) ? crimson : $pp2_colour; // printed part colour 2
|
||||
pp3_colour = is_undef($pp3_colour) ? "SteelBlue" : $pp3_colour; // printed part colour 3
|
||||
pp4_colour = is_undef($pp4_colour) ? "darkorange" : $pp4_colour;// printed part colour 4
|
||||
show_rays = is_undef($show_rays) ? false : $show_rays; // show camera sight lines and light direction
|
||||
|
2
lib.scad
@@ -28,6 +28,8 @@ include <vitamins/pcbs.scad>
|
||||
include <vitamins/batteries.scad>
|
||||
include <vitamins/bearing_blocks.scad>
|
||||
include <vitamins/blowers.scad>
|
||||
include <vitamins/bldc_motors.scad>
|
||||
include <vitamins/box_sections.scad>
|
||||
include <vitamins/bulldogs.scad>
|
||||
include <vitamins/buttons.scad>
|
||||
include <vitamins/cameras.scad>
|
||||
|
BIN
libtest.png
Before Width: | Height: | Size: 891 KiB After Width: | Height: | Size: 908 KiB |
16
libtest.scad
@@ -45,7 +45,9 @@ use <tests/ball_bearings.scad>
|
||||
use <tests/batteries.scad>
|
||||
use <tests/bearing_blocks.scad>
|
||||
use <tests/belts.scad>
|
||||
use <tests/BLDC_motors.scad>
|
||||
use <tests/blowers.scad>
|
||||
use <tests/box_sections.scad>
|
||||
use <tests/bulldogs.scad>
|
||||
use <tests/buttons.scad>
|
||||
use <tests/cable_strips.scad>
|
||||
@@ -368,10 +370,10 @@ extrusions_y = panel_meters_y + 80;
|
||||
translate([x3, veroboard_y])
|
||||
veroboard_test();
|
||||
|
||||
translate([x3 + 70, veroboard_y + 30])
|
||||
translate([x3 + 60, veroboard_y + 20])
|
||||
geared_steppers();
|
||||
|
||||
translate([x3 + 140, veroboard_y + 20])
|
||||
translate([x3 + 160, ssrs_y])
|
||||
pcb_mounts();
|
||||
|
||||
translate([x3 + 170, veroboard_y + 16])
|
||||
@@ -426,6 +428,9 @@ extrusion_brackets_y = rails_y + 250;
|
||||
sk_brackets_y = extrusion_brackets_y + 80;
|
||||
kp_pillow_blocks_y = sk_brackets_y + 50;
|
||||
scs_bearing_blocks_y = kp_pillow_blocks_y + 60;
|
||||
cable_strip_y = fans_y + 50;
|
||||
box_sections_y = cable_strip_y;
|
||||
BLDC_y = sheets_y;
|
||||
|
||||
translate([x4 + 200, belts_y + 58]) {
|
||||
belt_test();
|
||||
@@ -441,7 +446,7 @@ translate([x4 + 175, belts_y, -20])
|
||||
translate([x4, rails_y + 130])
|
||||
rails();
|
||||
|
||||
translate([770, fans_y + 50])
|
||||
translate([770, cable_strip_y])
|
||||
cable_strips();
|
||||
|
||||
translate([x4, kp_pillow_blocks_y])
|
||||
@@ -459,6 +464,11 @@ translate([x4 + 120, extrusion_brackets_y])
|
||||
translate([x4, scs_bearing_blocks_y])
|
||||
scs_bearing_blocks();
|
||||
|
||||
translate([x4, BLDC_y])
|
||||
bldc_motors();
|
||||
|
||||
translate([x6, box_sections_y])
|
||||
box_sections();
|
||||
|
||||
translate([x6, 125])
|
||||
light_strips();
|
||||
|
202
readme.md
@@ -20,32 +20,32 @@ A list of changes classified as breaking, additions or fixes is maintained in [C
|
||||
|
||||
## Table of Contents<a name="top"/>
|
||||
<table><tr>
|
||||
<th align="left"> Vitamins A-I </th><th align="left"> Vitamins J-Q </th><th align="left"> Vitamins R-Z </th><th align="left"> Printed </th><th align="left"> Utilities </th><th align="left"> Core Utilities </th></tr>
|
||||
<tr><td> <a href = "#Axials">Axials</a> </td><td> <a href = "#Jack">Jack</a> </td><td> <a href = "#Rails">Rails</a> </td><td> <a href = "#Box">Box</a> </td><td> <a href = "#Annotation">Annotation</a> </td><td> <a href = "#BOM">BOM</a> </td></tr>
|
||||
<tr><td> <a href = "#Ball_bearings">Ball_bearings</a> </td><td> <a href = "#LDRs">LDRs</a> </td><td> <a href = "#Ring_terminals">Ring_terminals</a> </td><td> <a href = "#Butt_box">Butt_box</a> </td><td> <a href = "#Bezier">Bezier</a> </td><td> <a href = "#Clip">Clip</a> </td></tr>
|
||||
<tr><td> <a href = "#Batteries">Batteries</a> </td><td> <a href = "#LED_meters">LED_meters</a> </td><td> <a href = "#Rockers">Rockers</a> </td><td> <a href = "#Cable_grommets">Cable_grommets</a> </td><td> <a href = "#Catenary">Catenary</a> </td><td> <a href = "#Global">Global</a> </td></tr>
|
||||
<tr><td> <a href = "#Bearing_blocks">Bearing_blocks</a> </td><td> <a href = "#LEDs">LEDs</a> </td><td> <a href = "#Rod">Rod</a> </td><td> <a href = "#Camera_housing">Camera_housing</a> </td><td> <a href = "#Core_xy">Core_xy</a> </td><td> <a href = "#Polyholes">Polyholes</a> </td></tr>
|
||||
<tr><td> <a href = "#Belts">Belts</a> </td><td> <a href = "#Leadnuts">Leadnuts</a> </td><td> <a href = "#SK_brackets">SK_brackets</a> </td><td> <a href = "#Carriers">Carriers</a> </td><td> <a href = "#Dogbones">Dogbones</a> </td><td> <a href = "#Rounded_rectangle">Rounded_rectangle</a> </td></tr>
|
||||
<tr><td> <a href = "#Blowers">Blowers</a> </td><td> <a href = "#Light_strips">Light_strips</a> </td><td> <a href = "#SMDs">SMDs</a> </td><td> <a href = "#Corner_block">Corner_block</a> </td><td> <a href = "#Fillet">Fillet</a> </td><td> <a href = "#Sphere">Sphere</a> </td></tr>
|
||||
<tr><td> <a href = "#Bulldogs">Bulldogs</a> </td><td> <a href = "#Linear_bearings">Linear_bearings</a> </td><td> <a href = "#SSRs">SSRs</a> </td><td> <a href = "#Door_hinge">Door_hinge</a> </td><td> <a href = "#Gears">Gears</a> </td><td> <a href = "#Teardrops">Teardrops</a> </td></tr>
|
||||
<tr><td> <a href = "#Buttons">Buttons</a> </td><td> <a href = "#Magnets">Magnets</a> </td><td> <a href = "#Screws">Screws</a> </td><td> <a href = "#Door_latch">Door_latch</a> </td><td> <a href = "#Hanging_hole">Hanging_hole</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Cable_strips">Cable_strips</a> </td><td> <a href = "#Mains_sockets">Mains_sockets</a> </td><td> <a href = "#Sealing_strip">Sealing_strip</a> </td><td> <a href = "#Drag_chain">Drag_chain</a> </td><td> <a href = "#Horiholes">Horiholes</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Cameras">Cameras</a> </td><td> <a href = "#Microswitches">Microswitches</a> </td><td> <a href = "#Shaft_couplings">Shaft_couplings</a> </td><td> <a href = "#Fan_guard">Fan_guard</a> </td><td> <a href = "#Layout">Layout</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Circlips">Circlips</a> </td><td> <a href = "#Microview">Microview</a> </td><td> <a href = "#Sheets">Sheets</a> </td><td> <a href = "#Fixing_block">Fixing_block</a> </td><td> <a href = "#Maths">Maths</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Components">Components</a> </td><td> <a href = "#Modules">Modules</a> </td><td> <a href = "#Spades">Spades</a> </td><td> <a href = "#Flat_hinge">Flat_hinge</a> </td><td> <a href = "#Offset">Offset</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#DIP">DIP</a> </td><td> <a href = "#Nuts">Nuts</a> </td><td> <a href = "#Spools">Spools</a> </td><td> <a href = "#Foot">Foot</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 = "#O_ring">O_ring</a> </td><td> <a href = "#Springs">Springs</a> </td><td> <a href = "#Handle">Handle</a> </td><td> <a href = "#Round">Round</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Displays">Displays</a> </td><td> <a href = "#Opengrab">Opengrab</a> </td><td> <a href = "#Stepper_motors">Stepper_motors</a> </td><td> <a href = "#PCB_mount">PCB_mount</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 = "#PCB">PCB</a> </td><td> <a href = "#Swiss_clips">Swiss_clips</a> </td><td> <a href = "#PSU_shroud">PSU_shroud</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 = "#PCBs">PCBs</a> </td><td> <a href = "#Toggles">Toggles</a> </td><td> <a href = "#Pocket_handle">Pocket_handle</a> </td><td> <a href = "#Rounded_triangle">Rounded_triangle</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Fans">Fans</a> </td><td> <a href = "#PSUs">PSUs</a> </td><td> <a href = "#Transformers">Transformers</a> </td><td> <a href = "#Press_fit">Press_fit</a> </td><td> <a href = "#Sector">Sector</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Fuseholder">Fuseholder</a> </td><td> <a href = "#Panel_meters">Panel_meters</a> </td><td> <a href = "#Tubings">Tubings</a> </td><td> <a href = "#Printed_box">Printed_box</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 = "#Pillars">Pillars</a> </td><td> <a href = "#Variacs">Variacs</a> </td><td> <a href = "#Printed_pulleys">Printed_pulleys</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 = "#Pillow_blocks">Pillow_blocks</a> </td><td> <a href = "#Veroboard">Veroboard</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 = "#Pin_headers">Pin_headers</a> </td><td> <a href = "#Washers">Washers</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 = "#Pulleys">Pulleys</a> </td><td> <a href = "#Wire">Wire</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></td><td> <a href = "#Zipties">Zipties</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></td><td></td><td> <a href = "#Strap_handle">Strap_handle</a> </td><td></td><td></td></tr>
|
||||
<th align="left"> Vitamins A-H </th><th align="left"> Vitamins I-Q </th><th align="left"> Vitamins R-Z </th><th align="left"> Printed </th><th align="left"> Utilities </th><th align="left"> Core Utilities </th></tr>
|
||||
<tr><td> <a href = "#Axials">Axials</a> </td><td> <a href = "#IECs">IECs</a> </td><td> <a href = "#Rails">Rails</a> </td><td> <a href = "#Box">Box</a> </td><td> <a href = "#Annotation">Annotation</a> </td><td> <a href = "#BOM">BOM</a> </td></tr>
|
||||
<tr><td> <a href = "#BLDC_motors">BLDC_motors</a> </td><td> <a href = "#Inserts">Inserts</a> </td><td> <a href = "#Ring_terminals">Ring_terminals</a> </td><td> <a href = "#Butt_box">Butt_box</a> </td><td> <a href = "#Bezier">Bezier</a> </td><td> <a href = "#Clip">Clip</a> </td></tr>
|
||||
<tr><td> <a href = "#Ball_bearings">Ball_bearings</a> </td><td> <a href = "#Jack">Jack</a> </td><td> <a href = "#Rockers">Rockers</a> </td><td> <a href = "#Cable_grommets">Cable_grommets</a> </td><td> <a href = "#Catenary">Catenary</a> </td><td> <a href = "#Global">Global</a> </td></tr>
|
||||
<tr><td> <a href = "#Batteries">Batteries</a> </td><td> <a href = "#LDRs">LDRs</a> </td><td> <a href = "#Rod">Rod</a> </td><td> <a href = "#Camera_housing">Camera_housing</a> </td><td> <a href = "#Core_xy">Core_xy</a> </td><td> <a href = "#Polyholes">Polyholes</a> </td></tr>
|
||||
<tr><td> <a href = "#Bearing_blocks">Bearing_blocks</a> </td><td> <a href = "#LED_meters">LED_meters</a> </td><td> <a href = "#SK_brackets">SK_brackets</a> </td><td> <a href = "#Carriers">Carriers</a> </td><td> <a href = "#Dogbones">Dogbones</a> </td><td> <a href = "#Rounded_rectangle">Rounded_rectangle</a> </td></tr>
|
||||
<tr><td> <a href = "#Belts">Belts</a> </td><td> <a href = "#LEDs">LEDs</a> </td><td> <a href = "#SMDs">SMDs</a> </td><td> <a href = "#Corner_block">Corner_block</a> </td><td> <a href = "#Fillet">Fillet</a> </td><td> <a href = "#Sphere">Sphere</a> </td></tr>
|
||||
<tr><td> <a href = "#Blowers">Blowers</a> </td><td> <a href = "#Leadnuts">Leadnuts</a> </td><td> <a href = "#SSRs">SSRs</a> </td><td> <a href = "#Door_hinge">Door_hinge</a> </td><td> <a href = "#Gears">Gears</a> </td><td> <a href = "#Teardrops">Teardrops</a> </td></tr>
|
||||
<tr><td> <a href = "#Box_sections">Box_sections</a> </td><td> <a href = "#Light_strips">Light_strips</a> </td><td> <a href = "#Screws">Screws</a> </td><td> <a href = "#Door_latch">Door_latch</a> </td><td> <a href = "#Hanging_hole">Hanging_hole</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Bulldogs">Bulldogs</a> </td><td> <a href = "#Linear_bearings">Linear_bearings</a> </td><td> <a href = "#Sealing_strip">Sealing_strip</a> </td><td> <a href = "#Drag_chain">Drag_chain</a> </td><td> <a href = "#Horiholes">Horiholes</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Buttons">Buttons</a> </td><td> <a href = "#Magnets">Magnets</a> </td><td> <a href = "#Shaft_couplings">Shaft_couplings</a> </td><td> <a href = "#Fan_guard">Fan_guard</a> </td><td> <a href = "#Layout">Layout</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Cable_strips">Cable_strips</a> </td><td> <a href = "#Mains_sockets">Mains_sockets</a> </td><td> <a href = "#Sheets">Sheets</a> </td><td> <a href = "#Fixing_block">Fixing_block</a> </td><td> <a href = "#Maths">Maths</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Cameras">Cameras</a> </td><td> <a href = "#Microswitches">Microswitches</a> </td><td> <a href = "#Spades">Spades</a> </td><td> <a href = "#Flat_hinge">Flat_hinge</a> </td><td> <a href = "#Offset">Offset</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Circlips">Circlips</a> </td><td> <a href = "#Microview">Microview</a> </td><td> <a href = "#Spools">Spools</a> </td><td> <a href = "#Foot">Foot</a> </td><td> <a href = "#Quadrant">Quadrant</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Components">Components</a> </td><td> <a href = "#Modules">Modules</a> </td><td> <a href = "#Springs">Springs</a> </td><td> <a href = "#Handle">Handle</a> </td><td> <a href = "#Round">Round</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#DIP">DIP</a> </td><td> <a href = "#Nuts">Nuts</a> </td><td> <a href = "#Stepper_motors">Stepper_motors</a> </td><td> <a href = "#PCB_mount">PCB_mount</a> </td><td> <a href = "#Rounded_cylinder">Rounded_cylinder</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#D_connectors">D_connectors</a> </td><td> <a href = "#O_ring">O_ring</a> </td><td> <a href = "#Swiss_clips">Swiss_clips</a> </td><td> <a href = "#PSU_shroud">PSU_shroud</a> </td><td> <a href = "#Rounded_polygon">Rounded_polygon</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Displays">Displays</a> </td><td> <a href = "#Opengrab">Opengrab</a> </td><td> <a href = "#Toggles">Toggles</a> </td><td> <a href = "#Pocket_handle">Pocket_handle</a> </td><td> <a href = "#Rounded_triangle">Rounded_triangle</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Extrusion_brackets">Extrusion_brackets</a> </td><td> <a href = "#PCB">PCB</a> </td><td> <a href = "#Transformers">Transformers</a> </td><td> <a href = "#Press_fit">Press_fit</a> </td><td> <a href = "#Sector">Sector</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Extrusions">Extrusions</a> </td><td> <a href = "#PCBs">PCBs</a> </td><td> <a href = "#Tubings">Tubings</a> </td><td> <a href = "#Printed_box">Printed_box</a> </td><td> <a href = "#Sweep">Sweep</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Fans">Fans</a> </td><td> <a href = "#PSUs">PSUs</a> </td><td> <a href = "#Variacs">Variacs</a> </td><td> <a href = "#Printed_pulleys">Printed_pulleys</a> </td><td> <a href = "#Thread">Thread</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Fuseholder">Fuseholder</a> </td><td> <a href = "#Panel_meters">Panel_meters</a> </td><td> <a href = "#Veroboard">Veroboard</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 = "#Geared_steppers">Geared_steppers</a> </td><td> <a href = "#Pillars">Pillars</a> </td><td> <a href = "#Washers">Washers</a> </td><td> <a href = "#SSR_shroud">SSR_shroud</a> </td><td></td><td></td></tr>
|
||||
<tr><td> <a href = "#Green_terminals">Green_terminals</a> </td><td> <a href = "#Pillow_blocks">Pillow_blocks</a> </td><td> <a href = "#Wire">Wire</a> </td><td> <a href = "#Screw_knob">Screw_knob</a> </td><td></td><td></td></tr>
|
||||
<tr><td> <a href = "#Hot_ends">Hot_ends</a> </td><td> <a href = "#Pin_headers">Pin_headers</a> </td><td> <a href = "#Zipties">Zipties</a> </td><td> <a href = "#Socket_box">Socket_box</a> </td><td></td><td></td></tr>
|
||||
<tr><td> <a href = "#Hygrometer">Hygrometer</a> </td><td> <a href = "#Pulleys">Pulleys</a> </td><td></td><td> <a href = "#Strap_handle">Strap_handle</a> </td><td></td><td></td></tr>
|
||||
</table>
|
||||
|
||||
---
|
||||
@@ -334,6 +334,73 @@ Individual teeth are not drawn, instead they are represented by a lighter colour
|
||||
| 6 | `screw(M3_grub_screw, 6)` | Screw M3 grub x 6mm |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
|
||||
---
|
||||
<a name="BLDC_motors"></a>
|
||||
## BLDC_motors
|
||||
Brushless DC electric motor
|
||||
|
||||
[vitamins/bldc_motors.scad](vitamins/bldc_motors.scad) Object definitions.
|
||||
|
||||
[vitamins/bldc_motor.scad](vitamins/bldc_motor.scad) Implementation.
|
||||
|
||||
[tests/BLDC_motors.scad](tests/BLDC_motors.scad) Code for this example.
|
||||
|
||||
### Properties
|
||||
| Function | Description |
|
||||
|:--- |:--- |
|
||||
| `BLDC_base_diameter(type)` | Base diameter |
|
||||
| `BLDC_base_height_1(type)` | Base height 1 |
|
||||
| `BLDC_base_height_2(type)` | Base height 2 |
|
||||
| `BLDC_base_hole_diameter(type)` | Base hole diameter |
|
||||
| `BLDC_base_holes(type)` | Base holes |
|
||||
| `BLDC_base_open(type)` | Base open |
|
||||
| `BLDC_bell_diameter(type)` | Bell diameter |
|
||||
| `BLDC_bell_height_1(type)` | Bell height 1 |
|
||||
| `BLDC_bell_height_2(type)` | Bell height 2 |
|
||||
| `BLDC_bell_hole_diameter(type)` | Bell hole diameter |
|
||||
| `BLDC_bell_holes(type)` | Bell holes |
|
||||
| `BLDC_bell_spokes(type)` | Bell spoke count |
|
||||
| `BLDC_body_colour(type)` | Body colour |
|
||||
| `BLDC_boss_diameter(type)` | Boss diameter |
|
||||
| `BLDC_boss_height(type)` | Boss height |
|
||||
| `BLDC_diameter(type)` | Diameter of motor |
|
||||
| `BLDC_height(type)` | Height of motor including boss, if any, but excluding prop shaft |
|
||||
| `BLDC_prop_shaft_diameter(type)` | Diameter of unthreaded portion of prop shaft |
|
||||
| `BLDC_prop_shaft_length(type)` | Prop shaft length, including threaded section |
|
||||
| `BLDC_prop_shaft_thread_diameter(type)` | Diameter of threaded section of prop shaft |
|
||||
| `BLDC_prop_shaft_thread_length(type)` | Length of threaded section of prop shaft |
|
||||
| `BLDC_shaft_diameter(type)` | shaft diameter |
|
||||
| `BLDC_shaft_length(type)` | Total shaft length |
|
||||
| `BLDC_shaft_offset(type)` | shaft offset from base |
|
||||
| `BLDC_side_colour(type)` | Side colour |
|
||||
| `BLDC_wire_diameter(type)` | Wire diameter |
|
||||
|
||||
### Modules
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
| `BLDC(type)` | Draw specified BLDC motor |
|
||||
| `BLDC_base_screw_positions(type, n = 4)` | Positions children at the base screw holes |
|
||||
| `BLDC_bell_screw_positions(type, n = 4)` | Positions children at the bell screw holes |
|
||||
| `BLDC_screw_positions(holes, n = 4)` | Screw positions utility function |
|
||||
|
||||

|
||||
|
||||
### Vitamins
|
||||
| Qty | Module call | BOM entry |
|
||||
| ---:|:--- |:---|
|
||||
| 1 | `BLDC(BLDC0603)` | Brushless DC motor BLDC0603 |
|
||||
| 1 | `BLDC(BLDC0802)` | Brushless DC motor BLDC0802 |
|
||||
| 1 | `BLDC(BLDC1105)` | Brushless DC motor BLDC1105 |
|
||||
| 1 | `BLDC(BLDC1306)` | Brushless DC motor BLDC1306 |
|
||||
| 1 | `BLDC(BLDC1804)` | Brushless DC motor BLDC1804 |
|
||||
| 1 | `BLDC(BLDC2205)` | Brushless DC motor BLDC2205 |
|
||||
| 1 | `BLDC(BLDC2212)` | Brushless DC motor BLDC2212 |
|
||||
| 1 | `BLDC(BLDC3548)` | Brushless DC motor BLDC3548 |
|
||||
| 1 | `BLDC(BLDC4250)` | Brushless DC motor BLDC4250 |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
|
||||
---
|
||||
@@ -373,6 +440,7 @@ Models of radial blowers.
|
||||
|:--- |:--- |
|
||||
| `blower_casing_is_square(type)` | True for square radial fans, false for spiral shape radial blowers |
|
||||
| `blower_exit_offset(type)` | Offset of exit's centre from the edge |
|
||||
| `blower_size(type)` | Size |
|
||||
|
||||
### Modules
|
||||
| Module | Description |
|
||||
@@ -399,6 +467,44 @@ Models of radial blowers.
|
||||
| 2 | `washer(M4_washer)` | Washer M4 x 9mm x 0.8mm |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
|
||||
---
|
||||
<a name="Box_sections"></a>
|
||||
## Box_sections
|
||||
Box sections.
|
||||
|
||||
[vitamins/box_sections.scad](vitamins/box_sections.scad) Object definitions.
|
||||
|
||||
[vitamins/box_section.scad](vitamins/box_section.scad) Implementation.
|
||||
|
||||
[tests/box_sections.scad](tests/box_sections.scad) Code for this example.
|
||||
|
||||
### Properties
|
||||
| Function | Description |
|
||||
|:--- |:--- |
|
||||
| `box_section_colour(type)` | Colour |
|
||||
| `box_section_colour2(type)` | Colour2, for woven box section |
|
||||
| `box_section_fillet(type)` | Fillet |
|
||||
| `box_section_material(type)` | Material description |
|
||||
| `box_section_size(type)` | Size |
|
||||
| `box_section_thickness(type)` | Wall thickness |
|
||||
|
||||
### Functions
|
||||
| Function | Description |
|
||||
|:--- |:--- |
|
||||
| `box_section_is_woven(type)` | Box section is woven, eg carbon fiber |
|
||||
|
||||

|
||||
|
||||
### Vitamins
|
||||
| Qty | Module call | BOM entry |
|
||||
| ---:|:--- |:---|
|
||||
| 1 | `box_section(AL12x8x1, 100)` | Aluminium rectangular box section 12mm x 8mm x 1mm, length 100mm |
|
||||
| 1 | `box_section(AL20x20x2, 100)` | Aluminium rectangular box section 20mm x 20mm x 2mm, length 100mm |
|
||||
| 1 | `box_section(CF10x10x1, 100)` | Carbon fiber rectangular box section 10mm x 10mm x 1mm, length 100mm |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
|
||||
---
|
||||
@@ -1053,23 +1159,23 @@ Geared tin can steppers
|
||||
|:--- |:--- |
|
||||
| `gs_boss_d(type)` | Boss around the shaft diameter |
|
||||
| `gs_boss_h(type)` | Boss around the shaft height |
|
||||
| `gs_bulge2_d(type)` | Plastic rear bulge depth from centre |
|
||||
| `gs_bulge2_h(type)` | Plastic rear bulge height |
|
||||
| `gs_bulge2_w(type)` | Plastic rear bulge width |
|
||||
| `gs_bulge_d(type)` | Plastic bulge depth from centre |
|
||||
| `gs_bulge_h(type)` | Plastic bulge height |
|
||||
| `gs_bulge_w(type)` | Plastic bulge width |
|
||||
| `gs_bulge(type)` | Plastic bulge width, depth, height, z offset |
|
||||
| `gs_bulge2(type)` | Plastic rear bulge width, depth, height |
|
||||
| `gs_diameter(type)` | Can diameter |
|
||||
| `gs_flat_length(type)` | Shaft flat length |
|
||||
| `gs_height(type)` | Can height |
|
||||
| `gs_hole_d(type)` | Screw hole diameter |
|
||||
| `gs_lug_t(type)` | Screw lug thickness |
|
||||
| `gs_lug_w(type)` | Screw lug width |
|
||||
| `gs_motor(type)` | Motor diameter and height if separate from gearbox |
|
||||
| `gs_offset(type)` | Offset of the shaft from the centre of the can |
|
||||
| `gs_pitch(type)` | Screw pitch |
|
||||
| `gs_radius(type)` | Top - or bottom + corner radius |
|
||||
| `gs_shaft_d(type)` | Shaft diameter |
|
||||
| `gs_shaft_flat(type)` | Shaft width across the flats |
|
||||
| `gs_shaft_length(type)` | Shaft length |
|
||||
| `gs_wire_d(type)` | Wire diameter |
|
||||
| `gs_wires(type)` | Wire colours and grouping |
|
||||
|
||||
### Modules
|
||||
| Module | Description |
|
||||
@@ -1083,6 +1189,7 @@ Geared tin can steppers
|
||||
| Qty | Module call | BOM entry |
|
||||
| ---:|:--- |:---|
|
||||
| 1 | `geared_stepper(28BYJ_48)` | Geared stepper - 28BYJ-48 5V |
|
||||
| 1 | `geared_stepper(35BYGHJ75)` | Geared stepper - 35BYGHJ75 0.4A |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
@@ -1445,7 +1552,7 @@ Nuts for leadscrews.
|
||||
| `leadnut_flange_t(type)` | Flange thickness |
|
||||
| `leadnut_height(type)` | Total height |
|
||||
| `leadnut_hole_dia(type)` | The diameter of the screw holes |
|
||||
| `leadnut_hole_pitch(type)` | The radia pitch of the screw holes |
|
||||
| `leadnut_hole_pitch(type)` | The radial pitch of the screw holes |
|
||||
| `leadnut_holes(type)` | The number of screw holes |
|
||||
| `leadnut_lead(type)` | Screw lead |
|
||||
| `leadnut_od(type)` | Outer diameter of the shank |
|
||||
@@ -2157,6 +2264,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
### Functions
|
||||
| Function | Description |
|
||||
|:--- |:--- |
|
||||
| `pcb_component(type, name, index = 0)` | Return the component specified by name and index |
|
||||
| `pcb_component_position(type, name, index = 0)` | Return x y position of specified component |
|
||||
| `pcb_coord(type, p)` | Convert offsets from the edge to coordinates relative to the centre |
|
||||
| `pcb_grid_pos(type, x, y, z = 0)` | Returns a pcb grid position |
|
||||
@@ -2293,6 +2401,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
### Functions
|
||||
| Function | Description |
|
||||
|:--- |:--- |
|
||||
| `pcb_component(type, name, index = 0)` | Return the component specified by name and index |
|
||||
| `pcb_component_position(type, name, index = 0)` | Return x y position of specified component |
|
||||
| `pcb_coord(type, p)` | Convert offsets from the edge to coordinates relative to the centre |
|
||||
| `pcb_grid_pos(type, x, y, z = 0)` | Returns a pcb grid position |
|
||||
@@ -2627,6 +2736,7 @@ Face order is bottom, top, left, right, front, back.
|
||||
| Function | Description |
|
||||
|:--- |:--- |
|
||||
| `psu_face_transform(type, face)` | Returns a transformation matrix to get to the specified face |
|
||||
| `psu_size(type)` | Size |
|
||||
| `terminal_block_length(type, ways)` | Total length of terminal block |
|
||||
|
||||
### Modules
|
||||
@@ -2699,7 +2809,7 @@ Timing belt pulleys, both toothed and plain with internal bearings for idlers.
|
||||
### Modules
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
| `pulley(type, colour = silver)` | Draw a pulley |
|
||||
| `pulley(type, colour = silver)` | Draw a pulley, any children are placed above. |
|
||||
| `pulley_assembly(type, colour = silver)` | Draw a pulley with its grub screws in place |
|
||||
|
||||

|
||||
@@ -2786,26 +2896,35 @@ Linear rails with carriages.
|
||||
### Vitamins
|
||||
| Qty | Module call | BOM entry |
|
||||
| ---:|:--- |:---|
|
||||
| 2 | `rail(MGN12, 200)` | Linear rail MGN12 x 200mm |
|
||||
| 1 | `rail(MGN12, 200)` | Linear rail MGN12 x 200mm |
|
||||
| 1 | `rail(MGN15, 200)` | Linear rail MGN15 x 200mm |
|
||||
| 1 | `rail(MGN5, 200)` | Linear rail MGN5 x 200mm |
|
||||
| 1 | `rail(MGN7, 200)` | Linear rail MGN7 x 200mm |
|
||||
| 1 | `rail(MGN9, 200)` | Linear rail MGN9 x 200mm |
|
||||
| 1 | `rail(SSR15, 200)` | Linear rail SSR15 x 200mm |
|
||||
| 1 | `carriage(MGN12C_carriage)` | Linear rail carriage MGN12C |
|
||||
| 1 | `carriage(MGN12H_carriage)` | Linear rail carriage MGN12H |
|
||||
| 1 | `carriage(MGN15C_carriage)` | Linear rail carriage MGN15C |
|
||||
| 1 | `carriage(MGN5C_carriage)` | Linear rail carriage MGN5C |
|
||||
| 1 | `carriage(MGN7C_carriage)` | Linear rail carriage MGN7C |
|
||||
| 1 | `carriage(MGN7H_carriage)` | Linear rail carriage MGN7H |
|
||||
| 1 | `carriage(MGN9C_carriage)` | Linear rail carriage MGN9C |
|
||||
| 1 | `carriage(MGN9H_carriage)` | Linear rail carriage MGN9H |
|
||||
| 1 | `carriage(SSR15_carriage)` | Linear rail carriage SSR15 |
|
||||
| 26 | `nut(M2_nut, nyloc = true)` | Nut M2 x 1.6mm nyloc |
|
||||
| 31 | `nut(M3_nut, nyloc = true)` | Nut M3 x 2.4mm nyloc |
|
||||
| 23 | `nut(M3_nut, nyloc = true)` | Nut M3 x 2.4mm nyloc |
|
||||
| 4 | `nut(M4_nut, nyloc = true)` | Nut M4 x 3.2mm nyloc |
|
||||
| 11 | `screw(M2_cap_screw, 10)` | Screw M2 cap x 10mm |
|
||||
| 15 | `screw(M2_cs_cap_screw, 10)` | Screw M2 cs cap x 10mm |
|
||||
| 8 | `screw(M3_cap_screw, 10)` | Screw M3 cap x 10mm |
|
||||
| 12 | `screw(M3_cap_screw, 12)` | Screw M3 cap x 12mm |
|
||||
| 6 | `screw(M3_cap_screw, 12)` | Screw M3 cap x 12mm |
|
||||
| 3 | `screw(M3_cap_screw, 16)` | Screw M3 cap x 16mm |
|
||||
| 2 | `screw(M3_cs_cap_screw, 12)` | Screw M3 cs cap x 12mm |
|
||||
| 6 | `screw(M3_cs_cap_screw, 16)` | Screw M3 cs cap x 16mm |
|
||||
| 4 | `screw(M3_cs_cap_screw, 16)` | Screw M3 cs cap x 16mm |
|
||||
| 2 | `screw(M4_cap_screw, 16)` | Screw M4 cap x 16mm |
|
||||
| 2 | `screw(M4_cs_cap_screw, 20)` | Screw M4 cs cap x 20mm |
|
||||
| 26 | `washer(M2_washer)` | Washer M2 x 5mm x 0.3mm |
|
||||
| 31 | `washer(M3_washer)` | Washer M3 x 7mm x 0.5mm |
|
||||
| 23 | `washer(M3_washer)` | Washer M3 x 7mm x 0.5mm |
|
||||
| 4 | `washer(M4_washer)` | Washer M4 x 9mm x 0.8mm |
|
||||
|
||||
|
||||
@@ -3047,6 +3166,7 @@ For an explanation of `screw_polysink()` see <https://hydraraptor.blogspot.com/2
|
||||
| 1 | `screw(No4_screw, 10)` | Screw No4 pan wood x 10mm |
|
||||
| 1 | `screw(No6_cs_screw, 30)` | Screw No6 cs wood x 30mm |
|
||||
| 1 | `screw(No6_screw, 30)` | Screw No6 pan wood x 30mm |
|
||||
| 1 | `screw(No8_screw, 30)` | Screw No8 pan wood x 30mm |
|
||||
|
||||
### Printed
|
||||
| Qty | Filename |
|
||||
@@ -5633,8 +5753,8 @@ allows flexible positioning of the motors.
|
||||
### Modules
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
| `coreXY(type, size, pos, separation, x_gap, plain_idler_offset = 0, upper_drive_pulley_offset, lower_drive_pulley_offset, show_pulleys = false)` | Wrapper module to draw both belts of a coreXY setup |
|
||||
| `coreXY_belts(type, carriagePosition, coreXYPosBL, coreXYPosTR, separation, x_gap = 20, upper_drive_pulley_offset = [0, 0], lower_drive_pulley_offset = [0, 0], show_pulleys = false)` | Draw the coreXY belts |
|
||||
| `coreXY(type, size, pos, separation, x_gap, plain_idler_offset = 0, upper_drive_pulley_offset, lower_drive_pulley_offset, show_pulleys = false, left_lower = false)` | Wrapper module to draw both belts of a coreXY setup |
|
||||
| `coreXY_belts(type, carriagePosition, coreXYPosBL, coreXYPosTR, separation, x_gap = 20, upper_drive_pulley_offset = [0, 0], lower_drive_pulley_offset = [0, 0], show_pulleys = false, left_lower = false)` | Draw the coreXY belts |
|
||||
| `coreXY_half(type, size, pos, separation_y = 0, x_gap = 0, plain_idler_offset = 0, drive_pulley_offset = [0, 0], show_pulleys = false, lower_belt = false, hflip = false)` | Draw one belt of a coreXY setup |
|
||||
|
||||

|
||||
|
@@ -173,7 +173,7 @@ def tests(tests):
|
||||
impl_name = None
|
||||
|
||||
if libtest:
|
||||
vsplit = "AJR" + chr(ord('Z') + 1)
|
||||
vsplit = "AIR" + chr(ord('Z') + 1)
|
||||
vtype = locations[0][1]
|
||||
types = [vtype + ' ' + vsplit[i] + '-' + chr(ord(vsplit[i + 1]) - 1) for i in range(len(vsplit) - 1)] + [loc[1] for loc in locations[1 :]]
|
||||
if type == vtype:
|
||||
|
31
tests/BLDC_motors.scad
Normal file
@@ -0,0 +1,31 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2021
|
||||
// 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/bldc_motors.scad>
|
||||
|
||||
module bldc_motors()
|
||||
layout([for(b = bldc_motors) BLDC_diameter(b)])
|
||||
rotate(-90)
|
||||
BLDC(bldc_motors[$i]);
|
||||
|
||||
if($preview)
|
||||
let($show_threads = 1)
|
||||
bldc_motors();
|
@@ -20,10 +20,10 @@
|
||||
//
|
||||
//! BOM and assembly demonstration
|
||||
//
|
||||
$explode = 1; // Normally set on the command line when generating assembly views with views.py
|
||||
include <../core.scad>
|
||||
include <../vitamins/sheets.scad>
|
||||
use <../vitamins/insert.scad>
|
||||
$explode = 1; // Normally set on the command line when generating assembly views with views.py
|
||||
|
||||
screw = M3_cap_screw;
|
||||
sheet = PMMA3;
|
||||
|
@@ -16,6 +16,7 @@
|
||||
// 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>
|
||||
include <../vitamins/ldrs.scad>
|
||||
|
||||
use <../utils/layout.scad>
|
||||
|
@@ -16,7 +16,7 @@
|
||||
// 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/ball_bearings.scad>
|
||||
|
30
tests/box_sections.scad
Normal file
@@ -0,0 +1,30 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2021
|
||||
// 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 <../utils/core/core.scad>
|
||||
use <../utils/layout.scad>
|
||||
|
||||
include <../vitamins/box_sections.scad>
|
||||
|
||||
module box_sections() {
|
||||
layout([for(b = box_sections) box_section_size(b).x], 20)
|
||||
box_section(box_sections[$i], 100);
|
||||
}
|
||||
|
||||
if($preview)
|
||||
box_sections();
|
@@ -16,6 +16,7 @@
|
||||
// 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/displays.scad>
|
||||
|
@@ -16,12 +16,13 @@
|
||||
// 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>
|
||||
include <../vitamins/geared_steppers.scad>
|
||||
|
||||
use <../utils/layout.scad>
|
||||
|
||||
module geared_steppers()
|
||||
layout([for(g = geared_steppers) gs_diameter(g)], 5)
|
||||
layout([for(g = geared_steppers) max(gs_diameter(g), gs_pitch(g) + gs_lug_w(g) / 2)], 5)
|
||||
geared_stepper(geared_steppers[$i]);
|
||||
|
||||
geared_steppers();
|
||||
|
@@ -16,6 +16,7 @@
|
||||
// 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/green_terminals.scad>
|
||||
|
@@ -16,6 +16,7 @@
|
||||
// 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 <../vitamins/hygrometer.scad>
|
||||
|
||||
if($preview)
|
||||
|
@@ -16,6 +16,7 @@
|
||||
// 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 <../vitamins/microview.scad>
|
||||
|
||||
microview(!$preview);
|
||||
|
@@ -16,6 +16,7 @@
|
||||
// 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 <../vitamins/o_ring.scad>
|
||||
|
||||
module o_rings()
|
||||
|
BIN
tests/png/bldc_motors.png
Normal file
After Width: | Height: | Size: 142 KiB |
BIN
tests/png/box_sections.png
Normal file
After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 160 KiB |
@@ -16,8 +16,8 @@
|
||||
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
||||
// If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
|
||||
include <../printed/press_fit.scad>
|
||||
include <../core.scad>
|
||||
use <../printed/press_fit.scad>
|
||||
|
||||
module press_fits()
|
||||
{
|
||||
|
@@ -22,21 +22,28 @@ include <../vitamins/rails.scad>
|
||||
use <../utils/layout.scad>
|
||||
use <../vitamins/nut.scad>
|
||||
|
||||
length = 200;
|
||||
sheet = 3;
|
||||
pos = 1; //[-1 : 0.1 : 1]
|
||||
|
||||
function rail_carriages(rail) = [for(c = carriages) if(carriage_rail(c) == rail) c];
|
||||
|
||||
module rails()
|
||||
layout([for(l = carriages) carriage_width(l)], 20)
|
||||
layout([for(r = rails) carriage_width(rail_carriages(r)[0])], 20)
|
||||
rotate(-90) {
|
||||
carriage = carriages[$i];
|
||||
rail = carriage_rail(carriage);
|
||||
length = 200;
|
||||
rail = rails[$i];
|
||||
carriages = rail_carriages(rail);
|
||||
carriage = carriages[0];
|
||||
screw = rail_screw(rail);
|
||||
nut = screw_nut(screw);
|
||||
washer = screw_washer(screw);
|
||||
|
||||
rail_assembly(carriage, length, pos * carriage_travel(carriage, length) / 2, $i<2 ? grey(20) : "green", $i<2 ? grey(20) : "red");
|
||||
|
||||
if(len(carriages) > 1)
|
||||
translate([-carriage_travel(carriages[1], length) / 2, 0])
|
||||
carriage(carriages[1]);
|
||||
|
||||
rail_screws(rail, length, sheet + nut_thickness(nut, true) + washer_thickness(washer));
|
||||
|
||||
rail_hole_positions(rail, length, 0)
|
||||
|
@@ -180,24 +180,25 @@ module coreXY_half(type, size, pos, separation_y = 0, x_gap = 0, plain_idler_off
|
||||
tooth_colour = lower_belt ? coreXY_lower_tooth_colour(type) : coreXY_upper_tooth_colour(type));
|
||||
}
|
||||
|
||||
module coreXY(type, size, pos, separation, x_gap, plain_idler_offset = 0, upper_drive_pulley_offset, lower_drive_pulley_offset, show_pulleys = false) { //! Wrapper module to draw both belts of a coreXY setup
|
||||
module coreXY(type, size, pos, separation, x_gap, plain_idler_offset = 0, upper_drive_pulley_offset, lower_drive_pulley_offset, show_pulleys = false, left_lower = false) { //! Wrapper module to draw both belts of a coreXY setup
|
||||
translate([size.x / 2 - separation.x / 2, size.y / 2, -separation.z / 2]) {
|
||||
// lower belt
|
||||
hflip()
|
||||
hflip(!left_lower)
|
||||
explode(25)
|
||||
coreXY_half(type, size, [size.x - pos.x - separation.x, pos.y], separation.y, x_gap, plain_idler_offset, [-lower_drive_pulley_offset.x, lower_drive_pulley_offset.y], show_pulleys, lower_belt = true, hflip = true);
|
||||
coreXY_half(type, size, [size.x - pos.x - separation.x/2 - (left_lower ? x_gap : 0), pos.y], separation.y, x_gap, plain_idler_offset, [-lower_drive_pulley_offset.x, lower_drive_pulley_offset.y], show_pulleys, lower_belt = true, hflip = true);
|
||||
|
||||
// upper belt
|
||||
translate([separation.x, 0, separation.z])
|
||||
explode(25)
|
||||
coreXY_half(type, size, [pos.x, pos.y], separation.y, x_gap, plain_idler_offset, upper_drive_pulley_offset, show_pulleys, lower_belt = false, hflip=false);
|
||||
hflip(left_lower)
|
||||
explode(25)
|
||||
coreXY_half(type, size, [pos.x + separation.x/2 + (left_lower ? x_gap : 0), pos.y], separation.y, x_gap, plain_idler_offset, upper_drive_pulley_offset, show_pulleys, lower_belt = false, hflip = false);
|
||||
}
|
||||
}
|
||||
|
||||
module coreXY_belts(type, carriagePosition, coreXYPosBL, coreXYPosTR, separation, x_gap = 20, upper_drive_pulley_offset = [0, 0], lower_drive_pulley_offset = [0, 0], show_pulleys = false) { //! Draw the coreXY belts
|
||||
module coreXY_belts(type, carriagePosition, coreXYPosBL, coreXYPosTR, separation, x_gap = 20, upper_drive_pulley_offset = [0, 0], lower_drive_pulley_offset = [0, 0], show_pulleys = false, left_lower = false) { //! Draw the coreXY belts
|
||||
assert(coreXYPosBL.z == coreXYPosTR.z);
|
||||
|
||||
coreXYSize = coreXYPosTR - coreXYPosBL;
|
||||
translate(coreXYPosBL)
|
||||
coreXY(type, coreXYSize, [carriagePosition.x - coreXYPosBL.x + separation.x / 2, carriagePosition.y - coreXYPosBL.y], separation = separation, x_gap = x_gap, plain_idler_offset = 0, upper_drive_pulley_offset = upper_drive_pulley_offset, lower_drive_pulley_offset = lower_drive_pulley_offset, show_pulleys = show_pulleys);
|
||||
coreXY(type, coreXYSize, [carriagePosition.x - coreXYPosBL.x, carriagePosition.y - coreXYPosBL.y], separation = separation, x_gap = x_gap, plain_idler_offset = 0, upper_drive_pulley_offset = upper_drive_pulley_offset, lower_drive_pulley_offset = lower_drive_pulley_offset, show_pulleys = show_pulleys, left_lower = left_lower);
|
||||
}
|
||||
|
@@ -77,7 +77,7 @@ module rounded_polygon(points, _tangents = undef) { //! Draw the rounded polygon
|
||||
indices = [0 : len - 1];
|
||||
tangents = [ for (t = _tangents ? _tangents : rounded_polygon_tangents(points)) each [t.x, t.y] ];
|
||||
|
||||
difference(convexity = points) {
|
||||
difference() {
|
||||
union() {
|
||||
for(i = indices)
|
||||
if(points[i][2] > 0)
|
||||
|
@@ -50,6 +50,7 @@ function thread_profile(h, crest, angle, overlap = 0.1) = //! Create thread prof
|
||||
[[-base / 2, -overlap, 0], [-crest / 2, h, 0], [crest / 2, h, 0], [base / 2, -overlap, 0]];
|
||||
|
||||
module thread(dia, pitch, length, profile, center = true, top = -1, bot = -1, starts = 1, solid = true, female = false, colour = undef) { //! Create male or female thread, ends can be tapered, chamfered or square
|
||||
assert(is_undef(colour) || is_list(colour), "Thread colour must be in [r, g, b] form");
|
||||
//
|
||||
// Apply colour if defined
|
||||
//
|
||||
@@ -190,7 +191,8 @@ module female_metric_thread(d, pitch, length, center = true, top = -1, bot = -1,
|
||||
}
|
||||
|
||||
function metric_coarse_pitch(d) //! Convert metric diameter to pitch
|
||||
= d == 1.6 ? 0.35 // M1.6
|
||||
= d == 1.4 ? 0.3 // M1.4
|
||||
: d == 1.6 ? 0.35 // M1.6
|
||||
: [0.4, // M2
|
||||
0.45,// M2.5
|
||||
0.5, // M3
|
||||
|
286
vitamins/bldc_motor.scad
Normal file
@@ -0,0 +1,286 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2021
|
||||
// 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/>.
|
||||
//
|
||||
|
||||
//
|
||||
//! Brushless DC electric motor
|
||||
//
|
||||
include <NopSCADlib/core.scad>
|
||||
|
||||
use <NopSCADlib/vitamins/rod.scad>
|
||||
use <NopSCADlib/utils/thread.scad>
|
||||
use <NopSCADlib/utils/tube.scad>
|
||||
|
||||
|
||||
function BLDC_diameter(type) = type[1]; //! Diameter of motor
|
||||
function BLDC_height(type) = type[2]; //! Height of motor including boss, if any, but excluding prop shaft
|
||||
function BLDC_shaft_diameter(type) = type[3]; //! shaft diameter
|
||||
function BLDC_shaft_length(type) = type[4]; //! Total shaft length
|
||||
function BLDC_shaft_offset(type) = type[5]; //! shaft offset from base
|
||||
function BLDC_body_colour(type) = type[6]; //! Body colour
|
||||
function BLDC_base_diameter(type) = type[7]; //! Base diameter
|
||||
function BLDC_base_height_1(type) = type[8]; //! Base height 1
|
||||
function BLDC_base_height_2(type) = type[9]; //! Base height 2
|
||||
function BLDC_base_hole_diameter(type) = type[10]; //! Base hole diameter
|
||||
function BLDC_base_holes(type) = type[11]; //! Base holes
|
||||
function BLDC_base_open(type) = type[12]; //! Base open
|
||||
function BLDC_wire_diameter(type) = type[13]; //! Wire diameter
|
||||
function BLDC_side_colour(type) = type[14]; //! Side colour
|
||||
function BLDC_bell_diameter(type) = type[15]; //! Bell diameter
|
||||
function BLDC_bell_height_1(type) = type[16]; //! Bell height 1
|
||||
function BLDC_bell_height_2(type) = type[17]; //! Bell height 2
|
||||
function BLDC_bell_hole_diameter(type) = type[18]; //! Bell hole diameter
|
||||
function BLDC_bell_holes(type) = type[19]; //! Bell holes
|
||||
function BLDC_bell_spokes(type) = type[20]; //! Bell spoke count
|
||||
function BLDC_boss_diameter(type) = type[21]; //! Boss diameter
|
||||
function BLDC_boss_height(type) = type[22]; //! Boss height
|
||||
function BLDC_prop_shaft_length(type) = type[23]; //! Prop shaft length, including threaded section
|
||||
function BLDC_prop_shaft_diameter(type) = type[24]; //! Diameter of unthreaded portion of prop shaft
|
||||
function BLDC_prop_shaft_thread_length(type) = type[25]; //! Length of threaded section of prop shaft
|
||||
function BLDC_prop_shaft_thread_diameter(type) = type[26]; //! Diameter of threaded section of prop shaft
|
||||
|
||||
bldc_cap_colour = grey(50);
|
||||
bldc_shaft_colour = grey(90);
|
||||
bldc_bearing_colour = grey(80);
|
||||
|
||||
module BLDC(type) { //! Draw specified BLDC motor
|
||||
vitamin(str("BLDC(", type[0], "): Brushless DC motor ", type[0]));
|
||||
|
||||
body_colour = BLDC_body_colour(type);
|
||||
side_colour = BLDC_side_colour(type);
|
||||
body_diameter = BLDC_diameter(type);
|
||||
wall_thickness = 1;
|
||||
|
||||
height = BLDC_height(type) - BLDC_boss_height(type);
|
||||
|
||||
module feet(base_diameter) {
|
||||
holes = BLDC_base_holes(type);
|
||||
hole_count = is_list(holes) ? len(holes) : 4;
|
||||
for(i = [0 : 1 : hole_count - 1]) {
|
||||
spacing = is_list(holes) ? holes[i] : holes;
|
||||
radius = base_diameter / 2 - spacing / 2;
|
||||
rotate(i * 360 / hole_count + (hole_count == 4 ? 45 : 0))
|
||||
difference() {
|
||||
hull() {
|
||||
circle(r = radius);
|
||||
translate([-spacing / 2, 0])
|
||||
circle(r = radius);
|
||||
}
|
||||
translate([-spacing / 2, 0])
|
||||
circle(d = BLDC_base_hole_diameter(type));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module cutout(d1, d2, r, h) {
|
||||
translate_z(-eps)
|
||||
linear_extrude(h + 2 * eps)
|
||||
hull() {
|
||||
translate([d1 / 2, 0])
|
||||
circle(r = r);
|
||||
translate([d2 / 2, -r])
|
||||
square([eps, 2 * r]);
|
||||
}
|
||||
}
|
||||
|
||||
module cutout2(d1, r1, d2, r2, h) {
|
||||
translate_z(-eps)
|
||||
linear_extrude(h + 2 * eps)
|
||||
hull() {
|
||||
translate([d1 / 2, 0])
|
||||
circle(r = r1);
|
||||
translate([d2 / 2, 0])
|
||||
circle(r = r2);
|
||||
}
|
||||
}
|
||||
|
||||
module base() {
|
||||
base_diameter = BLDC_base_diameter(type);
|
||||
h1 = BLDC_base_height_1(type);
|
||||
h2 = BLDC_base_height_2(type);
|
||||
color(body_colour)
|
||||
if (BLDC_base_open(type)) {
|
||||
linear_extrude(h1)
|
||||
difference() {
|
||||
union() {
|
||||
feet(base_diameter);
|
||||
circle(d = 3 * BLDC_shaft_diameter(type));
|
||||
}
|
||||
circle(d = 2 * BLDC_shaft_diameter(type));
|
||||
}
|
||||
translate_z(h1)
|
||||
cylinder(d = 3 * BLDC_shaft_diameter(type), h = h2);
|
||||
} else {
|
||||
difference() {
|
||||
union() {
|
||||
render(convexity = 8)
|
||||
linear_extrude(h1)
|
||||
difference() {
|
||||
circle(d = base_diameter);
|
||||
circle(d = 2 * BLDC_shaft_diameter(type));
|
||||
BLDC_base_screw_positions(type)
|
||||
circle(d = BLDC_base_hole_diameter(type));
|
||||
}
|
||||
rotate_extrude()
|
||||
polygon([ [base_diameter / 2, 0], [body_diameter / 2, h1], [body_diameter / 2, h1+h2], [body_diameter / 2 - wall_thickness, h1 + h2], [body_diameter / 2 - wall_thickness, h1], [base_diameter / 2, h1] ]);
|
||||
}
|
||||
r = body_diameter > 40 ? 2 : body_diameter * PI / (8 * 3);
|
||||
if (body_diameter > 40) {
|
||||
r = 2;
|
||||
// cutout for wires
|
||||
translate_z(h2 /2)
|
||||
cutout(base_diameter, body_diameter, 6, h1);
|
||||
for (a = [90, 180, 270])
|
||||
rotate(a) {
|
||||
cutout(base_diameter - 2 * r, body_diameter, r, h1 + h2 / 2);
|
||||
for (b = [-90 / 4, 90 / 4])
|
||||
rotate(b)
|
||||
cutout(base_diameter - 5 * r, body_diameter, r, h1 + h2 / 2);
|
||||
}
|
||||
} else {
|
||||
r = body_diameter * PI / (8 * 3);
|
||||
for (a = [0, 90, 180, 270])
|
||||
rotate(a)
|
||||
cutout(base_diameter, body_diameter, r, h1);
|
||||
}
|
||||
}
|
||||
}
|
||||
color(bldc_bearing_colour)
|
||||
translate_z(0.25)
|
||||
tube(or = BLDC_shaft_diameter(type), ir = BLDC_shaft_diameter(type) / 2, h = h1, center = false);
|
||||
|
||||
if (show_threads)
|
||||
BLDC_base_screw_positions(type)
|
||||
female_metric_thread(BLDC_base_hole_diameter(type), metric_coarse_pitch(BLDC_base_hole_diameter(type)), h1, center = false, colour = body_colour);
|
||||
|
||||
wire_diameter = BLDC_wire_diameter(type);
|
||||
for (i = [0 : 2])
|
||||
color(wire_diameter >= 3 ? ["yellow", grey(20), "red"][i] : grey(20))
|
||||
translate([body_diameter / 5, (i - 1) * wire_diameter, wire_diameter / 2 + 0.25 + (body_diameter > 40 ? h2/2 : 0)])
|
||||
rotate([0, 90, 0])
|
||||
cylinder(r = wire_diameter / 2, h = body_diameter / 2, center = false);
|
||||
|
||||
} // end module base
|
||||
|
||||
module bell() {
|
||||
bell_diameter = BLDC_bell_diameter(type);
|
||||
h1 = BLDC_bell_height_1(type);
|
||||
h2 = BLDC_bell_height_2(type);
|
||||
gap = BLDC_base_open(type) ? 0 : height > 20 ? 0.5 : 0.25;
|
||||
side_length = height - h2 - h1 - gap - BLDC_base_height_1(type) - BLDC_base_height_2(type);
|
||||
|
||||
color(body_colour) {
|
||||
translate_z(height - h2) {
|
||||
difference() {
|
||||
union() {
|
||||
top_thickness = min(h2, 2);
|
||||
render(convexity = 8)
|
||||
translate_z(h2 - top_thickness)
|
||||
linear_extrude(top_thickness)
|
||||
difference() {
|
||||
circle(d = bell_diameter);
|
||||
if (BLDC_shaft_length(type) > height)
|
||||
circle(d = BLDC_shaft_diameter(type));
|
||||
BLDC_bell_screw_positions(type)
|
||||
circle(d = BLDC_bell_hole_diameter(type));
|
||||
}
|
||||
rotate_extrude()
|
||||
polygon([ [bell_diameter/2, h2], [body_diameter/2, 0], [body_diameter/2, -h1], [body_diameter/2 - wall_thickness, -h1], [body_diameter/2 - wall_thickness, 0], [bell_diameter/2, h2 - top_thickness] ]);
|
||||
}
|
||||
spoke_count = BLDC_bell_spokes(type);
|
||||
if (spoke_count % 4 == 0) {
|
||||
r = body_diameter > 40 ? body_diameter / 15 : 2.5;
|
||||
for (a = [0, 90, 180, 270])
|
||||
rotate(a) {
|
||||
cutout(bell_diameter + 2 * r, body_diameter, r, h2);
|
||||
rotate(45) {
|
||||
cutout(bell_diameter, body_diameter, r, h2);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
r1 = bell_diameter * PI / (spoke_count * 3);
|
||||
r2 = body_diameter * PI / (spoke_count * 3);
|
||||
for (i = [0 : 1 : spoke_count - 1])
|
||||
rotate(i * 360 / spoke_count)
|
||||
cutout2(bell_diameter, r1, body_diameter, r2, h2);
|
||||
}
|
||||
} // end difference
|
||||
} // end translate
|
||||
|
||||
if (BLDC_boss_height(type))
|
||||
translate_z(height)
|
||||
tube(or = BLDC_boss_diameter(type)/2, ir = BLDC_shaft_diameter(type)/2, h = BLDC_boss_height(type), center = false);
|
||||
|
||||
if (BLDC_prop_shaft_diameter(type))
|
||||
translate_z(height + BLDC_boss_height(type)) {
|
||||
thread_diameter = BLDC_prop_shaft_thread_diameter(type);
|
||||
unthreaded_length = BLDC_prop_shaft_length(type) - BLDC_prop_shaft_thread_length(type);
|
||||
cylinder(d=BLDC_prop_shaft_diameter(type), h = unthreaded_length);
|
||||
translate_z(unthreaded_length)
|
||||
if (show_threads)
|
||||
male_metric_thread(thread_diameter, metric_coarse_pitch(thread_diameter), BLDC_prop_shaft_thread_length(type), center = false);
|
||||
else
|
||||
cylinder(d = thread_diameter, h = BLDC_prop_shaft_thread_length(type));
|
||||
}
|
||||
} // end colour
|
||||
|
||||
color(side_colour)
|
||||
translate_z(height - h2 - h1 -side_length)
|
||||
tube(body_diameter/2, body_diameter/2 - wall_thickness, side_length, center = false);
|
||||
|
||||
if (show_threads)
|
||||
translate_z(height)
|
||||
BLDC_bell_screw_positions(type)
|
||||
vflip()
|
||||
female_metric_thread(BLDC_bell_hole_diameter(type), metric_coarse_pitch(BLDC_bell_hole_diameter(type)), h2, center = false, colour = body_colour);
|
||||
} // end module bell
|
||||
|
||||
base();
|
||||
bell();
|
||||
|
||||
color(bldc_shaft_colour)
|
||||
translate_z(-BLDC_shaft_offset(type) - eps)
|
||||
not_on_bom()
|
||||
rod(d = BLDC_shaft_diameter(type), l = BLDC_shaft_length(type), center = false);
|
||||
|
||||
}
|
||||
|
||||
module BLDC_screw_positions(holes, n = 4) { //! Screw positions utility function
|
||||
hole_count = is_list(holes) ? len(holes) : 4;
|
||||
for($i = [0 : min(n, hole_count) - 1]) {
|
||||
spacing = is_list(holes) ? holes[$i] : holes;
|
||||
rotate($i * 360 / hole_count)
|
||||
translate([spacing / 2, 0])
|
||||
rotate(-$i * 90)
|
||||
children();
|
||||
}
|
||||
}
|
||||
|
||||
module BLDC_base_screw_positions(type, n = 4) { //! Positions children at the base screw holes
|
||||
if (BLDC_base_holes(type))
|
||||
rotate(is_list(BLDC_base_holes(type)) && len(BLDC_base_holes(type)) == 3 ? 180 : 45)
|
||||
BLDC_screw_positions(BLDC_base_holes(type), n)
|
||||
children();
|
||||
}
|
||||
|
||||
module BLDC_bell_screw_positions(type, n = 4) { //! Positions children at the bell screw holes
|
||||
if (BLDC_bell_holes(type))
|
||||
rotate(is_list(BLDC_bell_holes(type)) && len(BLDC_bell_holes(type)) == 3 ? 30 : 0)
|
||||
BLDC_screw_positions(BLDC_bell_holes(type), n)
|
||||
children();
|
||||
}
|
37
vitamins/bldc_motors.scad
Normal file
@@ -0,0 +1,37 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2021
|
||||
// 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/>.
|
||||
//
|
||||
|
||||
//
|
||||
// Brushless DC electric motors
|
||||
//
|
||||
// shaft shaft shaft body base holes base side bell holes boss prop shaft thread
|
||||
// diameter height diam length offset colour diam h1 h2 diam position open wire colour diam h1 h1 d pos spokes d h length diam length diam
|
||||
BLDC0603 = ["BLDC0603", 9.0, 8, 1, 15.5, 1, crimson, 10, 1, 1.5, 1.4, [6,6,6], true, 0.8, grey(20), 9, 1, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0];
|
||||
BLDC0802 = ["BLDC0802", 11.5, 9.5, 1.5, 12, 0.5, grey(20), 9, 1, 2, 1.6, [6,6,6], true, 1.0, grey(20), 11, 2, 0.75, 0, 0, 3, 0, 0, 0, 0, 0, 0];
|
||||
BLDC1105 = ["BLDC1105", 14.0, 11.75, 1.5, 11, 0, grey(90), 12.5, 1.6, 1.4, 2, 9, true, 1.0, grey(90), 12, 1, 1, 2, [5,5], 4, 0, 0, 0, 0, 0, 0];
|
||||
BLDC1306 = ["BLDC1306", 17.75, 14.5, 2, 14, 0, crimson, 16, 1.5, 1, 2, 12, false, 1.0, grey(20), 12, 1, 1, 0, 0, 6, 8, 1, 11.5, 5, 6.5, 5];
|
||||
BLDC1804 = ["BLDC1804", 23.0, 12, 2, 11, 0, grey(20), 19, 2.5, 1.5, 2, 12, false, 1.5, grey(20), 18, 1, 2.5, 0, 0, 6, 9, 1, 12, 5, 6, 5];
|
||||
BLDC2205 = ["BLDC2205", 28.0, 17.25, 3, 16, 0, crimson, 26, 2, 3, 3, [19,16,19,16], false, 1.6, grey(20), 22.5, 1, 3.75, 0, 0, 6, 0, 0, 14, 5, 9, 5];
|
||||
BLDC2212 = ["BLDC2212", 28.0, 27, 3, 26, 0, grey(20), 23, 4, 2, 3, [19,16,19,16], false, 2.0, grey(20), 18, 2, 4, 0, 0, 6, 0, 0, 14, 8, 7, 6];
|
||||
BLDC3548 = ["BLDC3548", 35.0, 45, 5, 65.5, 1, gold, 32, 7, 1, 3, [25,19,25,19], false, 3.0, grey(20), 32, 2, 4,2.5, [16,16,16],6,12, 3.4, 0, 0, 0, 0];
|
||||
BLDC4250 = ["BLDC4250", 42.5, 48, 5, 70, 20, crimson, 38, 4, 6, 3, 25, false, 3.5, grey(20), 28, 3, 6, 3, 17, 8, 12, 2, 0, 0, 0, 0];
|
||||
|
||||
bldc_motors = [BLDC0603, BLDC0802, BLDC1105, BLDC1306, BLDC1804, BLDC2205, BLDC2212, BLDC3548, BLDC4250];
|
||||
|
||||
use <bldc_motor.scad>
|
@@ -28,6 +28,7 @@ use <screw.scad>
|
||||
function blower_length(type) = type[2]; //! Length of enclosing rectangle
|
||||
function blower_width(type) = type[3]; //! Width of enclosing rectangle
|
||||
function blower_depth(type) = type[4]; //! Height
|
||||
function blower_size(type) = [blower_length(type), blower_width(type), blower_depth(type)]; //! Size
|
||||
function blower_bore(type) = type[5]; //! The air intake hole diameter
|
||||
function blower_screw(type) = type[6]; //! The type of screws needed
|
||||
function blower_hub(type) = type[7]; //! Rotor hub diameter
|
||||
|
58
vitamins/box_section.scad
Normal file
@@ -0,0 +1,58 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2021
|
||||
// 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/>.
|
||||
//
|
||||
|
||||
//
|
||||
//! Box sections.
|
||||
//
|
||||
include <../utils/core/core.scad>
|
||||
include <../utils/tube.scad>
|
||||
|
||||
include <../vitamins/sheets.scad>
|
||||
|
||||
function box_section_material(type) = type[1]; //! Material description
|
||||
function box_section_size(type) = type[2]; //! Size
|
||||
function box_section_thickness(type) = type[3]; //! Wall thickness
|
||||
function box_section_fillet(type) = type[4]; //! Fillet
|
||||
function box_section_colour(type) = type[5]; //! Colour
|
||||
function box_section_colour2(type) = type[6]; //! Colour2, for woven box section
|
||||
function box_section_is_woven(type) = !is_undef(type[6]); //! Box section is woven, eg carbon fiber
|
||||
|
||||
module box_section(type, length, center = true) {
|
||||
vitamin(str("box_section(", type[0], arg(length, 15), "): ", box_section_material(type), ", length ", length, "mm"));
|
||||
|
||||
size = box_section_size(type);
|
||||
thickness = box_section_thickness(type);
|
||||
|
||||
if (box_section_is_woven(type))
|
||||
translate_z(center ? 0 : length / 2) {
|
||||
rotate([0, -90, 90])
|
||||
for (z = [-size.y / 2, size.y / 2 - thickness])
|
||||
translate_z(z)
|
||||
woven_sheet(CF1, thickness, box_section_colour(type), box_section_colour2(type), length, size.x)
|
||||
square([length, size.x], center=true);
|
||||
rotate([0, -90, 0])
|
||||
for (z = [-size.x / 2, size.x / 2 - thickness])
|
||||
translate_z(z)
|
||||
woven_sheet(CF1, thickness, box_section_colour(type), box_section_colour2(type), length, size.y)
|
||||
square([length, size.y], center=true);
|
||||
}
|
||||
else
|
||||
color(box_section_colour(type))
|
||||
rectangular_tube([size.x, size.y, length], center, thickness, box_section_fillet(type));
|
||||
}
|
30
vitamins/box_sections.scad
Normal file
@@ -0,0 +1,30 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2021
|
||||
// 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/>.
|
||||
//
|
||||
|
||||
//
|
||||
// Box sections
|
||||
//
|
||||
AL12x8x1 = ["AL12x8x1", "Aluminium rectangular box section 12mm x 8mm x 1mm", [12, 8], 1, 0.5, silver, undef];
|
||||
AL20x20x2 = ["AL20x20x2", "Aluminium rectangular box section 20mm x 20mm x 2mm", [20, 20], 2, 0.5, silver, undef];
|
||||
CF10x10x1 = ["CF10x10x1", "Carbon fiber rectangular box section 10mm x 10mm x 1mm", [10, 10], 1, 0.5, grey(35), grey(20)];
|
||||
|
||||
|
||||
box_sections = [AL12x8x1, AL20x20x2, CF10x10x1];
|
||||
|
||||
use <box_section.scad>
|
@@ -26,89 +26,138 @@ use <../utils/round.scad>
|
||||
|
||||
function gs_diameter(type) = type[2]; //! Can diameter
|
||||
function gs_height(type) = type[3]; //! Can height
|
||||
function gs_pitch(type) = type[4]; //! Screw pitch
|
||||
function gs_lug_w(type) = type[5]; //! Screw lug width
|
||||
function gs_lug_t(type) = type[6]; //! Screw lug thickness
|
||||
function gs_hole_d(type) = type[7]; //! Screw hole diameter
|
||||
function gs_offset(type) = type[8]; //! Offset of the shaft from the centre of the can
|
||||
function gs_boss_d(type) = type[9]; //! Boss around the shaft diameter
|
||||
function gs_boss_h(type) = type[10]; //! Boss around the shaft height
|
||||
function gs_shaft_d(type) = type[11]; //! Shaft diameter
|
||||
function gs_shaft_flat(type) = type[12]; //! Shaft width across the flats
|
||||
function gs_shaft_length(type) = type[13]; //! Shaft length
|
||||
function gs_flat_length(type) = type[14]; //! Shaft flat length
|
||||
function gs_bulge_w(type) = type[15]; //! Plastic bulge width
|
||||
function gs_bulge_d(type) = type[16]; //! Plastic bulge depth from centre
|
||||
function gs_bulge_h(type) = type[17]; //! Plastic bulge height
|
||||
function gs_bulge2_w(type) = type[18]; //! Plastic rear bulge width
|
||||
function gs_bulge2_d(type) = type[19]; //! Plastic rear bulge depth from centre
|
||||
function gs_bulge2_h(type) = type[20]; //! Plastic rear bulge height
|
||||
function gs_radius(type) = type[4]; //! Top - or bottom + corner radius
|
||||
function gs_motor(type) = type[5]; //! Motor diameter and height if separate from gearbox
|
||||
function gs_pitch(type) = type[6]; //! Screw pitch
|
||||
function gs_lug_w(type) = type[7]; //! Screw lug width
|
||||
function gs_lug_t(type) = type[8]; //! Screw lug thickness
|
||||
function gs_hole_d(type) = type[9]; //! Screw hole diameter
|
||||
function gs_offset(type) = type[10]; //! Offset of the shaft from the centre of the can
|
||||
function gs_boss_d(type) = type[11]; //! Boss around the shaft diameter
|
||||
function gs_boss_h(type) = type[12]; //! Boss around the shaft height
|
||||
function gs_shaft_d(type) = type[13]; //! Shaft diameter
|
||||
function gs_shaft_flat(type) = type[14]; //! Shaft width across the flats
|
||||
function gs_shaft_length(type) = type[15]; //! Shaft length
|
||||
function gs_flat_length(type) = type[16]; //! Shaft flat length
|
||||
function gs_bulge(type) = type[17]; //! Plastic bulge width, depth, height, z offset
|
||||
function gs_bulge2(type) = type[18]; //! Plastic rear bulge width, depth, height
|
||||
function gs_wire_d(type) = type[19]; //! Wire diameter
|
||||
function gs_wires(type) = type[20]; //! Wire colours and grouping
|
||||
|
||||
module geared_stepper_screw_positions(type) //! Place children at the screw positions
|
||||
for(side = [-1, 1])
|
||||
translate([side * gs_pitch(type) / 2, -gs_offset(type)])
|
||||
children();
|
||||
|
||||
motor_colour = "#9BA2AC";
|
||||
gearbox_colour = "#FFF7EE";
|
||||
|
||||
module geared_stepper(type) { //! Draw the specified geared stepper
|
||||
vitamin(str("geared_stepper(", type[0], "): Geared stepper - ", type[1]));
|
||||
|
||||
radius = gs_diameter(type) / 2;
|
||||
height = gs_height(type);
|
||||
motor = gs_motor(type);
|
||||
height = gs_height(type) - motor.y;
|
||||
offset = gs_offset(type);
|
||||
color("silver") {
|
||||
translate([0, -offset])
|
||||
rounded_cylinder(r = radius, h = height, r2 = 1);
|
||||
lug_t = gs_lug_t(type);
|
||||
bulge = gs_bulge(type);
|
||||
bulge_z = bulge[3];
|
||||
bulge2 = gs_bulge2(type);
|
||||
wires = gs_wires(type);
|
||||
|
||||
// Gearbox
|
||||
color(motor.y ? gearbox_colour : motor_colour) {
|
||||
difference() {
|
||||
rad = gs_radius(type);
|
||||
translate([0, -offset])
|
||||
if(rad >= 0)
|
||||
rounded_cylinder(r = radius, h = height, r2 = rad);
|
||||
else
|
||||
translate_z(height)
|
||||
vflip()
|
||||
rounded_cylinder(r = radius, h = height, r2 = -rad);
|
||||
|
||||
if(!lug_t)
|
||||
geared_stepper_screw_positions(type)
|
||||
cylinder(d = gs_hole_d(type), h = 10, center = true);
|
||||
}
|
||||
|
||||
cylinder(d = gs_boss_d(type), h = 2 * gs_boss_h(type), center = true);
|
||||
|
||||
linear_extrude(gs_lug_t(type))
|
||||
difference() {
|
||||
hull()
|
||||
if(lug_t)
|
||||
linear_extrude(lug_t)
|
||||
difference() {
|
||||
hull()
|
||||
geared_stepper_screw_positions(type)
|
||||
circle(d = gs_lug_w(type));
|
||||
|
||||
geared_stepper_screw_positions(type)
|
||||
circle(d = gs_lug_w(type));
|
||||
circle(d = gs_hole_d(type));
|
||||
}
|
||||
|
||||
geared_stepper_screw_positions(type)
|
||||
circle(d = gs_hole_d(type));
|
||||
}
|
||||
|
||||
translate([0, -offset - radius, eps])
|
||||
cube([gs_bulge_w(type) - 2, 2 * (gs_bulge_d(type) - radius) - 2, 2 * eps], center = true);
|
||||
if(!bulge_z)
|
||||
translate([0, -offset - radius, eps])
|
||||
cube([bulge.x - 2, 2 * (bulge.y - radius) - 2, 2 * eps], center = true);
|
||||
}
|
||||
|
||||
// Motor
|
||||
if(motor.y)
|
||||
color("#9BA2AC")
|
||||
translate([0, -offset, height])
|
||||
rotate_extrude()
|
||||
union() {
|
||||
r = motor.x / 2;
|
||||
rad = motor[2];
|
||||
square([r - rad, rad]);
|
||||
|
||||
translate([0, motor.y - rad])
|
||||
square([r - rad, rad]);
|
||||
|
||||
hull()
|
||||
for(y = [2 * rad, motor.y - 2 * rad])
|
||||
translate([r - rad, y])
|
||||
circle(rad);
|
||||
}
|
||||
|
||||
// Shaft
|
||||
f = gs_shaft_flat(type);
|
||||
two_flats = f < 0;
|
||||
vflip()
|
||||
color(brass) {
|
||||
color(two_flats ? brass : gearbox_colour) {
|
||||
d = gs_shaft_d(type);
|
||||
h = gs_shaft_length(type);
|
||||
linear_extrude(h)
|
||||
intersection() {
|
||||
circle(d = d);
|
||||
|
||||
square([d + 1, gs_shaft_flat(type)], center = true);
|
||||
translate([0, two_flats ? 0 : (f - d) / 2])
|
||||
square([d + 1, abs(f)], center = true);
|
||||
}
|
||||
|
||||
cylinder(d = d, h = h - gs_flat_length(type));
|
||||
}
|
||||
|
||||
color("skyblue") {
|
||||
h1 = gs_bulge_h(type);
|
||||
translate([0, - offset - radius, eps])
|
||||
rounded_rectangle([gs_bulge_w(type), 2 * (gs_bulge_d(type) - radius), h1], 0.5, center = false);
|
||||
// Wire block
|
||||
color(bulge_z ? "white" : "skyblue") {
|
||||
translate([0, - offset - radius, eps + bulge[3]])
|
||||
rounded_rectangle([bulge.x, 2 * (bulge.y - radius), bulge.z], 0.5, center = false);
|
||||
|
||||
h2 = gs_bulge2_h(type);
|
||||
translate([0, - offset, h1 + 1 - h2])
|
||||
linear_extrude(h2)
|
||||
round(0.5)
|
||||
intersection() {
|
||||
circle(gs_bulge2_d(type));
|
||||
if(bulge2.z)
|
||||
translate([0, - offset, bulge.z + 1 - bulge2.z])
|
||||
linear_extrude(bulge2.z)
|
||||
round(0.5)
|
||||
intersection() {
|
||||
circle(bulge2.y);
|
||||
|
||||
translate([0, -50])
|
||||
square([gs_bulge2_w(type), 100], center = true);
|
||||
}
|
||||
translate([0, -50])
|
||||
square([bulge2.x, 100], center = true);
|
||||
}
|
||||
}
|
||||
|
||||
translate_z(2.5)
|
||||
for(i = [0 : 4])
|
||||
translate([i - 2.5, 0])
|
||||
rotate([90, 0, 0])
|
||||
color(["yellow", "orange", "red", "pink", "blue"][i])
|
||||
cylinder(d = 1, h = radius + offset + 10);
|
||||
wire_d = gs_wire_d(type);
|
||||
for(j = [0 : len(wires) - 1], i = [0 : len(wires[j]) - 1])
|
||||
translate([(i - len(wires[j]) / 2 + 0.5) * wire_d, 0, bulge_z + (j ? bulge.z - 2.5 : 2.5)])
|
||||
rotate([90, 0, 0])
|
||||
color(wires[j][i])
|
||||
cylinder(d = wire_d, h = radius + offset + 10);
|
||||
}
|
||||
|
@@ -20,8 +20,16 @@
|
||||
//
|
||||
//! Geared tin can steppers
|
||||
//
|
||||
28BYJ_48 = ["28BYJ_48", "28BYJ-48 5V", 28, 19, 35, 7, 0.85, 4.2, 8, 9, 1.5, 5, 3, 10, 6, 14.7, 17, 16.5, 17.7, 15.5, 13.8 ];
|
||||
// d h r m p l l h o b b s f s f b b w
|
||||
// i e a o i u u o f o o h l h l u u i
|
||||
// a i d t t g g l f s s a a a a l l r
|
||||
// g i o c e s s s f t f t g g e
|
||||
// h u r h w t e t t e e
|
||||
// t s d t d h w l 2 d
|
||||
// d h r d l w d h z w d h
|
||||
28BYJ_48 = ["28BYJ_48", "28BYJ-48 5V", 28, 19, 1, [ 0, 0, 0], 35, 7, 0.85, 4.2, 8, 9, 1.5, 5,-3.0, 10, 6, [14.7, 17, 16.5, 0], [17.7, 15.5, 13.8], 1, [["yellow", "orange", "red", "pink", "blue"]] ];
|
||||
35BYGHJ75 = ["35BYGHJ75", "35BYGHJ75 0.4A",37, 37, -2, [35, 22, 1], 27, 0, 0, 3.0, 7, 12, 3.0, 5, 4.5, 17, 10, [ 7.7, 20.7, 9.25, 21], [ 0, 0, 0], 1.3,[["brown", "red"], ["yellow", "green"]] ];
|
||||
|
||||
geared_steppers = [28BYJ_48];
|
||||
geared_steppers = [28BYJ_48, 35BYGHJ75];
|
||||
|
||||
use <geared_stepper.scad>
|
||||
|
@@ -32,7 +32,7 @@ function leadnut_flange_t(type) = type[6]; //! Flange thickness
|
||||
function leadnut_flange_offset(type) = type[7]; //! Offset of the flange from the top
|
||||
function leadnut_holes(type) = type[8]; //! The number of screw holes
|
||||
function leadnut_hole_dia(type) = type[9]; //! The diameter of the screw holes
|
||||
function leadnut_hole_pitch(type) = type[10]; //! The radia pitch of the screw holes
|
||||
function leadnut_hole_pitch(type) = type[10]; //! The radial pitch of the screw holes
|
||||
function leadnut_screw(type) = type[11]; //! The type of the fixing screws
|
||||
function leadnut_pitch(type) = type[12]; //! Screw pitch
|
||||
function leadnut_lead(type) = type[13]; //! Screw lead
|
||||
|
@@ -55,6 +55,9 @@ function pcb_polygon(type) = type[14]; //! Optional outline polygon for odd
|
||||
function pcb_screw(type, cap = hs_cap) = Len(type[15]) ? type[15] : find_screw(cap, screw_smaller_than(pcb_hole_d(type))); //! Mounting screw type
|
||||
function pcb_size(type) = [pcb_length(type), pcb_width(type), pcb_thickness(type)]; //! Length, width and thickness in a vector
|
||||
|
||||
function pcb_component(type, name, index = 0) = //! Return the component specified by name and index
|
||||
[for(component = pcb_components(type)) if(component[3] == name) component][index];
|
||||
|
||||
|
||||
function pcb_grid_pos(type, x, y, z = 0) = //! Returns a pcb grid position
|
||||
[-pcb_length(type) / 2 + pcb_grid(type).x + 2.54 * x,
|
||||
|
@@ -44,6 +44,7 @@ function psu_name(type) = type[1]; //! The part name
|
||||
function psu_length(type) = type[2]; //! Length
|
||||
function psu_width(type) = type[3]; //! Width
|
||||
function psu_height(type) = type[4]; //! Height
|
||||
function psu_size(type) = [psu_length(type), psu_width(type), psu_height(type)]; //! Size
|
||||
function psu_screw(type) = type[5]; //! Screw type
|
||||
function psu_screw_hole_radius(type) = type[6]; //! Clearance hole for screw, bigger than normal on ATX
|
||||
function atx_psu(type) = type[7]; //! True if an ATX style PSU
|
||||
|
@@ -53,7 +53,7 @@ function pulley_extent(type) = max(pulley_flange_dia(type), pulley_hub_dia(type)
|
||||
T_angle = 40;
|
||||
GT_r = 0.555;
|
||||
|
||||
module pulley(type, colour = silver) { //! Draw a pulley
|
||||
module pulley(type, colour = silver) { //! Draw a pulley, any children are placed above.
|
||||
teeth = pulley_teeth(type);
|
||||
od = pulley_od(type);
|
||||
|
||||
@@ -138,6 +138,10 @@ module pulley(type, colour = silver) { //! Draw a pulley
|
||||
else
|
||||
core();
|
||||
}
|
||||
|
||||
if($children)
|
||||
translate_z(pulley_height(type))
|
||||
children();
|
||||
}
|
||||
|
||||
module pulley_assembly(type, colour = silver) { //! Draw a pulley with its grub screws in place
|
||||
|
@@ -37,18 +37,19 @@ function rail_groove_width(type)=type[11]; //! Groove width
|
||||
|
||||
function rail_screw_height(type, screw) = rail_height(type) - rail_bore_depth(type) + screw_head_depth(screw, rail_hole(type)); //! Position screw taking into account countersink into counterbored hole
|
||||
|
||||
function carriage_length(type) = type[0]; //! Overall length
|
||||
function carriage_block_length(type) = type[1]; //! Length of the metal part
|
||||
function carriage_width(type) = type[2]; //! Width of carriage
|
||||
function carriage_height(type) = type[3]; //! Height of carriage
|
||||
function carriage_size(type) = [ type[0], type[2], type[3] ]; //! Size of carriage
|
||||
function carriage_clearance(type) = type[4]; //! Gap under the carriage
|
||||
function carriage_pitch_x(type) = type[5]; //! Screw hole x pitch
|
||||
function carriage_pitch_y(type) = type[6]; //! Screw hole y pitch
|
||||
function carriage_screw(type) = type[7]; //! Carriage screw type
|
||||
function carriage_rail(type) = type[8]; //! Rail type
|
||||
function carriage_length(type) = type[1]; //! Overall length
|
||||
function carriage_block_length(type) = type[2]; //! Length of the metal part
|
||||
function carriage_width(type) = type[3]; //! Width of carriage
|
||||
function carriage_height(type) = type[4]; //! Height of carriage
|
||||
function carriage_clearance(type) = type[5]; //! Gap under the carriage
|
||||
function carriage_pitch_x(type) = type[6]; //! Screw hole x pitch
|
||||
function carriage_pitch_y(type) = type[7]; //! Screw hole y pitch
|
||||
function carriage_screw(type) = type[8]; //! Carriage screw type
|
||||
function carriage_rail(type) = type[9]; //! Rail type
|
||||
|
||||
function carriage_screw_depth(type) = 2 * screw_radius(carriage_screw(type)); //! Carriage thread depth
|
||||
function carriage_travel(type, rail_length) = rail_length - carriage_length(type); //! How far the carriage can travel on a given length rail
|
||||
function carriage_size(type) = [ carriage_length(type), carriage_width(type), carriage_height(type) ]; //! Size of carriage
|
||||
|
||||
function rail_holes(type, length) = //! Number of holes in a rail given its `length`
|
||||
floor((length - 2 * rail_end(type)) / rail_pitch(type)) + 1;
|
||||
@@ -74,6 +75,8 @@ module carriage_hole_positions(type) { //! Position children over screw holes
|
||||
}
|
||||
|
||||
module carriage(type, end_colour = grey(20), wiper_colour = grey(20)) { //! Draw the specified carriage
|
||||
vitamin(str("carriage(", type[0], "_carriage): Linear rail carriage ", type[0]));
|
||||
|
||||
total_l = carriage_length(type);
|
||||
block_l = carriage_block_length(type);
|
||||
block_w = carriage_width(type);
|
||||
@@ -142,6 +145,7 @@ module rail(type, length, colour = grey(90), use_polycircles = false) { //! Draw
|
||||
height = rail_height(type);
|
||||
|
||||
vitamin(str("rail(", type[0], ", ", length, "): Linear rail ", type[0], " x ", length, "mm"));
|
||||
assert(rail_end(type) < (rail_pitch(type) - rail_bore(type)) / 2, type[0]);
|
||||
|
||||
color(colour) {
|
||||
rbr = rail_bore(type) / 2;
|
||||
|
@@ -20,26 +20,29 @@
|
||||
//
|
||||
// Rails
|
||||
//
|
||||
// Wr Hr E P D d h go gw
|
||||
// Wr Hr Emin P D d h go gw
|
||||
MGN5 = [ "MGN5", 5, 3.6, 5, 15, 3.6, 2.4, 0.8, M2_cs_cap_screw, M2_cs_cap_screw, 1, 1 ]; // Screw holes too small for M2 heads
|
||||
MGN7 = [ "MGN7", 7, 5, 5, 15, 4.3, 2.4, 2.6, M2_cap_screw, M2_cs_cap_screw, 1.5, 1.5 ];
|
||||
MGN9 = [ "MGN9", 9, 6, 5, 20, 6.0, 3.5, 3.5, M3_cap_screw, M3_cs_cap_screw, 1.5, 1.5 ];
|
||||
MGN12 =[ "MGN12", 12, 8, 10, 25, 6.0, 3.5, 4.5, M3_cap_screw, M3_cs_cap_screw, 2.25, 2.75];
|
||||
MGN12 =[ "MGN12", 12, 8, 7.5, 25, 6.0, 3.5, 4.5, M3_cap_screw, M3_cs_cap_screw, 2.25, 2.75];
|
||||
MGN15 =[ "MGN15", 15, 10, 10, 40, 6.0, 3.5, 5.0, M3_cap_screw, M3_cs_cap_screw, 2.5, 2.75 ];
|
||||
SSR15= [ "SSR15", 15, 12.5, 10, 60, 7.5, 4.5, 5.3, M4_cap_screw, M4_cs_cap_screw, 2.5, 2.75 ];
|
||||
//
|
||||
// Carriages
|
||||
//
|
||||
// L L1 W H H1 C B
|
||||
MGN5_carriage = [ 16, 9.6, 12, 6, 1.5, 0, 8, M2_cap_screw, MGN5 ];
|
||||
MGN7C_carriage = [ 23, 14.3, 17, 8, 1.5, 8, 12, M2_cap_screw, MGN7 ];
|
||||
MGN9C_carriage = [ 29.7, 20.8, 20, 10, 2, 10, 15, M3_cap_screw, MGN9 ];
|
||||
MGN12C_carriage = [ 34.7, 21.7, 27, 13, 3, 15, 20, M3_cap_screw, MGN12 ];
|
||||
MGN12H_carriage = [ 45.4, 32.4, 27, 13, 3, 20, 20, M3_cap_screw, MGN12 ];
|
||||
MGN15C_carriage = [ 43.3, 27.7, 32, 16, 4, 20, 25, M3_cap_screw, MGN15 ];
|
||||
SSR15_carriage = [ 40.3, 23.3, 34, 24, 4.5, 0, 26, M4_cap_screw, SSR15 ];
|
||||
// L L1 W H H1 C B
|
||||
MGN5C_carriage = ["MGN5C", 16, 9.6, 12, 6, 1.5, 0, 8, M2_cap_screw, MGN5 ];
|
||||
MGN7C_carriage = ["MGN7C", 23, 14.3, 17, 8, 1.5, 8, 12, M2_cap_screw, MGN7 ];
|
||||
MGN7H_carriage = ["MGN7H", 30.8, 21.8, 17, 8, 1.5,13, 12, M2_cap_screw, MGN7 ];
|
||||
MGN9C_carriage = ["MGN9C", 29.7, 20.8, 20, 10, 2, 10, 15, M3_cap_screw, MGN9 ];
|
||||
MGN9H_carriage = ["MGN9H", 39.9, 29.9, 20, 10, 2, 16, 15, M3_cap_screw, MGN9 ];
|
||||
MGN12C_carriage = ["MGN12C", 34.7, 21.7, 27, 13, 3, 15, 20, M3_cap_screw, MGN12 ];
|
||||
MGN12H_carriage = ["MGN12H", 45.4, 32.4, 27, 13, 3, 20, 20, M3_cap_screw, MGN12 ];
|
||||
MGN15C_carriage = ["MGN15C", 43.3, 27.7, 32, 16, 4, 20, 25, M3_cap_screw, MGN15 ];
|
||||
SSR15_carriage = ["SSR15", 40.3, 23.3, 34, 24, 4.5, 0, 26, M4_cap_screw, SSR15 ];
|
||||
|
||||
rails = [MGN5, MGN7, MGN9, MGN12, MGN15, SSR15];
|
||||
|
||||
carriages = [MGN5_carriage, MGN7C_carriage, MGN9C_carriage, MGN12C_carriage, MGN12H_carriage, MGN15C_carriage, SSR15_carriage];
|
||||
carriages = [MGN5C_carriage, MGN7C_carriage, MGN7H_carriage, MGN9C_carriage, MGN9H_carriage, MGN12C_carriage, MGN12H_carriage, MGN12H_carriage, MGN15C_carriage, SSR15_carriage];
|
||||
|
||||
use <rail.scad>
|
||||
|
@@ -108,6 +108,7 @@ No2_screw = ["No2", "No2 pan wood", hs_pan, 2.2, 4.2, 1.7, 0, 0
|
||||
No4_screw = ["No4", "No4 pan wood", hs_pan, 3.0, 5.5, 2.0, 0, 0, 0 ,M3p5_washer, false, No4_pilot_radius, No4_clearance_radius];
|
||||
No6_screw = ["No6", "No6 pan wood", hs_pan, 3.5, 6.7, 2.2, 0, 0, 0 , M4_washer, false, No6_pilot_radius, No6_clearance_radius];
|
||||
No6_cs_screw = ["No6_cs", "No6 cs wood", hs_cs, 3.5, 7.0, 0, 0, 0, 0, M4_washer, false, No6_pilot_radius, No6_clearance_radius];
|
||||
No8_screw = ["No8", "No8 pan wood", hs_pan, 4.2, 8.2, 3.05, 0, 0, 0 , M5_washer, false, No8_pilot_radius, No8_clearance_radius];
|
||||
|
||||
screw_lists = [
|
||||
[ M2_cap_screw, M2p5_cap_screw, M3_cap_screw, M4_cap_screw, M5_cap_screw, M6_cap_screw, M8_cap_screw],
|
||||
@@ -116,7 +117,7 @@ screw_lists = [
|
||||
[ M2_dome_screw, 0, M3_dome_screw, M4_dome_screw, M5_dome_screw],
|
||||
[ 0, 0, M3_hex_screw, M4_hex_screw, M5_hex_screw, M6_hex_screw, M8_hex_screw],
|
||||
[ 0, M2p5_pan_screw, M3_pan_screw, M4_pan_screw, M5_pan_screw, M6_pan_screw, No632_pan_screw],
|
||||
[ No2_screw, 0, No4_screw, No6_screw, No6_cs_screw],
|
||||
[ No2_screw, 0, No4_screw, No6_screw, No8_screw, No6_cs_screw],
|
||||
[ 0, 0, M3_grub_screw, M4_grub_screw]
|
||||
];
|
||||
|
||||
|