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

Compare commits

...

6 Commits

Author SHA1 Message Date
Chris Palmer
ebd50bae53 Added SMD diodes, inductors and potentiometers.
Complete set of components added to MP1584EN buck regulator.
2023-01-12 23:00:21 +00:00
Chris
8e47270607 Updated changelog. 2023-01-07 11:12:43 +00:00
Chris
ec3e752fc5 Added missing documentation for hinge_female() module. 2023-01-07 11:09:46 +00:00
Chris
de17726d20 Updated changelog. 2023-01-07 11:03:12 +00:00
Chris
8587d52d1b Added screw_keyhole() module. 2023-01-07 10:50:32 +00:00
Chris
cec8c3a107 Added printed LED bezels. 2023-01-07 10:49:45 +00:00
23 changed files with 528 additions and 25 deletions

View File

@@ -3,6 +3,24 @@
This changelog is generated by `changelog.py` using manually added semantic version tags to classify commits as breaking changes, additions or fixes.
#### [v20.18.1](https://github.com/nophead/NopSCADlib/releases/tag/v20.18.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v20.18.0...v20.18.1 "diff with v20.18.0")
* 2023-01-07 [`ec3e752`](https://github.com/nophead/NopSCADlib/commit/ec3e752fc5b5586ef5ac838c709ab4b704dac817 "show commit") [C.](# "Chris") Added missing documentation for `hinge_female()` module.
### [v20.18.0](https://github.com/nophead/NopSCADlib/releases/tag/v20.18.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v20.17.0...v20.18.0 "diff with v20.17.0")
* 2023-01-07 [`8587d52`](https://github.com/nophead/NopSCADlib/commit/8587d52d1b87dc9932c7e458798d4a6f3722a371 "show commit") [C.](# "Chris") Added `screw_keyhole()` module.
### [v20.17.0](https://github.com/nophead/NopSCADlib/releases/tag/v20.17.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v20.16.0...v20.17.0 "diff with v20.16.0")
* 2023-01-07 [`cec8c3a`](https://github.com/nophead/NopSCADlib/commit/cec8c3a107b81f8badb4e2077a318cc36fcdd481 "show commit") [C.](# "Chris") Added printed LED bezels.
### [v20.16.0](https://github.com/nophead/NopSCADlib/releases/tag/v20.16.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v20.15.2...v20.16.0 "diff with v20.15.2")
* 2023-01-07 [`848dcb8`](https://github.com/nophead/NopSCADlib/commit/848dcb86b9f1d9a164366208da76faea6d6050f1 "show commit") [C.](# "Chris") Added 8mm LED.
#### [v20.15.2](https://github.com/nophead/NopSCADlib/releases/tag/v20.15.2 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v20.15.1...v20.15.2 "diff with v20.15.1")
* 2023-01-07 [`a31f6f1`](https://github.com/nophead/NopSCADlib/commit/a31f6f100ce18168594b02a25d5229536f02a65c "show commit") [C.](# "Chris") Revised LED dimensions.
* 2023-01-07 [`b3dd635`](https://github.com/nophead/NopSCADlib/commit/b3dd635889f7ed4f779ee9408ff81ac64cb1f7ec "show commit") [C.](# "Chris") Fixed duplicated `dxf()` calls in printed box and `butt_box`.
Client code now calls `dxf()` so that the generated files can be used to speed up assembly views.
#### [v20.15.1](https://github.com/nophead/NopSCADlib/releases/tag/v20.15.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v20.15.0...v20.15.1 "diff with v20.15.0")
* 2022-12-06 [`e256801`](https://github.com/nophead/NopSCADlib/commit/e256801206189eafcf020cc7fdb50fff4314c397 "show commit") [C.P.](# "Chris Palmer") Added comment to indicate the `.py` suffix may be needed on linux and OSX.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 996 KiB

After

Width:  |  Height:  |  Size: 998 KiB

View File

@@ -74,6 +74,7 @@ use <tests/LDRs.scad>
use <tests/LEDs.scad>
use <tests/light_strips.scad>
use <tests/linear_bearings.scad>
use <tests/LED_bezel.scad>
use <tests/LED_meters.scad>
use <tests/magnets.scad>
use <tests/microswitches.scad>
@@ -149,6 +150,9 @@ cable_grommets_y = 0;
translate([x5, cable_grommets_y])
cable_grommets();
translate([x5, cable_grommets_y + 30])
led_bezels();
translate([x5 + 50, cable_grommets_y])
ribbon_clamps();

View File

@@ -119,7 +119,8 @@ module hinge_male(type, female = false) { //! The half with the stationary
}
}
module hinge_female(type) hinge_male(type, true);
module hinge_female(type) //! The half without the pin
hinge_male(type, true);
module hinge_both(type) { //! Both parts together for printing
hinge_male(type);

85
printed/led_bezel.scad Normal file
View File

@@ -0,0 +1,85 @@
//
// NopSCADlib Copyright Chris Palmer 2022
// 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/>.
//
//
//! Printed LED bezels for panel mounting
//
include <../core.scad>
use <../vitamins/led.scad>
function led_bezel(led, flange = 1, flange_h = 1, wall = 1, height = 8) = [led, flange, flange_h, wall, height]; //! Constructor
function led_bezel_led(type) = type[0]; //! The LED
function led_bezel_flange(type) = type[1]; //! Flange width
function led_bezel_flange_t(type) = type[2]; //! Flange thickness
function led_bezel_wall(type) = type[3]; //! Wall thickness
function led_bezel_height(type) = type[4]; //! Total height
function led_bezel_r(type) = //! Radius of the tube
corrected_radius(led_rim_dia(led_bezel_led(type)) / 2) + led_bezel_wall(type);
function led_bezel_hole_r(type) = //! Panel hole radius
led_bezel_r(type) + 0.1;
module led_bezel(type) { //! Makes the STL for the bezel
led = led_bezel_led(type);
stl(str(led[0],"_bezel")) {
rl = led_diameter(led) / 2;
rr = led_rim_dia(led) / 2;
wall = led_bezel_wall(type);
poly_tube(or = rr + wall + led_bezel_flange(type), ir = rl, h = led_bezel_flange_t(type)); // Flange
poly_tube(or = rl + wall, ir = rl, h = led_height(led) - rl - led_rim_t(led)); // Tube up to LED flange
poly_tube(or = corrected_radius(rr) + wall, ir = rr, h = led_bezel_height(type)); // Tube beyond the flange
}
}
module led_bezel_retainer(type) { //! Makes the STL for the retaining ring
led = led_bezel_led(type);
stl(str(led[0],"_bezel_retainer")) {
ir = led_bezel_r(type);
poly_tube(or = ir + led_bezel_wall(type), ir = ir, h = 4);
}
}
module led_bezel_assembly(type, colour = "red") {//! Led bezel with LED
led = led_bezel_led(type);
assembly(str(led[0], "_", colour, "_bezel")) {
translate_z(led_bezel_flange_t(type)) {
vflip()
stl_colour(pp1_colour)
led_bezel(type);
translate_z(-led_height(led) + led_diameter(led) / 2)
explode(-20)
led(led, colour);
}
}
}
module led_bezel_fastened_assembly(type, t, colour = "red") //! Led bezel fitted to panel with and retaining ring
{
explode(20)
led_bezel_assembly(type, colour);
translate_z(-t)
vflip()
stl_colour(pp2_colour)
explode(60)
led_bezel_retainer(type);
}

117
readme.md
View File

@@ -37,16 +37,17 @@ A list of changes classified as breaking, additions or fixes is maintained in [C
<tr><td> <a href = "#Circlips">Circlips</a> </td><td> <a href = "#Modules">Modules</a> </td><td> <a href = "#Spools">Spools</a> </td><td> <a href = "#Foot">Foot</a> </td><td> <a href = "#Round">Round</a> </td><td></td></tr>
<tr><td> <a href = "#Components">Components</a> </td><td> <a href = "#Nuts">Nuts</a> </td><td> <a href = "#Springs">Springs</a> </td><td> <a href = "#Handle">Handle</a> </td><td> <a href = "#Rounded_cylinder">Rounded_cylinder</a> </td><td></td></tr>
<tr><td> <a href = "#DIP">DIP</a> </td><td> <a href = "#O_ring">O_ring</a> </td><td> <a href = "#Stepper_motors">Stepper_motors</a> </td><td> <a href = "#Knob">Knob</a> </td><td> <a href = "#Rounded_polygon">Rounded_polygon</a> </td><td></td></tr>
<tr><td> <a href = "#D_connectors">D_connectors</a> </td><td> <a href = "#Opengrab">Opengrab</a> </td><td> <a href = "#Swiss_clips">Swiss_clips</a> </td><td> <a href = "#PCB_mount">PCB_mount</a> </td><td> <a href = "#Rounded_triangle">Rounded_triangle</a> </td><td></td></tr>
<tr><td> <a href = "#Displays">Displays</a> </td><td> <a href = "#PCB">PCB</a> </td><td> <a href = "#Terminals">Terminals</a> </td><td> <a href = "#PSU_shroud">PSU_shroud</a> </td><td> <a href = "#Sector">Sector</a> </td><td></td></tr>
<tr><td> <a href = "#Extrusion_brackets">Extrusion_brackets</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 = "#Sweep">Sweep</a> </td><td></td></tr>
<tr><td> <a href = "#Extrusions">Extrusions</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 = "#Thread">Thread</a> </td><td></td></tr>
<tr><td> <a href = "#Fans">Fans</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 = "#Tube">Tube</a> </td><td></td></tr>
<tr><td> <a href = "#Fuseholder">Fuseholder</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></td><td></td></tr>
<tr><td> <a href = "#Geared_steppers">Geared_steppers</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></td><td></td></tr>
<tr><td> <a href = "#Green_terminals">Green_terminals</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 = "#Hot_ends">Hot_ends</a> </td><td> <a href = "#Potentiometers">Potentiometers</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 = "#Hygrometer">Hygrometer</a> </td><td> <a href = "#Pulleys">Pulleys</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 = "#D_connectors">D_connectors</a> </td><td> <a href = "#Opengrab">Opengrab</a> </td><td> <a href = "#Swiss_clips">Swiss_clips</a> </td><td> <a href = "#LED_bezel">LED_bezel</a> </td><td> <a href = "#Rounded_triangle">Rounded_triangle</a> </td><td></td></tr>
<tr><td> <a href = "#Displays">Displays</a> </td><td> <a href = "#PCB">PCB</a> </td><td> <a href = "#Terminals">Terminals</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 = "#Extrusion_brackets">Extrusion_brackets</a> </td><td> <a href = "#PCBs">PCBs</a> </td><td> <a href = "#Toggles">Toggles</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 = "#Extrusions">Extrusions</a> </td><td> <a href = "#PSUs">PSUs</a> </td><td> <a href = "#Transformers">Transformers</a> </td><td> <a href = "#Pocket_handle">Pocket_handle</a> </td><td> <a href = "#Thread">Thread</a> </td><td></td></tr>
<tr><td> <a href = "#Fans">Fans</a> </td><td> <a href = "#Panel_meters">Panel_meters</a> </td><td> <a href = "#Tubings">Tubings</a> </td><td> <a href = "#Press_fit">Press_fit</a> </td><td> <a href = "#Tube">Tube</a> </td><td></td></tr>
<tr><td> <a href = "#Fuseholder">Fuseholder</a> </td><td> <a href = "#Pillars">Pillars</a> </td><td> <a href = "#Variacs">Variacs</a> </td><td> <a href = "#Printed_box">Printed_box</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#Geared_steppers">Geared_steppers</a> </td><td> <a href = "#Pillow_blocks">Pillow_blocks</a> </td><td> <a href = "#Veroboard">Veroboard</a> </td><td> <a href = "#Printed_pulleys">Printed_pulleys</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#Green_terminals">Green_terminals</a> </td><td> <a href = "#Pin_headers">Pin_headers</a> </td><td> <a href = "#Washers">Washers</a> </td><td> <a href = "#Ribbon_clamp">Ribbon_clamp</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#Hot_ends">Hot_ends</a> </td><td> <a href = "#Potentiometers">Potentiometers</a> </td><td> <a href = "#Wire">Wire</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 = "#Zipties">Zipties</a> </td><td> <a href = "#Screw_knob">Screw_knob</a> </td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td> <a href = "#Socket_box">Socket_box</a> </td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td> <a href = "#Strap_handle">Strap_handle</a> </td><td></td><td></td></tr>
</table>
@@ -1788,7 +1789,7 @@ Standard domed through hole LEDs. Can specify colour and lead length.
### Vitamins
| Qty | Module call | BOM entry |
| ---:|:--- |:---|
| 1 | `led(LED10mm, "green")` | LED 10 mm green |
| 1 | `led(LED10mm, "orange")` | LED 10 mm orange |
| 1 | `led(LED3mm, "green")` | LED 3 mm green |
| 1 | `led(LED5mm, "blue")` | LED 5 mm blue |
| 1 | `led(LED8mm)` | LED 8 mm red |
@@ -2437,14 +2438,17 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `box_header(2p54header, 4, 2)` | Box header 4 x 2 |
| 1 | `d_plug(DCONN9, pcb = true)` | D-type 9 way PCB mount plug |
| 1 | `dil_socket(12, 15.24)` | DIL socket 24 x 0.6" |
| 1 | `smd_diode(DO241AC)` | DO241AC package SS34 |
| 1 | `hdmi(hdmi_full)` | HDMI socket |
| 1 | `pdip(24, 27C32, w = 15.24)` | IC 27C32 PDIP24 |
| 1 | `pdip(8, NE555)` | IC NE555 PDIP8 |
| 1 | `idc_transition(2p54header, 5)` | IDC transition header 5 x 2 |
| 1 | `smd_inductor(IND2525)` | IND2525 package 4R7 |
| 1 | `potentiometer(KY_040_encoder)` | KY_040_encoder |
| 1 | `led(LED10mm, "yellow")` | LED 10 mm yellow |
| 1 | `led(LED3mm)` | LED 3 mm red |
| 1 | `led(LED5mm, "orange")` | LED 5 mm orange |
| 1 | `led(LED8mm, "blue")` | LED 8 mm blue |
| 1 | `microswitch(small_microswitch)` | Microswitch DM1-00P-110-3 |
| 1 | `hdmi(hdmi_mini)` | Mini HDMI socket |
| 1 | `molex_254(2)` | Molex KK header 2 way |
@@ -2475,6 +2479,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `smd_sot(SOT23)` | SOT23 package 2N7000 |
| 1 | `square_button(button_4p5mm)` | Square button 4.5mm |
| 1 | `square_button(button_6mm)` | Square button 6mm |
| 1 | `smd_pot(TC33X1)` | TC33X1 package 10K |
| 1 | `pcb(TMC2130)` | TMC2130 |
| 1 | `green_terminal(gt_5p08, 2)` | Terminal block 2 way 0.2" |
| 2 | `green_terminal(gt_6p35, 2)` | Terminal block 2 way 0.25" |
@@ -3347,6 +3352,7 @@ For an explanation of `screw_polysink()` see <https://hydraraptor.blogspot.com/2
| `screw(type, length, hob_point = 0, nylon = false)` | Draw specified screw, optionally hobbed or nylon |
| `screw_and_washer(type, length, star = false, penny = false)` | Screw with a washer which can be standard or penny and an optional star washer on top |
| `screw_countersink(type, drilled = true)` | Countersink shape |
| `screw_keyhole(type, h = 0)` | Make keyhole slot to accept and retain screw head |
| `screw_polysink(type, h = 100, alt = false, sink = 0)` | A countersink hole made from stacked polyholes for printed parts, default is flush, `sink` can be used to recess the head |
![screws](tests/png/screws.png)
@@ -3576,7 +3582,7 @@ When woven sheets (e.g. carbon fibre) are rendered it is necessary to specify th
| 1 | `sheet(AL3, 30, 30, 2)` | Aluminium tooling plate 30mm x 30mm x 3mm |
| 1 | `sheet(AL6, 30, 30, 2)` | Aluminium tooling plate 30mm x 30mm x 6mm |
| 1 | `sheet(AL8, 30, 30, 2)` | Aluminium tooling plate 30mm x 30mm x 8mm |
| 1 | `sheet(Spring05, 30, 30, 2)` | Bi-metal saw blade 30mm x 30mm x 0.5mm |
| 1 | `sheet(Spring08, 30, 30, 2)` | Bi-metal saw blade 30mm x 30mm x 0.8mm |
| 1 | `sheet(Cardboard, 30, 30, 2)` | Corrugated cardboard 30mm x 30mm x 5mm |
| 1 | `sheet(Foam20, 30, 30, 2)` | Foam sponge 30mm x 30mm x 20mm |
| 1 | `sheet(DiBond, 30, 30, 2)` | Sheet DiBond 30mm x 30mm x 3mm |
@@ -3672,8 +3678,22 @@ Surface mount components for PCBs.
|:--- |:--- |
| `smd_cap_end_cap(type)` | End cap width |
| `smd_cap_size(type)` | Body length, width |
| `smd_diode_lead_z(type)` | Top of lead frame from top |
| `smd_diode_leads(type)` | Lead extent in x, width, thickness and gap |
| `smd_diode_size(type)` | Body length, width and height |
| `smd_diode_z(type)` | Height above PCB surface |
| `smd_inductor_colour(type)` | Body colour |
| `smd_inductor_lead_z(type)` | Top of lead frame from top |
| `smd_inductor_leads(type)` | Lead extent in x, width, thickness and gap |
| `smd_inductor_size(type)` | Body length, width and height |
| `smd_inductor_z(type)` | Height above PCB surface |
| `smd_led_lens(type)` | Lens length width and height |
| `smd_led_size(type)` | Body length, width and height |
| `smd_pot_contacts(type)` | Contacts width, depth, pitch and width, depth, gap for center contact |
| `smd_pot_cross(type)` | Cross head slot for screwdriver |
| `smd_pot_flat(type)` | Flat at the back of the wiper |
| `smd_pot_size(type)` | Base length, width and height |
| `smd_pot_wiper(type)` | Wiper diameter, offset, thickness, height, d1, d2, d3, d4 |
| `smd_res_end_cap(type)` | End cap width |
| `smd_res_power(type)` | Power rating in Watts |
| `smd_res_size(type)` | Body length, width and height |
@@ -3702,7 +3722,10 @@ Surface mount components for PCBs.
| Module | Description |
|:--- |:--- |
| `smd_capacitor(type, height, value = undef)` | Draw an SMD capacitor with specified height |
| `smd_diode(type, value)` | Draw an SMD diode |
| `smd_inductor(type, value)` | Draw an SMD inductor |
| `smd_led(type, colour, cutout)` | Draw an SMD LED with specified `colour` |
| `smd_pot(type, value)` | Draw an SMD pot |
| `smd_resistor(type, value)` | Draw an SMD resistor with specified value |
| `smd_soic(type, value)` | Draw an SMD SOIC |
| `smd_sot(type, value)` | Draw an SMD transistor |
@@ -3712,6 +3735,8 @@ Surface mount components for PCBs.
### Vitamins
| Qty | Module call | BOM entry |
| ---:|:--- |:---|
| 1 | `smd_diode(DO241AC)` | DO241AC package SS34 |
| 1 | `smd_inductor(IND2525)` | IND2525 package 4R7 |
| 1 | `smd_led(LED0603, green)` | SMD LED 0603 green |
| 1 | `smd_led(LED0805, blue)` | SMD LED 0805 blue |
| 1 | `smd_led(LED1206, red)` | SMD LED 1306 red |
@@ -3726,6 +3751,7 @@ Surface mount components for PCBs.
| 1 | `smd_soic(SOIC8)` | SOIC8 package SOIC8 |
| 1 | `smd_sot(SOT223)` | SOT223 package FZT851 |
| 1 | `smd_sot(SOT23)` | SOT23 package 2N7000 |
| 1 | `smd_pot(TC33X1)` | TC33X1 package 10K |
<a href="#top">Top</a>
@@ -5355,6 +5381,7 @@ This allows the hinges and one set of screws to belong to one assembly and the o
|:--- |:--- |
| `hinge_both(type)` | Both parts together for printing |
| `hinge_fastened_assembly(type, thickness1, thickness2, angle, show_hinge = true)` | Assembled hinge with its fasteners |
| `hinge_female(type)` | The half without the pin |
| `hinge_male(type, female = false)` | The half with the stationary pin |
| `hinge_screw_positions(type)` | Place children at the screw positions |
@@ -5565,6 +5592,72 @@ The STL includes a support membrane that needs to be cut out and a thread needs
| 1 | metric_pot_knob.stl |
<a href="#top">Top</a>
---
<a name="LED_bezel"></a>
## LED_bezel
Printed LED bezels for panel mounting
[printed/led_bezel.scad](printed/led_bezel.scad) Implementation.
[tests/LED_bezel.scad](tests/LED_bezel.scad) Code for this example.
### Properties
| Function | Description |
|:--- |:--- |
| `led_bezel_flange(type)` | Flange width |
| `led_bezel_flange_t(type)` | Flange thickness |
| `led_bezel_height(type)` | Total height |
| `led_bezel_led(type)` | The LED |
| `led_bezel_wall(type)` | Wall thickness |
### Functions
| Function | Description |
|:--- |:--- |
| `led_bezel(led, flange = 1, flange_h = 1, wall = 1, height = 8)` | Constructor |
| `led_bezel_hole_r(type)` | Panel hole radius |
| `led_bezel_r(type)` | Radius of the tube |
### Modules
| Module | Description |
|:--- |:--- |
| `led_bezel(type)` | Makes the STL for the bezel |
| `led_bezel_assembly(type, colour = "red")` | Led bezel with LED |
| `led_bezel_fastened_assembly(type, t, colour = "red")` | Led bezel fitted to panel with and retaining ring |
| `led_bezel_retainer(type)` | Makes the STL for the retaining ring |
![led_bezel](tests/png/led_bezel.png)
### Vitamins
| Qty | Module call | BOM entry |
| ---:|:--- |:---|
| 1 | `led(LED10mm, "orange")` | LED 10 mm orange |
| 1 | `led(LED3mm, "yellow")` | LED 3 mm yellow |
| 1 | `led(LED5mm, "blue")` | LED 5 mm blue |
| 1 | `led(LED8mm)` | LED 8 mm red |
### Printed
| Qty | Filename |
| ---:|:--- |
| 1 | LED10mm_bezel.stl |
| 1 | LED10mm_bezel_retainer.stl |
| 1 | LED3mm_bezel.stl |
| 1 | LED3mm_bezel_retainer.stl |
| 1 | LED5mm_bezel.stl |
| 1 | LED5mm_bezel_retainer.stl |
| 1 | LED8mm_bezel.stl |
| 1 | LED8mm_bezel_retainer.stl |
### Assemblies
| Qty | Name |
| ---:|:--- |
| 1 | LED10mm_orange_bezel_assembly |
| 1 | LED3mm_yellow_bezel_assembly |
| 1 | LED5mm_blue_bezel_assembly |
| 1 | LED8mm_red_bezel_assembly |
<a href="#top">Top</a>
---

37
tests/LED_bezel.scad Normal file
View File

@@ -0,0 +1,37 @@
//
// NopSCADlib Copyright Chris Palmer 2018
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// This file is part of NopSCADlib.
//
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
// GNU General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../core.scad>
use <../utils/layout.scad>
include <../vitamins/leds.scad>
use <../printed/led_bezel.scad>
module led_bezels()
layout([for(l = LEDs) led_diameter(l)], 6) let(l = LEDs[$i], b = led_bezel(l))
if($preview)
led_bezel_fastened_assembly(b, 3, ["yellow", "blue", "red", "orange"][$i % 4]);
else {
led_bezel(b);
translate([0, -20])
led_bezel_retainer(b);
}
led_bezels();

View File

@@ -23,7 +23,7 @@ include <../vitamins/leds.scad>
module leds()
layout([for(l = LEDs) led_diameter(l)], 5)
led(LEDs[$i], ["green", "blue", "red"][$i % 3]);
led(LEDs[$i], ["green", "blue", "red", "orange"][$i % 4]);
if($preview)
leds();

View File

@@ -70,6 +70,8 @@ test_pcb = ["test_pcb", "Test PCB",
[ 25, 2, 90, "smd_cap", CAP1206, 1.5],
[ 28, 2, 90, "smd_cap", CAP0805, 1.0],
[ 31, 2, 90, "smd_cap", CAP0603, 0.7],
[ 34, 3, 90, "smd_diode",DO241AC, "SS34"],
[ 22, 6, -90, "smd_pot", TC33X1, "10K"],
[ 16, 6, -90, "smd_sot", SOT23, "2N7000"],
[ 28, 20, -90, "smd_sot", SOT223, "LM117"],
@@ -78,9 +80,10 @@ test_pcb = ["test_pcb", "Test PCB",
[ 10, 20, 0, "2p54boxhdr", 4, 2],
[ 10, 30, 0, "2p54socket", 6, 1],
[ 25, 30, 0, "2p54socket", 4, 1, false, 0, false, "red" ],
[ 65, 50, 0, "led", LED3mm, "red"],
[ 75, 50, 0, "led", LED5mm, "orange"],
[ 90, 50, 0, "led", LED10mm, "yellow"],
[ 59, 50, 180, "led", LED3mm, "red"],
[ 66, 50, 180, "led", LED5mm, "orange"],
[ 77, 50, 180, "led", LED8mm, "blue"],
[ 90, 50, 180, "led", LED10mm, "yellow"],
[ 10, 45, 180, "rj45"],
[ 8, 65, 180, "usb_A"],
[ 8, 105, 180, "usb_Ax2"],
@@ -141,6 +144,8 @@ test_pcb = ["test_pcb", "Test PCB",
[ 52, 200, 0, "pcb", 11, TMC2130 ],
[ 80, 210, 0, "pdip", 24, "27C32", true, inch(0.6) ],
[ 80, 180, 0, "pdip", 8, "NE555" ],
[ 71, 180, 0, "smd_inductor", IND2525, "4R7"],
[ 80, 166, -90, "smd_soic", SOIC18, "PIC18F88"],
[ 71, 166, -90, "smd_soic", SOIC16, "ICL323"],
[ 64, 166, -90, "smd_soic", SOIC8, "M34063"],

View File

@@ -34,16 +34,30 @@ module smds() {
let(c = smd_capacitors[$i])
smd_capacitor(c, smd_cap_size(c).y * 0.8);
translate([0, 12])
translate([0, 9])
layout([for(d = smd_diodes) smd_diode_size(d).x], 1)
let(d = smd_diodes[$i])
smd_diode(d, ["SS34"][$i]);
translate([0, 15])
layout([for(s = smd_sots) smd_sot_size(s).x], 1)
let(s = smd_sots[$i])
smd_sot(s, ["2N7000", "FZT851"][$i]);
translate([0, 20])
translate([0, 21])
layout([for(p = smd_pots) smd_pot_size(p).x], 1)
let(p = smd_pots[$i])
smd_pot(p, "10K");
translate([0, 28])
layout([for(s = smd_soics) smd_soic_size(s).x], 1)
let(s = smd_soics[$i])
smd_soic(s, s[0]);
translate([0, 36])
layout([for(i = smd_inductors) smd_inductor_size(i).x], 1)
let(i = smd_inductors[$i])
smd_inductor(i, "4R7");
}
if($preview)

BIN
tests/png/led_bezel.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 KiB

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 KiB

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 KiB

After

Width:  |  Height:  |  Size: 157 KiB

View File

@@ -76,7 +76,7 @@ module render_if(render = true, convexity = 2) //! Renders an object if `re
module extrude_if(h, center = true) //! Extrudes 2D object to 3D when `h` is nonzero, otherwise leaves it 2D
if(h)
linear_extrude(h, center = center, convexity = 2) // 3D
linear_extrude(h, center = center, convexity = 5) // 3D
children();
else
children(); // 2D

View File

@@ -1135,6 +1135,9 @@ module pcb_component(comp, cutouts = false, angle = undef) { //! Draw pcb compon
if(show(comp, "smd_cap")) smd_capacitor(comp[4], comp[5], param(6, undef));
if(show(comp, "smd_sot")) smd_sot(comp[4], comp[5]);
if(show(comp, "smd_soic")) smd_soic(comp[4], comp[5]);
if(show(comp, "smd_diode")) smd_diode(comp[4], comp[5]);
if(show(comp, "smd_inductor")) smd_inductor(comp[4], comp[5]);
if(show(comp, "smd_pot")) smd_pot(comp[4], comp[5]);
if(show(comp, "vero_pin")) vero_pin(param(4, false));
if(show(comp, "terminal")) terminal_block(comp[5], comp[4]);
if(show(comp, "text")) color("white") linear_extrude(eps) resize([comp[4], comp[5]]) text(comp[6], font = param(7, "Liberation Mono"), valign = "center", halign = "center");

View File

@@ -744,9 +744,24 @@ WD2002SJ = ["WD2002SJ", "WD2002SJ Buck Boost DC-DC converter", 78, 47, 1.6, 0, 3
],
[]];
MP1584EN = ["MP1584EN", "MP1584EN 3A buck converter", 22, 17, 1.2, 0, 1, [2, 2], "green", false,
[[1.75, 1.75], [1.75, -1.75], [-1.75, 1.75], [-1.75, -1.75], [-1.75, -4.4], [-1.75, 4.48], [1.75, -4.4], [1.75, 4.4]],
[]
MP1584EN = ["MP1584EN", "MP1584EN 3A buck converter", 22, 17, 1.25, 0, 1, [2, 2], "green", false,
[[1.75, 1.75], [1.75, -1.75], [-1.75, 1.75], [-1.75, -1.75], [-1.75, -4.4], [-1.75, 4.4], [1.75, -4.4], [1.75, 4.4]],
[ [1.75, 8.5, 90, "smd_cap", CAP1206, 1],
[-1.75, 8.5, 90, "smd_cap", CAP1206, 1],
[7.5, 8.5, 0, "smd_soic", SOIC8, "WP1584EN"],
[3.9, 8.3, 90, "smd_res", RES0603, "104"],
[3.9, 11.2, 90,"smd_cap", CAP0603, 0.5],
[3.9, 5.4, 90, "smd_res", RES0603, "822"],
[6.2, 3.5, 0, "smd_res", RES0603, "104"],
[6.2, 2.1, 0, "smd_cap", CAP0603, 0.5],
[9.2, 3.5, 0, "smd_res", RES0603, "104"],
[9.2, 2.1, 0, "smd_res", RES0603, "104"],
[6.3, 14.4, 0, "smd_diode",DO241AC, "SS34"],
[12.1, 4.9, 0, "smd_cap", CAP0603, 0.5],
[15.8, 4.9, 0, "smd_cap", CAP0603, 0.5],
[14.5, 10, 90, "smd_inductor", IND2525, "4R7"],
[14.7, 1.8,-90,"smd_pot", TC33X1, "10K"],
]
];
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.71, 3.65]];

View File

@@ -328,6 +328,19 @@ module screw_polysink(type, h = 100, alt = false, sink = 0) { //! A countersink
}
}
module screw_keyhole(type, h = 0) { //! Make keyhole slot to accept and retain screw head
r = screw_head_radius(type);
extrude_if(h) {
translate([0, - 2 * r])
drill(r + 0.5, 0);
hull()
for(y = [0, -2 * r])
translate([0, y])
drill(screw_clearance_radius(type), 0);
}
}
module screw_and_washer(type, length, star = false, penny = false) { //! Screw with a washer which can be standard or penny and an optional star washer on top
washer = screw_washer(type);
head_type = screw_head_type(type);

View File

@@ -49,7 +49,7 @@ AL3 = [ "AL3", "Aluminium tooling plate", 3, [0.9, 0.9, 0.9, 1 ],
AL6 = [ "AL6", "Aluminium tooling plate", 6, [0.9, 0.9, 0.9, 1 ], false];
AL8 = [ "AL8", "Aluminium tooling plate", 8, [0.9, 0.9, 0.9, 1 ], false];
Steel06 = [ "Steel06", "Sheet mild steel", 0.6,"silver" , false];
Spring05 = [ "Spring05", "Bi-metal saw blade", 0.5,"#FBC300", false];
Spring08 = [ "Spring08", "Bi-metal saw blade", 0.8,"#FBC300", false];
Silicone3 = [ "Silicone3", "Sheet silicone", 3, [0.9, 0.9, 0.9, 0.95 ], false];
CF1 = [ "CF1", "Sheet carbon fiber", 1, grey(35), false, 2, 2, grey(20)];
CF2 = [ "CF2", "Sheet carbon fiber", 2, grey(35), false, 2, 2, grey(20)];
@@ -57,6 +57,6 @@ CF3 = [ "CF3", "Sheet carbon fiber", 3, grey(35),
sheets = [CF1, CF2, CF3, MDF6, MDF10, MDF12, MDF19, PMMA1p25, PMMA2, PMMA3, PMMA6, PMMA8, PMMA10,
glass2, DiBond, DiBond6, Cardboard, FoilTape, AL1_6, AL2, AL3, AL6, AL8, Steel06, Spring05, Silicone3, Foam20];
glass2, DiBond, DiBond6, Cardboard, FoilTape, AL1_6, AL2, AL3, AL6, AL8, Steel06, Spring08, Silicone3, Foam20];
use <sheet.scad>

View File

@@ -24,6 +24,7 @@ include <../utils/core/core.scad>
use <../utils/tube.scad>
use <../utils/sweep.scad>
use <../utils/sector.scad>
function smd_led_size(type) = type[1]; //! Body length, width and height
function smd_led_lens(type) = type[2]; //! Lens length width and height
@@ -228,3 +229,205 @@ module smd_soic(type, value) { //! Draw an SMD SOIC
text(value, halign = "center", valign = "center");
}
function smd_diode_size(type) = type[1]; //! Body length, width and height
function smd_diode_z(type) = type[2]; //! Height above PCB surface
function smd_diode_lead_z(type) = type[3]; //! Top of lead frame from top
function smd_diode_leads(type) = type[4]; //! Lead extent in x, width, thickness and gap
module smd_diode(type, value) { //! Draw an SMD diode
vitamin(str("smd_diode(", type[0], "): ", type[0], " package ", value));
slant = 5; //! 5 degree body draft angle
size = smd_diode_size(type);
z0 = smd_diode_z(type);
z2 = z0 + size.z;
z1 = z2 - smd_diode_lead_z(type);
stripe = size.x / 5;
leads = smd_diode_leads(type);
gap = leads[3];
gap2 = gap - leads.z * 2;
color(grey(20))
difference() {
hull()
for(z = [z0, z1, z2], inset = abs(z - z1) * tan(slant))
translate_z(z)
cube([size.x - 2 * inset, size.y - 2 * inset, eps], center = true);
for(side = [-1, 1])
translate([side * (size.x / 2 - (size.x - gap2) / 4), 0, eps])
cube([(size.x - gap2) / 2, size.y, 3 * leads.z], center = true);
}
color("white")
translate([-stripe / 2, 0, z2])
linear_extrude(eps)
resize([0.9 * (size.x - stripe), size.y / 2])
text(value, halign = "center", valign = "center");
color(grey(90)) {
inset = (z2 - z1) * tan(slant);
translate([size.x / 2 - stripe, -size.y / 2 + inset, z2])
cube([stripe - inset, size.y - 2 * inset, eps]);
}
color(silver)
translate_z(z1 / 2)
rotate([90, 0, 0])
linear_extrude(leads.y, center = true, convexity = 3) let($fn = 32)
difference() {
rounded_square([leads.x, z1], 2 * leads.z);
rounded_square([leads.x - 2 * leads.z, z1 - 2 * leads.z], leads.z);
translate([0, - z1 / 2])
square([gap, leads.z * 2 + eps], center = true);
}
}
function smd_inductor_size(type) = type[1]; //! Body length, width and height
function smd_inductor_z(type) = type[2]; //! Height above PCB surface
function smd_inductor_lead_z(type) = type[3]; //! Top of lead frame from top
function smd_inductor_leads(type) = type[4]; //! Lead extent in x, width, thickness and gap
function smd_inductor_colour(type) = type[5]; //! Body colour
module smd_inductor(type, value) { //! Draw an SMD inductor
vitamin(str("smd_inductor(", type[0], "): ", type[0], " package ", value));
size = smd_inductor_size(type);
z0 = smd_inductor_z(type);
z1 = smd_inductor_lead_z(type);
z2 = z0 + size.z;
leads = smd_inductor_leads(type);
gap = leads[3];
gap2 = gap - leads.z * 2;
color(smd_inductor_colour(type))
difference() {
translate_z(z0)
rounded_rectangle(size, 0.5);
for(side = [-1, 1])
translate([side * (size.x / 2 - (size.x - gap2) / 4), 0, eps])
cube([(size.x - gap2) / 2, leads.y + 2 * leads.z, 3 * leads.z], center = true);
}
color("white")
translate_z(z2)
linear_extrude(eps)
resize([0.9 * size.x, size.y / 2])
text(value, halign = "center", valign = "center");
color(silver)
translate_z(z1 / 2)
rotate([90, 0, 0])
linear_extrude(leads.y, center = true, convexity = 3) let($fn = 32)
difference() {
rounded_square([leads.x, z1], 2 * leads.z);
rounded_square([leads.x - 2 * leads.z, z1 - 2 * leads.z], leads.z);
translate([0, - z1 / 2])
square([gap, leads.z * 2 + eps], center = true);
}
}
function smd_pot_size(type) = type[1]; //! Base length, width and height
function smd_pot_contacts(type) = type[2]; //! Contacts width, depth, pitch and width, depth, gap for center contact
function smd_pot_wiper(type) = type[3]; //! Wiper diameter, offset, thickness, height, d1, d2, d3, d4
function smd_pot_cross(type) = type[4]; //! Cross head slot for screwdriver
function smd_pot_flat(type) = type[5]; //! Flat at the back of the wiper
module smd_pot(type, value) { //! Draw an SMD pot
vitamin(str("smd_pot(", type[0], "): ", type[0], " package ", value));
size = smd_pot_size(type);
contacts = smd_pot_contacts(type);
contacts_pitch = contacts[2];
centre_contact_w = contacts[3];
centre_contact_d = contacts[4];
centre_contact_gap = contacts[5];
wiper = smd_pot_wiper(type);
wiper_r1 = wiper.x / 2; // outer radius
wiper_y = wiper.y;
wiper_t = wiper.z;
wiper_h = wiper[3];
wiper_r2 = wiper[4] / 2; // inner radius at the top
wiper_r3 = wiper[5] / 2; // inner radius at the bottom
wiper_r4 = wiper[6] / 2; // outer radius of rivet
wiper_r5 = wiper[7] / 2; // inner radius of rivet
cross = smd_pot_cross(type);
flat = smd_pot_flat(type);
track_or = size.x * 0.48;
track_ir = track_or * 0.6;
color(grey(90))
translate_z(size.z / 2)
cube(size, center = true);
color(silver) {
for(side = [-1, 1])
translate([side * contacts_pitch, -size.y / 2 + contacts.y / 2, size.z / 2])
cube([contacts.x, contacts.y, size.z] + 2 * eps * [1,1,1], center = true);
translate([0, size.y / 2 - centre_contact_d / 2, size.z / 2])
render() difference() {
cube([centre_contact_w, centre_contact_d + 2 * eps, size.z + 2 * eps], center = true);
translate_z(size.z / 2)
cube([centre_contact_gap, centre_contact_d + 4 * eps, 2 * eps], center = true);
}
slope_angle = atan((wiper_h - size.z - wiper_t) / (wiper_r2 - wiper_r3));
dx = wiper_t / tan(90 - slope_angle / 2);
translate([0, wiper_y]) {
render() difference() {
rotate_extrude() {
polygon([
[wiper_r5, size.z + wiper_t],
[wiper_r3, size.z + wiper_t],
[wiper_r2, wiper_h],
[wiper_r1, wiper_h],
[wiper_r1, wiper_h - wiper_t],
[wiper_r2 + dx, wiper_h - wiper_t],
[wiper_r3 + dx, size.z],
[wiper_r5, size.z],
]);
r = (wiper_r4 - wiper_r5) / 2;
translate([wiper_r5 + r, size.z + wiper_t])
circle(r, $fn = 16);
}
translate_z(size.z + wiper_t)
linear_extrude(wiper_h - size.z - wiper_t)
difference() {
union() {
square(cross, center = true);
rotate(90)
square(cross, center = true);
}
circle(wiper_r4 + eps);
}
}
translate([0, -(wiper_r1 + cross.x / 2) / 2, wiper_h - wiper_t / 2])
cube([flat, wiper_r1 - cross.x / 2, wiper_t], center = true);
}
}
color("black")
translate([0, wiper.y, size.z])
linear_extrude(eps) {
difference() {
sector(track_or, -270 / 2 + 90, 270 / 2 + 90);
circle(track_ir);
}
track_w = track_or - track_ir;
track_l = wiper.y - track_ir / sqrt(2) + size.y / 2 - contacts.y;
for(side = [-1, 1])
translate([side * (track_ir / sqrt(2) + track_w / 2), -wiper.y -size.y / 2 + track_l / 2 + contacts.y])
square([track_w, track_l], center = true);
}
}

View File

@@ -50,4 +50,16 @@ SOIC18 = ["SOIC18", [11.40, 7.50, 2.00], 0.10, 1.20, 1.27, 10.30, [0.31, .50, 0.
smd_soics = [SOIC8, SOIC16, SOIC18];
DO241AC = ["DO241AC", [4.0, 2.5, 2.0], 0.1, 1, [4.8, 1.2, 0.15, 2]];
smd_diodes = [DO241AC];
IND2525 = ["IND2525", [6.75, 6.75, 2], 0.1, 1.75, [7.24, 3.2, 0.15, 4.4], grey(50)];
smd_inductors = [IND2525];
TC33X1 = ["TC33X1", [3.0, 3.8, 0.5], [0.95, 0.9, 0.88, 1.5, 0.2, 0.75],[3.0, 0.1, 0.2, 1.2, 1.7, 1.2, 1, 0.5], [2.1, 0.5], 1.5];
smd_pots = [TC33X1];
use <smd.scad>