Added a second example project.
BIN
examples/EnviroPlus/assemblies/RPI_assembled.png
Normal file
After Width: | Height: | Size: 203 KiB |
BIN
examples/EnviroPlus/assemblies/RPI_assembled_tn.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
examples/EnviroPlus/assemblies/RPI_assembly.png
Normal file
After Width: | Height: | Size: 265 KiB |
BIN
examples/EnviroPlus/assemblies/RPI_assembly_tn.png
Normal file
After Width: | Height: | Size: 52 KiB |
BIN
examples/EnviroPlus/assemblies/RPI_case_assembled.png
Normal file
After Width: | Height: | Size: 326 KiB |
BIN
examples/EnviroPlus/assemblies/RPI_case_assembled_tn.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
examples/EnviroPlus/assemblies/RPI_case_assembly.png
Normal file
After Width: | Height: | Size: 336 KiB |
BIN
examples/EnviroPlus/assemblies/RPI_case_assembly_tn.png
Normal file
After Width: | Height: | Size: 58 KiB |
BIN
examples/EnviroPlus/assemblies/back_assembled.png
Normal file
After Width: | Height: | Size: 126 KiB |
BIN
examples/EnviroPlus/assemblies/back_assembled_tn.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
examples/EnviroPlus/assemblies/back_assembly.png
Normal file
After Width: | Height: | Size: 132 KiB |
BIN
examples/EnviroPlus/assemblies/back_assembly_tn.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
examples/EnviroPlus/assemblies/case_assembled.png
Normal file
After Width: | Height: | Size: 202 KiB |
BIN
examples/EnviroPlus/assemblies/case_assembled_tn.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
examples/EnviroPlus/assemblies/case_assembly.png
Normal file
After Width: | Height: | Size: 249 KiB |
BIN
examples/EnviroPlus/assemblies/case_assembly_tn.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
examples/EnviroPlus/assemblies/enviro_assembled.png
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
examples/EnviroPlus/assemblies/enviro_assembled_tn.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
examples/EnviroPlus/assemblies/enviro_assembly.png
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
examples/EnviroPlus/assemblies/enviro_assembly_tn.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
examples/EnviroPlus/assemblies/enviro_case_assembled.png
Normal file
After Width: | Height: | Size: 187 KiB |
BIN
examples/EnviroPlus/assemblies/enviro_case_assembled_tn.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
examples/EnviroPlus/assemblies/enviro_case_assembly.png
Normal file
After Width: | Height: | Size: 236 KiB |
BIN
examples/EnviroPlus/assemblies/enviro_case_assembly_tn.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
examples/EnviroPlus/assemblies/fan_controller_assembled.png
Normal file
After Width: | Height: | Size: 229 KiB |
BIN
examples/EnviroPlus/assemblies/fan_controller_assembled_tn.png
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
examples/EnviroPlus/assemblies/fan_controller_assembly.png
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
examples/EnviroPlus/assemblies/fan_controller_assembly_tn.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
examples/EnviroPlus/assemblies/main_assembled.png
Normal file
After Width: | Height: | Size: 120 KiB |
BIN
examples/EnviroPlus/assemblies/main_assembled_tn.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
examples/EnviroPlus/assemblies/main_assembly.png
Normal file
After Width: | Height: | Size: 219 KiB |
BIN
examples/EnviroPlus/assemblies/main_assembly_tn.png
Normal file
After Width: | Height: | Size: 38 KiB |
5
examples/EnviroPlus/bom/RPI_assembly.txt
Normal file
@ -0,0 +1,5 @@
|
||||
RPI_assembly:
|
||||
Vitamins:
|
||||
1 Micro SD card
|
||||
1 Raspberry Pi Zero
|
||||
1 Pin header 20 x 2 right_angle
|
7
examples/EnviroPlus/bom/RPI_case_assembly.txt
Normal file
@ -0,0 +1,7 @@
|
||||
RPI_case_assembly:
|
||||
Vitamins:
|
||||
2 Screw M2.5 pan x 6.4mm
|
||||
|
||||
Assemblies:
|
||||
1 RPI_assembly
|
||||
1 enviro_case_assembly
|
8
examples/EnviroPlus/bom/back_assembly.txt
Normal file
@ -0,0 +1,8 @@
|
||||
back_assembly:
|
||||
Vitamins:
|
||||
1 Fan 17mm x 8mm
|
||||
1 PMS5003 particle detector
|
||||
|
||||
Printed:
|
||||
1 enviro_plus_case_base.stl
|
||||
1 fan_duct.stl
|
21
examples/EnviroPlus/bom/bom.csv
Normal file
@ -0,0 +1,21 @@
|
||||
'Micro SD card', 1
|
||||
'Fan 17mm x 8mm', 1
|
||||
'Heatfit insert M2', 4
|
||||
'Nut M2.5 x 2.2mm nyloc', 4
|
||||
'Enviro+', 1
|
||||
'Raspberry Pi Zero', 1
|
||||
'Pin header 20 x 2 right_angle', 1
|
||||
'PMS5003 particle detector', 1
|
||||
'Screw M2 cap x 6mm', 4
|
||||
'Screw M2.5 pan x 6.4mm', 2
|
||||
'Screw M2.5 pan x 8mm', 4
|
||||
'Screw M3 pan x 6mm', 3
|
||||
'SMD capacitor 1206 10uF', 1
|
||||
'SMD resistor 0805 3K3 0.125W', 1
|
||||
'SOT223 package FZT851', 1
|
||||
'Veroboard 6 holes x 6strips', 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
|
||||
'Wire link 0.8mm x 6.5mm', 3
|
||||
'Wire link 0.8mm x 0.4"', 1
|
Can't render this file because it contains an unexpected character in line 21 and column 23.
|
194
examples/EnviroPlus/bom/bom.json
Normal file
@ -0,0 +1,194 @@
|
||||
[
|
||||
{
|
||||
"name": "back_assembly",
|
||||
"big": null,
|
||||
"ngb": false,
|
||||
"zoomed": 0,
|
||||
"count": 1,
|
||||
"assemblies": {},
|
||||
"vitamins": {
|
||||
"pms5003(): PMS5003 particle detector": {
|
||||
"count": 1
|
||||
},
|
||||
"fan(fan17x8): Fan 17mm x 8mm": {
|
||||
"count": 1
|
||||
}
|
||||
},
|
||||
"printed": {
|
||||
"fan_duct.stl": {
|
||||
"count": 1,
|
||||
"colour": "darkorange"
|
||||
},
|
||||
"enviro_plus_case_base.stl": {
|
||||
"count": 1,
|
||||
"colour": "grey"
|
||||
}
|
||||
},
|
||||
"routed": {}
|
||||
},
|
||||
{
|
||||
"name": "RPI_assembly",
|
||||
"big": null,
|
||||
"ngb": false,
|
||||
"zoomed": 0,
|
||||
"count": 1,
|
||||
"assemblies": {},
|
||||
"vitamins": {
|
||||
"pcb(RPI0): Raspberry Pi Zero": {
|
||||
"count": 1
|
||||
},
|
||||
": Micro SD card": {
|
||||
"count": 1
|
||||
},
|
||||
"pin_header(2p54header, 20, 2, right_angle = true): Pin header 20 x 2 right_angle": {
|
||||
"count": 1
|
||||
}
|
||||
},
|
||||
"printed": {},
|
||||
"routed": {}
|
||||
},
|
||||
{
|
||||
"name": "fan_controller_assembly",
|
||||
"big": null,
|
||||
"ngb": false,
|
||||
"zoomed": 0,
|
||||
"count": 1,
|
||||
"assemblies": {},
|
||||
"vitamins": {
|
||||
"veroboard(fan_vb): Veroboard 6 holes x 6strips": {
|
||||
"count": 1
|
||||
},
|
||||
"wire_link(0.8, 10.16, tail = 2.5): Wire link 0.8mm x 0.4\"": {
|
||||
"count": 1
|
||||
},
|
||||
"wire_link(0.8, 0, h = 4, tail = 2.5): Wire link 0.8mm x 6.5mm": {
|
||||
"count": 3
|
||||
},
|
||||
"smd_resistor(RES0805, 3K3): SMD resistor 0805 3K3 0.125W": {
|
||||
"count": 1
|
||||
},
|
||||
"smd_capacitor(CAP1206): SMD capacitor 1206 10uF": {
|
||||
"count": 1
|
||||
},
|
||||
"smd_sot(SOT223): SOT223 package FZT851": {
|
||||
"count": 1
|
||||
}
|
||||
},
|
||||
"printed": {},
|
||||
"routed": {}
|
||||
},
|
||||
{
|
||||
"name": "enviro_assembly",
|
||||
"big": null,
|
||||
"ngb": false,
|
||||
"zoomed": 0,
|
||||
"count": 1,
|
||||
"assemblies": {
|
||||
"fan_controller_assembly": 1
|
||||
},
|
||||
"vitamins": {
|
||||
"pcb(EnviroPlus): Enviro+": {
|
||||
"count": 1
|
||||
}
|
||||
},
|
||||
"printed": {},
|
||||
"routed": {}
|
||||
},
|
||||
{
|
||||
"name": "case_assembly",
|
||||
"big": null,
|
||||
"ngb": false,
|
||||
"zoomed": 0,
|
||||
"count": 1,
|
||||
"assemblies": {},
|
||||
"vitamins": {
|
||||
"insert(F1BM2): Heatfit insert M2": {
|
||||
"count": 4
|
||||
},
|
||||
"washer(M3_washer): Washer M3 x 7mm x 0.5mm": {
|
||||
"count": 3
|
||||
},
|
||||
"screw(M3_pan_screw, 6): Screw M3 pan x 6mm": {
|
||||
"count": 3
|
||||
}
|
||||
},
|
||||
"printed": {
|
||||
"enviro_plus_case.stl": {
|
||||
"count": 1,
|
||||
"colour": "grey"
|
||||
},
|
||||
"bulkhead.stl": {
|
||||
"count": 1,
|
||||
"colour": "[0.862745, 0.0784314, 0.235294]"
|
||||
},
|
||||
"foot.stl": {
|
||||
"count": 3,
|
||||
"colour": "darkorange"
|
||||
}
|
||||
},
|
||||
"routed": {}
|
||||
},
|
||||
{
|
||||
"name": "enviro_case_assembly",
|
||||
"big": null,
|
||||
"ngb": false,
|
||||
"zoomed": 0,
|
||||
"count": 1,
|
||||
"assemblies": {
|
||||
"case_assembly": 1,
|
||||
"enviro_assembly": 1
|
||||
},
|
||||
"vitamins": {
|
||||
"screw(M2p5_pan_screw, 8): Screw M2.5 pan x 8mm": {
|
||||
"count": 4
|
||||
},
|
||||
"washer(M2p5_washer): Washer M2.5 x 5.9mm x 0.5mm": {
|
||||
"count": 4
|
||||
},
|
||||
"nut(M2p5_nut, nyloc = true): Nut M2.5 x 2.2mm nyloc": {
|
||||
"count": 4
|
||||
}
|
||||
},
|
||||
"printed": {},
|
||||
"routed": {}
|
||||
},
|
||||
{
|
||||
"name": "RPI_case_assembly",
|
||||
"big": null,
|
||||
"ngb": false,
|
||||
"zoomed": 0,
|
||||
"count": 1,
|
||||
"assemblies": {
|
||||
"enviro_case_assembly": 1,
|
||||
"RPI_assembly": 1
|
||||
},
|
||||
"vitamins": {
|
||||
"screw(M2p5_pan_screw, 6.4): Screw M2.5 pan x 6.4mm": {
|
||||
"count": 2
|
||||
}
|
||||
},
|
||||
"printed": {},
|
||||
"routed": {}
|
||||
},
|
||||
{
|
||||
"name": "main_assembly",
|
||||
"big": null,
|
||||
"ngb": false,
|
||||
"zoomed": 0,
|
||||
"count": 1,
|
||||
"assemblies": {
|
||||
"RPI_case_assembly": 1,
|
||||
"back_assembly": 1
|
||||
},
|
||||
"vitamins": {
|
||||
"washer(M2_washer): Washer M2 x 5mm x 0.3mm": {
|
||||
"count": 4
|
||||
},
|
||||
"screw(M2_cap_screw, 6): Screw M2 cap x 6mm": {
|
||||
"count": 4
|
||||
}
|
||||
},
|
||||
"printed": {},
|
||||
"routed": {}
|
||||
}
|
||||
]
|
53
examples/EnviroPlus/bom/bom.txt
Normal file
@ -0,0 +1,53 @@
|
||||
Vitamins:
|
||||
F
|
||||
a
|
||||
n
|
||||
E
|
||||
n c
|
||||
v o
|
||||
R i n
|
||||
p r t
|
||||
i E o r
|
||||
n o
|
||||
c B C v c l M
|
||||
R a a a i a l a
|
||||
p s c s r s e i
|
||||
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 Nut M2.5 x 2.2mm nyloc
|
||||
| | | | 1| | | | 1 Enviro+
|
||||
1| | | | | | | | 1 Raspberry Pi Zero
|
||||
1| | | | | | | | 1 Pin header 20 x 2 right_angle
|
||||
| | 1| | | | | | 1 PMS5003 particle detector
|
||||
| | | | | | | 4| 4 Screw M2 cap x 6mm
|
||||
| 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 SMD capacitor 1206 10uF
|
||||
| | | | | | 1| | 1 SMD resistor 0805 3K3 0.125W
|
||||
| | | | | | 1| | 1 SOT223 package FZT851
|
||||
| | | | | | 1| | 1 Veroboard 6 holes x 6strips
|
||||
| | | | | | | 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
|
||||
| | | | | | 3| | 3 Wire link 0.8mm x 6.5mm
|
||||
| | | | | | 1| | 1 Wire link 0.8mm x 0.4"
|
||||
|
||||
Printed:
|
||||
| | | 1| | | | | 1 bulkhead.stl
|
||||
| | | 1| | | | | 1 enviro_plus_case.stl
|
||||
| | 1| | | | | | 1 enviro_plus_case_base.stl
|
||||
| | 1| | | | | | 1 fan_duct.stl
|
||||
| | | 3| | | | | 3 foot.stl
|
||||
|
||||
Assemblies:
|
||||
1 RPI_assembly
|
||||
1 RPI_case_assembly
|
||||
1 back_assembly
|
||||
1 case_assembly
|
||||
1 enviro_assembly
|
||||
1 enviro_case_assembly
|
||||
1 fan_controller_assembly
|
||||
1 main_assembly
|
10
examples/EnviroPlus/bom/case_assembly.txt
Normal file
@ -0,0 +1,10 @@
|
||||
case_assembly:
|
||||
Vitamins:
|
||||
4 Heatfit insert M2
|
||||
3 Screw M3 pan x 6mm
|
||||
3 Washer M3 x 7mm x 0.5mm
|
||||
|
||||
Printed:
|
||||
1 bulkhead.stl
|
||||
1 enviro_plus_case.stl
|
||||
3 foot.stl
|
6
examples/EnviroPlus/bom/enviro_assembly.txt
Normal file
@ -0,0 +1,6 @@
|
||||
enviro_assembly:
|
||||
Vitamins:
|
||||
1 Enviro+
|
||||
|
||||
Assemblies:
|
||||
1 fan_controller_assembly
|
9
examples/EnviroPlus/bom/enviro_case_assembly.txt
Normal file
@ -0,0 +1,9 @@
|
||||
enviro_case_assembly:
|
||||
Vitamins:
|
||||
4 Nut M2.5 x 2.2mm nyloc
|
||||
4 Screw M2.5 pan x 8mm
|
||||
4 Washer M2.5 x 5.9mm x 0.5mm
|
||||
|
||||
Assemblies:
|
||||
1 case_assembly
|
||||
1 enviro_assembly
|
8
examples/EnviroPlus/bom/fan_controller_assembly.txt
Normal file
@ -0,0 +1,8 @@
|
||||
fan_controller_assembly:
|
||||
Vitamins:
|
||||
1 SMD capacitor 1206 10uF
|
||||
1 SMD resistor 0805 3K3 0.125W
|
||||
1 SOT223 package FZT851
|
||||
1 Veroboard 6 holes x 6strips
|
||||
3 Wire link 0.8mm x 6.5mm
|
||||
1 Wire link 0.8mm x 0.4"
|
8
examples/EnviroPlus/bom/main_assembly.txt
Normal file
@ -0,0 +1,8 @@
|
||||
main_assembly:
|
||||
Vitamins:
|
||||
4 Screw M2 cap x 6mm
|
||||
4 Washer M2 x 5mm x 0.3mm
|
||||
|
||||
Assemblies:
|
||||
1 RPI_case_assembly
|
||||
1 back_assembly
|
BIN
examples/EnviroPlus/docs/cuts.jpg
Normal file
After Width: | Height: | Size: 107 KiB |
BIN
examples/EnviroPlus/docs/fan_connection.jpg
Normal file
After Width: | Height: | Size: 498 KiB |
BIN
examples/EnviroPlus/docs/fan_controller.jpg
Normal file
After Width: | Height: | Size: 164 KiB |
BIN
examples/EnviroPlus/docs/smt.jpg
Normal file
After Width: | Height: | Size: 129 KiB |
298
examples/EnviroPlus/readme.md
Normal file
@ -0,0 +1,298 @@
|
||||
<a name="TOP"></a>
|
||||
# EnviroPlus
|
||||
Environmental monitor using Enviro+ sensor board and a Raspberry Pi Zero.
|
||||
|
||||
![Main Assembly](assemblies/main_assembled.png)
|
||||
|
||||
<span></span>
|
||||
|
||||
---
|
||||
## Table of Contents
|
||||
1. [Parts list](#Parts_list)
|
||||
1. [Back Assembly](#back_assembly)
|
||||
1. [RPI Assembly](#RPI_assembly)
|
||||
1. [Fan Controller Assembly](#fan_controller_assembly)
|
||||
1. [Enviro Assembly](#enviro_assembly)
|
||||
1. [Case Assembly](#case_assembly)
|
||||
1. [Enviro Case Assembly](#enviro_case_assembly)
|
||||
1. [RPI Case Assembly](#RPI_case_assembly)
|
||||
1. [Main Assembly](#main_assembly)
|
||||
|
||||
<span></span>
|
||||
[Top](#TOP)
|
||||
|
||||
---
|
||||
<a name="Parts_list"></a>
|
||||
## Parts list
|
||||
| <span style="writing-mode: vertical-rl; text-orientation: mixed;">Back</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">RPI</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Fan Controller</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Enviro</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Case</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Enviro Case</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">RPI Case</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Main</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">TOTALS</span> | |
|
||||
|---:|---:|---:|---:|---:|---:|---:|---:|---:|:---|
|
||||
| | | | | | | | | | **Vitamins** |
|
||||
| . | . | . | 1 | . | . | . | . | 1 | Enviro+ |
|
||||
| 1 | . | . | . | . | . | . | . | 1 | Fan 17mm x 8mm |
|
||||
| . | . | . | . | 4 | . | . | . | 4 | Heatfit insert M2 |
|
||||
| . | 1 | . | . | . | . | . | . | 1 | Micro SD card |
|
||||
| . | . | . | . | . | 4 | . | . | 4 | Nut M2.5 x 2.2mm nyloc |
|
||||
| 1 | . | . | . | . | . | . | . | 1 | PMS5003 particle detector |
|
||||
| . | 1 | . | . | . | . | . | . | 1 | Pin header 20 x 2 right_angle |
|
||||
| . | 1 | . | . | . | . | . | . | 1 | Raspberry Pi Zero |
|
||||
| . | . | 1 | . | . | . | . | . | 1 | SMD capacitor 1206 10uF |
|
||||
| . | . | 1 | . | . | . | . | . | 1 | SMD resistor 0805 3K3 0.125W |
|
||||
| . | . | 1 | . | . | . | . | . | 1 | SOT223 package FZT851 |
|
||||
| . | . | . | . | . | . | . | 4 | 4 | Screw M2 cap x 6mm |
|
||||
| . | . | . | . | . | . | 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 |
|
||||
| . | . | . | . | . | . | . | 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 | . | . | . | . | . | 1 | Wire link 0.8mm x 0.4" |
|
||||
| . | . | 3 | . | . | . | . | . | 3 | Wire link 0.8mm x 6.5mm |
|
||||
| 2 | 3 | 8 | 1 | 10 | 12 | 2 | 8 | 46 | Total vitamins count |
|
||||
| | | | | | | | | | **3D printed parts** |
|
||||
| . | . | . | . | 1 | . | . | . | 1 | bulkhead.stl |
|
||||
| . | . | . | . | 1 | . | . | . | 1 | enviro_plus_case.stl |
|
||||
| 1 | . | . | . | . | . | . | . | 1 | enviro_plus_case_base.stl |
|
||||
| 1 | . | . | . | . | . | . | . | 1 | fan_duct.stl |
|
||||
| . | . | . | . | 3 | . | . | . | 3 | foot.stl |
|
||||
| 2 | . | . | . | 5 | . | . | . | 7 | Total 3D printed parts count |
|
||||
|
||||
<span></span>
|
||||
[Top](#TOP)
|
||||
|
||||
---
|
||||
<a name="back_assembly"></a>
|
||||
## Back Assembly
|
||||
### Vitamins
|
||||
|Qty|Description|
|
||||
|---:|:----------|
|
||||
|1| Fan 17mm x 8mm|
|
||||
|1| PMS5003 particle detector|
|
||||
|
||||
|
||||
### 3D Printed parts
|
||||
|
||||
| 1 x enviro_plus_case_base.stl | 1 x fan_duct.stl |
|
||||
|---|---|
|
||||
| ![enviro_plus_case_base.stl](stls/enviro_plus_case_base.png) | ![fan_duct.stl](stls/fan_duct.png)
|
||||
|
||||
|
||||
|
||||
### Assembly instructions
|
||||
![back_assembly](assemblies/back_assembly.png)
|
||||
|
||||
1. Print the fan duct in flexible TPE with low infill.
|
||||
1. Slide the pms5003 into the printed receptacle with the fan to the outside. Secure with tape if it is loose.
|
||||
1. Slide the fan into the fan duct.
|
||||
1. Slide the fan duct into the printed recepacle.
|
||||
|
||||
![back_assembled](assemblies/back_assembled.png)
|
||||
|
||||
<span></span>
|
||||
[Top](#TOP)
|
||||
|
||||
---
|
||||
<a name="RPI_assembly"></a>
|
||||
## RPI Assembly
|
||||
### Vitamins
|
||||
|Qty|Description|
|
||||
|---:|:----------|
|
||||
|1| Micro SD card|
|
||||
|1| Pin header 20 x 2 right_angle|
|
||||
|1| Raspberry Pi Zero|
|
||||
|
||||
|
||||
### Assembly instructions
|
||||
![RPI_assembly](assemblies/RPI_assembly_tn.png)
|
||||
|
||||
* Solder a right angle connector to the Raspberry Pi Zero.
|
||||
|
||||
![RPI_assembled](assemblies/RPI_assembled_tn.png)
|
||||
|
||||
<span></span>
|
||||
[Top](#TOP)
|
||||
|
||||
---
|
||||
<a name="fan_controller_assembly"></a>
|
||||
## Fan Controller Assembly
|
||||
### Vitamins
|
||||
|Qty|Description|
|
||||
|---:|:----------|
|
||||
|1| SMD capacitor 1206 10uF|
|
||||
|1| SMD resistor 0805 3K3 0.125W|
|
||||
|1| SOT223 package FZT851|
|
||||
|1| Veroboard 6 holes x 6strips|
|
||||
|1| Wire link 0.8mm x 0.4"|
|
||||
|3| Wire link 0.8mm x 6.5mm|
|
||||
|
||||
|
||||
### Assembly instructions
|
||||
![fan_controller_assembly](assemblies/fan_controller_assembly_tn.png)
|
||||
|
||||
The fan controller is a single transistor wired as a Miller integrator that effectively multiplies the capacitor value by the gain of the transistor.
|
||||
It converts the PWM signal on GPI4 to a stead DC voltage so that the fan doesn't whine, or stutter.
|
||||
|
||||
![Schematic](docs/fan_controller.jpg)
|
||||
|
||||
***
|
||||
* Make two track cuts as shown, one wide and the other narrow.
|
||||
|
||||
![TrackCuts](docs/cuts.jpg)
|
||||
|
||||
1. Add the SMT compeonents and then the wire links.
|
||||
1. Add more solder around the transistor to act as a heatsink.
|
||||
|
||||
![SMT](docs/smt.jpg)
|
||||
|
||||
|
||||
![fan_controller_assembled](assemblies/fan_controller_assembled_tn.png)
|
||||
|
||||
<span></span>
|
||||
[Top](#TOP)
|
||||
|
||||
---
|
||||
<a name="enviro_assembly"></a>
|
||||
## Enviro Assembly
|
||||
### Vitamins
|
||||
|Qty|Description|
|
||||
|---:|:----------|
|
||||
|1| Enviro+|
|
||||
|
||||
|
||||
### Sub-assemblies
|
||||
|
||||
| 1 x fan_controller_assembly |
|
||||
|---|
|
||||
| ![fan_controller_assembled](assemblies/fan_controller_assembled_tn.png)
|
||||
|
||||
|
||||
|
||||
### Assembly instructions
|
||||
![enviro_assembly](assemblies/enviro_assembly_tn.png)
|
||||
|
||||
* Solder the fan_controller to the Enviro+ expansion connector at the 5V, GND and #4 pins.
|
||||
|
||||
![enviro_assembled](assemblies/enviro_assembled_tn.png)
|
||||
|
||||
<span></span>
|
||||
[Top](#TOP)
|
||||
|
||||
---
|
||||
<a name="case_assembly"></a>
|
||||
## Case Assembly
|
||||
### Vitamins
|
||||
|Qty|Description|
|
||||
|---:|:----------|
|
||||
|4| Heatfit insert M2|
|
||||
|3| Screw M3 pan x 6mm|
|
||||
|3| Washer M3 x 7mm x 0.5mm|
|
||||
|
||||
|
||||
### 3D Printed parts
|
||||
|
||||
| 1 x bulkhead.stl | 1 x enviro_plus_case.stl | 3 x foot.stl |
|
||||
|---|---|---|
|
||||
| ![bulkhead.stl](stls/bulkhead.png) | ![enviro_plus_case.stl](stls/enviro_plus_case.png) | ![foot.stl](stls/foot.png)
|
||||
|
||||
|
||||
|
||||
### Assembly instructions
|
||||
![case_assembly](assemblies/case_assembly.png)
|
||||
|
||||
1. Solvent weld or glue the bulkhead into the recess in the bottom of the case.
|
||||
1. Fit the heatfit inserts with a soldering iron with a conical bit heated to about 200°C.
|
||||
1. Tap the three holes for the feet with an M3 tap.
|
||||
1. Screw on the three feet with M3 x 6mm pan screws and washers.
|
||||
|
||||
![case_assembled](assemblies/case_assembled.png)
|
||||
|
||||
<span></span>
|
||||
[Top](#TOP)
|
||||
|
||||
---
|
||||
<a name="enviro_case_assembly"></a>
|
||||
## Enviro Case Assembly
|
||||
### Vitamins
|
||||
|Qty|Description|
|
||||
|---:|:----------|
|
||||
|4| Nut M2.5 x 2.2mm nyloc|
|
||||
|4| Screw M2.5 pan x 8mm|
|
||||
|4| Washer M2.5 x 5.9mm x 0.5mm|
|
||||
|
||||
|
||||
### Sub-assemblies
|
||||
|
||||
| 1 x case_assembly | 1 x enviro_assembly |
|
||||
|---|---|
|
||||
| ![case_assembled](assemblies/case_assembled_tn.png) | ![enviro_assembled](assemblies/enviro_assembled_tn.png)
|
||||
|
||||
|
||||
|
||||
### Assembly instructions
|
||||
![enviro_case_assembly](assemblies/enviro_case_assembly.png)
|
||||
|
||||
* Screw the Enviro+ PCB to the front of the case using M2.5 x 8mm pan screws with washer and nuts on the inside.
|
||||
|
||||
![enviro_case_assembled](assemblies/enviro_case_assembled.png)
|
||||
|
||||
<span></span>
|
||||
[Top](#TOP)
|
||||
|
||||
---
|
||||
<a name="RPI_case_assembly"></a>
|
||||
## RPI Case Assembly
|
||||
### Vitamins
|
||||
|Qty|Description|
|
||||
|---:|:----------|
|
||||
|2| Screw M2.5 pan x 6.4mm|
|
||||
|
||||
|
||||
### Sub-assemblies
|
||||
|
||||
| 1 x RPI_assembly | 1 x enviro_case_assembly |
|
||||
|---|---|
|
||||
| ![RPI_assembled](assemblies/RPI_assembled_tn.png) | ![enviro_case_assembled](assemblies/enviro_case_assembled_tn.png)
|
||||
|
||||
|
||||
|
||||
### Assembly instructions
|
||||
![RPI_case_assembly](assemblies/RPI_case_assembly.png)
|
||||
|
||||
* Plug the RPi into the Enviro+ socket and secure with two screws self tapped into the bosses in the case.
|
||||
|
||||
![RPI_case_assembled](assemblies/RPI_case_assembled.png)
|
||||
|
||||
<span></span>
|
||||
[Top](#TOP)
|
||||
|
||||
---
|
||||
<a name="main_assembly"></a>
|
||||
## Main Assembly
|
||||
### Vitamins
|
||||
|Qty|Description|
|
||||
|---:|:----------|
|
||||
|4| Screw M2 cap x 6mm|
|
||||
|4| Washer M2 x 5mm x 0.3mm|
|
||||
|
||||
|
||||
### Sub-assemblies
|
||||
|
||||
| 1 x RPI_case_assembly | 1 x back_assembly |
|
||||
|---|---|
|
||||
| ![RPI_case_assembled](assemblies/RPI_case_assembled_tn.png) | ![back_assembled](assemblies/back_assembled_tn.png)
|
||||
|
||||
|
||||
|
||||
### Assembly instructions
|
||||
![main_assembly](assemblies/main_assembly.png)
|
||||
|
||||
* Solder the fan wires to the veroboard assembly
|
||||
|
||||
![FanWires](docs/fan_connection.jpg)
|
||||
|
||||
* Slide the back assembly into the case and secure with four M2 x 6mm cap screws and washers.
|
||||
|
||||
![main_assembled](assemblies/main_assembled.png)
|
||||
|
||||
<span></span>
|
||||
[Top](#TOP)
|
45
examples/EnviroPlus/scad/fan_controller.scad
Normal file
@ -0,0 +1,45 @@
|
||||
//
|
||||
//! Environmental monitor using Enviro+ sensor board and a Raspberry Pi Zero.
|
||||
//
|
||||
// GNU GPL v2
|
||||
// nop.head@gmail.com
|
||||
// hydraraptor.blogspot.com
|
||||
//
|
||||
// Top level model
|
||||
//
|
||||
|
||||
include <NopSCADlib/core.scad>
|
||||
use <NopSCADlib/vitamins/veroboard.scad>
|
||||
include <NopSCADlib/vitamins/smds.scad>
|
||||
|
||||
fan_vb = vero("fan_vb", "fan_controller", 6, 6, breaks = [[2, 1], [2 + eps, 5]],
|
||||
components = [
|
||||
[5, 3, 90, "link", inch(0.4), undef, undef, 2.5],
|
||||
[0, 5, 0, "link", 0, 4, undef, 2.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"],
|
||||
[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.
|
||||
//! It converts the PWM signal on GPI4 to a stead DC voltage so that the fan doesn't whine, or stutter.
|
||||
//!
|
||||
//! ![Schematic](docs/fan_controller.jpg)
|
||||
//!
|
||||
//! ***
|
||||
//! * Make two track cuts as shown, one wide and the other narrow.
|
||||
//!
|
||||
//! ![TrackCuts](docs/cuts.jpg)
|
||||
//!
|
||||
//! 1. Add the SMT compeonents and then the wire links.
|
||||
//! 1. Add more solder around the transistor to act as a heatsink.
|
||||
//!
|
||||
//! ![SMT](docs/smt.jpg)
|
||||
//!
|
||||
module fan_controller_assembly() rotate(90) vflip(!exploded()) veroboard_assembly(fan_vb, -vero_thickness(fan_vb) - 1.4, 0);
|
||||
|
||||
fan_controller_assembly();
|
518
examples/EnviroPlus/scad/main.scad
Normal file
@ -0,0 +1,518 @@
|
||||
//
|
||||
//! Environmental monitor using Enviro+ sensor board and a Raspberry Pi Zero.
|
||||
//
|
||||
// GNU GPL v2
|
||||
// nop.head@gmail.com
|
||||
// hydraraptor.blogspot.com
|
||||
//
|
||||
// Top level model
|
||||
//
|
||||
$explode = 0; // [0, 1]
|
||||
assembly = "main"; // [main, back, RPI, case, enviro_case, RPI_case]
|
||||
|
||||
/* [Hidden] */
|
||||
|
||||
show_box = true;
|
||||
show_enviroplus = true;
|
||||
$pp1_colour = "grey";
|
||||
$extrusion_width = 0.5;
|
||||
|
||||
include <NopSCADlib/core.scad>
|
||||
include <NopSCADlib/vitamins/pin_headers.scad>
|
||||
include <NopSCADlib/vitamins/pcbs.scad>
|
||||
include <NopSCADlib/vitamins/fans.scad>
|
||||
|
||||
use <NopSCADlib/vitamins/insert.scad>
|
||||
use <NopSCADlib/vitamins/veroboard.scad>
|
||||
use <NopSCADlib/utils/round.scad>
|
||||
use <NopSCADlib/printed/foot.scad>
|
||||
use <NopSCADlib/printed/printed_box.scad>
|
||||
use <fan_controller.scad>
|
||||
|
||||
rpi = RPI0;
|
||||
pcb = EnviroPlus;
|
||||
fan = fan17x8;
|
||||
foot = Foot(d = 13, h = 5, t = 2, r = 1, screw = M3_pan_screw);
|
||||
module foot_stl() foot(foot);
|
||||
|
||||
rpi_offset = [0, -pcb_width(pcb) / 2 + 0.5, pcb_width(rpi) / 2 + 8.6];
|
||||
rpi_holes = [0, 1];
|
||||
wall = 2;
|
||||
top_thickness = 2;
|
||||
base_thickness = 2;
|
||||
case_inner_rad = 8;
|
||||
|
||||
width = pcb_length(pcb) + 9 + 10;
|
||||
pcb_x = -(width - pcb_length(pcb) - 9) / 2;
|
||||
depth = pcb_width(pcb) + 9;
|
||||
height = pcb_width(rpi) / 2 + rpi_offset.z + 9;
|
||||
bulkhead_outset = 2;
|
||||
bulkhead_inset = 0.5;
|
||||
bulkhead_t = 2;
|
||||
clearance = 0.1;
|
||||
pcb_screw = alternate_screw(hs_pan, pcb_screw(pcb));
|
||||
|
||||
box = pbox(name = "enviro_plus_case", wall = wall, top_t = top_thickness, base_t = base_thickness, screw = M2_cap_screw, radius = case_inner_rad, ridges = [8, 1],
|
||||
size = [width, depth, height]);
|
||||
|
||||
pms5003 = [50, 38, 21];
|
||||
pms5003_wall = 1;
|
||||
pms5003_pos = [width / 2 - pms5003.x / 2 - pms5003_wall - pbox_screw_inset(box) - insert_boss_radius(screw_insert(pbox_screw(box)), wall) - 0.5,
|
||||
depth / 2 - pms5003.z / 2 - wall - 1,
|
||||
height + top_thickness - pms5003.y / 2];
|
||||
|
||||
|
||||
fan_duct_t = 1.7;
|
||||
foam_t = 0;
|
||||
fan_pos = [pms5003_pos.x - pms5003.x / 2 - pms5003_wall - fan_width(fan) / 2 - fan_duct_t, 1 + foam_t, 12 + top_thickness + fan_depth(fan) / 2];
|
||||
fan_socket = 8;
|
||||
|
||||
module fan_shape() {
|
||||
w = fan_width(fan);
|
||||
p = fan_hole_pitch(fan);
|
||||
r = w / 2 - p;
|
||||
|
||||
rounded_square([w, w], r);
|
||||
}
|
||||
|
||||
module fan_duct_stl() {
|
||||
module frame(z, offset, y = -fan_pos.y)
|
||||
translate([0, y, z])
|
||||
linear_extrude(height = eps)
|
||||
offset(offset)
|
||||
fan_shape();
|
||||
|
||||
z = height + top_thickness - fan_pos.z + fan_depth(fan) / 2 - fan_socket;
|
||||
|
||||
translate([0, -fan_pos.y, z])
|
||||
linear_extrude(height = fan_socket)
|
||||
difference() {
|
||||
fan_shape();
|
||||
|
||||
round(1)
|
||||
offset(-fan_duct_t)
|
||||
fan_shape();
|
||||
}
|
||||
|
||||
stl("fan_duct") union() {
|
||||
difference() {
|
||||
hull() {
|
||||
frame(z, 0);
|
||||
|
||||
frame(fan_depth(fan), fan_duct_t + foam_t, 0);
|
||||
}
|
||||
hull() {
|
||||
frame(z, -fan_duct_t);
|
||||
|
||||
frame(fan_depth(fan), foam_t -extrusion_width / 2, 0);
|
||||
}
|
||||
}
|
||||
|
||||
linear_extrude(height = fan_depth(fan))
|
||||
difference() {
|
||||
offset(fan_duct_t + foam_t)
|
||||
fan_shape();
|
||||
|
||||
offset(foam_t)
|
||||
fan_shape();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module pms5003() {
|
||||
vitamin("pms5003(): PMS5003 particle detector");
|
||||
|
||||
w = pms5003.x;
|
||||
d = pms5003.y;
|
||||
h = pms5003.z;
|
||||
t = 0.1;
|
||||
color("silver")
|
||||
difference() {
|
||||
linear_extrude(height = h, center = true)
|
||||
difference() {
|
||||
square([w, d], center = true);
|
||||
|
||||
for(x = [-1, 1], y = [-1, 1])
|
||||
translate([x * w / 2, y * d / 2])
|
||||
square(2, center = true);
|
||||
}
|
||||
cube([w + 2 * eps, d + 2 * eps, t * 2], center = true);
|
||||
}
|
||||
|
||||
color("black")
|
||||
rounded_rectangle([w - 2 * t, d - 2 * t, h - 2 * t], r = 1, center = true);
|
||||
}
|
||||
|
||||
module pcb_shape(offset)
|
||||
rounded_square([pcb_length(pcb) + 2 * offset, pcb_width(pcb) + 2 * offset], pcb_radius(pcb) + offset);
|
||||
|
||||
module gap() {
|
||||
gap = pcb_component_position(pcb, "-chip");
|
||||
|
||||
translate([gap.x, -gap.y])
|
||||
square([17.5, 20], center = true);
|
||||
}
|
||||
|
||||
module rpi_holes()
|
||||
for(i = rpi_holes) {
|
||||
hole = pcb_coord(rpi, pcb_holes(rpi)[i]);
|
||||
translate([hole.x, rpi_offset.y, -hole.y + rpi_offset.z + top_thickness])
|
||||
rotate([90, 0, 0])
|
||||
children();
|
||||
}
|
||||
|
||||
module feet_positions() {
|
||||
clearance = 2;
|
||||
foot_r = foot_diameter(foot) / 2;
|
||||
x_inset = case_inner_rad + foot_r - pbox_ridges(box).y;
|
||||
z_inset = foot_r + clearance;
|
||||
h = height + base_thickness;
|
||||
|
||||
for(p = [[-1, -1], [1, -1], [0, 1]])
|
||||
translate([p.x * (width / 2 - x_inset), depth / 2 + wall + pbox_ridges(box).y, top_thickness + h / 2 + p.y * (h / 2 - z_inset)])
|
||||
rotate([90, 0, 0])
|
||||
children();
|
||||
}
|
||||
|
||||
module slots(h = 10, expand = 0) {
|
||||
for(comp = [["uSD", 2, 11, 0.7], ["flat_flex", 1, 12, 0.5]]) {
|
||||
p = pcb_component_position(rpi, comp[0]);
|
||||
translate([sign(p.x) * (width / 2 + wall / 2 + pbox_ridges(box).y / 2), rpi_offset.y + pcb_thickness(rpi) + comp[3], top_thickness + rpi_offset.z - p.y])
|
||||
rotate([90, 0, 90])
|
||||
hull() {
|
||||
vertical_tearslot(r = comp[1] + expand, l = comp[2], h = h);
|
||||
|
||||
if(expand)
|
||||
vertical_tearslot(r = comp[1] + expand + h / 2, l = comp[2], h = eps);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module box_internal_additions() {
|
||||
translate([pcb_x, 0]) {
|
||||
linear_extrude(height = top_thickness + bulkhead_t)
|
||||
difference() {
|
||||
pcb_shape(bulkhead_outset + wall + pbox_ridges(box).y + eps);
|
||||
|
||||
gap();
|
||||
|
||||
pcb_shape(bulkhead_outset + clearance);
|
||||
}
|
||||
|
||||
rpi_holes()
|
||||
hull() {
|
||||
wall = 1.8;
|
||||
r = screw_radius(pcb_screw) + wall;
|
||||
z = depth / 2 + rpi_offset.y + pbox_ridges(box).y + eps;
|
||||
offset = max(r, z);
|
||||
cylinder(r =r, h = z);
|
||||
|
||||
translate([0, -offset - r, z])
|
||||
cube(eps);
|
||||
}
|
||||
}
|
||||
d = washer_diameter(screw_washer(foot_screw(foot))) + 1;
|
||||
h = pbox_ridges(box).y;
|
||||
feet_positions()
|
||||
translate_z(wall - eps)
|
||||
cylinder(d2 = d, d1 = d + 2 * h, h = h);
|
||||
|
||||
slots(wall + pbox_ridges(box).y + eps, 1);
|
||||
}
|
||||
|
||||
module box_external_additions() {
|
||||
amp = pbox_ridges(box).y + eps;
|
||||
d = foot_diameter(foot) + 1;
|
||||
feet_positions()
|
||||
cylinder(d1 = d, d2 = d + 2 * amp, h = amp);
|
||||
|
||||
slots(wall + pbox_ridges(box).y + eps, 1);
|
||||
}
|
||||
|
||||
|
||||
module box_holes() {
|
||||
translate([pcb_x, 0]) {
|
||||
linear_extrude(height = top_thickness + eps)
|
||||
pcb_shape(clearance);
|
||||
|
||||
rpi_holes()
|
||||
teardrop_plus(r = screw_pilot_hole(pcb_screw), h = 7 - 1.6, center = false);
|
||||
}
|
||||
feet_positions()
|
||||
teardrop(r = screw_pilot_hole(foot_screw(foot)), h = 10, center = true);
|
||||
|
||||
grills = 7;
|
||||
bar = 1.6;
|
||||
x = pcb_x + pcb_length(pcb) / 2 + 2 * wall + pbox_ridges(box).y + 2 * eps;
|
||||
w = width / 2 - x;
|
||||
d = depth - case_inner_rad;
|
||||
pitch = d / (grills - 1);
|
||||
for(i = [0 : grills -1])
|
||||
let(w = i == 0 || i == grills -1 ? w - 1 : w)
|
||||
translate([x + w / 2, -d / 2 + i * pitch])
|
||||
rounded_rectangle([w, pitch - bar, 10], 1);
|
||||
|
||||
slots();
|
||||
}
|
||||
|
||||
module bulkhead_stl() {
|
||||
holes = pcb_holes(pcb);
|
||||
pitch = max([for(h = holes) pcb_coord(pcb, h).x]) - min([for(h = holes) pcb_coord(pcb, h).x]);
|
||||
boss_r = (pitch - 51.4) / 2;
|
||||
|
||||
stl("bulkhead")
|
||||
linear_extrude(height = bulkhead_t)
|
||||
difference() {
|
||||
pcb_shape(bulkhead_outset);
|
||||
|
||||
gap();
|
||||
|
||||
difference() {
|
||||
pcb_shape(-bulkhead_inset);
|
||||
|
||||
pcb_screw_positions(pcb)
|
||||
rotate($i * 90)
|
||||
hull() {
|
||||
circle(boss_r);
|
||||
|
||||
translate([boss_r - eps, -boss_r])
|
||||
square([eps, boss_r]);
|
||||
|
||||
translate([-boss_r, boss_r - eps])
|
||||
square([boss_r, eps]);
|
||||
|
||||
translate([-boss_r, -boss_r])
|
||||
square(eps);
|
||||
}
|
||||
}
|
||||
|
||||
pcb_screw_positions(pcb)
|
||||
poly_circle(screw_clearance_radius(pcb_screw));
|
||||
}
|
||||
}
|
||||
|
||||
module enviro_plus_case_stl() {
|
||||
pbox(box) {
|
||||
box_internal_additions();
|
||||
box_holes();
|
||||
box_external_additions();
|
||||
}
|
||||
}
|
||||
|
||||
module base_additions() {
|
||||
w = pms5003.x + clearance;
|
||||
d = pms5003.z + clearance;
|
||||
wall = pms5003_wall;
|
||||
|
||||
translate([pms5003_pos.x, -pms5003_pos.y])
|
||||
linear_extrude(height = base_thickness + pms5003.y)
|
||||
difference() {
|
||||
square([w + 2 * wall, d + 2 * wall], center = true);
|
||||
square([w, d], center = true);
|
||||
}
|
||||
|
||||
translate([fan_pos.x, 0])
|
||||
linear_extrude(height = top_thickness + fan_socket)
|
||||
difference() {
|
||||
offset(wall)
|
||||
fan_shape();
|
||||
|
||||
fan_shape();
|
||||
}
|
||||
}
|
||||
|
||||
module base_holes() {
|
||||
for(i = [0 : 1]) {
|
||||
p = pcb_component_position(rpi, "usb_uA", i);
|
||||
translate([p.x + pcb_x, -rpi_offset.y - pcb_thickness(rpi) - 1.3])
|
||||
rounded_rectangle([11,7, 100], 0.5, true);
|
||||
}
|
||||
|
||||
translate([pms5003_pos.x, -pms5003_pos.y])
|
||||
rounded_rectangle([pms5003.x - 2 ,pms5003.z - 2, 100], 2, true);
|
||||
|
||||
translate([fan_pos.x, 0])
|
||||
linear_extrude(height = 2 * base_thickness + eps, center = true)
|
||||
round(1)
|
||||
offset(-fan_duct_t)
|
||||
fan_shape();
|
||||
}
|
||||
|
||||
module enviro_plus_case_base_stl()
|
||||
pbox_base(box) {
|
||||
base_additions();
|
||||
base_holes();
|
||||
}
|
||||
|
||||
//! * Solder a right angle connector to the Raspberry Pi Zero.
|
||||
module RPI_assembly()
|
||||
assembly("RPI") {
|
||||
pcb(rpi);
|
||||
|
||||
pcb_grid(rpi, 9.5, 0.5, -0.6)
|
||||
rotate(180)
|
||||
explode(20)
|
||||
pin_header(2p54header, 20, 2, right_angle = true);
|
||||
}
|
||||
|
||||
//! 1. Solvent weld or glue the bulkhead into the recess in the bottom of the case.
|
||||
//! 1. Fit the heatfit inserts with a soldering iron with a conical bit heated to about 200°C.
|
||||
//! 1. Tap the three holes for the feet with an M3 tap.
|
||||
//! 1. Screw on the three feet with M3 x 6mm pan screws and washers.
|
||||
module case_assembly() pose([ 29.60, 0.00, 158.00 ], exploded = true) pose([ 198.00, 0.00, 352.80 ], exploded = false)
|
||||
assembly("case") {
|
||||
if(show_box)
|
||||
stl_colour(pp1_colour) render() enviro_plus_case_stl();
|
||||
else
|
||||
render() difference() {
|
||||
enviro_plus_case_stl();
|
||||
|
||||
translate_z(height / 2)
|
||||
cube([100, 100, height - 20], center = true);
|
||||
}
|
||||
|
||||
pbox_inserts(box);
|
||||
|
||||
translate([pcb_x, 0, top_thickness])
|
||||
explode(20)
|
||||
stl_colour(pp2_colour) render() bulkhead_stl();
|
||||
|
||||
feet_positions() {
|
||||
foot_assembly(0, foot);
|
||||
|
||||
vflip()
|
||||
explode(20, explode_children = true)
|
||||
translate_z(foot_thickness(foot))
|
||||
screw_and_washer(foot_screw(foot), 6);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//! * Solder the fan_controller to the Enviro+ expansion connector at the 5V, GND and #4 pins.
|
||||
module enviro_assembly() hflip(exploded())
|
||||
assembly("enviro") {
|
||||
if(show_enviroplus)
|
||||
pcb(pcb);
|
||||
|
||||
pcb_grid(pcb, 5.5, 2.5, -pcb_thickness(pcb)) {
|
||||
hflip()
|
||||
explode(15)
|
||||
fan_controller_assembly();
|
||||
}
|
||||
if(!exploded())
|
||||
for(x = [8, 7, 3])
|
||||
pcb_grid(pcb, x, 0, 0.05)
|
||||
solder_meniscus(pcb, 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.
|
||||
module enviro_case_assembly() pose([ 231.40, 0.00, 1.20 ])
|
||||
assembly("enviro_case") {
|
||||
case_assembly();
|
||||
|
||||
translate([pcb_x, 0, top_thickness])
|
||||
vflip() explode(20, explode_children = true) {
|
||||
t = pcb_thickness(pcb);
|
||||
nut = screw_nut(pcb_screw);
|
||||
washer = screw_washer(pcb_screw);
|
||||
|
||||
no_explode() enviro_assembly();
|
||||
|
||||
pcb_screw_positions(pcb) {
|
||||
translate_z(t)
|
||||
screw(pcb_screw, screw_longer_than(t + bulkhead_t + nut_thickness(nut, true) + washer_thickness(washer)));
|
||||
|
||||
translate_z(-bulkhead_t)
|
||||
vflip()
|
||||
explode(20, explode_children = true)
|
||||
nut_and_washer(nut, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//! * Plug the RPi into the Enviro+ socket and secure with two screws self tapped into the bosses in the case.
|
||||
module RPI_case_assembly() pose([ 20.50, 0.00, 153.30 ])
|
||||
assembly("RPI_case") {
|
||||
enviro_case_assembly();
|
||||
|
||||
translate([pcb_x, 0]) {
|
||||
translate_z(top_thickness) {
|
||||
|
||||
translate(rpi_offset)
|
||||
rotate([-90, 0, 0])
|
||||
RPI_assembly();
|
||||
}
|
||||
rpi_holes()
|
||||
vflip()
|
||||
translate_z(pcb_thickness(rpi))
|
||||
screw(pcb_screw, 6.4);
|
||||
}
|
||||
}
|
||||
|
||||
//! 1. Print the fan duct in flexible TPE with low infill.
|
||||
//! 1. Slide the pms5003 into the printed receptacle with the fan to the outside. Secure with tape if it is loose.
|
||||
//! 1. Slide the fan into the fan duct.
|
||||
//! 1. Slide the fan duct into the printed recepacle.
|
||||
module back_assembly() pose([ 228.60, 0.00, 24.30 ])
|
||||
assembly("back") {
|
||||
translate(pms5003_pos)
|
||||
explode(-50)
|
||||
rotate([90, 0, 0])
|
||||
pms5003();
|
||||
|
||||
explode(-20, explode_children = true)
|
||||
translate(fan_pos) {
|
||||
explode(-20)
|
||||
fan(fan);
|
||||
|
||||
translate_z(-fan_depth(fan) / 2)
|
||||
stl_colour(pp4_colour)
|
||||
render()
|
||||
fan_duct_stl();
|
||||
}
|
||||
|
||||
translate_z(height + top_thickness + base_thickness + eps) vflip()
|
||||
stl_colour(show_box ? pp1_colour : pp2_colour) render() enviro_plus_case_base_stl();
|
||||
}
|
||||
|
||||
//! * Solder the fan wires to the veroboard assembly
|
||||
//!
|
||||
//! ![FanWires](docs/fan_connection.jpg)
|
||||
//!
|
||||
//! * Slide the back assembly into the case and secure with four M2 x 6mm cap screws and washers.
|
||||
module main_assembly() pose([170, 335, 0], exploded = false) pose([ 42.20, 0.00, 159.60 ], exploded = true)
|
||||
assembly("main") {
|
||||
RPI_case_assembly();
|
||||
|
||||
explode(20, explode_children = true) {
|
||||
pbox_base_screws(box);
|
||||
|
||||
back_assembly();
|
||||
}
|
||||
}
|
||||
|
||||
if($preview) {
|
||||
if(assembly == "main")
|
||||
main_assembly();
|
||||
else if(assembly == "case")
|
||||
case_assembly();
|
||||
else if(assembly == "back")
|
||||
back_assembly();
|
||||
else if(assembly == "RPI")
|
||||
RPI_assembly();
|
||||
else if(assembly == "RPI_case")
|
||||
RPI_case_assembly();
|
||||
else if(assembly == "enviro_case")
|
||||
enviro_case_assembly();
|
||||
}
|
||||
else {
|
||||
gap = 5;
|
||||
|
||||
enviro_plus_case_stl();
|
||||
|
||||
translate([0, -depth - gap])
|
||||
enviro_plus_case_base_stl();
|
||||
|
||||
translate([0, -2 * (depth + gap)])
|
||||
bulkhead_stl();
|
||||
}
|
BIN
examples/EnviroPlus/stls/bulkhead.png
Normal file
After Width: | Height: | Size: 15 KiB |
4594
examples/EnviroPlus/stls/bulkhead.stl
Normal file
BIN
examples/EnviroPlus/stls/enviro_plus_case.png
Normal file
After Width: | Height: | Size: 14 KiB |
99318
examples/EnviroPlus/stls/enviro_plus_case.stl
Normal file
BIN
examples/EnviroPlus/stls/enviro_plus_case_base.png
Normal file
After Width: | Height: | Size: 7.9 KiB |
12070
examples/EnviroPlus/stls/enviro_plus_case_base.stl
Normal file
BIN
examples/EnviroPlus/stls/fan_duct.png
Normal file
After Width: | Height: | Size: 14 KiB |
8738
examples/EnviroPlus/stls/fan_duct.stl
Normal file
BIN
examples/EnviroPlus/stls/foot.png
Normal file
After Width: | Height: | Size: 26 KiB |