Compare commits
15 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
026b9daf59 | ||
|
2afc00cfa9 | ||
|
84b5686af6 | ||
|
71af8f98ed | ||
|
6cecb4d466 | ||
|
4ef926a18f | ||
|
5afc4f816c | ||
|
5be14f5e89 | ||
|
efff17dfc7 | ||
|
ac4a5500a9 | ||
|
6b90a7aac8 | ||
|
3c3d72f366 | ||
|
dbcab8377f | ||
|
11d96d37e1 | ||
|
40843b421f |
2
lib.scad
@@ -40,7 +40,6 @@ include <vitamins/inserts.scad>
|
||||
include <vitamins/kp_pillow_blocks.scad>
|
||||
include <vitamins/ldrs.scad>
|
||||
include <vitamins/leadnuts.scad>
|
||||
include <vitamins/leds.scad>
|
||||
include <vitamins/light_strips.scad>
|
||||
include <vitamins/mains_sockets.scad>
|
||||
include <vitamins/modules.scad>
|
||||
@@ -56,6 +55,7 @@ include <vitamins/sk_brackets.scad>
|
||||
include <vitamins/spools.scad>
|
||||
include <vitamins/ssrs.scad>
|
||||
include <vitamins/stepper_motors.scad>
|
||||
include <vitamins/swiss_clips.scad>
|
||||
include <vitamins/toggles.scad>
|
||||
include <vitamins/transformers.scad>
|
||||
include <vitamins/tubings.scad>
|
||||
|
BIN
libtest.png
Before Width: | Height: | Size: 780 KiB After Width: | Height: | Size: 787 KiB |
25
libtest.scad
@@ -71,6 +71,7 @@ use <tests/spades.scad>
|
||||
use <tests/springs.scad>
|
||||
use <tests/SSRs.scad>
|
||||
use <tests/stepper_motors.scad>
|
||||
use <tests/swiss_clips.scad>
|
||||
use <tests/toggles.scad>
|
||||
use <tests/transformers.scad>
|
||||
use <tests/tubings.scad>
|
||||
@@ -101,7 +102,7 @@ use <tests/SSR_shroud.scad>
|
||||
use <tests/PSU_shroud.scad>
|
||||
|
||||
x0 = 0;
|
||||
x1 = x0 + 100;
|
||||
x1 = x0 + 110;
|
||||
x2 = x1 + 90;
|
||||
x3 = x2 + 130;
|
||||
x4 = x3 + 200;
|
||||
@@ -165,8 +166,8 @@ o_rings_y = springs_y;
|
||||
sealing_strip_y = springs_y + 20;
|
||||
tubings_y = sealing_strip_y + 20;
|
||||
pillars_y = tubings_y + 20;
|
||||
leadnuts_y = pillars_y + 40;
|
||||
pulleys_y = leadnuts_y +40;
|
||||
ball_bearings_y = pillars_y + 40;
|
||||
pulleys_y = ball_bearings_y +40;
|
||||
hot_ends_y = pulleys_y + 60;
|
||||
linear_bearings_y = hot_ends_y + 50;
|
||||
sheets_y = linear_bearings_y + 100;
|
||||
@@ -176,7 +177,7 @@ fans_y = displays_y + 80;
|
||||
transformers_y = fans_y + 120;
|
||||
psus_y = transformers_y + 190;
|
||||
|
||||
translate([x0 + 30, inserts_y])
|
||||
translate([x0 + 35, inserts_y])
|
||||
inserts();
|
||||
|
||||
translate([x0, inserts_y])
|
||||
@@ -209,10 +210,7 @@ translate([x0, tubings_y])
|
||||
translate([x0, pillars_y])
|
||||
pillars();
|
||||
|
||||
translate([x0, leadnuts_y ])
|
||||
leadnuts();
|
||||
|
||||
translate([x0 + 60, leadnuts_y])
|
||||
translate([x0, ball_bearings_y])
|
||||
ball_bearings();
|
||||
|
||||
translate([x0, pulleys_y])
|
||||
@@ -252,7 +250,9 @@ translate([x0, psus_y]) {
|
||||
}
|
||||
|
||||
zipties_y = 0;
|
||||
bulldogs_y = zipties_y + 40;
|
||||
bulldogs_y = zipties_y + 30;
|
||||
swiss_clips_y = bulldogs_y + 35;
|
||||
leadnuts_y = swiss_clips_y + 50;
|
||||
|
||||
translate([x1, zipties_y])
|
||||
zipties();
|
||||
@@ -260,6 +260,13 @@ translate([x1, zipties_y])
|
||||
translate([x1, bulldogs_y])
|
||||
bulldogs();
|
||||
|
||||
translate([x1, swiss_clips_y])
|
||||
swiss_clips();
|
||||
|
||||
translate([x1, leadnuts_y])
|
||||
leadnuts();
|
||||
|
||||
|
||||
leds_y = 0;
|
||||
carriers_y = leds_y + 40;
|
||||
spades_y = carriers_y + 40;
|
||||
|
209
readme.md
@@ -17,31 +17,77 @@ See [usage](docs/usage.md) for requirements, installation instructions and a usa
|
||||
|
||||
## Table of Contents<a name="top"/>
|
||||
<table><tr>
|
||||
<th align="left"> Vitamins A-J </th><th align="left"> Vitamins K-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 = "#Ball_bearings">Ball_bearings</a> </td><td> <a href = "#KP_pillow_blocks">KP_pillow_blocks</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 = "#Batteries">Batteries</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 = "#Belts">Belts</a> </td><td> <a href = "#LEDs">LEDs</a> </td><td> <a href = "#Rockers">Rockers</a> </td><td> <a href = "#Cable_grommets">Cable_grommets</a> </td><td> <a href = "#Dogbones">Dogbones</a> </td><td> <a href = "#Global">Global</a> </td></tr>
|
||||
<tr><td> <a href = "#Blowers">Blowers</a> </td><td> <a href = "#Leadnuts">Leadnuts</a> </td><td> <a href = "#Rod">Rod</a> </td><td> <a href = "#Carriers">Carriers</a> </td><td> <a href = "#Fillet">Fillet</a> </td><td> <a href = "#Polyholes">Polyholes</a> </td></tr>
|
||||
<tr><td> <a href = "#Bulldogs">Bulldogs</a> </td><td> <a href = "#Light_strips">Light_strips</a> </td><td> <a href = "#SCS_bearing_blocks">SCS_bearing_blocks</a> </td><td> <a href = "#Corner_block">Corner_block</a> </td><td> <a href = "#Hanging_hole">Hanging_hole</a> </td><td> <a href = "#Rounded_rectangle">Rounded_rectangle</a> </td></tr>
|
||||
<tr><td> <a href = "#Buttons">Buttons</a> </td><td> <a href = "#Linear_bearings">Linear_bearings</a> </td><td> <a href = "#SK_brackets">SK_brackets</a> </td><td> <a href = "#Door_hinge">Door_hinge</a> </td><td> <a href = "#Layout">Layout</a> </td><td> <a href = "#Sphere">Sphere</a> </td></tr>
|
||||
<tr><td> <a href = "#Cable_strips">Cable_strips</a> </td><td> <a href = "#Mains_sockets">Mains_sockets</a> </td><td> <a href = "#SSRs">SSRs</a> </td><td> <a href = "#Door_latch">Door_latch</a> </td><td> <a href = "#Maths">Maths</a> </td><td> <a href = "#Teardrops">Teardrops</a> </td></tr>
|
||||
<tr><td> <a href = "#Circlips">Circlips</a> </td><td> <a href = "#Meter">Meter</a> </td><td> <a href = "#Screws">Screws</a> </td><td> <a href = "#Fan_guard">Fan_guard</a> </td><td> <a href = "#Offset">Offset</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Components">Components</a> </td><td> <a href = "#Microswitches">Microswitches</a> </td><td> <a href = "#Sealing_strip">Sealing_strip</a> </td><td> <a href = "#Fixing_block">Fixing_block</a> </td><td> <a href = "#Quadrant">Quadrant</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#D_connectors">D_connectors</a> </td><td> <a href = "#Microview">Microview</a> </td><td> <a href = "#Sheets">Sheets</a> </td><td> <a href = "#Flat_hinge">Flat_hinge</a> </td><td> <a href = "#Round">Round</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Displays">Displays</a> </td><td> <a href = "#Modules">Modules</a> </td><td> <a href = "#Spades">Spades</a> </td><td> <a href = "#Foot">Foot</a> </td><td> <a href = "#Rounded_cylinder">Rounded_cylinder</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Extrusion_brackets">Extrusion_brackets</a> </td><td> <a href = "#Nuts">Nuts</a> </td><td> <a href = "#Spools">Spools</a> </td><td> <a href = "#Handle">Handle</a> </td><td> <a href = "#Rounded_polygon">Rounded_polygon</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Extrusions">Extrusions</a> </td><td> <a href = "#O_ring">O_ring</a> </td><td> <a href = "#Springs">Springs</a> </td><td> <a href = "#PCB_mount">PCB_mount</a> </td><td> <a href = "#Sector">Sector</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Fans">Fans</a> </td><td> <a href = "#Opengrab">Opengrab</a> </td><td> <a href = "#Stepper_motors">Stepper_motors</a> </td><td> <a href = "#PSU_shroud">PSU_shroud</a> </td><td> <a href = "#Sweep">Sweep</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Fuseholder">Fuseholder</a> </td><td> <a href = "#PCB">PCB</a> </td><td> <a href = "#Toggles">Toggles</a> </td><td> <a href = "#Printed_box">Printed_box</a> </td><td> <a href = "#Thread">Thread</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Geared_steppers">Geared_steppers</a> </td><td> <a href = "#PCBs">PCBs</a> </td><td> <a href = "#Transformers">Transformers</a> </td><td> <a href = "#Ribbon_clamp">Ribbon_clamp</a> </td><td> <a href = "#Tube">Tube</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Green_terminals">Green_terminals</a> </td><td> <a href = "#PSUs">PSUs</a> </td><td> <a href = "#Tubings">Tubings</a> </td><td> <a href = "#SSR_shroud">SSR_shroud</a> </td><td></td><td></td></tr>
|
||||
<tr><td> <a href = "#Hot_ends">Hot_ends</a> </td><td> <a href = "#Pillars">Pillars</a> </td><td> <a href = "#Variacs">Variacs</a> </td><td> <a href = "#Screw_knob">Screw_knob</a> </td><td></td><td></td></tr>
|
||||
<tr><td> <a href = "#Hygrometer">Hygrometer</a> </td><td> <a href = "#Pin_headers">Pin_headers</a> </td><td> <a href = "#Veroboard">Veroboard</a> </td><td> <a href = "#Socket_box">Socket_box</a> </td><td></td><td></td></tr>
|
||||
<tr><td> <a href = "#IECs">IECs</a> </td><td> <a href = "#Pulleys">Pulleys</a> </td><td> <a href = "#Washers">Washers</a> </td><td> <a href = "#Strap_handle">Strap_handle</a> </td><td></td><td></td></tr>
|
||||
<tr><td> <a href = "#Inserts">Inserts</a> </td><td></td><td> <a href = "#Wire">Wire</a> </td><td></td><td></td><td></td></tr>
|
||||
<tr><td> <a href = "#Jack">Jack</a> </td><td></td><td> <a href = "#Zipties">Zipties</a> </td><td></td><td></td><td></td></tr>
|
||||
<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 = "#KP_pillow_blocks">KP_pillow_blocks</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 = "#LDRs">LDRs</a> </td><td> <a href = "#Rockers">Rockers</a> </td><td> <a href = "#Cable_grommets">Cable_grommets</a> </td><td> <a href = "#Dogbones">Dogbones</a> </td><td> <a href = "#Global">Global</a> </td></tr>
|
||||
<tr><td> <a href = "#Belts">Belts</a> </td><td> <a href = "#LEDs">LEDs</a> </td><td> <a href = "#Rod">Rod</a> </td><td> <a href = "#Carriers">Carriers</a> </td><td> <a href = "#Fillet">Fillet</a> </td><td> <a href = "#Polyholes">Polyholes</a> </td></tr>
|
||||
<tr><td> <a href = "#Blowers">Blowers</a> </td><td> <a href = "#Leadnuts">Leadnuts</a> </td><td> <a href = "#SCS_bearing_blocks">SCS_bearing_blocks</a> </td><td> <a href = "#Corner_block">Corner_block</a> </td><td> <a href = "#Hanging_hole">Hanging_hole</a> </td><td> <a href = "#Rounded_rectangle">Rounded_rectangle</a> </td></tr>
|
||||
<tr><td> <a href = "#Bulldogs">Bulldogs</a> </td><td> <a href = "#Light_strips">Light_strips</a> </td><td> <a href = "#SK_brackets">SK_brackets</a> </td><td> <a href = "#Door_hinge">Door_hinge</a> </td><td> <a href = "#Layout">Layout</a> </td><td> <a href = "#Sphere">Sphere</a> </td></tr>
|
||||
<tr><td> <a href = "#Buttons">Buttons</a> </td><td> <a href = "#Linear_bearings">Linear_bearings</a> </td><td> <a href = "#SSRs">SSRs</a> </td><td> <a href = "#Door_latch">Door_latch</a> </td><td> <a href = "#Maths">Maths</a> </td><td> <a href = "#Teardrops">Teardrops</a> </td></tr>
|
||||
<tr><td> <a href = "#Cable_strips">Cable_strips</a> </td><td> <a href = "#Mains_sockets">Mains_sockets</a> </td><td> <a href = "#Screws">Screws</a> </td><td> <a href = "#Fan_guard">Fan_guard</a> </td><td> <a href = "#Offset">Offset</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Circlips">Circlips</a> </td><td> <a href = "#Meter">Meter</a> </td><td> <a href = "#Sealing_strip">Sealing_strip</a> </td><td> <a href = "#Fixing_block">Fixing_block</a> </td><td> <a href = "#Quadrant">Quadrant</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Components">Components</a> </td><td> <a href = "#Microswitches">Microswitches</a> </td><td> <a href = "#Sheets">Sheets</a> </td><td> <a href = "#Flat_hinge">Flat_hinge</a> </td><td> <a href = "#Round">Round</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#DIP">DIP</a> </td><td> <a href = "#Microview">Microview</a> </td><td> <a href = "#Spades">Spades</a> </td><td> <a href = "#Foot">Foot</a> </td><td> <a href = "#Rounded_cylinder">Rounded_cylinder</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#D_connectors">D_connectors</a> </td><td> <a href = "#Modules">Modules</a> </td><td> <a href = "#Spools">Spools</a> </td><td> <a href = "#Handle">Handle</a> </td><td> <a href = "#Rounded_polygon">Rounded_polygon</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Displays">Displays</a> </td><td> <a href = "#Nuts">Nuts</a> </td><td> <a href = "#Springs">Springs</a> </td><td> <a href = "#PCB_mount">PCB_mount</a> </td><td> <a href = "#Sector">Sector</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Extrusion_brackets">Extrusion_brackets</a> </td><td> <a href = "#O_ring">O_ring</a> </td><td> <a href = "#Stepper_motors">Stepper_motors</a> </td><td> <a href = "#PSU_shroud">PSU_shroud</a> </td><td> <a href = "#Sweep">Sweep</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Extrusions">Extrusions</a> </td><td> <a href = "#Opengrab">Opengrab</a> </td><td> <a href = "#Swiss_clips">Swiss_clips</a> </td><td> <a href = "#Printed_box">Printed_box</a> </td><td> <a href = "#Thread">Thread</a> </td><td></td></tr>
|
||||
<tr><td> <a href = "#Fans">Fans</a> </td><td> <a href = "#PCB">PCB</a> </td><td> <a href = "#Toggles">Toggles</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 = "#Fuseholder">Fuseholder</a> </td><td> <a href = "#PCBs">PCBs</a> </td><td> <a href = "#Transformers">Transformers</a> </td><td> <a href = "#SSR_shroud">SSR_shroud</a> </td><td></td><td></td></tr>
|
||||
<tr><td> <a href = "#Geared_steppers">Geared_steppers</a> </td><td> <a href = "#PSUs">PSUs</a> </td><td> <a href = "#Tubings">Tubings</a> </td><td> <a href = "#Screw_knob">Screw_knob</a> </td><td></td><td></td></tr>
|
||||
<tr><td> <a href = "#Green_terminals">Green_terminals</a> </td><td> <a href = "#Pillars">Pillars</a> </td><td> <a href = "#Variacs">Variacs</a> </td><td> <a href = "#Socket_box">Socket_box</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 = "#Veroboard">Veroboard</a> </td><td> <a href = "#Strap_handle">Strap_handle</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 = "#Washers">Washers</a> </td><td></td><td></td><td></td></tr>
|
||||
<tr><td> <a href = "#IECs">IECs</a> </td><td></td><td> <a href = "#Wire">Wire</a> </td><td></td><td></td><td></td></tr>
|
||||
<tr><td> <a href = "#Inserts">Inserts</a> </td><td></td><td> <a href = "#Zipties">Zipties</a> </td><td></td><td></td><td></td></tr>
|
||||
</table>
|
||||
|
||||
---
|
||||
<a name="Axials"></a>
|
||||
## Axials
|
||||
Axial components for PCBs.
|
||||
|
||||
|
||||
[vitamins/axials.scad](vitamins/axials.scad) Object definitions.
|
||||
|
||||
[vitamins/axial.scad](vitamins/axial.scad) Implementation.
|
||||
|
||||
[tests/axials.scad](tests/axials.scad) Code for this example.
|
||||
|
||||
### Properties
|
||||
| Function | Description |
|
||||
|:--- |:--- |
|
||||
| ```ax_res_colour(type)``` | Body colour |
|
||||
| ```ax_res_diameter(type)``` | Body diameter |
|
||||
| ```ax_res_end_d(type)``` | End cap diameter |
|
||||
| ```ax_res_end_l(type)``` | End cap length |
|
||||
| ```ax_res_length(type)``` | Body length |
|
||||
| ```ax_res_wattage(type)``` | Power rating |
|
||||
| ```ax_res_wire(type)``` | Wire diameter |
|
||||
|
||||
### Modules
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
| ```ax_res(type, value, tol = 5, pitch = 0)``` | Through hole axial resistor. If ```pitch``` is zero the minimum is used. If below the minimum the resistor is placed vertical. |
|
||||
| ```wire_link(d, l, h = 1)``` | Draw a wire jumper link. |
|
||||
|
||||

