Starting Repo and Project
This commit is contained in:
BIN
hardware/3D_Print-Designs/FireFly3DMechanical.FCStd
Normal file
BIN
hardware/3D_Print-Designs/FireFly3DMechanical.FCStd
Normal file
Binary file not shown.
288
hardware/3D_Print-Designs/FireFly3DMechanical_v0.1.scad
Normal file
288
hardware/3D_Print-Designs/FireFly3DMechanical_v0.1.scad
Normal file
@ -0,0 +1,288 @@
|
||||
/*
|
||||
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.");
|
||||
}
|
||||
BIN
hardware/3D_Print-Designs/FireFly3DMechanical_v0.1.stl
Normal file
BIN
hardware/3D_Print-Designs/FireFly3DMechanical_v0.1.stl
Normal file
Binary file not shown.
BIN
hardware/3D_Print-Designs/tetrahedron40mmC.stl
Normal file
BIN
hardware/3D_Print-Designs/tetrahedron40mmC.stl
Normal file
Binary file not shown.
Reference in New Issue
Block a user