Compare commits
27 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
74293b6c22 | ||
|
9e45e4eb79 | ||
|
523fc9e9a5 | ||
|
09d2ffb126 | ||
|
3c370359c8 | ||
|
acf45d2aae | ||
|
568d63dd14 | ||
|
e3cde64b61 | ||
|
e61ce02414 | ||
|
f8e125654e | ||
|
62b1511c82 | ||
|
84d98a1081 | ||
|
8efbb1d441 | ||
|
5899ffe88f | ||
|
b05131145c | ||
|
5da0f97485 | ||
|
c3f3d629b1 | ||
|
c7ba052ccf | ||
|
c2c5f50986 | ||
|
d0ae8ca216 | ||
|
e81dcfdbd8 | ||
|
06a286dc98 | ||
|
f5496c373a | ||
|
1c6d3d8e95 | ||
|
5e24a32a0b | ||
|
fbd8d8c7cd | ||
|
c77b18ebc9 |
69
CHANGELOG.md
@@ -3,6 +3,63 @@
|
||||
This changelog is generated by `changelog.py` using manually added semantic version tags to classify commits as breaking changes, additions or fixes.
|
||||
|
||||
|
||||
### [v21.7.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.7.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.6.1...v21.7.0 "diff with v21.6.1")
|
||||
* 2023-07-22 [`523fc9e`](https://github.com/nophead/NopSCADlib/commit/523fc9e9a5c8a566bde2bfe8555d5f6dddd8f05b "show commit") [C.](# "Chris") Adafruit Feather 405 contributed by Chris Lott.
|
||||
|
||||
#### [v21.6.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.6.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.6.0...v21.6.1 "diff with v21.6.0")
|
||||
* 2023-07-22 [`09d2ffb`](https://github.com/nophead/NopSCADlib/commit/09d2ffb126cf9d9ad2d68171583e11708227b704 "show commit") [C.](# "Chris") Typo in comment fixed.
|
||||
|
||||
* 2023-07-22 [`3c37035`](https://github.com/nophead/NopSCADlib/commit/3c370359c838a48d85e25709bcbced61249c237d "show commit") [C.](# "Chris") Make front page `readme.md` labels lower case as GitHub seems have stopped working with uppercase.
|
||||
|
||||
### [v21.6.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.6.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.5.1...v21.6.0 "diff with v21.5.1")
|
||||
* 2023-07-22 [`e3cde64`](https://github.com/nophead/NopSCADlib/commit/e3cde64b61b6abfc4a2883e8aa32b66346fde1c4 "show commit") [C.](# "Chris") `open_bearing_theta()` now derived from `open_bearing_width()`.
|
||||
|
||||
* 2023-07-22 [`e61ce02`](https://github.com/nophead/NopSCADlib/commit/e61ce0241443fb2c1f0585953bd3f7383b217086 "show commit") [C.](# "Chris") Moved things around for better test images.
|
||||
|
||||
* 2023-07-22 [`f8e1256`](https://github.com/nophead/NopSCADlib/commit/f8e125654ed60842d6ca7f33a91377d9cb5f1dc9 "show commit") [C.](# "Chris") Rendred the 3D difference.
|
||||
|
||||
* 2023-07-22 [`62b1511`](https://github.com/nophead/NopSCADlib/commit/62b1511c82eacb5124302aed36a52fe0d8104385 "show commit") [C.](# "Chris") Removed 3D difference for speed.
|
||||
|
||||
* 2023-06-27 [`84d98a1`](https://github.com/nophead/NopSCADlib/commit/84d98a1081d38c56d5b02645a99223b7616fcd70 "show commit") [J.R.](# "Jeroen Roos") Added SBR rails
|
||||
|
||||
* This change adds
|
||||
- SBR rails. For now only SBR16
|
||||
- The bearing block that goes with it (SBR16UU)
|
||||
- An 'open' linear bearing (LM16UUOP) that is used by the bearing block
|
||||
- A 28mm circlip that has a wider opening than then normal circlip.
|
||||
`(circlip_28iw)`
|
||||
|
||||
#### [v21.5.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.5.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.5.0...v21.5.1 "diff with v21.5.0")
|
||||
* 2023-06-29 [`5899ffe`](https://github.com/nophead/NopSCADlib/commit/5899ffe88f7952108ce928a5a6188b4aad5044c5 "show commit") [C.](# "Chris") More typos in comments.
|
||||
|
||||
* 2023-06-28 [`b051311`](https://github.com/nophead/NopSCADlib/commit/b05131145caf500cd9198b1e9b9fafc69506b50f "show commit") [C.](# "Chris") Comment typo.
|
||||
|
||||
### [v21.5.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.5.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.4.1...v21.5.0 "diff with v21.4.1")
|
||||
* 2023-05-08 [`c3f3d62`](https://github.com/nophead/NopSCADlib/commit/c3f3d629b1ff79d40cc5ad3efcb33e940d6c8056 "show commit") [C.P.](# "Chris Palmer") Added PanelDue V3.
|
||||
|
||||
* 2023-05-08 [`c7ba052`](https://github.com/nophead/NopSCADlib/commit/c7ba052ccf24d764aa6460d4559e92596c9e4cf4 "show commit") [C.P.](# "Chris Palmer") Added SMD QFP package.
|
||||
|
||||
* 2023-05-08 [`c2c5f50`](https://github.com/nophead/NopSCADlib/commit/c2c5f509860b909ca8fca5ffcc65dbef2f7177c5 "show commit") [C.P.](# "Chris Palmer") Can now used `smd_res()` to draw chokes.
|
||||
|
||||
* 2023-05-08 [`d0ae8ca`](https://github.com/nophead/NopSCADlib/commit/d0ae8ca216108f53c9b8e60896ea9b59b845b7e0 "show commit") [C.P.](# "Chris Palmer") Added the ability to have more than one grid on a PCB.
|
||||
|
||||
* 2023-05-08 [`e81dcfd`](https://github.com/nophead/NopSCADlib/commit/e81dcfdbd8163ce8e2db450f3a20c296c21327a8 "show commit") [C.P.](# "Chris Palmer") Added right angle option to box headers.
|
||||
|
||||
#### [v21.4.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.4.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.4.0...v21.4.1 "diff with v21.4.0")
|
||||
* 2023-05-08 [`06a286d`](https://github.com/nophead/NopSCADlib/commit/06a286dc989e9cc8cf7918049cd16a862b1a9b94 "show commit") [C.P.](# "Chris Palmer") Fixed missing BOM entry for JST connectors.
|
||||
Fixed default colour for JST connectors.
|
||||
Corrected BOM entry to show right angle options on Molex and pin headers.
|
||||
|
||||
* 2023-05-08 [`f5496c3`](https://github.com/nophead/NopSCADlib/commit/f5496c373a1ab8ae47d07cc0a52d76e4299876cc "show commit") [C.P.](# "Chris Palmer") Fixed typo in `smd_diode(DO214AC)` package name.
|
||||
|
||||
### [v21.4.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.4.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.3.1...v21.4.0 "diff with v21.3.1")
|
||||
* 2023-05-01 [`5e24a32`](https://github.com/nophead/NopSCADlib/commit/5e24a32a0b422e8032c3c5d377c1a756ff6f1022 "show commit") [C.P.](# "Chris Palmer") Added ESP32 camera.
|
||||
|
||||
* 2023-05-01 [`fbd8d8c`](https://github.com/nophead/NopSCADlib/commit/fbd8d8c7cdff0bd7de0d42aa74bf0ab6551c205b "show commit") [C.P.](# "Chris Palmer") Added `smd_coax`
|
||||
|
||||
#### [v21.3.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.3.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.3.0...v21.3.1 "diff with v21.3.0")
|
||||
* 2023-04-29 [`b1592f5`](https://github.com/nophead/NopSCADlib/commit/b1592f51d4b16a125d9b28edae56f758fcac2f02 "show commit") [C.P.](# "Chris Palmer") Fixed `bom.py,` `views.py` and `tests.py` so that vitamin descriptions can contain more than one colon.
|
||||
|
||||
### [v21.3.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.3.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.2.0...v21.3.0 "diff with v21.2.0")
|
||||
* 2023-04-23 [`61fc194`](https://github.com/nophead/NopSCADlib/commit/61fc19499524a2b750d17a90627a697bf626bbf0 "show commit") [C.P.](# "Chris Palmer") Refactored for readability.
|
||||
|
||||
@@ -58,8 +115,6 @@ This changelog is generated by `changelog.py` using manually added semantic vers
|
||||
|
||||
* 2023-02-01 [`abf1f1a`](https://github.com/nophead/NopSCADlib/commit/abf1f1ab3f3eddc2f274df649e8481a4117901eb "show commit") [C.P.](# "Chris Palmer") PCB blocks can now have rounded edges for more realistic cans.
|
||||
|
||||
* 2023-02-01 [`df06d1f`](https://github.com/nophead/NopSCADlib/commit/df06d1f57fff64cd6da20684f8371da204f69a82 "show commit") [C.P.](# "Chris Palmer") Updated changelog.
|
||||
|
||||
### [v20.23.0](https://github.com/nophead/NopSCADlib/releases/tag/v20.23.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v20.22.0...v20.23.0 "diff with v20.22.0")
|
||||
* 2023-02-01 [`470d6d6`](https://github.com/nophead/NopSCADlib/commit/470d6d6216b1cef8ce6cafd4b14300edb62eac4a "show commit") [C.P.](# "Chris Palmer") Started radial components with crystals.
|
||||
|
||||
@@ -101,7 +156,7 @@ This changelog is generated by `changelog.py` using manually added semantic vers
|
||||
* 2023-01-24 [`77e948f`](https://github.com/nophead/NopSCADlib/commit/77e948f43c911442211bcbf6d1b1520184d2c70b "show commit") [C.P.](# "Chris Palmer") Added can bus connectors to OpenGrab model.
|
||||
Tweaked some PCB component positions.
|
||||
|
||||
* 2023-01-24 [`543cdb4`](https://github.com/nophead/NopSCADlib/commit/543cdb4e01d38308a06d4368ebabadb85c696567 "show commit") [C.P.](# "Chris Palmer") Incresed the clearance of holes made for pin header.
|
||||
* 2023-01-24 [`543cdb4`](https://github.com/nophead/NopSCADlib/commit/543cdb4e01d38308a06d4368ebabadb85c696567 "show commit") [C.P.](# "Chris Palmer") Increased the clearance of holes made for pin header.
|
||||
|
||||
### [v20.19.0](https://github.com/nophead/NopSCADlib/releases/tag/v20.19.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v20.18.1...v20.19.0 "diff with v20.18.1")
|
||||
* 2023-01-12 [`ebd50ba`](https://github.com/nophead/NopSCADlib/commit/ebd50bae535283b94b310ee74c9b98b2e3b7f8be "show commit") [C.P.](# "Chris Palmer") Added SMD diodes, inductors and potentiometers.
|
||||
@@ -136,8 +191,6 @@ Client code now calls `dxf()` so that the generated files can be used to speed u
|
||||
|
||||
* Change comment about nut sizes from radius to diameter.
|
||||
|
||||
* 2022-09-29 [`d95e1e6`](https://github.com/nophead/NopSCADlib/commit/d95e1e64edba4ef51852a1e72d00497154c80c88 "show commit") [C.](# "Chris") Udated changelog.
|
||||
|
||||
### [v20.14.0](https://github.com/nophead/NopSCADlib/releases/tag/v20.14.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v20.13.0...v20.14.0 "diff with v20.13.0")
|
||||
* 2022-09-29 [`f1737d2`](https://github.com/nophead/NopSCADlib/commit/f1737d257b54957772ab6faea102f8ddb829119b "show commit") [C.](# "Chris") Updated images and readme.
|
||||
|
||||
@@ -537,7 +590,7 @@ Lead length removed from TO220 and TO247 vitamin string.
|
||||
Mainly text spacing changes.
|
||||
|
||||
* 2021-09-27 [`9b5ec6a`](https://github.com/nophead/NopSCADlib/commit/9b5ec6af1aba313df6812a5313470ebb7e8fbdd7 "show commit") [C.P.](# "Chris Palmer") Fixed new `rounded_polygon` to work with last OpenSCAD release.
|
||||
Trainling commas in `let()`.
|
||||
Trailing commas in `let()`.
|
||||
|
||||
* 2021-09-27 [`50958b0`](https://github.com/nophead/NopSCADlib/commit/50958b064d5a6d5ca3fd6525a8c3d3a2c5b20199 "show commit") [C.P.](# "Chris Palmer") Added `$show_plugs` to show crude reprentations of housings on `pin_headers` and Molex KK headers.
|
||||
|
||||
@@ -1199,7 +1252,7 @@ Updated pics and readme.
|
||||
* 2020-12-28 [`f6f4fcc`](https://github.com/nophead/NopSCADlib/commit/f6f4fcc7e84e40669446708e2352ea68c49b7961 "show commit") [M.B.](# "Martin Budden") Added `M5_cs_cap` screw
|
||||
|
||||
#### [v10.21.1](https://github.com/nophead/NopSCADlib/releases/tag/v10.21.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v10.21.0...v10.21.1 "diff with v10.21.0")
|
||||
* 2020-12-28 [`ba586b3`](https://github.com/nophead/NopSCADlib/commit/ba586b368582db163af143ebb60afed270f77b1c "show commit") [C.P.](# "Chris Palmer") Example images update to match new contersink screws and teardrops.
|
||||
* 2020-12-28 [`ba586b3`](https://github.com/nophead/NopSCADlib/commit/ba586b368582db163af143ebb60afed270f77b1c "show commit") [C.P.](# "Chris Palmer") Example images update to match new countersink screws and teardrops.
|
||||
|
||||
### [v10.21.0](https://github.com/nophead/NopSCADlib/releases/tag/v10.21.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v10.20.1...v10.21.0 "diff with v10.20.1")
|
||||
* 2020-12-28 [`8d22940`](https://github.com/nophead/NopSCADlib/commit/8d22940506df525ac52ef6f8a00ea03661f3b682 "show commit") [C.P.](# "Chris Palmer") Project blurb can now be split with into sections with markdown horizontal rules
|
||||
@@ -1477,7 +1530,7 @@ Reverted the jst header pin position change.
|
||||
|
||||
* 2020-09-20 [`933fea6`](https://github.com/nophead/NopSCADlib/commit/933fea687c54d7d8ec48fe92aae12ffca0666789 "show commit") [C.P.](# "Chris Palmer") Removed debug code
|
||||
|
||||
* 2020-09-19 [`a7803b1`](https://github.com/nophead/NopSCADlib/commit/a7803b1efbf92c5e27f3171d7e2a92634fa2d84f "show commit") [C.P.](# "Chris Palmer") Improved numerical accuarcy of catenary calculations.
|
||||
* 2020-09-19 [`a7803b1`](https://github.com/nophead/NopSCADlib/commit/a7803b1efbf92c5e27f3171d7e2a92634fa2d84f "show commit") [C.P.](# "Chris Palmer") Improved numerical accuracy of catenary calculations.
|
||||
|
||||
### [v9.7.0](https://github.com/nophead/NopSCADlib/releases/tag/v9.7.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v9.6.1...v9.7.0 "diff with v9.6.1")
|
||||
* 2020-09-19 [`1255e71`](https://github.com/nophead/NopSCADlib/commit/1255e712719ce66fd3b231e5c212ea69b0bb9f1c "show commit") [C.P.](# "Chris Palmer") Added catenary curves.
|
||||
|
Before Width: | Height: | Size: 265 KiB After Width: | Height: | Size: 265 KiB |
Before Width: | Height: | Size: 326 KiB After Width: | Height: | Size: 326 KiB |
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 336 KiB After Width: | Height: | Size: 337 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 126 KiB |
Before Width: | Height: | Size: 202 KiB After Width: | Height: | Size: 202 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 249 KiB After Width: | Height: | Size: 249 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 125 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 187 KiB After Width: | Height: | Size: 187 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 236 KiB After Width: | Height: | Size: 236 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 229 KiB After Width: | Height: | Size: 233 KiB |
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 120 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 219 KiB After Width: | Height: | Size: 218 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
@@ -1,6 +1,6 @@
|
||||
'Micro SD card', 1
|
||||
'Fan 17mm x 8mm', 1
|
||||
'Heatfit insert M2', 4
|
||||
'Heatfit insert M2 x 4mm', 4
|
||||
'Nut M2.5 x 2.2mm nyloc', 4
|
||||
'Enviro+', 1
|
||||
'Raspberry Pi Zero', 1
|
||||
@@ -13,7 +13,7 @@
|
||||
'SMD capacitor 1206 10uF', 1
|
||||
'SMD resistor 0805 3K3 0.125W', 1
|
||||
'SOT223 package FZT851', 1
|
||||
'Veroboard 6 holes x 6strips', 1
|
||||
'Veroboard 6 holes x 6 strips', 1
|
||||
'Washer M2 x 5mm x 0.3mm', 4
|
||||
'Washer M2.5 x 5.9mm x 0.5mm', 4
|
||||
'Washer M3 x 7mm x 0.5mm', 3
|
||||
|
|
@@ -55,7 +55,7 @@
|
||||
"count": 1,
|
||||
"assemblies": {},
|
||||
"vitamins": {
|
||||
"veroboard(fan_vb): Veroboard 6 holes x 6strips": {
|
||||
"veroboard(fan_vb): Veroboard 6 holes x 6 strips": {
|
||||
"count": 1
|
||||
},
|
||||
"wire_link(0.8, 10.16, tail = 2.5): Wire link 0.8mm x 0.4\"": {
|
||||
@@ -102,7 +102,7 @@
|
||||
"count": 1,
|
||||
"assemblies": {},
|
||||
"vitamins": {
|
||||
"insert(F1BM2): Heatfit insert M2": {
|
||||
"insert(F1BM2): Heatfit insert M2 x 4mm": {
|
||||
"count": 4
|
||||
},
|
||||
"washer(M3_washer): Washer M3 x 7mm x 0.5mm": {
|
||||
|
@@ -15,7 +15,7 @@ Vitamins:
|
||||
i e k e o e r n
|
||||
1| | | | | | | | 1 Micro SD card
|
||||
| | 1| | | | | | 1 Fan 17mm x 8mm
|
||||
| | | 4| | | | | 4 Heatfit insert M2
|
||||
| | | 4| | | | | 4 Heatfit insert M2 x 4mm
|
||||
| | | | | 4| | | 4 Nut M2.5 x 2.2mm nyloc
|
||||
| | | | 1| | | | 1 Enviro+
|
||||
1| | | | | | | | 1 Raspberry Pi Zero
|
||||
@@ -28,7 +28,7 @@ Vitamins:
|
||||
| | | | | | 1| | 1 SMD capacitor 1206 10uF
|
||||
| | | | | | 1| | 1 SMD resistor 0805 3K3 0.125W
|
||||
| | | | | | 1| | 1 SOT223 package FZT851
|
||||
| | | | | | 1| | 1 Veroboard 6 holes x 6strips
|
||||
| | | | | | 1| | 1 Veroboard 6 holes x 6 strips
|
||||
| | | | | | | 4| 4 Washer M2 x 5mm x 0.3mm
|
||||
| | | | | 4| | | 4 Washer M2.5 x 5.9mm x 0.5mm
|
||||
| | | 3| | | | | 3 Washer M3 x 7mm x 0.5mm
|
||||
|
@@ -1,6 +1,6 @@
|
||||
case_assembly:
|
||||
Vitamins:
|
||||
4 Heatfit insert M2
|
||||
4 Heatfit insert M2 x 4mm
|
||||
3 Screw M3 pan x 6mm
|
||||
3 Washer M3 x 7mm x 0.5mm
|
||||
|
||||
|
@@ -3,6 +3,6 @@ Vitamins:
|
||||
1 SMD capacitor 1206 10uF
|
||||
1 SMD resistor 0805 3K3 0.125W
|
||||
1 SOT223 package FZT851
|
||||
1 Veroboard 6 holes x 6strips
|
||||
1 Veroboard 6 holes x 6 strips
|
||||
3 Wire link 0.8mm x 6.5mm
|
||||
1 Wire link 0.8mm x 0.4"
|
||||
|
@@ -29,7 +29,7 @@ Environmental monitor using Enviro+ sensor board and a Raspberry Pi Zero.
|
||||
| | | | | | | | | | **Vitamins** |
|
||||
| . | . | . | 1 | . | . | . | . | 1 | Enviro+ |
|
||||
| 1 | . | . | . | . | . | . | . | 1 | Fan 17mm x 8mm |
|
||||
| . | . | . | . | 4 | . | . | . | 4 | Heatfit insert M2 |
|
||||
| . | . | . | . | 4 | . | . | . | 4 | Heatfit insert M2 x 4mm |
|
||||
| . | 1 | . | . | . | . | . | . | 1 | Micro SD card |
|
||||
| . | . | . | . | . | 4 | . | . | 4 | Nut M2.5 x 2.2mm nyloc |
|
||||
| 1 | . | . | . | . | . | . | . | 1 | PMS5003 particle detector |
|
||||
@@ -42,7 +42,7 @@ Environmental monitor using Enviro+ sensor board and a Raspberry Pi Zero.
|
||||
| . | . | . | . | . | . | 2 | . | 2 | Screw M2.5 pan x 6.4mm |
|
||||
| . | . | . | . | . | 4 | . | . | 4 | Screw M2.5 pan x 8mm |
|
||||
| . | . | . | . | 3 | . | . | . | 3 | Screw M3 pan x 6mm |
|
||||
| . | . | 1 | . | . | . | . | . | 1 | Veroboard 6 holes x 6strips |
|
||||
| . | . | 1 | . | . | . | . | . | 1 | Veroboard 6 holes x 6 strips |
|
||||
| . | . | . | . | . | . | . | 4 | 4 | Washer M2 x 5mm x 0.3mm |
|
||||
| . | . | . | . | . | 4 | . | . | 4 | Washer M2.5 x 5.9mm x 0.5mm |
|
||||
| . | . | . | . | 3 | . | . | . | 3 | Washer M3 x 7mm x 0.5mm |
|
||||
@@ -121,7 +121,7 @@ Environmental monitor using Enviro+ sensor board and a Raspberry Pi Zero.
|
||||
|1| SMD capacitor 1206 10uF|
|
||||
|1| SMD resistor 0805 3K3 0.125W|
|
||||
|1| SOT223 package FZT851|
|
||||
|1| Veroboard 6 holes x 6strips|
|
||||
|1| Veroboard 6 holes x 6 strips|
|
||||
|1| Wire link 0.8mm x 0.4"|
|
||||
|3| Wire link 0.8mm x 6.5mm|
|
||||
|
||||
@@ -183,7 +183,7 @@ It converts the PWM signal on GPI4 to a stead DC voltage so that the fan doesn't
|
||||
### Vitamins
|
||||
|Qty|Description|
|
||||
|---:|:----------|
|
||||
|4| Heatfit insert M2|
|
||||
|4| Heatfit insert M2 x 4mm|
|
||||
|3| Screw M3 pan x 6mm|
|
||||
|3| Washer M3 x 7mm x 0.5mm|
|
||||
|
||||
|
@@ -7,7 +7,6 @@
|
||||
//
|
||||
// Top level model
|
||||
//
|
||||
|
||||
include <NopSCADlib/core.scad>
|
||||
use <NopSCADlib/vitamins/veroboard.scad>
|
||||
include <NopSCADlib/vitamins/smds.scad>
|
||||
@@ -19,10 +18,9 @@ fan_vb = vero("fan_vb", "fan_controller", 6, 6, breaks = [[2, 1], [2 + eps, 5]],
|
||||
[0, 1, 0, "link", 0, 4, undef, 2.5],
|
||||
[0, 0, 0, "link", 0, 4, undef, 2.5],
|
||||
[2, 5, 0, "-smd_res", RES0805, "3K3"],
|
||||
[4, 4.7, 90, "-smd_cap", CAP1206, 1.2, "10uF"],
|
||||
[4, 4.5, 90, "-smd_cap", CAP1206, 1.2, "10uF"],
|
||||
[2, 2.5, 180, "-smd_sot", SOT223, "FZT851"],
|
||||
],
|
||||
joints = [[5, 1], [5, 5], [0, [0, 1, 5]]]
|
||||
]
|
||||
);
|
||||
|
||||
//! The fan controller is a single transistor wired as a Miller integrator that effectively multiplies the capacitor value by the gain of the transistor.
|
||||
@@ -40,6 +38,6 @@ fan_vb = vero("fan_vb", "fan_controller", 6, 6, breaks = [[2, 1], [2 + eps, 5]],
|
||||
//!
|
||||
//! 
|
||||
//!
|
||||
module fan_controller_assembly() rotate(90) vflip(!exploded()) veroboard_assembly(fan_vb, -vero_thickness(fan_vb) - 1.4, 0);
|
||||
module fan_controller_assembly() rotate(90) vflip() veroboard_fastened_assembly(fan_vb, -vero_thickness(fan_vb) - 1.4, 0);
|
||||
|
||||
fan_controller_assembly();
|
||||
|
@@ -25,6 +25,7 @@ include <NopSCADlib/vitamins/fans.scad>
|
||||
use <NopSCADlib/vitamins/insert.scad>
|
||||
use <NopSCADlib/vitamins/veroboard.scad>
|
||||
use <NopSCADlib/utils/round.scad>
|
||||
use <NopSCADlib/utils/pcb.scad>
|
||||
use <NopSCADlib/printed/foot.scad>
|
||||
use <NopSCADlib/printed/printed_box.scad>
|
||||
use <fan_controller.scad>
|
||||
@@ -402,7 +403,7 @@ assembly("enviro") {
|
||||
if(!exploded())
|
||||
for(x = [8, 7, 3])
|
||||
pcb_grid(pcb, x, 0, 0.05)
|
||||
solder_meniscus(pcb, 0.39, 1);
|
||||
solder_meniscus(0.39, 1);
|
||||
}
|
||||
|
||||
//! * Screw the Enviro+ PCB to the front of the case using M2.5 x 8mm pan screws with washer and nuts on the inside.
|
||||
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 120 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 201 KiB After Width: | Height: | Size: 200 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 123 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 135 KiB After Width: | Height: | Size: 134 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
@@ -1,6 +1,6 @@
|
||||
base_assembly:
|
||||
Vitamins:
|
||||
2 Heatfit insert M3
|
||||
2 Heatfit insert M3 x 5.8mm
|
||||
|
||||
Printed:
|
||||
1 socket_box.stl
|
||||
|
@@ -3,7 +3,7 @@
|
||||
'Wire brown 30/0.25mm strands, length 150mm - not shown', 2
|
||||
'Wire green & yellow 30/0.25mm strands, length 150mm - not shown', 2
|
||||
'IEC inlet for ATX', 1
|
||||
'Heatfit insert M3', 2
|
||||
'Heatfit insert M3 x 5.8mm', 2
|
||||
'4mm shielded jack socket blue', 2
|
||||
'4mm shielded jack socket brown', 1
|
||||
'4mm shielded jack socket green', 2
|
||||
|
|
@@ -7,7 +7,7 @@
|
||||
"count": 1,
|
||||
"assemblies": {},
|
||||
"vitamins": {
|
||||
"insert(F1BM3): Heatfit insert M3": {
|
||||
"insert(F1BM3): Heatfit insert M3 x 5.8mm": {
|
||||
"count": 2
|
||||
}
|
||||
},
|
||||
|
@@ -12,7 +12,7 @@ Vitamins:
|
||||
| | | 2| 2 Wire brown 30/0.25mm strands, length 150mm - not shown
|
||||
| | 1| 1| 2 Wire green & yellow 30/0.25mm strands, length 150mm - not shown
|
||||
| | | 1| 1 IEC inlet for ATX
|
||||
2| | | | 2 Heatfit insert M3
|
||||
2| | | | 2 Heatfit insert M3 x 5.8mm
|
||||
| | 2| | 2 4mm shielded jack socket blue
|
||||
| | 1| | 1 4mm shielded jack socket brown
|
||||
| | 2| | 2 4mm shielded jack socket green
|
||||
|
@@ -38,7 +38,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
|
||||
| . | . | . | 1 | 1 | 4mm shielded jack socket brown |
|
||||
| . | . | . | 2 | 2 | 4mm shielded jack socket green |
|
||||
| . | . | . | 3 | 3 | Ferrule for 1.5mm^2 wire - not shown |
|
||||
| 2 | . | . | . | 2 | Heatfit insert M3 |
|
||||
| 2 | . | . | . | 2 | Heatfit insert M3 x 5.8mm |
|
||||
| . | . | 3 | 5 | 8 | Heatshrink sleeving ID 3.2mm x 15mm - not shown |
|
||||
| . | . | 1 | . | 1 | IEC inlet for ATX |
|
||||
| . | . | . | 1 | 1 | Mains socket 13A |
|
||||
@@ -65,7 +65,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
|
||||
### Vitamins
|
||||
|Qty|Description|
|
||||
|---:|:----------|
|
||||
|2| Heatfit insert M3|
|
||||
|2| Heatfit insert M3 x 5.8mm|
|
||||
|
||||
|
||||
### 3D Printed parts
|
||||
|
3
lib.scad
@@ -99,6 +99,7 @@ use <utils/rounded_triangle.scad>
|
||||
use <utils/layout.scad>
|
||||
use <utils/round.scad>
|
||||
use <utils/offset.scad>
|
||||
use <utils/pcb_utils.scad>
|
||||
use <utils/sector.scad>
|
||||
use <utils/thread.scad>
|
||||
use <vitamins/photo_interrupter.scad>
|
||||
use <vitamins/photo_interrupter.scad>
|
||||
|
BIN
libtest.png
Before Width: | Height: | Size: 970 KiB After Width: | Height: | Size: 956 KiB |
31
libtest.scad
@@ -96,6 +96,7 @@ use <tests/rails.scad>
|
||||
use <tests/ring_terminals.scad>
|
||||
use <tests/rockers.scad>
|
||||
use <tests/rod.scad>
|
||||
use <tests/SBR_rails.scad>
|
||||
use <tests/screws.scad>
|
||||
use <tests/sealing_strip.scad>
|
||||
use <tests/servo_motors.scad>
|
||||
@@ -144,7 +145,7 @@ x1 = x0 + 110;
|
||||
x2 = x1 + 90;
|
||||
x3 = x2 + 130;
|
||||
x4 = x3 + 200;
|
||||
x5 = 850;
|
||||
x5 = 900;
|
||||
x6 = x5 + 150;
|
||||
|
||||
cable_grommets_y = 0;
|
||||
@@ -233,8 +234,8 @@ tubings_y = sealing_strip_y + 20;
|
||||
pillars_y = tubings_y + 20;
|
||||
ball_bearings_y = pillars_y + 40;
|
||||
pulleys_y = ball_bearings_y + 40;
|
||||
leadnuts_y = pulleys_y + 60;
|
||||
linear_bearings_y = leadnuts_y + 50;
|
||||
leadnuts_y = pulleys_y + 35;
|
||||
linear_bearings_y = leadnuts_y + 65;
|
||||
steppers_y = linear_bearings_y + 110;
|
||||
sheets_y = steppers_y + 55;
|
||||
pcbs_y = sheets_y + 60;
|
||||
@@ -289,7 +290,9 @@ translate([x0 + 120, leadnuts_y])
|
||||
leadnuthousings();
|
||||
|
||||
translate([x0, linear_bearings_y]) {
|
||||
linear_bearings();
|
||||
translate([0, -30])
|
||||
linear_bearings();
|
||||
|
||||
rods();
|
||||
}
|
||||
|
||||
@@ -397,7 +400,7 @@ blowers_y = ssrs_y + 60;
|
||||
hot_ends_y = blowers_y + 100;
|
||||
batteries_y = hot_ends_y + 55;
|
||||
panel_meters_y = batteries_y + 70;
|
||||
extrusions_y = panel_meters_y + 80;
|
||||
extrusions_y = panel_meters_y + 100;
|
||||
|
||||
translate([x3, veroboard_y])
|
||||
veroboard_test();
|
||||
@@ -465,11 +468,11 @@ rails_y = belts_y + 200;
|
||||
extrusion_brackets_y = rails_y + 250;
|
||||
sk_brackets_y = extrusion_brackets_y + 80;
|
||||
kp_pillow_blocks_y = sk_brackets_y + 60;
|
||||
scs_bearing_blocks_y = kp_pillow_blocks_y + 60;
|
||||
bearing_blocks_y = kp_pillow_blocks_y + 60;
|
||||
box_sections_y = batteries_y;
|
||||
BLDC_y = scs_bearing_blocks_y + 120;
|
||||
pot_y = BLDC_y + 40;
|
||||
cable_strip_y = pot_y + 50;
|
||||
BLDC_y = bearing_blocks_y + 180;
|
||||
pot_y = bearing_blocks_y;
|
||||
cable_strip_y = sheets_y + 30;
|
||||
|
||||
translate([0, transformers_y])
|
||||
servo_motors();
|
||||
@@ -484,9 +487,13 @@ translate([x4 + 200, belts_y + 58]) {
|
||||
translate([x4 + 175, belts_y, -20])
|
||||
drag_chains();
|
||||
|
||||
translate([x4, rails_y + 130])
|
||||
translate([x4, rails_y + 130]) {
|
||||
rails();
|
||||
|
||||
translate([305, 0])
|
||||
sbr_rails();
|
||||
}
|
||||
|
||||
translate([x4, cable_strip_y])
|
||||
cable_strips();
|
||||
|
||||
@@ -502,8 +509,8 @@ translate([x4, extrusion_brackets_y])
|
||||
translate([x1, swiss_clips_y + 50])
|
||||
shaft_couplings();
|
||||
|
||||
translate([x4, scs_bearing_blocks_y])
|
||||
scs_bearing_blocks();
|
||||
translate([x4, bearing_blocks_y])
|
||||
bearing_blocks();
|
||||
|
||||
translate([x4, BLDC_y])
|
||||
bldc_motors();
|
||||
|
@@ -80,9 +80,16 @@ def codify(word, url):
|
||||
return '`' + word + '`'
|
||||
return word
|
||||
|
||||
typos = [ # Typos that are ambiguous to codespell
|
||||
('cnc_bit+_r', 'cnc_bit_r'),
|
||||
('Udated', 'Updated'),
|
||||
('decription', 'description'),
|
||||
('Trainling', 'Trailing'),
|
||||
]
|
||||
|
||||
def fixup_comment(comment, url):
|
||||
comment = comment.replace('cnc_bit+_r', 'cnc_bit_r')
|
||||
for typo in typos:
|
||||
comment = comment.replace(typo[0], typo[1])
|
||||
""" markup code words and fix new paragraphs """
|
||||
result = ''
|
||||
word = ''
|
||||
@@ -162,6 +169,6 @@ if __name__ == '__main__':
|
||||
|
||||
# Print commits excluding merges
|
||||
|
||||
if not c.comment.startswith('Merge branch') and not c.comment.startswith('Merge pull') and not re.match(r'U..ated ch.*log.*', c.comment):
|
||||
if not c.comment.startswith('Merge branch') and not c.comment.startswith('Merge pull') and not re.match(r'U.?.ated ch.*log.*', c.comment):
|
||||
print('* %s [`%s`](%s "show commit") %s %s\n' % (c.date, c.hash[:7], url + '/commit/' + c.hash, initials(c.author), fixup_comment(c.comment, url)), file = file)
|
||||
do_cmd(('codespell -w -L od ' + filename).split())
|
||||
|
@@ -201,7 +201,7 @@ def tests(tests):
|
||||
body = bodies[type]
|
||||
|
||||
index[type] += [cap_name]
|
||||
body += ['<a name="%s"></a>' % cap_name]
|
||||
body += ['<a name="%s"></a>' % cap_name.lower()]
|
||||
body += ["## " + cap_name]
|
||||
|
||||
doc = None
|
||||
@@ -301,7 +301,7 @@ def tests(tests):
|
||||
for type in types:
|
||||
if i < len(index[type]):
|
||||
name = sorted(index[type])[i]
|
||||
print('<td> <a href = "#' + name + '">' + name + '</a> </td>', file = doc_file, end = '')
|
||||
print('<td> <a href = "#' + name.lower() + '">' + name + '</a> </td>', file = doc_file, end = '')
|
||||
else:
|
||||
print('<td></td>', file = doc_file, end = '')
|
||||
print('</tr>', file = doc_file)
|
||||
|
@@ -65,6 +65,7 @@ test_pcb = ["test_pcb", "Test PCB",
|
||||
[ 19, 2, 90, "smd_led", LED1206, "blue"],
|
||||
[ 16, 2, 90, "smd_led", LED0805, "red"],
|
||||
[ 13, 2, 90, "smd_led", LED0603, "orange"],
|
||||
[ 10, 2, -90, "smd_res", L2012C, "1u"],
|
||||
[ 19, 6, -90, "smd_res", RES1206, "1M"],
|
||||
[ 16, 6, -90, "smd_res", RES0805, "1K"],
|
||||
[ 13, 6, -90, "smd_res", RES0603, "100"],
|
||||
@@ -78,21 +79,27 @@ test_pcb = ["test_pcb", "Test PCB",
|
||||
[ 19, 16, -90, "smd_tant", TANT_C, "107C"],
|
||||
[ 13, 16, -90, "smd_tant", TANT_B, "106A"],
|
||||
[ 7, 16, -90, "smd_tant", TANT_A, "105e"],
|
||||
[ 32, 3, -90, "smd_diode",DO241AC, "SS34"],
|
||||
[ 32, 3, -90, "smd_diode",DO214AC, "SS34"],
|
||||
[ 26, 2, -90, "smd_pot", TC33X1, "10K"],
|
||||
[ 28, 6, -90, "smd_sot", SOT23, "2N7000"],
|
||||
[ 28, 12, -90, "smd_sot", SOT223, "LM117"],
|
||||
[ 26, 6, -90, "smd_coax",U_FL_R_SMT_1],
|
||||
|
||||
[ 26, 10, -90, "smd_sot", SOT23, "2N7000"],
|
||||
[ 28, 16, -90, "smd_sot", SOT223, "LM117"],
|
||||
|
||||
[ 30, 30, -90, "smd_qfp", QFP50P1200X1200X160_64N, "ATSAM4S4BA"],
|
||||
|
||||
[ 45, 35, 0, "2p54header", 4, 1],
|
||||
[ 60, 35, 0, "2p54header", 5, 1, false, "blue" ],
|
||||
[ 60, 40, 180, "2p54header", 5, 1, false, undef, true],
|
||||
[ 80, 33, 0, "2p54boxhdr", 4, 2],
|
||||
[ 80, 40, 0, "2p54boxhdr", 4, 2, false, true, true],
|
||||
[ 45, 30, 0, "2p54socket", 4, 1, false, 0, false, "red" ],
|
||||
[ 60, 30, 0, "2p54socket", 6, 1],
|
||||
|
||||
[ 59, 50, 180, "led", LED3mm, "red"],
|
||||
[ 66, 50, 180, "led", LED5mm, "orange"],
|
||||
[ 77, 50, 180, "led", LED8mm, "blue"],
|
||||
[ 90, 50, 180, "led", LED10mm, "yellow"],
|
||||
[ 59, 60, 180, "led", LED3mm, "red"],
|
||||
[ 66, 60, 180, "led", LED5mm, "orange"],
|
||||
[ 77, 60, 180, "led", LED8mm, "blue"],
|
||||
[ 90, 60, 180, "led", LED10mm, "yellow"],
|
||||
[ 10, 35, 180, "rj45"],
|
||||
[ 7, 50, 180, "usb_vAx1"],
|
||||
[ 8, 65, 180, "usb_A"],
|
||||
@@ -112,23 +119,30 @@ test_pcb = ["test_pcb", "Test PCB",
|
||||
[ 25, 200, 0, "buzzer", 4.5, 8.5],
|
||||
[ 25, 218, 0, "buzzer"],
|
||||
|
||||
[ 45, 5, 0, "link", inch(0.4), 0.75, undef, undef, [1.5, "red"]], // Sleeved link
|
||||
[ 45, 9, 0, "link", inch(0.4)], // Flat link
|
||||
[ 45, 12, 0, "ax_res", res1_8, 1000],
|
||||
[ 45, 17, 0, "ax_res", res1_4, 10000],
|
||||
[ 45, 1, 0, "link", inch(0.4), 0.75, undef, undef, [1.5, "red"]], // Sleeved link
|
||||
[ 45, 3, 0, "link", inch(0.4)], // Flat link
|
||||
[ 45, 6, 0, "ax_diode", DO_41, "1N4007"],
|
||||
[ 45, 10, 0, "ax_diode", DO_35, "1N4148"],
|
||||
[ 45, 14, 0, "ax_res", res1_8, 1000],
|
||||
[ 45, 18, 0, "ax_res", res1_4, 10000],
|
||||
[ 45, 22, 0, "ax_res", res1_2, 100000],
|
||||
[ 35, 22, 0, "vero_pin"],
|
||||
[ 35, 17, 0, "vero_pin", true],
|
||||
[ 35, 9, 0, "link", 0, 5], // Vertical wire
|
||||
[ 35, 8, 180, "rd_transistor", TO92, "78L05", undef, undef, "Regulator"],
|
||||
[ 35, 13, 180, "rd_transistor", E_LINE, "ZTX853"],
|
||||
[ 35, 3, 0, "link", 0, 5], // Vertical wire
|
||||
|
||||
[ 60, 9, 0, "link", inch(0.2), inch(0.4)], // Raised link
|
||||
[ 60, 12, 0, "ax_res", res1_8, 1000000, 1, inch(0.1)],
|
||||
[ 60, 17, 0, "ax_res", res1_4, 100, 2, inch(0.1)],
|
||||
[ 60, 3, 0, "link", inch(0.2), inch(0.4)], // Raised link
|
||||
[ 60, 6, 0, "ax_diode", DO_41, "1N4007", inch(0.1)],
|
||||
[ 60, 10, 0, "ax_diode", DO_35, "1N4148", inch(0.1)],
|
||||
|
||||
[ 60, 14, 0, "ax_res", res1_8, 1000000, 1, inch(0.1)],
|
||||
[ 60, 18, 0, "ax_res", res1_4, 100, 2, inch(0.1)],
|
||||
[ 60, 22, 0, "ax_res", res1_2, 10, 10, inch(0.2)],
|
||||
|
||||
[ 33, 110, -90, "rd_xtal", HC49, "4MHz" ],
|
||||
[ 28, 110, -90, "rd_xtal", HC49_4H, "10MHz" ],
|
||||
[ 28, 103, -90, "rd_xtal", C_002RX, "60KHz", 2 ],
|
||||
[ 28, 102, -90, "rd_xtal", C_002RX, "60KHz", 3, inch(0.1) ],
|
||||
|
||||
[ 30, 130,-90, "rd_xtal", ACT1100, "40MHz", 0.5 ],
|
||||
[ 30, 150,-90, "rd_xtal", ACT1700, "80MHz", 0.5 ],
|
||||
@@ -137,11 +151,16 @@ test_pcb = ["test_pcb", "Test PCB",
|
||||
[ 95, 15, -90, "flat_flex"],
|
||||
[ 87, 15, -90, "flat_flex", true],
|
||||
|
||||
[ 50, 50, 0, "molex_hdr", 2],
|
||||
[ 50, 60, 0, "jst_xh", 2],
|
||||
[ 50, 70, 180, "term254", 3],
|
||||
[ 63, 70, 180, "term254", 3, undef, grey(20)],
|
||||
[ 75, 70, 180, "gterm508",2, undef, "blue"],
|
||||
[ 47, 55, 0, "molex_hdr", 2],
|
||||
[ 51, 48, 0, "molex_hdr", 2, 1],
|
||||
[ 51, 41, 0, "molex_hdr", 2, -1],
|
||||
[ 45, 65, 0, "jst_xh", 2],
|
||||
[ 54, 65, 0, "jst_ph", 2],
|
||||
[ 61, 65, 0, "jst_zh", 2],
|
||||
|
||||
[ 50, 75, 180, "term254", 3],
|
||||
[ 63, 75, 180, "term254", 3, undef, grey(20)],
|
||||
[ 75, 75, 180, "gterm508",2, undef, "blue"],
|
||||
|
||||
[ 50, 90, 180, "gterm35", 4, [1,2]],
|
||||
[ 63, 90, 180, "gterm35", 4, [1,2], "red"],
|
||||
@@ -168,7 +187,10 @@ test_pcb = ["test_pcb", "Test PCB",
|
||||
[ 78, 166, -90, "smd_soic", SOIC14, "74HC00"],
|
||||
[ 71, 166, -90, "smd_soic", SOIC16, "ICL323"],
|
||||
[ 64, 166, -90, "smd_soic", SOIC8, "M34063"],
|
||||
[ 80, 150, 0, "chip", 10, 5, 1, grey(20)],
|
||||
[ 70, 150, 0, "chip", 10, 5, 1, grey(20)],
|
||||
|
||||
[90, 140, -90, "relay", HF33F, "012-HSL-3F"],
|
||||
|
||||
|
||||
[ 52, 206, 0, "2p54socket", 8, 1 ],
|
||||
[ 52, 194, 0, "2p54socket", 8, 1, false, 0, false, "red" ],
|
||||
@@ -184,5 +206,5 @@ test_pcb = ["test_pcb", "Test PCB",
|
||||
|
||||
|
||||
if($preview)
|
||||
let($show_threads = true)
|
||||
let($show_threads = true, $solder = pcb_solder(test_pcb))
|
||||
pcb(test_pcb);
|
||||
|
46
tests/SBR_rails.scad
Normal file
@@ -0,0 +1,46 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2023
|
||||
// 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/sbr_rails.scad>
|
||||
|
||||
use <../utils/layout.scad>
|
||||
use <../vitamins/bearing_block.scad>
|
||||
|
||||
length = 200;
|
||||
sheet = 3;
|
||||
|
||||
module sbr_rails()
|
||||
layout([for(r = sbr_rails) sbr_rail_base_width(r)], 10)
|
||||
rotate([90, 180,0]) {
|
||||
rail = sbr_rails[$i];
|
||||
sbr_rail(rail, length);
|
||||
carriage = sbr_rail_carriage(rail);
|
||||
screw = sbr_rail_screw(rail);
|
||||
|
||||
sbr_bearing_block_assembly(carriage, sheet);
|
||||
|
||||
sbr_screw_positions(rail, length)
|
||||
explode(20)
|
||||
rotate([90,0,0])
|
||||
screw(sbr_rail_screw(rail), 18);
|
||||
|
||||
}
|
||||
|
||||
if($preview)
|
||||
sbr_rails();
|
@@ -23,7 +23,7 @@ include <../vitamins/smds.scad>
|
||||
|
||||
module smds() {
|
||||
layout([for(r = smd_resistors) smd_res_size(r).x], 1)
|
||||
smd_resistor(smd_resistors[$i], ["1R0", "10", "100", "10M", "100K"][$i % 5]);
|
||||
smd_resistor(smd_resistors[$i], ["1R0", "10", "100", "10M", "100K", "10u"][$i % 6]);
|
||||
|
||||
translate([0, 3])
|
||||
layout([for(l = smd_leds) smd_led_size(l).x], 1)
|
||||
@@ -54,6 +54,11 @@ module smds() {
|
||||
let(p = smd_pots[$i])
|
||||
smd_pot(p, "10K");
|
||||
|
||||
translate([6, 18])
|
||||
layout([for(c = smd_coaxs) smd_coax_base_size(c).x], 1)
|
||||
let(c = smd_coaxs[$i])
|
||||
smd_coax(c);
|
||||
|
||||
translate([0, 31])
|
||||
layout([for(s = smd_soics) smd_soic_size(s).x], 1)
|
||||
let(s = smd_soics[$i])
|
||||
@@ -63,6 +68,11 @@ module smds() {
|
||||
layout([for(i = smd_inductors) smd_inductor_leads(i).x], 1)
|
||||
let(i = smd_inductors[$i])
|
||||
smd_inductor(i, "4R7");
|
||||
|
||||
translate([20, 6])
|
||||
layout([for(q = smd_qfps) smd_qfp_body_size(q).x], 3)
|
||||
let(q = smd_qfps[$i])
|
||||
smd_qfp(q, ["ATSAM4S4BA"][$i]);
|
||||
}
|
||||
|
||||
if($preview)
|
||||
|
@@ -23,6 +23,7 @@ include <../vitamins/pcbs.scad>
|
||||
module axials() {
|
||||
pcb = PERF60x40;
|
||||
pcb(pcb);
|
||||
$solder = pcb_solder(pcb);
|
||||
|
||||
pcb_grid(pcb, 0, 2)
|
||||
rotate(90)
|
||||
@@ -36,14 +37,26 @@ module axials() {
|
||||
wire_link(0.8, 0, 5);
|
||||
|
||||
for(i = [0 : len(ax_resistors) - 1]) {
|
||||
pcb_grid(pcb, 2 * i + 2, 1 + [0, 0.5, 1.5][i])
|
||||
x = 2 * i + 3 + len(ax_diodes);
|
||||
pcb_grid(pcb, x, 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)
|
||||
pcb_grid(pcb, x, 6.5)
|
||||
rotate(-90)
|
||||
ax_res(ax_resistors[i], [2200, 39000, 8250][i], 1, inch(0.1));
|
||||
}
|
||||
|
||||
d_values = ["1N4148", "1N4007"];
|
||||
for(i = [0 : len(ax_diodes) - 1]) {
|
||||
pcb_grid(pcb, i + 2, 1 + [0, 0.5, 1.5][i])
|
||||
rotate(90)
|
||||
ax_diode(ax_diodes[i], d_values[i]);
|
||||
|
||||
pcb_grid(pcb, i + 2, 6.5)
|
||||
rotate(-90)
|
||||
ax_diode(ax_diodes[i], d_values[i], inch(0.1));
|
||||
}
|
||||
}
|
||||
|
||||
if($preview)
|
||||
|
@@ -24,12 +24,26 @@ use <../utils/layout.scad>
|
||||
module scs_bearing_blocks()
|
||||
layout([for(s = scs_bearing_blocks) scs_size(s).x], 10) {
|
||||
part_thickness = 5;
|
||||
scs_bearing_block_assembly(scs_bearing_blocks[$i], part_thickness);
|
||||
translate([0, 60])
|
||||
scs_bearing_block_assembly(scs_bearing_blocks[$i], part_thickness);
|
||||
|
||||
if($i > 0) // skip $i==0, since no SCS6LUU long variant to match SCS6UU
|
||||
translate([0, 60])
|
||||
translate([0, 120])
|
||||
scs_bearing_block_assembly(scs_bearing_blocks_long[$i - 1], part_thickness);
|
||||
}
|
||||
|
||||
if($preview)
|
||||
module sbr_bearing_blocks()
|
||||
layout([for(s = sbr_bearing_blocks) sbr_size(s).x], 10) {
|
||||
part_thickness = 5;
|
||||
sbr_bearing_block_assembly(sbr_bearing_blocks[$i], part_thickness);
|
||||
}
|
||||
|
||||
module bearing_blocks() {
|
||||
scs_bearing_blocks();
|
||||
|
||||
translate([190, 0])
|
||||
sbr_bearing_blocks();
|
||||
}
|
||||
|
||||
if($preview)
|
||||
bearing_blocks();
|
||||
|
@@ -26,8 +26,9 @@ include <../vitamins/cameras.scad>
|
||||
use <../vitamins/pcb.scad>
|
||||
|
||||
module camera_housings()
|
||||
layout([for(c = cameras) pcb_length(camera_pcb(c))], 15, false) let(c = cameras[$i])
|
||||
camera_fastened_assembly(c, 3);
|
||||
layout([for(c = cameras) pcb_length(camera_pcb(c))], 10, false) let(c = cameras[$i])
|
||||
if(pcb_screw(camera_pcb(c)))
|
||||
camera_fastened_assembly(c, 3);
|
||||
|
||||
if($preview)
|
||||
camera_housings();
|
||||
|
@@ -22,7 +22,7 @@ use <../utils/layout.scad>
|
||||
include <../vitamins/circlips.scad>
|
||||
|
||||
module circlips(all = false)
|
||||
layout([for(c = circlips) circlip_d3(c)], 10, false) let(c = circlips[$i]) {
|
||||
layout([for(c = circlips) circlip_d3(c)], 5, false) let(c = circlips[$i]) {
|
||||
gap = circlip_d3(c) + 2;
|
||||
|
||||
internal_circlip(c, 1);
|
||||
|
@@ -21,13 +21,18 @@ use <../utils/layout.scad>
|
||||
|
||||
include <../vitamins/linear_bearings.scad>
|
||||
|
||||
module linear_bearings()
|
||||
module linear_bearings() {
|
||||
layout([for(b = linear_bearings) 2 * bearing_radius(b)]) {
|
||||
linear_bearing(linear_bearings[$i]);
|
||||
|
||||
translate([0, 30])
|
||||
linear_bearing(linear_bearings[$i]);
|
||||
|
||||
translate([0, 60])
|
||||
linear_bearing(long_linear_bearings[$i]);
|
||||
}
|
||||
layout([for(b = open_linear_bearings) 2 * bearing_radius(b)])
|
||||
translate([105, 0])
|
||||
linear_bearing(open_linear_bearings[$i]);
|
||||
}
|
||||
|
||||
if($preview)
|
||||
linear_bearings();
|
||||
|
48
tests/pcb_utils.scad
Normal file
@@ -0,0 +1,48 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2023
|
||||
// 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/pcb_utils.scad>
|
||||
|
||||
module pcb_utils() {
|
||||
let($solder = [1, 0, 1.6])
|
||||
solder();
|
||||
|
||||
r = 2;
|
||||
h = 10;
|
||||
|
||||
color(grey(20))
|
||||
cylinder(r = r, h = h);
|
||||
|
||||
color("silver")
|
||||
vflip()
|
||||
cylinder(d = 0.6, h = 3, $fn = 16);
|
||||
|
||||
color("white")
|
||||
translate_z(h / 2)
|
||||
cylindrical_wrap(r = r)
|
||||
resize([0, h * .8], auto = true)
|
||||
rotate(90)
|
||||
text("Hello", halign = "center", valign = "center");
|
||||
}
|
||||
|
||||
if($preview)
|
||||
rotate(-45)
|
||||
pcb_utils();
|
@@ -45,9 +45,15 @@ module pin_headers() {
|
||||
translate([0, 50])
|
||||
box_header(pin_headers[$i], 8, 1);
|
||||
|
||||
translate([40, 40])
|
||||
box_header(pin_headers[$i], 8, 1, right_angle = true);
|
||||
|
||||
translate([0, 60])
|
||||
box_header(pin_headers[$i], 10, 2);
|
||||
|
||||
translate([40, 60])
|
||||
box_header(pin_headers[$i], 10, 2, right_angle = true);
|
||||
|
||||
translate([0, 70])
|
||||
pin_socket(pin_headers[$i], 8, 1);
|
||||
|
||||
|
Before Width: | Height: | Size: 276 KiB After Width: | Height: | Size: 278 KiB |
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 123 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 119 KiB |
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 103 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 190 KiB After Width: | Height: | Size: 199 KiB |
BIN
tests/png/pcb_utils.png
Normal file
After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 278 KiB After Width: | Height: | Size: 254 KiB |
Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 168 KiB |
Before Width: | Height: | Size: 214 KiB After Width: | Height: | Size: 231 KiB |
BIN
tests/png/sbr_rails.png
Normal file
After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 180 KiB After Width: | Height: | Size: 169 KiB |
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 171 KiB After Width: | Height: | Size: 170 KiB |
@@ -20,12 +20,36 @@ include <../core.scad>
|
||||
include <../vitamins/pcbs.scad>
|
||||
|
||||
module radials() {
|
||||
pcb = PERF60x40;
|
||||
pcb = PERF70x50;
|
||||
pcb(pcb);
|
||||
$solder = pcb_solder(pcb);
|
||||
|
||||
for(i = [0 : len(rd_xtals) - 1])
|
||||
pcb_grid(pcb, [0.5, 1, 1.5, 9, 1][i], [0, 2, 6.5, 6.5, 11][i])
|
||||
pcb_grid(pcb, [0.5, 1, 1.5, 9, 1][i], [4, 6, 10.5, 10.5, 16][i])
|
||||
rd_xtal(rd_xtals[i], value = rd_xtals[i][0], z = 1.5, pitch = [inch(0.1), inch(0.2), [inch(0.3), inch(0.3)], [inch(0.6), inch(0.3)], inch(0.2)][i]);
|
||||
|
||||
pcb_grid(pcb, 8.5, 15.5)
|
||||
rd_module(rd_modules[0], "012-HSL3F");
|
||||
|
||||
pcb_grid(pcb, 20 -0.4, 9)
|
||||
rotate(-90)
|
||||
rd_module(rd_modules[1], "12V 250ma");
|
||||
|
||||
for(i = [0 : len(rd_discs) - 1])
|
||||
pcb_grid(pcb, 1 + 2.5 * i, 1) {
|
||||
disc = rd_discs[i];
|
||||
pitch = rd_disc_pitch(disc);
|
||||
dx = round(pitch.x / inch(0.1)) * inch(0.1);
|
||||
dy = round(pitch.y / inch(0.1)) * inch(0.1);
|
||||
|
||||
rotate(90 - atan2(dy, dx))
|
||||
rd_disc(disc, pitch = norm([dy, dx]), z = 0.5, value = ["10nF", "470V",][i]);
|
||||
}
|
||||
|
||||
for(i = [0 : len(rd_transistors) - 1])
|
||||
pcb_grid(pcb, 5 + 3 * i, 5)
|
||||
rotate(90)
|
||||
rd_transistor(rd_transistors[i], ["ZTX853", "BC337"][i], lead_positions = inch(0.1) * [[-1, 0], [0, -sign(i)], [1, 0]]);
|
||||
}
|
||||
|
||||
if($preview)
|
||||
|
@@ -24,14 +24,11 @@ use <../vitamins/veroboard.scad>
|
||||
z_cable_ways = 20;
|
||||
|
||||
z_vb = ["z_vb", "z_bed_terminal", 5, z_cable_ways / 2 + 12, inch(0.1), false, M3_dome_screw,
|
||||
[[2,2],[2,-3]], [], [5, 7, 9],
|
||||
[[2,2],[2,-3]], [], [4, 5, 7, 9],
|
||||
[
|
||||
[3, z_cable_ways / 4 + 5.5, 0, "term254", z_cable_ways / 2, [1, 3]],
|
||||
[0.5, z_cable_ways / 4 + 5.5, 90, "transition", z_cable_ways / 2, [1, 3]],
|
||||
],
|
||||
[
|
||||
[[0,1,3], 6], [[0,1,3], 8], [[0,1,3],[10 : 6 + z_cable_ways / 2 - 1]],
|
||||
]
|
||||
];
|
||||
|
||||
module veroboard_test() translate([vero_length(z_vb) / 2, vero_width(z_vb) / 2]) {
|
||||
|
@@ -104,7 +104,7 @@ function reverse(v) = let(n = len(v) - 1) n < 0 ? [] : [for(i = [0 : n]) v[n - i
|
||||
function angle_between(v1, v2) = acos(v1 * v2 / (norm(v1) * norm(v2))); //! Return the angle between two vectors
|
||||
|
||||
// http://eecs.qmul.ac.uk/~gslabaugh/publications/euler.pdf
|
||||
function euler(R) = let(ay = asin(-R[2][0]), cy = cos(ay)) //! Convert a rotation matrix to a Euler rotation vector.
|
||||
function euler(R) = let(ay = asin(-R[2][0]), cy = cos(ay)) //! Convert a rotation matrix to an Euler rotation vector.
|
||||
cy ? [ atan2(R[2][1] / cy, R[2][2] / cy), ay, atan2(R[1][0] / cy, R[0][0] / cy) ]
|
||||
: R[2][0] < 0 ? [atan2( R[0][1], R[0][2]), 90, 0]
|
||||
: [atan2(-R[0][1], -R[0][2]), -90, 0];
|
||||
|
58
utils/pcb_utils.scad
Normal file
@@ -0,0 +1,58 @@
|
||||
//
|
||||
// NopSCADlib Copyright Chris Palmer 2023
|
||||
// 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/>.
|
||||
//
|
||||
|
||||
//
|
||||
//! Utilities for making PCBs and components
|
||||
//
|
||||
include <../utils/core/core.scad>
|
||||
|
||||
module solder_meniscus(ir = 0.3, r) { //! Draw a solder meniscus
|
||||
h = 0.7;
|
||||
|
||||
color("silver") rotate_extrude()
|
||||
difference() {
|
||||
square([r, h]);
|
||||
|
||||
translate([r + eps, h + eps])
|
||||
ellipse(r - ir + eps, h, $fn = 64);
|
||||
}
|
||||
}
|
||||
|
||||
module solder(ir = 0.3) { //! Maybe add solder meniscus if $solder is set
|
||||
if(!is_undef($solder))
|
||||
vflip()
|
||||
translate_z($solder.z)
|
||||
solder_meniscus(ir = ir, r = $solder.x);
|
||||
}
|
||||
|
||||
module cylindrical_wrap(r, h = eps) { //! Wrap a 2D child extruded to height `h` around a cylinder with radius `r`.
|
||||
sides = r2sides(r);
|
||||
dx = 2 * r * tan(180 / sides);
|
||||
for(i = [0 : sides - 1])
|
||||
rotate((i - 0.5) * 360 / sides)
|
||||
translate([0, r])
|
||||
rotate([-90, 0, 0])
|
||||
linear_extrude(h, center = true)
|
||||
intersection() {
|
||||
translate([(sides / 2 - i) * -dx, 0])
|
||||
children();
|
||||
|
||||
square([dx, inf], center = true);
|
||||
}
|
||||
}
|
@@ -24,6 +24,7 @@
|
||||
//! Presence of a decimal point is determined by the number of pins. Its position is determined by a heuristic.
|
||||
//
|
||||
include <../utils/core/core.scad>
|
||||
use <../utils/pcb_utils.scad>
|
||||
|
||||
|
||||
function 7_segment_size(type) = type[1]; //! Size of the body
|
||||
@@ -98,11 +99,13 @@ module 7_segment_digit(type, colour = grey(95), pin_length = 6.4) { //! Draw the
|
||||
}
|
||||
|
||||
color(silver)
|
||||
translate_z(-pin_length)
|
||||
linear_extrude(pin_length)
|
||||
for(x = [0 : 1 : pins.x - 1], y = [0 : 1 : pins.y - 1])
|
||||
translate([(x - (pins.x - 1) / 2) * pin_pitch.x, (y - (pins.y - 1) / 2) * pin_pitch.y])
|
||||
circle(d = pin_pitch[2], $fn = 16);
|
||||
for(x = [0 : 1 : pins.x - 1], y = [0 : 1 : pins.y - 1])
|
||||
translate([(x - (pins.x - 1) / 2) * pin_pitch.x, (y - (pins.y - 1) / 2) * pin_pitch.y]) {
|
||||
vflip()
|
||||
cylinder(d = pin_pitch[2], h = pin_length, $fn = 16);
|
||||
|
||||
solder();
|
||||
}
|
||||
}
|
||||
|
||||
module 7_segment_digits(type, n, colour = grey(70), pin_length = 6.4, cutout = false) { //! Draw n digits side by side
|
||||
|
@@ -21,7 +21,8 @@
|
||||
//! Axial components for PCBs.
|
||||
//
|
||||
include <../utils/core/core.scad>
|
||||
include <../utils/round.scad>
|
||||
use <../utils/round.scad>
|
||||
use <../utils/pcb_utils.scad>
|
||||
|
||||
module wire_link(d, l, h = 1, tail = 3, sleeve = false) { //! Draw a wire jumper link. `sleeve` can be a list with the diameter and colour. If `l` is zero then a vertical wire is drawn.
|
||||
vitamin(str("wire_link(", d, ", ", l, arg(h, 1, "h"), arg(tail, 3, "tail"), arg(sleeve, false, "sleeve"),
|
||||
@@ -40,15 +41,20 @@ module wire_link(d, l, h = 1, tail = 3, sleeve = false) { //! Draw a wire jumper
|
||||
rotate_extrude(angle = 90)
|
||||
translate([r, 0])
|
||||
circle(d = d);
|
||||
|
||||
translate([side * l /2, 0])
|
||||
solder(ir = d / 2);
|
||||
}
|
||||
|
||||
translate_z(h)
|
||||
rotate([0, 90, 0])
|
||||
cylinder(d = d, h = l - 2 * r, center = true);
|
||||
}
|
||||
else
|
||||
translate_z(-tail)
|
||||
cylinder(d = d, h = tail + h);
|
||||
else {
|
||||
translate_z(-tail)
|
||||
cylinder(d = d, h = tail + h);
|
||||
solder(ir = d / 2);
|
||||
}
|
||||
|
||||
if(sleeve)
|
||||
color(sleeve[1])
|
||||
@@ -151,3 +157,59 @@ module ax_res(type, value, tol = 5, pitch = 0) { //! Through hole axial resistor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function ax_diode_size(type) = type[1]; //! Body length, diameter and corner radius
|
||||
function ax_diode_wire(type) = type[2]; //! Wire diameter
|
||||
function ax_diode_colour(type) = type[3]; //! Body colour and stripe colour
|
||||
|
||||
module ax_diode(type, value, pitch = 0) { //! Through hole axial diode. If `pitch` is zero the minimum is used. If below the minimum the resistor is placed vertical.
|
||||
vitamin(str("ax_diode(", type[0], ", \"", value, "\"): Diode ", value));
|
||||
|
||||
wire_d = ax_diode_wire(type);
|
||||
size = ax_diode_size(type);
|
||||
colours = ax_diode_colour(type);
|
||||
body_r = size.y / 2;
|
||||
length = size.x;
|
||||
r = size.z;
|
||||
$fn = 32;
|
||||
|
||||
|
||||
orientate_axial(length, body_r, pitch, wire_d) {
|
||||
color("darkred") {
|
||||
gap = length / 20;
|
||||
l = (length - gap) / 2 - r - 2 * eps;
|
||||
for(end = [-1, 1])
|
||||
translate_z(end * (l + gap) / 2)
|
||||
cylinder(r = body_r * 0.8, h = l, center = true);
|
||||
|
||||
cylinder(r = wire_d / 2 + eps, h = gap + eps, center = true);
|
||||
}
|
||||
|
||||
color(colours[0])
|
||||
rotate_extrude()
|
||||
hull() {
|
||||
translate([0, -length / 2])
|
||||
square([body_r - r, length]);
|
||||
|
||||
if(r) {
|
||||
translate([body_r - r, -length / 2 + r])
|
||||
circle(r);
|
||||
|
||||
translate([body_r - r, length / 2 - r])
|
||||
circle(r);
|
||||
}
|
||||
}
|
||||
|
||||
color(colours[1]) {
|
||||
translate_z(-length / 2 + r + eps)
|
||||
cylinder(r = body_r + eps, h = length / 5);
|
||||
|
||||
tlength = 2 * PI * body_r * 0.8;
|
||||
|
||||
cylindrical_wrap(body_r)
|
||||
resize([tlength, 0], auto = true)
|
||||
text(value, halign = "center", valign = "center");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -27,4 +27,9 @@ res1_2 = ["res1_2", 0.5, 10, 3.25, 3.7, 1.8, 0.70, "#FAE3AC"];
|
||||
|
||||
ax_resistors = [res1_8, res1_4, res1_2];
|
||||
|
||||
DO_35 = ["DO_35", [3.4, 1.75, 0.3], 0.55, [[1,1,1, 0.5], grey(10)]];
|
||||
DO_41 = ["DO_41", [5.21, 2.72, 0], 0.87, [grey(20), grey(90)]];
|
||||
|
||||
ax_diodes = [DO_35, DO_41];
|
||||
|
||||
use <axial.scad>
|
||||
|
@@ -41,6 +41,17 @@ function scs_circlip(type) = type[15]; //! Circlip used
|
||||
function scs_spacer(type) = type[16]; //! Spacer used in long bearings
|
||||
|
||||
|
||||
function sbr_size(type) = [type[4],type[6],type[5]]; //! Size of SBR bracket bounding block
|
||||
function sbr_hole_offset(type) = type[2]; //! Offset of bearing hole from base of *rail*
|
||||
function sbr_side_height(type) = type[3]; //! Height of side above *rail*
|
||||
function sbr_screw(type) = type[10]; //! Screw type
|
||||
function sbr_screw_separation_x(type) = type[7]; //! Screw separation in X direction
|
||||
function sbr_screw_separation_z(type) = type[8]; //! Screw separation in Z direction
|
||||
function sbr_bearing(type) = type[12]; //! Linear bearing used
|
||||
function sbr_circlip(type) = type[13]; //! Circlip used
|
||||
function sbr_spacer(type) = type[14]; //! Spacer used in long bearings
|
||||
|
||||
|
||||
sks_bearing_block_colour = grey(90);
|
||||
|
||||
module scs_bearing_block(type) { //! Draw the specified SCS bearing block
|
||||
@@ -63,11 +74,6 @@ module scs_bearing_block(type) { //! Draw the specified SCS bearing block
|
||||
bearing = scs_bearing(type);
|
||||
clip = scs_circlip(type);
|
||||
|
||||
module right_trapezoid(base, top, height, h = 0, center = true) {//! A right angled trapezoid with the 90° corner at the origin. 3D when `h` is nonzero, otherwise 2D
|
||||
extrude_if(h, center = center)
|
||||
polygon(points = [ [0,0], [base, 0], [top, height], [0, height] ]);
|
||||
}
|
||||
|
||||
boltHoleRadius = screw_clearance_radius(S1);
|
||||
footHeight = min(0.75, (G - bearing_dia(bearing) - 1.5) / 2); // estimate, not specified on drawings
|
||||
|
||||
@@ -169,3 +175,142 @@ module scs_bearing_block_assembly(type, part_thickness, screw_type, nut_type) {
|
||||
washer(washer_type);
|
||||
}
|
||||
}
|
||||
|
||||
/* SBR bearing blocks */
|
||||
|
||||
module sbr_bearing_block(type) { //! Draw the specified SBR bearing block
|
||||
vitamin(str("sbr_bearing_block(", type[0], "): ", type[0], " bearing block"));
|
||||
|
||||
T = type[1];
|
||||
h = sbr_hole_offset(type);
|
||||
H = sbr_side_height(type);
|
||||
|
||||
W = sbr_size(type)[0];
|
||||
G = sbr_size(type)[1];
|
||||
M = sbr_size(type)[2];
|
||||
J = sbr_screw_separation_x(type);
|
||||
K = sbr_screw_separation_z(type);
|
||||
S1 = sbr_screw(type);
|
||||
I = type[11]; // screw length
|
||||
|
||||
S2 = type[15];
|
||||
S2L = type[16];
|
||||
|
||||
bearing = sbr_bearing(type);
|
||||
clip = sbr_circlip(type);
|
||||
chamfer = 1.5;
|
||||
A = type[9]; // size of chamfered overhang - vertical
|
||||
Ah = A + chamfer * 2; // size of chamfered overhand - horizontal - not given in drawings
|
||||
|
||||
width = W - (2 * chamfer);
|
||||
height = G - chamfer;
|
||||
|
||||
boltHoleRadius = screw_radius(S1);
|
||||
setScrewRadius = screw_radius(S2);
|
||||
|
||||
color(sks_bearing_block_colour) {
|
||||
render() difference() {
|
||||
linear_extrude(M, center = true, convexity=2) {
|
||||
cutoutheight = 15; // chosen to fit SBR16, may not work with others
|
||||
bearingRadius = bearing_dia(bearing) / 2;
|
||||
bearingTheta = open_bearing_theta(bearing);
|
||||
bearingOpening = open_bearing_width(bearing);
|
||||
bearingOpeningBig = bearingOpening + (tan(bearingTheta/2) * cutoutheight);
|
||||
// center section with bearing hole
|
||||
difference() {
|
||||
translate([-width/2, -(H-h - chamfer)])
|
||||
square([width, height]);
|
||||
circle(r = bearingRadius);
|
||||
for(m = [0, 1])
|
||||
mirror([m, 0, 0])
|
||||
translate([0, h - (cutoutheight/2) - H + G + 0.1])
|
||||
right_trapezoid(bearingOpening/2, bearingOpeningBig/2, cutoutheight/2);
|
||||
}
|
||||
// add the sides
|
||||
for(m = [0, 1])
|
||||
mirror([m, 0, 0]) {
|
||||
translate([-(W/2) + chamfer, -((H-h))]) {
|
||||
difference() {
|
||||
union() {
|
||||
right_trapezoid(Ah - chamfer,Ah,chamfer);
|
||||
rotate([0,0,90])
|
||||
right_trapezoid(A + chamfer,A,chamfer);
|
||||
}
|
||||
translate([-(chamfer +0.1), -0.1,0])
|
||||
right_trapezoid(chamfer/2 + 0.2, 0, chamfer/2+ 0.2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// bolt holes
|
||||
for(x = [-J / 2, J / 2])
|
||||
translate([x, h - H + I/2 - 0.1, 0])
|
||||
rotate([90, 0, 0])
|
||||
for (y = [-K / 2, K / 2])
|
||||
translate([0, y])
|
||||
cylinder(r = boltHoleRadius, h=I + 0.1, center=true);
|
||||
|
||||
// set screw holes
|
||||
translate([-width/2 + S2L/2 - 0.1,0,0])
|
||||
rotate([0,90,0])
|
||||
cylinder(r = setScrewRadius, h=S2L, center=true);
|
||||
|
||||
translate([0,-(H-h) + chamfer + S2L/2 -0.1,0])
|
||||
rotate([0,90,90])
|
||||
cylinder(r = setScrewRadius, h=S2L, center=true);
|
||||
|
||||
}
|
||||
}
|
||||
not_on_bom() no_explode() {
|
||||
spacer = sbr_spacer(type);
|
||||
for(end = spacer ? [-1, 1] : 0)
|
||||
translate_z(end * (bearing_length(bearing) + spacer) / 2)
|
||||
rotate([0,0,-90])
|
||||
linear_bearing(bearing);
|
||||
|
||||
for(end = [-1, 1])
|
||||
translate_z(end * ((spacer ? 2 * bearing_length(bearing) + spacer : bearing_length(bearing)) + circlip_thickness(clip)) / 2)
|
||||
rotate(180)
|
||||
internal_circlip(clip);
|
||||
|
||||
translate([-width/2 - 0.1,0,0])
|
||||
rotate([0,90,180])
|
||||
screw(S2, S2L);
|
||||
translate([0,-(H-h) + chamfer - 0.1,0])
|
||||
rotate([0,90,270])
|
||||
screw(S2, S2L);
|
||||
}
|
||||
}
|
||||
|
||||
module sbr_bearing_block_hole_positions(type) { //! Place children at hole positions
|
||||
y = sbr_hole_offset(type) - sbr_side_height(type);
|
||||
screw_separation_x = sbr_screw_separation_x(type);
|
||||
screw_separation_z = sbr_screw_separation_z(type);
|
||||
|
||||
for(x = [-screw_separation_x, screw_separation_x], z = [-screw_separation_z, screw_separation_z])
|
||||
translate([x / 2, y, z / 2])
|
||||
rotate([-90, 0, 0])
|
||||
children();
|
||||
}
|
||||
|
||||
module sbr_bearing_block_assembly(type, part_thickness, screw_type) { //! Assembly with screws in place
|
||||
|
||||
I = type[11]; // screw length
|
||||
sbr_bearing_block(type);
|
||||
screw_type = is_undef(screw_type) ? sbr_screw(type) : screw_type;
|
||||
G = sbr_size(type)[1];
|
||||
|
||||
screw_length = screw_shorter_than(I + part_thickness);
|
||||
|
||||
translate([0,-part_thickness,0])
|
||||
sbr_bearing_block_hole_positions(type)
|
||||
rotate([0,180,0])
|
||||
screw(screw_type, screw_length);
|
||||
}
|
||||
|
||||
/* Generic bearing block functions */
|
||||
|
||||
module right_trapezoid(base, top, height, h = 0, center = true) {//! A right angled trapezoid with the 90° corner at the origin. 3D when `h` is nonzero, otherwise 2D
|
||||
extrude_if(h, center = center)
|
||||
polygon(points = [ [0,0], [base, 0], [top, height], [0, height] ]);
|
||||
}
|
||||
|
@@ -36,8 +36,12 @@ SCS10LUU = ["SCS10LUU", 8, 13, 20, 40, 68, 26, 21, 28, 45, 6, M5_cap_sc
|
||||
SCS12LUU = ["SCS12LUU", 8, 15, 21, 42, 70, 28, 24, 30.5, 50, 5.75, M5_cap_screw, 4.3, 12, LM12UU, circlip_21i, 4];
|
||||
SCS16LUU = ["SCS16LUU", 9, 19, 25, 50, 85, 38.5, 32.5, 36, 60, 7, M5_cap_screw, 4.3, 12, LM16UU, circlip_28i, 4];
|
||||
|
||||
// T h H W M G J K A S1 I LB S2 S2L
|
||||
SBR16UU = ["SBR16UU", 16, 25, 45, 45, 45, 33, 32, 30, 9, M5_cap_screw, 12, LM16UUOP, circlip_28iw, 0, M5_grub_screw, 5];
|
||||
|
||||
scs_bearing_blocks = [SCS6UU, SCS8UU, SCS10UU, SCS12UU, SCS16UU];
|
||||
scs_bearing_blocks_long = [SCS8LUU, SCS10LUU, SCS12LUU, SCS16LUU];
|
||||
|
||||
sbr_bearing_blocks = [SBR16UU];
|
||||
|
||||
use <bearing_block.scad>
|
||||
|
@@ -91,7 +91,7 @@ module camera(type, show_lens = true, fov_distance = 0, fov = undef) {
|
||||
color("orange")
|
||||
hull() {
|
||||
translate_z(flex.y /2)
|
||||
translate(camera_lens_offset(type) + [0, camera_lens(type)[0][0].y / 2])
|
||||
translate(camera_lens_offset(type) + [0, sign(pos.y) * camera_lens(type)[0][0].y / 2, 0])
|
||||
cube([flex.x, eps, flex.y], center = true);
|
||||
|
||||
translate_z(conn.z - flex.y)
|
||||
|
@@ -70,6 +70,92 @@ rpi_camera = ["rpi_camera", "Raspberry Pi focusable camera", rpi_camera_pcb, [0,
|
||||
[0, 18 - 1.5 - 2.5], [8, 5, 1.6]
|
||||
];
|
||||
|
||||
cameras = [rpi_camera_v1, rpi_camera_v2, rpi_camera];
|
||||
esp32_cam_x = 1; // Seems to vary as mine is offset but pictures on the web show it more centered.
|
||||
|
||||
ESP32_module = ["", "", 18, 26, 0.8, 0, 0.7, [1.1, 1.1, 0, gold], grey(18), false, [
|
||||
for(x = [0,1], y = [0:13]) [x * 18, y * 1.27 + 1.4], // Hole positions on the edge
|
||||
for(x = [0:9]) [18 / 2 + (x - 4.5) * 1.27, 0],
|
||||
|
||||
],
|
||||
[
|
||||
[18 / 2, 9.7 - 3.4 / 2 , 0, "block", 15.75, 17.6 - 3.4, 2.2, silver, false, 0.3, 0.3], // can
|
||||
[18 / 2 - 2.65, 9.7 , 0, "block", 10.4, 17.6, 2.2, silver, false, 0.3, 0.3], // can
|
||||
[12.7, -6.5, 45, "smd_res", RES0502],
|
||||
[15.15, -8.3, -90, "smd_coax", U_FL_R_SMT_1],
|
||||
// Antenna
|
||||
let(x = [0.9, 3.2, 5.7, 8.1, 10.6, 12.8, 15, 15.2])
|
||||
each [
|
||||
for(i = [0, 5,6,7]) [x[i], -2.8, 0, "block", 0.6, 4.8, 0.2, gold], // long verticals
|
||||
for(i = [1: 4]) [x[i], -2.05, 0, "block", 0.6, 3.3, 0.2, gold], // short verticals
|
||||
for(i = [0, 2, 4,5])[(x[i] + x[i + 1]) / 2, -0.7, 0, "block", x[i + 1] - x[i], 0.6, 0.2, gold], // top horizontals
|
||||
for(i = [1, 3]) [(x[i] + x[i + 1]) / 2, -3.4, 0, "block", x[i + 1] - x[i], 0.6, 0.2, gold], // lower horizontals
|
||||
]
|
||||
],
|
||||
];
|
||||
|
||||
ESP32_CAM_pcb = ["", "", 27, 40, 1.7, 2.5, 0, 0, grey(15), false, [],
|
||||
[
|
||||
[27 / 2, 26 / 2, 0, "-pcb", 0, ESP32_module],
|
||||
for(side = [-1, 1]) [side * inch(0.45) + 27 / 2, -(4.2 + inch(.35)), 0, "-2p54header", 1, 8],
|
||||
[ 27 / 2, -8, 90, "uSD", [14.85, 14.65, 1.8]],
|
||||
[ 27 / 2 + 1, 15, 0, "flat_flex", false],
|
||||
[ 27 / 2 + inch(0.45), 10.5, 0, "block", 3, 3, 0.8, grey(90)],
|
||||
[ 27 / 2 + inch(0.45), 10.5, 0, "block", 2.9, 2.9, 0.81, "yellow", true, 2.9 / 2 - eps],
|
||||
[ 27 / 2, 3, 0, "text", 15, 2, "ESP32-CAM", "Liberation Sans:style=Bold"],
|
||||
[0.5, -(4.7 + inch(.35)), 90, "text", inch(0.75), 0.9, "IO4 IO2 IO14 IO15 IO13 IO12 GND 5V", "Liberation Sans:style=Bold"],
|
||||
[26.5, -(4.6 + inch(.35)), -90, "text", inch(0.77), 0.9, "3V3 1O16 IO0 GND VCC U0R U0T GND", "Liberation Sans:style=Bold"],
|
||||
[5.5, -3.3, 90, "-chip", 4, 3, 1.6, silver], // Mock button surround
|
||||
[5.5, -3.3, 90, "-chip", 1.8,0, 2.0, grey(20)], // Mock button
|
||||
[10, -10.8, 0, "-smd_led", LED0603, "red"],
|
||||
[-6.5, -5, 0, "-smd_soic", SOIC8],
|
||||
[12.2, -4.5, 180, "-smd_sot", SOT223, "AMS1117"],
|
||||
[25.3, 14, 0, "smd_sot", SOT23],
|
||||
[3.0, 14, 0, "smd_sot", SOT23],
|
||||
[8, 20, 90, "smd_sot", SOT23],
|
||||
[16, 20, 90, "smd_sot", SOT23],
|
||||
[3.0, 11.5,0, "smd_res", RES0502],
|
||||
[2.9, 10.3,0, "smd_res", RES0502],
|
||||
[5.4, 20, 90, "smd_cap", CAP0603, 0.5],
|
||||
[11.5, 20, 90, "smd_cap", CAP0603, 0.5],
|
||||
[18.7, 20, 90, "smd_cap", CAP0603, 0.5],
|
||||
[19.9, 20, 90, "smd_cap", CAP0402, 0.3],
|
||||
for(i = [0, 1, 2, 4]) [7.6 + i * 1.09, 8.8, 90, "smd_res", RES0502],
|
||||
for(i = [0 : 3]) [-4.8, 20 + i * 1.09, 0, "smd_res", RES0502],
|
||||
for(i = [3, 5, 8]) [7.6 + i * 1.09, 8.8, 90, "smd_cap", CAP0502, 0.5],
|
||||
[-8.1, 23, 90, "smd_res", RES0502],
|
||||
[-9.2, 23, 90, "smd_res", RES0502],
|
||||
[-6.3, 23.3, 180, "text", 0.8, 0.7, "5V", "Liberation Sans:style=Bold"],
|
||||
[-6.5, 22.2, 180, "text", 1.2, 0.7, "3V3", "Liberation Sans:style=Bold"],
|
||||
[8, -3.3, 90, "-smd_cap", CAP0603, 0.5],
|
||||
[2, -2, 0, "-text", 2.3, 1, "RST", "Liberation Sans:style=Bold"],
|
||||
[10,-9.4, 0, "-text", 3.1, 1, "LED1", "Liberation Sans:style=Bold"],
|
||||
[12.4, -10.8, 0, "-smd_res", RES0502],
|
||||
[13.7, -9.4, 0, "-smd_cap", CAP0603, 0.5],
|
||||
[17.2,-9.4, 0, "-smd_cap", CAP0502, 0.4],
|
||||
[22.1, -10.8, 0, "-smd_res", RES0502],
|
||||
[16.9, -4.8, 90, "-smd_res", RES0502],
|
||||
[2.2, 9.0, 90, "-smd_cap", CAP0502, 0.4],
|
||||
[2.2, 11.6, 90, "-smd_cap", CAP0502, 0.4],
|
||||
[2.2, 14.2, 90, "-smd_res", RES0502],
|
||||
[5.9, -9.4, 90, "-smd_tant", TANT_B, "107A"],
|
||||
|
||||
],
|
||||
[],
|
||||
[(27 - inch(0.9)) / 2, 40 - 4.2 - inch(0.7), 2, 8, silver, inch(0.9), inch(0.1)], // 8x2 grid of holes
|
||||
];
|
||||
|
||||
ESP32_CAM = ["ESP32_CAM", "ESP32-CAM Camera module", ESP32_CAM_pcb, [esp32_cam_x, pcb_width(ESP32_CAM_pcb) / 2 - 12, 1.8],
|
||||
[
|
||||
[[8, 8, 2.4], 0],
|
||||
[[0, 0, 4.2], 4],
|
||||
[[0, 0, 6.3], 3.5, [1, 1, 0.5]],
|
||||
],
|
||||
[1, -4], [15, 2.2, 1],
|
||||
[54, 41] // FOV
|
||||
];
|
||||
|
||||
|
||||
|
||||
cameras = [rpi_camera_v1, rpi_camera_v2, rpi_camera, ESP32_CAM];
|
||||
|
||||
use <camera.scad>
|
||||
|
@@ -32,14 +32,14 @@ function circlip_thickness(type) = type[4]; //! Thickness
|
||||
function circlip_a(type) = type[5]; //! Size of the lugs
|
||||
function circlip_b(type) = type[6]; //! Widest part of the taper
|
||||
function circlip_d5(type) = type[7]; //! Plier hole diameter
|
||||
function circlip_closed_angle(type) = is_undef(type[8]) ? 25 : type[8]; //! Closed angle
|
||||
|
||||
circlip_colour = grey(20);
|
||||
closed_angle = 25;
|
||||
|
||||
module internal_circlip(type, open = 0) { //! Draw specified internal circlip, open = 0, for nominal size installed, 1 for relaxed uninstalled, -1 for squeezed to install
|
||||
d1 = circlip_d1(type);
|
||||
|
||||
vitamin(str("circlip(", type[0], "): Circlip internal ", d1, "mm"));
|
||||
wide = is_undef(type[8]) ? "" : " (wide opening)";
|
||||
vitamin(str("circlip(", type[0], "): Circlip internal ", d1, "mm",wide));
|
||||
d3 = circlip_d3(type);
|
||||
d2 = circlip_d2(type);
|
||||
a = circlip_a(type);
|
||||
@@ -50,7 +50,7 @@ module internal_circlip(type, open = 0) { //! Draw specified internal circlip, o
|
||||
or = od / 2;
|
||||
c = (d3 - d1);
|
||||
|
||||
angle = (od - d1) / d1 * 360 + closed_angle;
|
||||
angle = (od - d1) / d1 * 360 + circlip_closed_angle(type);
|
||||
tab_angle = 360 * a / PI / od;
|
||||
p = [0, -or + b / 2, 1] * rot3_z(angle / 2 + tab_angle);
|
||||
pitch = (or - a / 2);
|
||||
|
@@ -22,7 +22,8 @@ circlip_15i = ["circlip_15i", 15, 15.7, 16.2, 1.0, 3.7, 2.0, 1.7];
|
||||
circlip_19i = ["circlip_19i", 19, 20.0, 20.5, 1.0, 4.1, 2.2, 2.0];
|
||||
circlip_21i = ["circlip_21i", 21, 22.0, 22.5, 1.0, 4.2, 2.4, 2.0];
|
||||
circlip_28i = ["circlip_28i", 28, 29.4, 30.1, 1.2, 4.8, 2.9, 2.0];
|
||||
circlip_28iw = ["circlip_28iw", 28, 29.4, 30.1, 1.2, 4.8, 2.9, 2.0, 100]; // with wide opening
|
||||
|
||||
circlips = [circlip_12i, circlip_15i, circlip_19i, circlip_21i, circlip_28i];
|
||||
circlips = [circlip_12i, circlip_15i, circlip_19i, circlip_21i, circlip_28i, circlip_28iw];
|
||||
|
||||
use <circlip.scad>
|
||||
|