|
||||
|
||||
### Vitamins
|
||||
| Qty | Module call | BOM entry |
|
||||
| ---:|:--- |:---|
|
||||
| 1 | ```pcb(PERF60x40)``` | Perfboard 60 x 40mm |
|
||||
| 1 | ```ax_res(res1_8, 1000)``` | Resistor 1000 Ohms 5% 0.125W |
|
||||
| 1 | ```ax_res(res1_8, 2200, tol = 1)``` | Resistor 2200 Ohms 1% 0.125W |
|
||||
| 1 | ```ax_res(res1_4, 39000, tol = 1)``` | Resistor 39000 Ohms 1% 0.25W |
|
||||
| 1 | ```ax_res(res1_4, 47000)``` | Resistor 47000 Ohms 5% 0.25W |
|
||||
| 1 | ```ax_res(res1_2, 8200)``` | Resistor 8200 Ohms 5% 0.5W |
|
||||
| 1 | ```ax_res(res1_2, 8250, tol = 1)``` | Resistor 8250 Ohms 1% 0.5W |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
|
||||
---
|
||||
<a name="Ball_bearings"></a>
|
||||
## Ball_bearings
|
||||
@@ -65,14 +111,11 @@ Also single bearing balls are modelled as just a silver sphere and a BOM entry.
|
||||
| ```bb_bore(type)``` | Internal diameter |
|
||||
| ```bb_colour(type)``` | Shield colour, "silver" for metal |
|
||||
| ```bb_diameter(type)``` | External diameter |
|
||||
| ```bb_hub(type)``` | Inner rim thickness guesstimate |
|
||||
| ```bb_name(type)``` | Part code without shield type suffix |
|
||||
| ```bb_rim(type)``` | Outer rim thickness guesstimate |
|
||||
| ```bb_width(type)``` | Width |
|
||||
|
||||
### Functions
|
||||
| Function | Description |
|
||||
|:--- |:--- |
|
||||
| ```bb_rim(type)``` | Inner and outer rim thickness |
|
||||
|
||||
### Modules
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
@@ -88,7 +131,8 @@ Also single bearing balls are modelled as just a silver sphere and a BOM entry.
|
||||
| 1 | ```ball_bearing(BB6200)``` | Ball bearing 6200-2RS 10mm x 30mm x 9mm |
|
||||
| 1 | ```ball_bearing(BB6201)``` | Ball bearing 6201-2RS 12mm x 32mm x 10mm |
|
||||
| 1 | ```ball_bearing(BB624)``` | Ball bearing 624-2RS 4mm x 13mm x 5mm |
|
||||
| 4 | ``` bearing_ball(3)``` | Steel ball 3mm |
|
||||
| 1 | ```ball_bearing(BB6808)``` | Ball bearing 6808-2RS 40mm x 52mm x 7mm |
|
||||
| 5 | ``` bearing_ball(3)``` | Steel ball 3mm |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
@@ -572,6 +616,50 @@ D-connectors. Can be any number of ways, male or female, solder buckets, PCB mou
|
||||
| 6 | ```d_pillar()``` | D-type connector pillar |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
|
||||
---
|
||||
<a name="DIP"></a>
|
||||
## DIP
|
||||
Dual inline IC packages and sockets
|
||||
|
||||
|
||||
[vitamins/dip.scad](vitamins/dip.scad) Implementation.
|
||||
|
||||
[tests/DIP.scad](tests/DIP.scad) Code for this example.
|
||||
|
||||
### Properties
|
||||
| Function | Description |
|
||||
|:--- |:--- |
|
||||
| ```pdip_pin_W(type)``` | Pin shoulder width |
|
||||
| ```pdip_pin_h(type)``` | Pin height |
|
||||
| ```pdip_pin_n(type)``` | Pin neck |
|
||||
| ```pdip_pin_s(type)``` | Height above seating plane |
|
||||
| ```pdip_pin_t(type)``` | Pin thickness |
|
||||
| ```pdip_pin_w(type)``` | Pin width |
|
||||
|
||||
### Modules
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
| ```dip(n, part, size, w, pitch, pin)``` | Draw DIP package |
|
||||
| ```pdip(pins, part, socketed, w = inch(0.3)``` | Draw standard 0.1" PDIP IC package |
|
||||
| ```pdip_pin(type, l, end)``` | Draw a pin |
|
||||
|
||||

