additional mechanical parts for housing
This commit is contained in:
Binary file not shown.
@@ -1,288 +0,0 @@
|
||||
/*
|
||||
FireFly tetrahedron adapter
|
||||
Base STL: tetrahedron40mmC.stl
|
||||
|
||||
Purpose:
|
||||
- Import original 40 mm foldable tetrahedron STL
|
||||
- Scale it to 60 mm base geometry
|
||||
- Add cable holes, vent/drain holes, and optional PCB mounting holes
|
||||
|
||||
Workflow:
|
||||
1. Set PART = "upper"
|
||||
2. Render with F6
|
||||
3. Export STL
|
||||
4. Set PART = "lower"
|
||||
5. Render with F6
|
||||
6. Export STL
|
||||
|
||||
Notes:
|
||||
- Hole coordinates are defined on the original 40 mm STL coordinate system.
|
||||
- The script scales them automatically to 60 mm.
|
||||
- First export should be treated as v0.1 prototype.
|
||||
*/
|
||||
|
||||
|
||||
/* =========================
|
||||
Main selection
|
||||
========================= */
|
||||
|
||||
PART = "upper"; // "upper", "lower", or "both_preview"
|
||||
|
||||
|
||||
/* =========================
|
||||
Input file
|
||||
========================= */
|
||||
|
||||
input_stl = "tetrahedron40mmC.stl";
|
||||
|
||||
|
||||
/* =========================
|
||||
Scaling
|
||||
========================= */
|
||||
|
||||
// Original tetrahedron edge length
|
||||
original_edge_mm = 40;
|
||||
|
||||
// Target mechanical base size
|
||||
target_edge_mm = 60;
|
||||
|
||||
// XY scale from 40 mm to 60 mm
|
||||
scale_xy = target_edge_mm / original_edge_mm; // 1.5
|
||||
|
||||
// Keep original thickness.
|
||||
// Set to 1.2 or 1.3 if you want a slightly thicker part.
|
||||
scale_z = 1.0;
|
||||
|
||||
|
||||
/* =========================
|
||||
General hole settings
|
||||
========================= */
|
||||
|
||||
hole_fn = 40;
|
||||
cut_height = 20;
|
||||
|
||||
|
||||
/* =========================
|
||||
Feature switches
|
||||
========================= */
|
||||
|
||||
add_upper_cable_holes = true;
|
||||
add_upper_hanger_hole = true;
|
||||
|
||||
add_lower_vent_holes = true;
|
||||
add_lower_cable_holes = true;
|
||||
add_lower_pcb_mount_holes = true;
|
||||
|
||||
// Keep this false for the first prototype.
|
||||
// Standoffs may interfere with folding depending on print orientation.
|
||||
add_lower_pcb_standoffs = false;
|
||||
|
||||
|
||||
/* =========================
|
||||
Hole sizes
|
||||
========================= */
|
||||
|
||||
cable_hole_d = 3.2; // for small solar-panel wires
|
||||
hanger_hole_d = 3.5; // for small ring / wire / eyelet
|
||||
vent_hole_d = 2.0; // condensation vent / drain holes
|
||||
pcb_screw_hole_d = 2.2; // M2 clearance-ish
|
||||
pcb_standoff_d = 6.0;
|
||||
pcb_standoff_h = 3.0;
|
||||
|
||||
|
||||
/* =========================
|
||||
Coordinate reference
|
||||
=========================
|
||||
|
||||
The uploaded STL is approximately:
|
||||
|
||||
X: -34.64 to +34.64
|
||||
Y: -20.00 to +60.00
|
||||
Z: -0.10 to +2.00
|
||||
|
||||
The original model is a flat foldable tetrahedron net.
|
||||
Coordinates below are before scaling.
|
||||
*/
|
||||
|
||||
|
||||
/* =========================
|
||||
Upper part hole positions
|
||||
========================= */
|
||||
|
||||
// Cable holes for three solar panels.
|
||||
// Adjust after checking where your real panel wires exit.
|
||||
upper_cable_points = [
|
||||
[-18, 20],
|
||||
[ 24, 7],
|
||||
[ 24, 33]
|
||||
];
|
||||
|
||||
// Optional hanger hole close to one upper fold/vertex area.
|
||||
// If this weakens the corner too much, disable it and use an external loop instead.
|
||||
upper_hanger_points = [
|
||||
[0, 38]
|
||||
];
|
||||
|
||||
|
||||
/* =========================
|
||||
Lower part hole positions
|
||||
========================= */
|
||||
|
||||
// Cable transfer holes between upper solar section and lower electronics bay.
|
||||
lower_cable_points = [
|
||||
[-10, 20],
|
||||
[ 12, 13],
|
||||
[ 12, 27]
|
||||
];
|
||||
|
||||
// Small vent/drain hole clusters near likely lower/edge areas.
|
||||
// These are deliberately small.
|
||||
lower_vent_centres = [
|
||||
[ 0, 3],
|
||||
[ 0, 37],
|
||||
[-30, 20],
|
||||
[ 31, 20]
|
||||
];
|
||||
|
||||
// Approximate triangular PCB mounting pattern.
|
||||
// Tune this after measuring your actual red triangle PCB.
|
||||
lower_pcb_mount_points = [
|
||||
[ 0, 8],
|
||||
[ 25, 20],
|
||||
[ 0, 32]
|
||||
];
|
||||
|
||||
|
||||
/* =========================
|
||||
Basic modules
|
||||
========================= */
|
||||
|
||||
module base_import_scaled()
|
||||
{
|
||||
scale([scale_xy, scale_xy, scale_z])
|
||||
import(input_stl, convexity = 10);
|
||||
}
|
||||
|
||||
|
||||
module vertical_hole(p, d)
|
||||
{
|
||||
translate([p[0] * scale_xy, p[1] * scale_xy, 1])
|
||||
cylinder(h = cut_height, d = d, center = true, $fn = hole_fn);
|
||||
}
|
||||
|
||||
|
||||
module vent_cluster(p)
|
||||
{
|
||||
// Small 2 x 3 vent/drain pattern.
|
||||
// Pitch is in final millimetres, not original model coordinates.
|
||||
pitch = 3.0;
|
||||
|
||||
for (ix = [-1, 0, 1])
|
||||
for (iy = [0, 1])
|
||||
translate([
|
||||
p[0] * scale_xy + ix * pitch,
|
||||
p[1] * scale_xy + iy * pitch,
|
||||
1
|
||||
])
|
||||
cylinder(h = cut_height, d = vent_hole_d, center = true, $fn = hole_fn);
|
||||
}
|
||||
|
||||
|
||||
module pcb_standoff(p)
|
||||
{
|
||||
// Standoff added on top of the flat STL.
|
||||
// Use only if you confirm it does not block folding.
|
||||
translate([p[0] * scale_xy, p[1] * scale_xy, 2.1 * scale_z])
|
||||
cylinder(h = pcb_standoff_h, d = pcb_standoff_d, center = false, $fn = hole_fn);
|
||||
}
|
||||
|
||||
|
||||
/* =========================
|
||||
Upper tetrahedron
|
||||
========================= */
|
||||
|
||||
module upper_part()
|
||||
{
|
||||
difference()
|
||||
{
|
||||
base_import_scaled();
|
||||
|
||||
if (add_upper_cable_holes)
|
||||
{
|
||||
for (p = upper_cable_points)
|
||||
vertical_hole(p, cable_hole_d);
|
||||
}
|
||||
|
||||
if (add_upper_hanger_hole)
|
||||
{
|
||||
for (p = upper_hanger_points)
|
||||
vertical_hole(p, hanger_hole_d);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* =========================
|
||||
Lower tetrahedron
|
||||
========================= */
|
||||
|
||||
module lower_part()
|
||||
{
|
||||
difference()
|
||||
{
|
||||
union()
|
||||
{
|
||||
base_import_scaled();
|
||||
|
||||
if (add_lower_pcb_standoffs)
|
||||
{
|
||||
for (p = lower_pcb_mount_points)
|
||||
pcb_standoff(p);
|
||||
}
|
||||
}
|
||||
|
||||
if (add_lower_cable_holes)
|
||||
{
|
||||
for (p = lower_cable_points)
|
||||
vertical_hole(p, cable_hole_d);
|
||||
}
|
||||
|
||||
if (add_lower_vent_holes)
|
||||
{
|
||||
for (p = lower_vent_centres)
|
||||
vent_cluster(p);
|
||||
}
|
||||
|
||||
if (add_lower_pcb_mount_holes)
|
||||
{
|
||||
for (p = lower_pcb_mount_points)
|
||||
vertical_hole(p, pcb_screw_hole_d);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* =========================
|
||||
Output
|
||||
========================= */
|
||||
|
||||
if (PART == "upper")
|
||||
{
|
||||
upper_part();
|
||||
}
|
||||
else if (PART == "lower")
|
||||
{
|
||||
lower_part();
|
||||
}
|
||||
else if (PART == "both_preview")
|
||||
{
|
||||
translate([-80, 0, 0])
|
||||
upper_part();
|
||||
|
||||
translate([80, 0, 0])
|
||||
lower_part();
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("Invalid PART setting. Use upper, lower, or both_preview.");
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user