|
||||
|
||||
### Vitamins
|
||||
| Qty | Module call | BOM entry |
|
||||
| ---:|:--- |:---|
|
||||
| 1 | ```dil_socket(14, 7.62)``` | DIL socket 28 x 0.3" |
|
||||
| 1 | ```pdip(14, 74HC00)``` | IC 74HC00 PDIP14 |
|
||||
| 1 | ```pdip(20, 74HC245)``` | IC 74HC245 PDIP20 |
|
||||
| 1 | ```pdip(28, ATMEGA328)``` | IC ATMEGA328 PDIP28 |
|
||||
| 1 | ```pdip(8, NE555)``` | IC NE555 PDIP8 |
|
||||
| 1 | ```pdip(6, OPTO)``` | IC OPTO PDIP6 |
|
||||
| 1 | ```pdip(16, ULN2003)``` | IC ULN2003 PDIP16 |
|
||||
| 1 | ```pdip(18, ULN2803)``` | IC ULN2803 PDIP18 |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
|
||||
---
|
||||
@@ -1914,6 +2002,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| ```hdmi(type, cutout = false)``` | Draw HDMI socket |
|
||||
| ```jack(cutout = false)``` | Draw 3.5mm jack |
|
||||
| ```molex_254(ways)``` | Draw molex header |
|
||||
| ```molex_usb_Ax2(cutout)``` | Draw Molex USB connector suitable for perf board |
|
||||
| ```pcb(type)``` | Draw specified PCB |
|
||||
| ```pcb_assembly(type, height, thickness)``` | Draw PCB assembly with spaces and fasteners in place |
|
||||
| ```pcb_base(type, height, thickness, wall = 2)``` | Generate STL for a base with PCB spacers |
|
||||
@@ -1941,8 +2030,14 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| ---:|:--- |:---|
|
||||
| 1 | ```box_header(2p54header, 4, 2, smt = 0)``` | 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 | ```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 | ```led(LED10mm, "yellow")``` | LED 10 mm yellow |
|
||||
| 1 | ```led(LED3mm)``` | LED 3 mm red |
|
||||
| 1 | ```led(LED5mm, "orange")``` | LED 5 mm orange |
|
||||
| 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 |
|
||||
@@ -1952,6 +2047,12 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| 1 | ```pin_socket(2p54header, 6, 1)``` | Pin socket 6 x 1 |
|
||||
| 1 | ```pin_socket(2p54header, 8, 1)``` | Pin socket 8 x 1 |
|
||||
| 1 | ```pin_socket(2p54header, 8, 1, right_angle = undef, height = undef, smt = undef)``` | Pin socket 8 x 1 |
|
||||
| 1 | ```ax_res(res1_2, 10, tol = 10)``` | Resistor 10 Ohms 10% 0.5W |
|
||||
| 1 | ```ax_res(res1_4, 100, tol = 2)``` | Resistor 100 Ohms 2% 0.25W |
|
||||
| 1 | ```ax_res(res1_8, 1000)``` | Resistor 1000 Ohms 5% 0.125W |
|
||||
| 1 | ```ax_res(res1_4, 10000)``` | Resistor 10000 Ohms 5% 0.25W |
|
||||
| 1 | ```ax_res(res1_2, 100000)``` | Resistor 100000 Ohms 5% 0.5W |
|
||||
| 1 | ```ax_res(res1_8, 1e+6, tol = 1)``` | Resistor 1e+6 Ohms 1% 0.125W |
|
||||
| 1 | ```square_button(button_6mm)``` | Square button 6mm |
|
||||
| 1 | ```pcb(TMC2130)``` | TMC2130 |
|
||||
| 1 | ```green_terminal(gt_5p08, 2)``` | Terminal block 2 way 0.2" |
|
||||
@@ -2024,6 +2125,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| ```hdmi(type, cutout = false)``` | Draw HDMI socket |
|
||||
| ```jack(cutout = false)``` | Draw 3.5mm jack |
|
||||
| ```molex_254(ways)``` | Draw molex header |
|
||||
| ```molex_usb_Ax2(cutout)``` | Draw Molex USB connector suitable for perf board |
|
||||
| ```pcb(type)``` | Draw specified PCB |
|
||||
| ```pcb_assembly(type, height, thickness)``` | Draw PCB assembly with spaces and fasteners in place |
|
||||
| ```pcb_base(type, height, thickness, wall = 2)``` | Generate STL for a base with PCB spacers |
|
||||
@@ -3115,6 +3217,55 @@ NEMA stepper motor model.
|
||||
| 15 | ```star_washer(M3_washer)``` | Washer star M3 x 0.5mm |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
|
||||
---
|
||||
<a name="Swiss_clips"></a>
|
||||
## Swiss_clips
|
||||
Swiss picture clip.
|
||||
Used for holding glass on 3D printer beds.
|
||||
|
||||
The bending model is an approximation because in real life the arms bend.
|
||||
Should be reasonably accurate if not close to fully open.
|
||||
|
||||
|
||||
[vitamins/swiss_clips.scad](vitamins/swiss_clips.scad) Object definitions.
|
||||
|
||||
[vitamins/swiss_clip.scad](vitamins/swiss_clip.scad) Implementation.
|
||||
|
||||
[tests/Swiss_clips.scad](tests/Swiss_clips.scad) Code for this example.
|
||||
|
||||
### Properties
|
||||
| Function | Description |
|
||||
|:--- |:--- |
|
||||
| ```sclip_arm_length(type)``` | Length of arms |
|
||||
| ```sclip_arm_width(type)``` | Width of spring arms |
|
||||
| ```sclip_height(type)``` | External height |
|
||||
| ```sclip_hinge_offset(type)``` | Offset of hinge |
|
||||
| ```sclip_hook(type)``` | hook, length, width |
|
||||
| ```sclip_length(type)``` | Total external length |
|
||||
| ```sclip_max_gap(type)``` | Maximum opening |
|
||||
| ```sclip_radius(type)``` | Bend radius |
|
||||
| ```sclip_spigot(type)``` | Spigot length, width, height |
|
||||
| ```sclip_thickness(type)``` | Thickness of the metal |
|
||||
| ```sclip_width(type)``` | Width |
|
||||
|
||||
### Modules
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
| ```swiss_clip(type, open = 0.9)``` | Draw a Swiss clip open by specified amount |
|
||||
| ```swiss_clip_hole(type, open, h = 0)``` | Drill hole for spigot |
|
||||
|
||||

|
||||
|
||||
### Vitamins
|
||||
| Qty | Module call | BOM entry |
|
||||
| ---:|:--- |:---|
|
||||
| 1 | ```sheet(AL6, 40, 20, 1)``` | Aluminium tooling plate 40mm x 20mm x 6mm |
|
||||
| 1 | ```sheet(glass2, 40, 20, 1)``` | Sheet glass 40mm x 20mm x 2mm |
|
||||
| 2 | ```swiss_clip(UKPFS1008_10)``` | Swiss picture clip UKPFS1008_10 11mm |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
|
||||
---
|
||||
|
@@ -147,7 +147,7 @@ def tests(tests):
|
||||
print("Can't find implementation!")
|
||||
continue
|
||||
|
||||
vsplit = "AKR" + chr(ord('Z') + 1)
|
||||
vsplit = "AJR" + 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:
|
||||
@@ -201,7 +201,7 @@ def tests(tests):
|
||||
dname = deps_name(deps_dir, scad.lower())
|
||||
oldest = png_name if mtime(png_name) < mtime(bom_name) else bom_name
|
||||
changed = check_deps(oldest, dname)
|
||||
changed = times.check_have_time(changed, scad_name.lower())
|
||||
changed = times.check_have_time(changed, scad_name)
|
||||
changed = options.have_changed(changed, oldest)
|
||||
if changed:
|
||||
print(changed)
|
||||
|
@@ -48,6 +48,8 @@ def check_have_time(changed, name):
|
||||
return changed
|
||||
|
||||
def add_time(name, start):
|
||||
if name.lower() in times:
|
||||
del times[name.lower()]
|
||||
times[name] = round(time.time() - start, 3)
|
||||
|
||||
def print_times():
|
||||
|
30
tests/DIP.scad
Normal file
@@ -0,0 +1,30 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2020
|
||||
// nop.head@gmail.com
|
||||
// hydraraptor.blogspot.com
|
||||
//
|
||||
// This file is part of NopSCADlib.
|
||||
//
|
||||
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
|
||||
// GNU General Public License as published by the Free Software Foundation, either version 3 of
|
||||
// the License, or (at your option) any later version.
|
||||
//
|
||||
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
||||
// If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
include <../core.scad>
|
||||
use <../vitamins/dip.scad>
|
||||
|
||||
dips = [[6, "OPTO"], [8, "NE555"], [14, "74HC00"], [16, "ULN2003"], [18, "ULN2803"], [20, "74HC245"], [28, "ATMEGA328"]];
|
||||
|
||||
module dips()
|
||||
for(i = [0 : len(dips) - 1]) let(dip = dips[i])
|
||||
translate([i * inch(0.5), 0])
|
||||
pdip(dip[0], dip[1], dip[0] > 20);
|
||||
|
||||
if($preview)
|
||||
dips();
|
@@ -19,6 +19,8 @@
|
||||
include <../core.scad>
|
||||
include <../vitamins/microswitches.scad>
|
||||
include <../vitamins/d_connectors.scad>
|
||||
include <../vitamins/leds.scad>
|
||||
include <../vitamins/axials.scad>
|
||||
|
||||
use <../vitamins/pcb.scad>
|
||||
|
||||
@@ -63,18 +65,29 @@ test_pcb = ["TestPCB", "Test PCB",
|
||||
[ 10, 30, 0, "2p54socket", 6, 1],
|
||||
[ 25, 30, 0, "2p54socket", 4, 1, undef, undef, undef, "red" ],
|
||||
[ 10, 40, 0, "chip", 10, 5, 1, grey20],
|
||||
[ 10, 60, 180, "rj45"],
|
||||
[ 8, 80, 180, "usb_A"],
|
||||
[ 8, 100, 180, "usb_Ax2"],
|
||||
[ 3, 120, 180, "usb_uA"],
|
||||
[ 8, 140, 180, "usb_B"],
|
||||
[ 5, 160, 0, "buzzer", 4.5, 8.5],
|
||||
[ 20, 160, 0, "buzzer"],
|
||||
[ 5, 50, 0, "led", LED3mm, "red"],
|
||||
[ 12, 50, 0, "led", LED5mm, "orange"],
|
||||
[ 25, 50, 0, "led", LED10mm, "yellow"],
|
||||
[ 10, 65, 180, "rj45"],
|
||||
[ 8, 85, 180, "usb_A"],
|
||||
[ 8, 105, 180, "usb_Ax2"],
|
||||
[ 3, 140, 180, "usb_uA"],
|
||||
[ 8, 155, 180, "usb_B"],
|
||||
[ 8.5, 125, 180, "molex_usb_Ax2"],
|
||||
[ 25, 200, 0, "buzzer", 4.5, 8.5],
|
||||
[ 25, 218, 0, "buzzer"],
|
||||
[ 8, 190, 180, "jack"],
|
||||
[ 6, 200, 180, "barrel_jack"],
|
||||
[ 5, 218, 180, "hdmi"],
|
||||
[ 3, 235, 180, "mini_hdmi"],
|
||||
[ 6, 175, 180, "uSD", [12, 11.5, 1.4]],
|
||||
[ 65, 12, 0, "ax_res", res1_8, 1000],
|
||||
[ 65, 17, 0, "ax_res", res1_4, 10000],
|
||||
[ 65, 22, 0, "ax_res", res1_2, 100000],
|
||||
|
||||
[ 80, 12, 0, "ax_res", res1_8, 1000000, 1, inch(0.1)],
|
||||
[ 80, 17, 0, "ax_res", res1_4, 100, 2, inch(0.1)],
|
||||
[ 80, 22, 0, "ax_res", res1_2, 10, 10, inch(0.2)],
|
||||
|
||||
[ 60, 3, 0, "flex"],
|
||||
[ 50, 15, 0, "flat_flex"],
|
||||
@@ -102,6 +115,8 @@ test_pcb = ["TestPCB", "Test PCB",
|
||||
[ 50, 170, 0, "button_6mm"],
|
||||
[ 50, 185, 0, "microswitch", small_microswitch],
|
||||
[ 52, 200, 0, "pcb", 11, TMC2130 ],
|
||||
[ 80, 200, 0, "pdip", 24, "27C32", true, inch(0.6) ],
|
||||
[ 80, 170, 0, "pdip", 8, "NE555" ],
|
||||
[ 52, 206, 0, "2p54socket", 8, 1 ],
|
||||
[ 52, 194, 0, "2p54socket", 8, 1, undef, undef, undef, "red" ],
|
||||
[ 50, 220, 0, "standoff", 5, 4.5, 12.5, 2.54],
|
||||
|
52
tests/Swiss_clips.scad
Normal file
@@ -0,0 +1,52 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2020
|
||||
// nop.head@gmail.com
|
||||
// hydraraptor.blogspot.com
|
||||
//
|
||||
// This file is part of NopSCADlib.
|
||||
//
|
||||
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
|
||||
// GNU General Public License as published by the Free Software Foundation, either version 3 of
|
||||
// the License, or (at your option) any later version.
|
||||
//
|
||||
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
||||
// If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
include <../utils/core/core.scad>
|
||||
use <../utils/layout.scad>
|
||||
|
||||
include <../vitamins/swiss_clips.scad>
|
||||
include <../vitamins/sheets.scad>
|
||||
|
||||
glass = glass2;
|
||||
bed = AL6;
|
||||
gap = sheet_thickness(bed) + sheet_thickness(glass);
|
||||
|
||||
module swiss_clips()
|
||||
layout([for(s = swiss_clips) sclip_length(s)], 5, true)
|
||||
let(s = swiss_clips[$i]) {
|
||||
swiss_clip(s);
|
||||
|
||||
translate([0, 20]) {
|
||||
swiss_clip(s, gap);
|
||||
|
||||
translate([20, 0, -5])
|
||||
render_2D_sheet(bed)
|
||||
difference() {
|
||||
sheet_2D(bed, 40, 20, 1);
|
||||
|
||||
translate([-20, 0])
|
||||
swiss_clip_hole(s, gap);
|
||||
}
|
||||
|
||||
translate([20, 0, -1 + eps])
|
||||
render_sheet(glass) sheet(glass, 40, 20, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if($preview)
|
||||
swiss_clips();
|
43
tests/axials.scad
Normal file
@@ -0,0 +1,43 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2020
|
||||
// nop.head@gmail.com
|
||||
// hydraraptor.blogspot.com
|
||||
//
|
||||
// This file is part of NopSCADlib.
|
||||
//
|
||||
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
|
||||
// GNU General Public License as published by the Free Software Foundation, either version 3 of
|
||||
// the License, or (at your option) any later version.
|
||||
//
|
||||
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
||||
// If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
include <../core.scad>
|
||||
include <../vitamins/pcbs.scad>
|
||||
|
||||
|
||||
module axials() {
|
||||
pcb = PERF60x40;
|
||||
pcb(pcb);
|
||||
|
||||
pcb_grid(pcb, 0, 2)
|
||||
rotate(90)
|
||||
wire_link(0.8, inch(0.4));
|
||||
|
||||
for(i = [0 : len(ax_resistors) - 1]) {
|
||||
pcb_grid(pcb, 2 * i + 2, 1 + [0, 0.5, 1.5][i])
|
||||
rotate(90)
|
||||
ax_res(ax_resistors[i], [1000, 47000, 8200][i], 5);
|
||||
|
||||
pcb_grid(pcb, 2 * i + 2, 6.5)
|
||||
rotate(-90)
|
||||
ax_res(ax_resistors[i], [2200, 39000, 8250][i], 1, inch(0.1));
|
||||
}
|
||||
}
|
||||
|
||||
if($preview)
|
||||
axials();
|
BIN
tests/png/axial.png
Normal file
After Width: | Height: | Size: 251 KiB |
BIN
tests/png/axials.png
Normal file
After Width: | Height: | Size: 282 KiB |
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 98 KiB |
BIN
tests/png/dip.png
Normal file
After Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 168 KiB |
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 161 KiB |
BIN
tests/png/swiss_clips.png
Normal file
After Width: | Height: | Size: 42 KiB |
139
vitamins/axial.scad
Normal file
@@ -0,0 +1,139 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2020
|
||||
// nop.head@gmail.com
|
||||
// hydraraptor.blogspot.com
|
||||
//
|
||||
// This file is part of NopSCADlib.
|
||||
//
|
||||
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
|
||||
// GNU General Public License as published by the Free Software Foundation, either version 3 of
|
||||
// the License, or (at your option) any later version.
|
||||
//
|
||||
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
||||
// If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
|
||||
//
|
||||
//! Axial components for PCBs.
|
||||
//
|
||||
include <../utils/core/core.scad>
|
||||
include <../utils/round.scad>
|
||||
|
||||
module wire_link(d, l, h = 1) { //! Draw a wire jumper link.
|
||||
r = d;
|
||||
tail = 3;
|
||||
$fn = 32;
|
||||
|
||||
color("silver") {
|
||||
for(side = [-1, 1]) {
|
||||
translate([side * l / 2, 0, -tail])
|
||||
cylinder(d = d, h = tail + h - r);
|
||||
|
||||
translate([side * (l / 2 - r), 0, h - r])
|
||||
rotate([90, 0, side * 90 - 90])
|
||||
rotate_extrude(angle = 90)
|
||||
translate([r, 0])
|
||||
circle(d = d);
|
||||
}
|
||||
|
||||
translate_z(h)
|
||||
rotate([0, 90, 0])
|
||||
cylinder(d = d, h = l - 2 * r, center = true);
|
||||
}
|
||||
}
|
||||
|
||||
function ax_res_wattage(type) = type[1]; //! Power rating
|
||||
function ax_res_length(type) = type[2]; //! Body length
|
||||
function ax_res_diameter(type)= type[3]; //! Body diameter
|
||||
function ax_res_end_d(type) = type[4]; //! End cap diameter
|
||||
function ax_res_end_l(type) = type[5]; //! End cap length
|
||||
function ax_res_wire(type) = type[6]; //! Wire diameter
|
||||
function ax_res_colour(type) = type[7]; //! Body colour
|
||||
|
||||
module orientate_axial(length, height, pitch, wire_d) { // Orient horizontal or vertical and add the wires
|
||||
min_pitch = ceil((length + 1) / inch(0.1)) * inch(0.1);
|
||||
lead_pitch = pitch ? pitch : min_pitch;
|
||||
if(lead_pitch >= min_pitch) {
|
||||
wire_link(wire_d, lead_pitch, height);
|
||||
translate_z(height)
|
||||
rotate([0, 90, 0])
|
||||
children();
|
||||
}
|
||||
else {
|
||||
wire_link(wire_d, lead_pitch, length + 0.7 + wire_d);
|
||||
|
||||
translate([-pitch / 2, 0, length / 2 + 0.2])
|
||||
children();
|
||||
}
|
||||
}
|
||||
|
||||
module ax_res(type, value, tol = 5, pitch = 0) { //! Through hole axial resistor. If ```pitch``` is zero the minimum is used. If below the minimum the resistor is placed vertical.
|
||||
vitamin(str("ax_res(", type[0], ", ", value, arg(tol, 5, "tol"), "): Resistor ", value, " Ohms ", tol, "% ",ax_res_wattage(type), "W"));
|
||||
|
||||
wire_d = ax_res_wire(type);
|
||||
end_d = ax_res_end_d(type);
|
||||
end_l = ax_res_end_l(type);
|
||||
body_d = ax_res_diameter(type);
|
||||
length = ax_res_length(type);
|
||||
h = end_d / 2;
|
||||
$fn = 32;
|
||||
r = 0.3;
|
||||
|
||||
colours = ["gold", "silver", "black", "brown", "red", "orange", "yellow", "green", "blue", "violet", "grey", "white"];
|
||||
|
||||
exp = floor(log(value) + eps);
|
||||
mult = exp - (len(str(value / pow(10, exp - 1))) > 2 ? 2 : 1);
|
||||
digits = str(value / pow(10, mult));
|
||||
bands = [
|
||||
for(d = digits)
|
||||
colours[ord(d) - ord("0") + 2],
|
||||
colours[mult + 2],
|
||||
tol == 1 ? "brown" :
|
||||
tol == 2 ? "red" :
|
||||
tol == 5 ? "gold" :
|
||||
tol == 10 ? "silver" : "error"
|
||||
];
|
||||
|
||||
module profile(o = 0)
|
||||
intersection() {
|
||||
offset(o) round(r)
|
||||
union(){
|
||||
translate([0, -length / 2])
|
||||
square([body_d / 2, length]);
|
||||
|
||||
for(end = [-1, 1])
|
||||
hull() {
|
||||
translate([0, end * (length - end_l) / 2 - end_l / 2])
|
||||
square([end_d / 2, end_l]);
|
||||
|
||||
translate([0, end * length / 2])
|
||||
square([wire_d, 2 * r], center = true);
|
||||
}
|
||||
translate([-5, 0])
|
||||
square([10 + wire_d, length + 4 * r], center = true);
|
||||
}
|
||||
|
||||
translate([0, -50])
|
||||
square([50, 100]);
|
||||
}
|
||||
|
||||
orientate_axial(length, h, pitch, wire_d) {
|
||||
color(ax_res_colour(type))
|
||||
rotate_extrude()
|
||||
profile();
|
||||
|
||||
for(i = [0 : len(bands) - 1])
|
||||
color(bands[i])
|
||||
rotate_extrude()
|
||||
intersection() {
|
||||
profile(eps);
|
||||
|
||||
translate([0, length / 2 - end_l / 2 - i * (length - end_l) / (len(bands) - 1)])
|
||||
square([end_d + 1, (length - end_l) / len(bands) / 2], center = true);
|
||||
}
|
||||
}
|
||||
}
|
30
vitamins/axials.scad
Normal file
@@ -0,0 +1,30 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2020
|
||||
// nop.head@gmail.com
|
||||
// hydraraptor.blogspot.com
|
||||
//
|
||||
// This file is part of NopSCADlib.
|
||||
//
|
||||
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
|
||||
// GNU General Public License as published by the Free Software Foundation, either version 3 of
|
||||
// the License, or (at your option) any later version.
|
||||
//
|
||||
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
||||
// If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
|
||||
//
|
||||
//! Axial components
|
||||
//
|
||||
|
||||
res1_8 = ["res1_8", 0.125, 3.3, 1.35, 1.7, 1, 0.33, "#FAE3AC"];
|
||||
res1_4 = ["res1_4", 0.25, 5.7, 1.85, 2.3, 1.5, 0.55, "#FAE3AC"];
|
||||
res1_2 = ["res1_2", 0.5, 10, 3.25, 3.7, 1.8, 0.70, "#FAE3AC"];
|
||||
|
||||
ax_resistors = [res1_8, res1_4, res1_2];
|
||||
|
||||
use <axial.scad>
|
@@ -26,36 +26,51 @@
|
||||
//! Also single bearing balls are modelled as just a silver sphere and a BOM entry.
|
||||
//
|
||||
include <../utils/core/core.scad>
|
||||
include <../utils/tube.scad>
|
||||
|
||||
function bb_name(type) = type[0]; //! Part code without shield type suffix
|
||||
function bb_bore(type) = type[1]; //! Internal diameter
|
||||
function bb_diameter(type) = type[2]; //! External diameter
|
||||
function bb_width(type) = type[3]; //! Width
|
||||
function bb_colour(type) = type[4]; //! Shield colour, "silver" for metal
|
||||
function bb_rim(type) = bb_diameter(type) / 10; //! Inner and outer rim thickness
|
||||
function bb_rim(type) = type[5]; //! Outer rim thickness guesstimate
|
||||
function bb_hub(type) = type[6]; //! Inner rim thickness guesstimate
|
||||
|
||||
module ball_bearing(type) { //! Draw a ball bearing
|
||||
shield = bb_colour(type);
|
||||
suffix = shield == "silver" ? "ZZ " : "-2RS ";
|
||||
vitamin(str("ball_bearing(BB", bb_name(type), "): Ball bearing ", bb_name(type), suffix, bb_bore(type), "mm x ", bb_diameter(type), "mm x ", bb_width(type), "mm"));
|
||||
rim = bb_rim(type);
|
||||
hub = bb_hub(type);
|
||||
h = bb_width(type);
|
||||
od = bb_diameter(type);
|
||||
id = bb_bore(type);
|
||||
|
||||
module tube(od, id, h)
|
||||
linear_extrude(h, center = true, convexity = 5)
|
||||
difference() {
|
||||
circle(d = od);
|
||||
circle(d = id);
|
||||
}
|
||||
or = bb_diameter(type) / 2;
|
||||
ir = bb_bore(type) / 2;
|
||||
|
||||
color("silver") {
|
||||
tube(od, od - rim, h);
|
||||
tube(id + rim, id, h);
|
||||
$fn = 360;
|
||||
|
||||
rim_chamfer = rim / 6;
|
||||
rotate_extrude()
|
||||
hull() {
|
||||
translate([or - rim / 2, 0])
|
||||
square([rim, h - 2 * rim_chamfer], center = true);
|
||||
|
||||
translate([or - rim / 2 - rim_chamfer, 0])
|
||||
square([rim - rim_chamfer, h], center = true);
|
||||
}
|
||||
|
||||
hub_chamfer = hub / 6;
|
||||
rotate_extrude()
|
||||
hull() {
|
||||
translate([ir + hub / 2, 0])
|
||||
square([hub, h - 2 * hub_chamfer], center = true);
|
||||
|
||||
translate([ir + hub / 2 + hub_chamfer, 0])
|
||||
square([hub - hub_chamfer, h], center = true);
|
||||
}
|
||||
}
|
||||
|
||||
color(shield) tube(od - rim, id + rim, h - 1);
|
||||
color(shield) tube(or - rim - eps, ir + hub + eps, h - 1);
|
||||
|
||||
if($children)
|
||||
translate_z(bb_width(type) / 2)
|
||||
|
@@ -16,11 +16,11 @@
|
||||
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
||||
// If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
BB624 = ["624", 4, 13, 5, "blue"]; // 624 ball bearing for idlers
|
||||
BB608 = ["608", 8, 22, 7, "OrangeRed"]; // 608 bearings for wades
|
||||
BB6200 = ["6200", 10, 30, 9, "black"]; // 6200 bearings for KP pillow blocks
|
||||
BB6201 = ["6201", 12, 32, 10, "black"]; // 6201 bearings for KP pillow blocks
|
||||
|
||||
ball_bearings = [BB624, BB608, BB6200, BB6201];
|
||||
BB624 = ["624", 4, 13, 5, "blue", 1.2, 1.2]; // 624 ball bearing for idlers
|
||||
BB608 = ["608", 8, 22, 7, "OrangeRed", 1.4, 2.0]; // 608 bearings for wades
|
||||
BB6200 = ["6200", 10, 30, 9, "black", 2.3, 3.6]; // 6200 bearings for KP pillow blocks
|
||||
BB6201 = ["6201", 12, 32, 10, "black", 2.4, 3.7]; // 6201 bearings for KP pillow blocks
|
||||
BB6808 = ["6808", 40, 52, 7, "black", 1.5, 1.6];
|
||||
ball_bearings = [BB624, BB608, BB6200, BB6201, BB6808];
|
||||
|
||||
use <ball_bearing.scad>
|
||||
|
181
vitamins/dip.scad
Normal file
@@ -0,0 +1,181 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2020
|
||||
// nop.head@gmail.com
|
||||
// hydraraptor.blogspot.com
|
||||
//
|
||||
// This file is part of NopSCADlib.
|
||||
//
|
||||
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
|
||||
// GNU General Public License as published by the Free Software Foundation, either version 3 of
|
||||
// the License, or (at your option) any later version.
|
||||
//
|
||||
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
||||
// If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
|
||||
//
|
||||
//! Dual inline IC packages and sockets
|
||||
//
|
||||
include <../utils/core/core.scad>
|
||||
|
||||
pdip_pin = [0.25, 2.54, 0.5, 3.0, 1.524, 1];
|
||||
|
||||
function pdip_pin_t(type) = type[0]; //! Pin thickness
|
||||
function pdip_pin_s(type) = type[1]; //! Height above seating plane
|
||||
function pdip_pin_w(type) = type[2]; //! Pin width
|
||||
function pdip_pin_h(type) = type[3]; //! Pin height
|
||||
function pdip_pin_W(type) = type[4]; //! Pin shoulder width
|
||||
function pdip_pin_n(type) = type[5]; //! Pin neck
|
||||
|
||||
module pdip_pin(type, l, end) { //! Draw a pin
|
||||
w = pdip_pin_w(type);
|
||||
t = pdip_pin_t(type);
|
||||
h = pdip_pin_h(type);
|
||||
W = pdip_pin_W(type);
|
||||
s = pdip_pin_s(type);
|
||||
n = pdip_pin_n(type);
|
||||
slope = (W - n);
|
||||
r = t;
|
||||
x0 = end < 0 ? -w / 2 : -W / 2;
|
||||
n0 = end < 0 ? -w / 2 : -n / 2;
|
||||
W1 = end != 0 ? W / 2 + w / 2 : W;
|
||||
n1 = end != 0 ? n / 2 + w / 2 : n;
|
||||
color("silver") {
|
||||
translate([x0, -r - t / 2 - l, s - t / 2])
|
||||
cube([W1, l, t]);
|
||||
|
||||
translate([x0, -r - t / 2, s - r - t / 2])
|
||||
rotate([90, 0, 90])
|
||||
rotate_extrude(angle = 90, $fn = 32)
|
||||
translate([r, 0])
|
||||
square([t, W1]);
|
||||
|
||||
translate_z(-h)
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(t, center = true) {
|
||||
|
||||
translate([-w / 2, 0])
|
||||
square([w, h]);
|
||||
|
||||
hull() {
|
||||
translate([x0, h + slope])
|
||||
square([W1, s - t / 2 - r - slope]);
|
||||
|
||||
translate([n0, h])
|
||||
square([n1, eps]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module dil_pin_positions(rows, w, pitch)
|
||||
for(i = [0 : rows - 1], $side = [-1, 1], $x = i * pitch - (rows - 1) * pitch / 2)
|
||||
translate([0, $x])
|
||||
rotate($side * 90)
|
||||
translate([0, w / 2])
|
||||
children();
|
||||
|
||||
module dil_socket(rows, w, pitch = inch(0.1)) {
|
||||
vitamin(str("dil_socket(", rows, ", ", w, arg(pitch, inch(0.1), "pitch"), "): DIL socket ", rows * 2, " x ", w / inch(1), "\""));
|
||||
|
||||
h = 4;
|
||||
h2 = 6;
|
||||
t = 0.8;
|
||||
length = rows * pitch;
|
||||
width = w + pitch;
|
||||
hole = [0.8, 0.5];
|
||||
pin_l = 3;
|
||||
|
||||
color(grey20) {
|
||||
linear_extrude(h)
|
||||
difference() {
|
||||
square([width, length], center = true);
|
||||
|
||||
square([w - pitch, length - 2 * pitch], center = true);
|
||||
|
||||
dil_pin_positions(rows, w, pitch)
|
||||
square(hole, center = true);
|
||||
|
||||
translate([0, rows * pitch / 2])
|
||||
circle(d = 1.5);
|
||||
}
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(length, center = true)
|
||||
for(side = [-1, 1])
|
||||
hull() {
|
||||
t2 = pitch / 2 - hole.y / 2;
|
||||
translate([side * (width / 2 - t / 2) - t / 2, 0])
|
||||
square([t, h2]);
|
||||
|
||||
translate([side * (width / 2 - t2 / 2) - t2 / 2, 0])
|
||||
square([t2, h]);
|
||||
}
|
||||
}
|
||||
color("silver")
|
||||
dil_pin_positions(rows, w, pitch)
|
||||
translate_z(-pin_l / 2)
|
||||
cube([0.5, 0.25, pin_l], center = true);
|
||||
|
||||
translate_z(h)
|
||||
children();
|
||||
}
|
||||
|
||||
module dip(n, part, size, w, pitch, pin) { //! Draw DIP package
|
||||
D = [3, 0.6];
|
||||
|
||||
translate_z(pdip_pin_s(pin)) {
|
||||
color(grey20) {
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(size.x, center = true)
|
||||
difference() {
|
||||
hull() {
|
||||
square([size.y, pdip_pin_t(pin)], center = true);
|
||||
|
||||
square([size.y - 1, size.z], center = true);
|
||||
}
|
||||
square([D.x + 1, size.z + 1], center = true);
|
||||
}
|
||||
|
||||
translate_z(-D.y / 2)
|
||||
cube([D.x + 1 + eps, size.x, size.z - D.y], center = true);
|
||||
|
||||
linear_extrude(size.z / 2)
|
||||
difference() {
|
||||
square([D.x + 1 + eps, size.x], center = true);
|
||||
|
||||
translate([0, size.x / 2])
|
||||
circle(d = D.x);
|
||||
}
|
||||
}
|
||||
|
||||
color("white")
|
||||
translate([0, -D.x / 4, size.z / 2])
|
||||
rotate(-90)
|
||||
linear_extrude(eps)
|
||||
resize([(size.x - D.x / 2) * 0.75, size.y / 3])
|
||||
text(part, halign = "center", valign = "center");
|
||||
}
|
||||
|
||||
l = size.x / 2 - pdip_pin_W(pin) / 2;
|
||||
dil_pin_positions(n, w, pitch)
|
||||
pdip_pin(pin, w / 2, $side * (abs($x) > l ? sign($x) : 0));
|
||||
}
|
||||
|
||||
module pdip(pins, part, socketed, w = inch(0.3), pitch = inch(0.1)) { //! Draw standard 0.1" PDIP IC package
|
||||
vitamin(str("pdip(", pins, ", ", part, arg(w, inch(0.3), "w"), arg(pitch, inch(0.1), "pitch"),"): IC ", part, " PDIP", pins));
|
||||
n = ceil(pins / 2);
|
||||
k = in([4, 8], n) ? n - 1 : n;
|
||||
length = k * pitch + pitch / 2;
|
||||
width = w - pitch / 2;
|
||||
height = 3;
|
||||
if(socketed)
|
||||
dil_socket(n, w, pitch)
|
||||
dip(n, part, [length, width, height], w, pitch, pdip_pin);
|
||||
else
|
||||
dip(n, part, [length, width, height], w, pitch, pdip_pin);
|
||||
}
|
@@ -49,7 +49,7 @@ module led(type, colour = "red", lead = 5) { //! Draw specified LED with desired
|
||||
}
|
||||
}
|
||||
color("silver")
|
||||
for(side = [-1, 1], len = lead - side)
|
||||
for(side = [-1, 1], len = lead - (lead < 3 ? 0 : side))
|
||||
translate([side * led_pitch(type) / 2, 0, -len / 2])
|
||||
vflip()
|
||||
cube([led_lead_t(type), led_lead_t(type), len], center = true);
|
||||
|
@@ -33,6 +33,9 @@ use <../utils/dogbones.scad>
|
||||
use <../utils/thread.scad>
|
||||
use <../utils/tube.scad>
|
||||
use <d_connector.scad>
|
||||
use <led.scad>
|
||||
use <dip.scad>
|
||||
use <axial.scad>
|
||||
|
||||
function pcb_name(type) = type[1]; //! Description
|
||||
function pcb_length(type) = type[2]; //! Length
|
||||
@@ -82,6 +85,23 @@ module chip(length, width, thickness, colour, cutout = false) //! Draw a coloure
|
||||
color(colour)
|
||||
translate_z(thickness / 2) cube([length, width, thickness], center = true);
|
||||
|
||||
module usb_A_tongue() {
|
||||
l = 9;
|
||||
w = 12;
|
||||
h = 2;
|
||||
|
||||
color("white")
|
||||
translate([-1, 0 , h / 2])
|
||||
rotate([90, 0, 90])
|
||||
hull() {
|
||||
linear_extrude(l - 2)
|
||||
square([w, h], center = true);
|
||||
|
||||
linear_extrude(l)
|
||||
square([w - 1, h - 1], center = true);
|
||||
}
|
||||
}
|
||||
|
||||
module usb_Ax1(cutout = false) { //! Draw USB type A single socket
|
||||
usb_A(h = 6.5, v_flange_l = 4.5, bar = 0, cutout = cutout);
|
||||
}
|
||||
@@ -104,7 +124,7 @@ module usb_A(h, v_flange_l, bar, cutout) {
|
||||
rotate([90, 0, 90])
|
||||
rounded_rectangle([w + 2 * v_flange_h + 2 * panel_clearance,
|
||||
h + 2 * h_flange_h + 2 * panel_clearance, 100], r = cnc_bit_r, center = false);
|
||||
else
|
||||
else {
|
||||
color("silver") rotate([0, 90, 0]) {
|
||||
linear_extrude(l, center = true)
|
||||
difference() {
|
||||
@@ -127,7 +147,72 @@ module usb_A(h, v_flange_l, bar, cutout) {
|
||||
}
|
||||
square([h - eps, w - eps], center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(z = bar ? [-1, 1] : [0])
|
||||
translate_z(z * (bar / 2 + socket_h / 2))
|
||||
usb_A_tongue();
|
||||
}
|
||||
}
|
||||
|
||||
module molex_usb_Ax2(cutout) { //! Draw Molex USB connector suitable for perf board
|
||||
w = 15.9;
|
||||
h = 16.6;
|
||||
l = 17;
|
||||
pin_l = 2.8;
|
||||
clearance = 0.2;
|
||||
tag_l = 4.8;
|
||||
tag_r = 0.5;
|
||||
tag_w = 1.5;
|
||||
tag_t = 0.3;
|
||||
tag_p = 5.65;
|
||||
|
||||
if(cutout)
|
||||
translate([0, -w / 2 - clearance, -clearance])
|
||||
cube([100, w + 2 * clearance, h + 2 * clearance]);
|
||||
else {
|
||||
color(silver)
|
||||
translate([-l / 2, 0])
|
||||
rotate([90, 0, 90])
|
||||
translate([-w / 2, 0]) {
|
||||
cube([w, h, l - 9]);
|
||||
|
||||
linear_extrude(l)
|
||||
difference() {
|
||||
square([w, h]);
|
||||
|
||||
for(z = [-1, 1])
|
||||
translate([w / 2, h / 2 + z * 8.5 / 2])
|
||||
square([12.6, 5.08], center = true);
|
||||
}
|
||||
}
|
||||
|
||||
for(z = [-1, 1])
|
||||
translate_z(h / 2 + z * 8.5 / 2)
|
||||
usb_A_tongue();
|
||||
|
||||
color(silver)
|
||||
rotate(-90) {
|
||||
for(x = [-1.5 : 1 : 1.5], y = [0.5 : 1 : 1.5])
|
||||
translate([inch(x / 10), -l / 2 + inch(y / 10)])
|
||||
hull() {
|
||||
cube([0.6, 0.3, 2 * pin_l - 2], center = true);
|
||||
|
||||
cube([0.4, 0.3, 2 * pin_l], center = true);
|
||||
}
|
||||
|
||||
for(side = [-1, 1], end = [0, 1])
|
||||
translate([side * w / 2, -l / 2 + tag_w / 2 + end * tag_p])
|
||||
rotate(-side * 90)
|
||||
hull() {
|
||||
translate([0, tag_l - tag_r])
|
||||
cylinder(r = tag_r, h = tag_t);
|
||||
|
||||
translate([-tag_w / 2, 0])
|
||||
cube([tag_w, eps, tag_t]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module rj45(cutout = false) { //! Draw RJ45 Ethernet connector
|
||||
@@ -821,6 +906,10 @@ module pcb_component(comp, cutouts = false, angle = undef) { //! Draw pcb compon
|
||||
if(show(comp, "standoff")) if(!cutouts) standoff(comp[4], comp[5], comp[6], comp[7]);
|
||||
if(show(comp, "uSD")) uSD(comp[4], cutouts);
|
||||
if(show(comp, "trimpot10")) trimpot10(param(4, false), cutouts);
|
||||
if(show(comp, "led")) led(comp[4], comp[5], 2.6);
|
||||
if(show(comp, "pdip")) pdip(comp[4], comp[5], param(6, false), param(7, inch(0.3)));
|
||||
if(show(comp, "ax_res")) ax_res(comp[4], comp[5], param(6, 5), param(7, 0));
|
||||
if(show(comp, "molex_usb_Ax2")) molex_usb_Ax2(cutouts);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -18,6 +18,9 @@
|
||||
//
|
||||
include <microswitches.scad>
|
||||
include <d_connectors.scad>
|
||||
include <leds.scad>
|
||||
include <axials.scad>
|
||||
|
||||
//
|
||||
// l w t r h l c b h
|
||||
// e i h a o a o o o
|
||||
@@ -242,8 +245,9 @@ ArduinoUno3 = ["ArduinoUno3", "Arduino Uno R3", 68.58, 53.34, 1.6, 0, 3.3, 0, "#
|
||||
[64.91, 27.89, 0, "2p54header", 2, 3],
|
||||
[18.796, -7.00, 0, "2p54header", 3, 2],
|
||||
[ 6.5, -3.5, 0, "button_6mm"],
|
||||
[4.7625, 7.62, 180, "barrel_jack"],
|
||||
[1.5875, 37.7825,180,"usb_B"],
|
||||
[4.7625, 7.62, 180,"barrel_jack"],
|
||||
[1.5875, 37.78, 180,"usb_B"],
|
||||
[46.99, 17, 270,"pdip", 28, "ATMEGA328", true],
|
||||
],
|
||||
[],[],
|
||||
inch([
|
||||
@@ -324,7 +328,17 @@ PI_IO = ["PI_IO", "PI_IO V2", 35.56, 25.4, 1.6, 0, 0, 0, "green", tru
|
||||
], []];
|
||||
|
||||
ZC_A0591 = ["ZC_A0591", "ZC-A0591 ULN2003 driver PCB", 35, 32, 1.6, 0, 2.5, 0, "green", false, [[2.25, 3.25], [-2.25, 3.25], [2.25, -3.25], [-2.25, -3.25] ],
|
||||
[], [], [], [], M2p5_pan_screw];
|
||||
[ [ 12.25, 8.3, -90, "jst_xh", 5],
|
||||
[ -6.5, 10, 0, "2p54header", 1, 4],
|
||||
[ 20.4, -4.5, 0, "2p54header", 4, 1],
|
||||
[ 20.4, 11, 180, "pdip", 16, "ULN2803AN", true],
|
||||
[ 5.5, 6, 0, "led", LED3mm, [1,1,1, 0.5]],
|
||||
[ 5.5, 10.5, 0, "led", LED3mm, [1,1,1, 0.5]],
|
||||
[ 5.5, 15, 0, "led", LED3mm, [1,1,1, 0.5]],
|
||||
[ 5.5, 19.5, 0, "led", LED3mm, [1,1,1, 0.5]],
|
||||
for(i = [0 : 3]) [5.5 + inch(0.1) * i, -5.5, -90, "ax_res", res1_8, 510, 5, 5.5]
|
||||
|
||||
], [], [], [], M2p5_pan_screw];
|
||||
|
||||
|
||||
MT3608 = ["MT3608", "MT3608 boost converter module", 37, 17, 1.2, 2, 1.5, [5, 3], "#2140BE", false, [[3.0725, 5.095], [3.0725, -5.095], [-3.0725, 5.095], [-3.0725, -5.095]],
|
||||
@@ -338,7 +352,7 @@ TP4056 = ["TP4056", "TP4056 Li-lon Battery charger module", 26.2, 17.5, 1.0, 0,
|
||||
]];
|
||||
|
||||
WD2002SJ = ["WD2002SJ", "WD2002SJ Buck Boost DC-DC converter", 78, 47, 1.6, 0, 3.2, 0, "#2140BE", false, [[4,4], [-4,4], [-4,-4], [4,-4]],
|
||||
[ [ 39, -20.5, 0, "-chip", 63, 41, 4, "silver"],
|
||||
[ [ 39, -20.5, 0, "-chip", 63, 41, 3.4, "silver"],
|
||||
[ -4, 12, 0, "gterm508", 2, [], "blue"],
|
||||
[ 4, 12, 180, "gterm508", 2, [], "blue"],
|
||||
[ -25.5, 3.1, 0, "trimpot10", true],
|
||||
|
@@ -23,6 +23,7 @@
|
||||
include <../utils/core/core.scad>
|
||||
|
||||
use <washer.scad>
|
||||
use <nut.scad>
|
||||
use <../utils/rounded_cylinder.scad>
|
||||
use <../utils/thread.scad>
|
||||
include <inserts.scad>
|
||||
|
148
vitamins/swiss_clip.scad
Normal file
@@ -0,0 +1,148 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2020
|
||||
// nop.head@gmail.com
|
||||
// hydraraptor.blogspot.com
|
||||
//
|
||||
// This file is part of NopSCADlib.
|
||||
//
|
||||
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
|
||||
// GNU General Public License as published by the Free Software Foundation, either version 3 of
|
||||
// the License, or (at your option) any later version.
|
||||
//
|
||||
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
||||
// If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
|
||||
//
|
||||
//! Swiss picture clip.
|
||||
//! Used for holding glass on 3D printer beds.
|
||||
//!
|
||||
//! The bending model is an approximation because in real life the arms bend.
|
||||
//! Should be reasonably accurate if not close to fully open.
|
||||
//
|
||||
include <../utils/core/core.scad>
|
||||
|
||||
function sclip_length(type) = type[1]; //! Total external length
|
||||
function sclip_height(type) = type[2]; //! External height
|
||||
function sclip_width(type) = type[3]; //! Width
|
||||
function sclip_thickness(type) = type[4]; //! Thickness of the metal
|
||||
function sclip_radius(type) = type[5]; //! Bend radius
|
||||
function sclip_arm_width(type) = type[6]; //! Width of spring arms
|
||||
function sclip_spigot(type) = type[7]; //! Spigot length, width, height
|
||||
function sclip_hook(type) = type[8]; //! hook, length, width
|
||||
function sclip_hinge_offset(type) = type[9]; //! Offset of hinge
|
||||
function sclip_arm_length(type) = type[10]; //! Length of arms
|
||||
function sclip_max_gap(type) = type[11]; //! Maximum opening
|
||||
|
||||
function arm_angle(type, open) = asin((sclip_height(type) - 2 * sclip_thickness(type) - open) / sclip_arm_length(type));
|
||||
|
||||
function spigot_angle(type, open) =
|
||||
let(arm_w = sclip_arm_width(type), w = sclip_width(type) - 2 * arm_w)
|
||||
(arm_angle(type, 0) - arm_angle(type, open)) * 2 * arm_w / w;
|
||||
|
||||
module swiss_clip_hole(type, open, h = 0) { //! Drill hole for spigot
|
||||
spigot = sclip_spigot(type);
|
||||
angle = spigot_angle(type, open);
|
||||
t = sclip_thickness(type);
|
||||
or = sclip_radius(type);
|
||||
ir = or - t;
|
||||
shadow = (spigot.z - or) * sin(angle) - or * cos(angle) + or + t * cos(angle);
|
||||
r = sqrt(sqr(shadow) + sqr(spigot.y)) / 2;
|
||||
offset = sclip_hinge_offset(type);
|
||||
hpot = offset - t;
|
||||
|
||||
translate([sclip_length(type) - t - ir - offset + hpot * cos(angle) - (spigot.z - t) * sin(angle) + shadow / 2, 0])
|
||||
drill(r + 0.1, h);
|
||||
}
|
||||
|
||||
module swiss_clip(type, open = 0.9) { //! Draw a Swiss clip open by specified amount
|
||||
vitamin(str("swiss_clip(", type[0], "): Swiss picture clip ", type[0], " ", sclip_max_gap(type),"mm"));
|
||||
|
||||
length = sclip_length(type);
|
||||
width = sclip_width(type);
|
||||
height = sclip_height(type);
|
||||
|
||||
spigot = sclip_spigot(type);
|
||||
hook = sclip_hook(type);
|
||||
offset = sclip_hinge_offset(type);
|
||||
t = sclip_thickness(type);
|
||||
arm_l = sclip_arm_length(type);
|
||||
arm_w = sclip_arm_width(type);
|
||||
w = width - 2 * arm_w;
|
||||
or = sclip_radius(type);
|
||||
ir = or - t;
|
||||
angle = arm_angle(type, open);
|
||||
angle2 = spigot_angle(type, open);
|
||||
$fn = 360;
|
||||
|
||||
color("silver") translate([-t - ir, 0, -height + t]) {
|
||||
translate([length - offset - arm_l, -w / 2]) // Narrow part of base
|
||||
cube([arm_l, w, t]);
|
||||
|
||||
translate([length - offset, 0, t])
|
||||
rotate([0, -angle2, 0])
|
||||
translate([offset - length, 0, -t]) {
|
||||
translate([length - offset, -width / 2]) // Wide part of base
|
||||
cube([offset - spigot.x, width, t]);
|
||||
|
||||
translate([length - spigot.x, -spigot.y / 2]) // Spigot base
|
||||
cube([spigot.x - or, spigot.y, t]);
|
||||
|
||||
translate([length - t, -spigot.y / 2, or]) // Spigot stem
|
||||
cube([t, spigot.y, spigot.z - or]);
|
||||
|
||||
translate([length - or, -spigot.y / 2, or]) // Spigot bend
|
||||
rotate([-90, 0, 0])
|
||||
rotate_extrude(angle = 90)
|
||||
translate([ir, 0])
|
||||
square([t, spigot.y]);
|
||||
}
|
||||
|
||||
translate([or, -hook.y / 2]) // Hook base
|
||||
cube([hook.x, hook.y, t]);
|
||||
|
||||
translate([0, -hook.y / 2, or]) // Hook stem
|
||||
cube([t, hook.y, height - 2 * or]);
|
||||
|
||||
translate([or, -hook.y / 2, or]) // Hook lower bend
|
||||
rotate([0, 90, 90])
|
||||
rotate_extrude(angle = 90)
|
||||
translate([ir, 0])
|
||||
square([t, hook.y]);
|
||||
|
||||
translate([or, -hook.y / 2, height - t]) // Hook top
|
||||
cube([hook.x - or, hook.y, t]);
|
||||
|
||||
translate([or, hook.y / 2, height - or]) // Hook top bend
|
||||
rotate([0, -90, 90])
|
||||
rotate_extrude(angle = 90)
|
||||
translate([ir, 0])
|
||||
square([t, hook.y]);
|
||||
|
||||
translate([length - offset, 0, t]) // Arms
|
||||
rotate([0, angle, 0])
|
||||
for(side = [-1, 1])
|
||||
translate([-arm_l, side * (arm_w + w) / 2 - arm_w / 2, -t])
|
||||
cube([arm_l, arm_w, t]);
|
||||
|
||||
translate([length - offset, -w / 2, t]) // Central gusset
|
||||
rotate([-90, 0, 0])
|
||||
rotate(90 - angle2)
|
||||
rotate_extrude(angle = angle2)
|
||||
translate([0, 0])
|
||||
square([t, w]);
|
||||
|
||||
for(side = [-1, 1]) // Arm gussets
|
||||
translate([length - offset, side * (arm_w + w) / 2 - arm_w / 2, t])
|
||||
rotate([-90, 0, 0])
|
||||
rotate(90 - angle2)
|
||||
rotate_extrude(angle = angle + angle2)
|
||||
translate([0, 0])
|
||||
square([t, arm_w]);
|
||||
|
||||
}
|
||||
}
|
29
vitamins/swiss_clips.scad
Normal file
@@ -0,0 +1,29 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2020
|
||||
// nop.head@gmail.com
|
||||
// hydraraptor.blogspot.com
|
||||
//
|
||||
// This file is part of NopSCADlib.
|
||||
//
|
||||
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
|
||||
// GNU General Public License as published by the Free Software Foundation, either version 3 of
|
||||
// the License, or (at your option) any later version.
|
||||
//
|
||||
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
||||
// If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
|
||||
//
|
||||
//! Swiss picture clip.
|
||||
//! Used for holding glass on 3D printer beds.
|
||||
//
|
||||
|
||||
UKPFS1008_10 = ["UKPFS1008_10", 39, 13, 13, 0.75, 1.5, 4, [3.5, 2.2, 4.4], [5.25, 4.12], 9, 37 - 9, 11];
|
||||
|
||||
swiss_clips = [ UKPFS1008_10 ];
|
||||
|
||||
use <swiss_clip.scad>
|