From 64da9b50104fd2f401d424aa346ecc67fad0c736 Mon Sep 17 00:00:00 2001 From: Thomas Gohle Date: Sun, 3 May 2026 14:50:10 +0200 Subject: [PATCH] Starting Repo and Project --- README.md | 125 ++------ .../0001_FireFly-Solar-2026-05-03_142401.zip | Bin 0 -> 3684 bytes .../0001_FireFly-Solar.kicad_pcb | 2 + .../0001_FireFly-Solar.kicad_prl | 105 +++++++ .../0001_FireFly-Solar.kicad_pro} | 143 ++++++--- .../0001_FireFly-Solar.kicad_sch | 22 ++ .../FireFly3DMechanical.FCStd | Bin 0 -> 6854 bytes .../FireFly3DMechanical_v0.1.scad | 288 ++++++++++++++++++ .../FireFly3DMechanical_v0.1.stl | Bin 0 -> 5684 bytes .../3D_Print-Designs/tetrahedron40mmC.stl | Bin 0 -> 5684 bytes .../0001-FireFly-2025-09-07_180819.zip | Bin 787 -> 0 bytes .../0001-FireFly-2025-09-07_181506.zip | Bin 3037 -> 0 bytes .../KiCad/0001-FireFly/0001-FireFly.kicad_pcb | 2 - .../KiCad/0001-FireFly/0001-FireFly.kicad_prl | 83 ----- .../KiCad/0001-FireFly/0001-FireFly.kicad_sch | 21 -- 15 files changed, 538 insertions(+), 253 deletions(-) create mode 100644 hardware/0001_FireFly-Solar/0001_FireFly-Solar-backups/0001_FireFly-Solar-2026-05-03_142401.zip create mode 100644 hardware/0001_FireFly-Solar/0001_FireFly-Solar.kicad_pcb create mode 100644 hardware/0001_FireFly-Solar/0001_FireFly-Solar.kicad_prl rename hardware/{KiCad/0001-FireFly/0001-FireFly.kicad_pro => 0001_FireFly-Solar/0001_FireFly-Solar.kicad_pro} (75%) create mode 100644 hardware/0001_FireFly-Solar/0001_FireFly-Solar.kicad_sch create mode 100644 hardware/3D_Print-Designs/FireFly3DMechanical.FCStd create mode 100644 hardware/3D_Print-Designs/FireFly3DMechanical_v0.1.scad create mode 100644 hardware/3D_Print-Designs/FireFly3DMechanical_v0.1.stl create mode 100644 hardware/3D_Print-Designs/tetrahedron40mmC.stl delete mode 100644 hardware/KiCad/0001-FireFly/0001-FireFly-backups/0001-FireFly-2025-09-07_180819.zip delete mode 100644 hardware/KiCad/0001-FireFly/0001-FireFly-backups/0001-FireFly-2025-09-07_181506.zip delete mode 100644 hardware/KiCad/0001-FireFly/0001-FireFly.kicad_pcb delete mode 100644 hardware/KiCad/0001-FireFly/0001-FireFly.kicad_prl delete mode 100644 hardware/KiCad/0001-FireFly/0001-FireFly.kicad_sch diff --git a/README.md b/README.md index 1d96861..9a25442 100644 --- a/README.md +++ b/README.md @@ -1,116 +1,47 @@ -# ToGo-Lab FireFly Morse Blinker +# FireFly Solar / 日輪蛍 -**DIY kit**: ATtiny-based Morse blinker. Through-hole. No mains. Simple on purpose. -**Default license**: [CC-BY-NC-4.0](https://creativecommons.org/licenses/by-nc/4.0/) +**Nichirin Hotaru** +*A small solar-powered Morse firefly for the outdoors.* ---- +**太陽を宿し、夜にモールスを灯す蛍。** +*Taiyō o yadoshi, yoru ni Mōrusu o tomosu hotaru.* +*A firefly carrying the sun, lighting Morse in the night.* -## Intro +## Overview -This is my “Hello World” hardware project on the new ToGo-Lab server. +FireFly Solar is a small outdoor LED blinker inspired by the idea of an LED throwie, but powered by sunlight instead of a disposable coin cell. -Years ago I built a tiny Morse throwie: ATtiny + one LED + one resistor, plus firmware. This version adds a supercapacitor and small solar cells. It uses the LED as a light detector, so it only blinks in the dark. +During the day, the solar cell charges the energy storage. +At night, the circuit wakes up and sends a simple Morse-style light signal. -It's not a throwie anymore. Hang it anywhere with decent light (for charging) and dry conditions and let it blink Morse on its own during night. +The project is partly a small garden object, partly a low-power electronics experiment, and partly a design exercise for future DIY kits. -Goal: a beginner-friendly DIY kit with clear docs and hackable firmware. +## Project Goals -Checkout also the [blog about this project](https://https://togo-lab.io/?p=82). -ToGo-Lab Cloud [link](https://nextcloud.togo-lab.io/index.php/f/1176), actual internal link only. -Suggestions welcome. Open an issue or email [tgohle@togo-lab.io](mailto:tgohle@togo-lab.io). +- Build a solar-powered outdoor Morse blinker +- Keep the hardware simple and robust +- Improve practical low-power design skills +- Test mechanical concepts for outdoor 3D-printed parts +- Learn what is needed to turn a small electronics project into a possible DIY kit ---- +## Naming -## Repo layout -``` -├── doc -│   ├── assets // pictures, diagrams.. -│   └── logs // lab logs -├── firmware -│   ├── archive // archive, derived from... -│   │   └── ATTINY45_2014_MorseThrowie -│   │   ├── ATTINY45_2014_MorseThrowie.ino -│   │   └── pitches.h -│   ├── include -│ ├── FireFly_MorseBlinker // arduino IDE file -│   └── src -├── hardware -│   ├── CAD // CAD files for mechanical work -│   │   └── ToGo-Lab_FireFly_MorseThrowie.dxf -│   └── KiCad // KiCad project files -│   └── 0001-FireFly -│   ├── 0001-FireFly-backups -│   │   ├── 0001-FireFly-2025-09-07_180819.zip -│   │   └── 0001-FireFly-2025-09-07_181506.zip -│   ├── 0001-FireFly.kicad_pcb -│   ├── 0001-FireFly.kicad_prl -│   ├── 0001-FireFly.kicad_pro -│   └── 0001-FireFly.kicad_sch -├── License_-_CC_BY-NC_4.0.md -└── README.md -``` +The English project name remains: ---- +**FireFly Solar** -## Hardware -- **MCU**: ATtiny45/85 (internal RC clock, no crystal). -- **I/O**: 1× LED + series resistor. Unused pins broken out to breadboard-style pads. -- **Burning Attiny**: external ISP programmer via Arduino IDE; PDIP-8 ATtiny45/85 footprint. -- **Power**: 3V DC (coin cell & & solar cell + supercapacitor with Schottky diodes to extend battery power). -- **Safety**: low voltage only. Observe polarity. -- **PCB**: hackable; access to unused ATtiny pins. (big pads for beginners, clear silks, LED polarity marks) +For blog posts, documentation, and presentation, the project also uses the Japanese name: ---- +**日輪蛍 / Nichirin Hotaru** -## Firmware / Arduino IDE -- Follow `Documentation/ToGo-Lab_FireFly_ArduinoIDE_Program_Guide.md`. -- Board core: any stable ATtiny45/85 core. -- Clock: **internal**. No fuse change required for first tests. -- Programmer: USBasp / AVRISPmkII / Arduino-as-ISP. -- Open the sketch in `0001_FireFly/Program/`. - ---- - -## Assembly -- Follow `Documentation/ToGo-Lab_FireFly_Assembly_Guide.md`. -- First power-up: LED should blink test pattern. If not, recheck polarity and bridges. - ---- - -## Test / Bring-up -1. Visual check; no shorts. -2. Power at 3–5 V. Current < 10 mA idle. -3. Program firmware over ISP. -4. Verify Morse timing; adjust WPM in `config.h` if needed. -5. Optional: measure current. - ---- - -## BOM -- Follow `Documentation/ToGo-Lab_FireFly_BOM.csv` as source of truth. - ---- - -## Files to fabricate -- Gerbers and drill files from `KiCad/fab/` (board house-ready). -- Project file: `0001_FireFly/KiCad/ToGo-Lab_FireFly.kicad_pro`. - ---- - -## Known constraints -- Through-hole only. No reflow. -- Minimal I/O to keep it beginner-friendly. -- Low power is nice but optional; optimize after the basic release. - ---- - -## Roadmap (tech only) -- v0.1-proto: breadboard + first PCB, single message, speed presets. -- v1.0: build guide, BOM with alternates, pilot 10 units. -- v1.1: docs polish, optional brightness setting, minor PCB tweaks. +The name roughly means **sun-disc firefly**. It keeps the solar theme, adds a slightly mythic tone, and still fits a small piece of outdoor hardware. --- ## Contributing PRs and issues welcome. Keep it simple. -Photos of your build you send me go in `Documentation/gallery/` with a short caption and license notice. \ No newline at end of file +Photos of your build you send me go in `Documentation/gallery/` with a short caption and license notice. + +--- + +## Default license**: [CC-BY-NC-4.0](https://creativecommons.org/licenses/by-nc/4.0/) \ No newline at end of file diff --git a/hardware/0001_FireFly-Solar/0001_FireFly-Solar-backups/0001_FireFly-Solar-2026-05-03_142401.zip b/hardware/0001_FireFly-Solar/0001_FireFly-Solar-backups/0001_FireFly-Solar-2026-05-03_142401.zip new file mode 100644 index 0000000000000000000000000000000000000000..5b5ed797112cc530d5149abb25abedbb076423fd GIT binary patch literal 3684 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 literal 0 HcmV?d00001 diff --git a/hardware/0001_FireFly-Solar/0001_FireFly-Solar.kicad_pcb b/hardware/0001_FireFly-Solar/0001_FireFly-Solar.kicad_pcb new file mode 100644 index 0000000..ccd82d6 --- /dev/null +++ b/hardware/0001_FireFly-Solar/0001_FireFly-Solar.kicad_pcb @@ -0,0 +1,2 @@ +(kicad_pcb (version 20260206) (generator "pcbnew") (generator_version "10.0") +) \ No newline at end of file diff --git a/hardware/0001_FireFly-Solar/0001_FireFly-Solar.kicad_prl b/hardware/0001_FireFly-Solar/0001_FireFly-Solar.kicad_prl new file mode 100644 index 0000000..a8ce30d --- /dev/null +++ b/hardware/0001_FireFly-Solar/0001_FireFly-Solar.kicad_prl @@ -0,0 +1,105 @@ +{ + "board": { + "active_layer": 0, + "active_layer_preset": "", + "auto_track_width": true, + "hidden_netclasses": [], + "hidden_nets": [], + "high_contrast_mode": 0, + "net_color_mode": 1, + "opacity": { + "images": 0.6, + "pads": 1.0, + "shapes": 1.0, + "tracks": 1.0, + "vias": 1.0, + "zones": 0.6 + }, + "prototype_zone_fills": false, + "selection_filter": { + "dimensions": true, + "footprints": true, + "graphics": true, + "keepouts": true, + "lockedItems": false, + "otherItems": true, + "pads": true, + "text": true, + "tracks": true, + "vias": true, + "zones": true + }, + "visible_items": [ + "vias", + "footprint_text", + "footprint_anchors", + "ratsnest", + "grid", + "footprints_front", + "footprints_back", + "footprint_values", + "footprint_references", + "tracks", + "drc_errors", + "drawing_sheet", + "bitmaps", + "pads", + "zones", + "drc_warnings", + "drc_exclusions", + "locked_item_shadows", + "conflict_shadows", + "shapes", + "board_outline_area", + "ly_points" + ], + "visible_layers": "ffffffff_ffffffff_ffffffff_ffffffff", + "zone_display_mode": 0 + }, + "git": { + "integration_disabled": false, + "repo_type": "", + "repo_username": "", + "ssh_key": "" + }, + "meta": { + "filename": "0001_FireFly-Solar.kicad_prl", + "version": 5 + }, + "net_inspector_panel": { + "col_hidden": [], + "col_order": [], + "col_widths": [], + "custom_group_rules": [], + "expanded_rows": [], + "filter_by_net_name": true, + "filter_by_netclass": true, + "filter_text": "", + "group_by_constraint": false, + "group_by_netclass": false, + "show_time_domain_details": false, + "show_unconnected_nets": false, + "show_zero_pad_nets": false, + "sort_ascending": true, + "sorting_column": -1 + }, + "open_jobsets": [], + "project": { + "files": [] + }, + "schematic": { + "hierarchy_collapsed": [], + "selection_filter": { + "graphics": true, + "images": true, + "labels": true, + "lockedItems": false, + "otherItems": true, + "pins": true, + "ruleAreas": true, + "symbols": true, + "text": true, + "wires": true + } + } +} diff --git a/hardware/KiCad/0001-FireFly/0001-FireFly.kicad_pro b/hardware/0001_FireFly-Solar/0001_FireFly-Solar.kicad_pro similarity index 75% rename from hardware/KiCad/0001-FireFly/0001-FireFly.kicad_pro rename to hardware/0001_FireFly-Solar/0001_FireFly-Solar.kicad_pro index 9edcb98..9a63bd1 100644 --- a/hardware/KiCad/0001-FireFly/0001-FireFly.kicad_pro +++ b/hardware/0001_FireFly-Solar/0001_FireFly-Solar.kicad_pro @@ -1,25 +1,29 @@ { "board": { "3dviewports": [], - "design_settings": { - "defaults": {}, - "diff_pair_dimensions": [], - "drc_exclusions": [], - "rules": {}, - "track_widths": [], - "via_dimensions": [] - }, "ipc2581": { + "bom_rev": "", "dist": "", "distpn": "", "internal_id": "", "mfg": "", - "mpn": "" + "mpn": "", + "sch_revision": "0" }, + "layer_pairs": [], "layer_presets": [], "viewports": [] }, "boards": [], + "component_class_settings": { + "assignments": [], + "meta": { + "version": 0 + }, + "sheet_component_classes": { + "enabled": false + } + }, "cvpcb": { "equivalence_files": [] }, @@ -203,17 +207,23 @@ "bus_entry_needed": "error", "bus_to_bus_conflict": "error", "bus_to_net_conflict": "error", - "conflicting_netclasses": "error", "different_unit_footprint": "error", "different_unit_net": "error", "duplicate_reference": "error", "duplicate_sheet_names": "error", "endpoint_off_grid": "warning", "extra_units": "error", - "global_label_dangling": "warning", + "field_name_whitespace": "warning", + "footprint_filter": "warning", + "footprint_link_issues": "warning", + "four_way_junction": "warning", + "ground_pin_not_ground": "warning", "hier_label_mismatch": "error", + "isolated_pin_label": "warning", "label_dangling": "error", + "label_multiple_wires": "warning", "lib_symbol_issues": "warning", + "lib_symbol_mismatch": "warning", "missing_bidi_pin": "warning", "missing_input_pin": "warning", "missing_power_pin": "error", @@ -224,11 +234,18 @@ "no_connect_dangling": "warning", "pin_not_connected": "error", "pin_not_driven": "error", - "pin_to_pin": "warning", + "pin_to_pin": "error", "power_pin_not_driven": "error", + "same_local_global_label": "warning", + "similar_label_and_power": "warning", "similar_labels": "warning", - "simulation_model_issue": "ignore", + "similar_power": "warning", + "simulation_model_issue": "warning", + "single_global_label": "warning", + "stacked_pin_name": "warning", "unannotated": "error", + "unconnected_wire_endpoint": "warning", + "undefined_netclass": "error", "unit_value_mismatch": "error", "unresolved_variable": "error", "wire_dangling": "error" @@ -239,8 +256,8 @@ "pinned_symbol_libs": [] }, "meta": { - "filename": "0001-FireFly.kicad_pro", - "version": 1 + "filename": "0001_FireFly-Solar.kicad_pro", + "version": 3 }, "net_settings": { "classes": [ @@ -255,15 +272,17 @@ "microvia_drill": 0.1, "name": "Default", "pcb_color": "rgba(0, 0, 0, 0.000)", + "priority": 2147483647, "schematic_color": "rgba(0, 0, 0, 0.000)", "track_width": 0.2, + "tuning_profile": "", "via_diameter": 0.6, "via_drill": 0.3, "wire_width": 6 } ], "meta": { - "version": 3 + "version": 5 }, "net_colors": null, "netclass_assignments": null, @@ -271,21 +290,21 @@ }, "pcbnew": { "last_paths": { - "gencad": "", "idf": "", "netlist": "", "plot": "", - "pos_files": "", "specctra_dsn": "", - "step": "", - "svg": "", "vrml": "" }, "page_layout_descr_file": "" }, "schematic": { "annotate_start_num": 0, - "bom_export_filename": "", + "annotation": { + "method": 0, + "sort_order": 0 + }, + "bom_export_filename": "${PROJECTNAME}.csv", "bom_fmt_presets": [], "bom_fmt_settings": { "field_delimiter": ",", @@ -306,43 +325,57 @@ "name": "Reference", "show": true }, - { - "group_by": true, - "label": "Value", - "name": "Value", - "show": true - }, - { - "group_by": false, - "label": "Datasheet", - "name": "Datasheet", - "show": true - }, - { - "group_by": false, - "label": "Footprint", - "name": "Footprint", - "show": true - }, { "group_by": false, "label": "Qty", "name": "${QUANTITY}", "show": true }, + { + "group_by": true, + "label": "Value", + "name": "Value", + "show": true + }, { "group_by": true, "label": "DNP", "name": "${DNP}", "show": true + }, + { + "group_by": true, + "label": "Exclude from BOM", + "name": "${EXCLUDE_FROM_BOM}", + "show": true + }, + { + "group_by": true, + "label": "Exclude from Board", + "name": "${EXCLUDE_FROM_BOARD}", + "show": true + }, + { + "group_by": true, + "label": "Footprint", + "name": "Footprint", + "show": true + }, + { + "group_by": false, + "label": "Datasheet", + "name": "Datasheet", + "show": true } ], "filter_string": "", "group_symbols": true, - "name": "Grouped By Value", + "include_excluded_from_bom": true, + "name": "Default Editing", "sort_asc": true, "sort_field": "Reference" }, + "bus_aliases": {}, "connection_grid_size": 50.0, "drawing": { "dashed_lines_dash_length_ratio": 12.0, @@ -350,6 +383,7 @@ "default_line_thickness": 6.0, "default_text_size": 50.0, "field_names": [], + "hop_over_size_choice": 0, "intersheets_ref_own_page": false, "intersheets_ref_prefix": "", "intersheets_ref_short": false, @@ -370,23 +404,32 @@ "meta": { "version": 1 }, - "net_format_name": "", "page_layout_descr_file": "", "plot_directory": "", - "spice_current_sheet_as_root": false, - "spice_external_command": "spice \"%I\"", - "spice_model_current_sheet_as_root": true, - "spice_save_all_currents": false, - "spice_save_all_dissipations": false, - "spice_save_all_voltages": false, + "reuse_designators": true, "subpart_first_id": 65, - "subpart_id_separator": 0 + "subpart_id_separator": 0, + "top_level_sheets": [ + { + "filename": "0001_FireFly-Solar.kicad_sch", + "name": "Root", + "uuid": "d6486f66-f0ec-4484-bce4-0ec6b0e57e1d" + } + ], + "used_designators": "", + "variants": [] }, "sheets": [ [ - "f227a2cd-5cbd-41a5-87f8-a5c1515170aa", + "d6486f66-f0ec-4484-bce4-0ec6b0e57e1d", "Root" ] ], - "text_variables": {} + "text_variables": {}, + "tuning_profiles": { + "meta": { + "version": 0 + }, + "tuning_profiles_impedance_geometric": [] + } } diff --git a/hardware/0001_FireFly-Solar/0001_FireFly-Solar.kicad_sch b/hardware/0001_FireFly-Solar/0001_FireFly-Solar.kicad_sch new file mode 100644 index 0000000..d4bcb7b --- /dev/null +++ b/hardware/0001_FireFly-Solar/0001_FireFly-Solar.kicad_sch @@ -0,0 +1,22 @@ +(kicad_sch + (version 20260306) + (generator "eeschema") + (generator_version "10.0") + (uuid "d6486f66-f0ec-4484-bce4-0ec6b0e57e1d") + (paper "A4") + (title_block + (title "FireFly Solar") + (date "2026-05-03") + (rev "0") + (company "Tōgō Lab / 塔郷研究所") + (comment 1 "WWW: https://togo-lab.io") + (comment 2 "Email: tgohle@togo-lab.io") + ) + (lib_symbols) + (sheet_instances + (path "/" + (page "1") + ) + ) + (embedded_fonts no) +) diff --git a/hardware/3D_Print-Designs/FireFly3DMechanical.FCStd b/hardware/3D_Print-Designs/FireFly3DMechanical.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..6da9b16df61ccb08fb69873a4f9948a2b23842f3 GIT binary patch literal 6854 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 TRlx_yx`DyclJ8&tx0n74(39{@ literal 0 HcmV?d00001 diff --git a/hardware/3D_Print-Designs/FireFly3DMechanical_v0.1.scad b/hardware/3D_Print-Designs/FireFly3DMechanical_v0.1.scad new file mode 100644 index 0000000..d1e10af --- /dev/null +++ b/hardware/3D_Print-Designs/FireFly3DMechanical_v0.1.scad @@ -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."); +} diff --git a/hardware/3D_Print-Designs/FireFly3DMechanical_v0.1.stl b/hardware/3D_Print-Designs/FireFly3DMechanical_v0.1.stl new file mode 100644 index 0000000000000000000000000000000000000000..a26b0dc61a143be58c39ad18b98c9cde475997c7 GIT binary patch literal 5684 zcmbuDU1(fY5XX;&6cHs)5lUVJA=MBCo3;^c?tWPIK~nSJbD?0nBG_cHZTdl?S1~?_ z5JZVa#Wbm=6+x>Bq*QX74SlfEj|ZWIm;$ z|ID0^nVa6yp1$Xw$!&jVNB{0UFW+bW?^j7p5N4JOQ}gRgPo6%`UMaLK7;`hnBb5l4wwAq}(|Y#NR>clPC3PZO^Y@gWhv6MnNpiC_)1s`e_;Kmx7M!)lG$ zU`y+PZzK-M59V$22anJ5E^%=jS)C1d(V0Lij9e3kstAc3y{bus;+13<*G3cMP{>~K zP8_-TT>i!4A7x&T(Z$~UjmnxG`_FUyxihstiJ)B3*|=$+pcRkD#_lA90}>7U1nI%1 zrc6ua%SU33YNE_fs;##5eQ_*J)bQQXJY|XqIdYs=do>(L4!uM6S4ih8nG0#kbeafR zLlcP=t|r^)_4sJRv^{s2QI4<4%-GK@;i>d`$QrO$vO_HqI*ubxo}dQDWK5}s23v_& z=t+G7HPDJ9S6(@%(z%Ln2|SzL*yhVd9^Z*L@9D+fg%-a5jrkDA9nBJ z9>XkHTSdqkaNg*2#dPfz#QfmADX&5!PBa^*=ngft20`mhng56;wvJ4 zwG}6cma}k=nT#V(G~VzUTx-z^J=7ZesYZQ&@bV_^0MH8QjceOUtK{S8^Hq%rwBoU> zpe9)3+`-G=a$ka0m|aZ_ISpF}(F#4(#H$qfG0GKJPPUSh%9)nB#F205d^WDKqol!+qZP-r&YZA)qShE7;uG%`TA_!U7_5q1>NyfF^7#|4FWKj^ zyNTmKE7a3Oztb?hchSm^sWUcNO?ZuX1u0r<<@IcJ*2I1nx$XMU3N?J>Wr?FJ8l!VA z`${x0)0*H@OFebu`dvOBZq;x#HQ{%O?_QIgfgWn&@ak-|we`Rgz9WloHR}4Z($7&x zmQ{UXL>ZJmF}7kt-bFM)eWD`7if>V=uk{JE!h2T})aeJ(=~s71qCp*UPQ8Bw@-~4Q z7>6e4_6exd4}7N|M@v0C-5>7FOA~Y_2Gr@>Q;SyUVVdAI=k-7~~;1mqcDopjSZ9JI-Bb(7ZO& z57YZcLk(O5T$_3tdR|S_{}(Ry%M zi9EUc)&$Q()xh3SNE`Df-0k{C);EsO$(?xng^pRM26K3#^h~1BG1aaJJaz>% literal 0 HcmV?d00001 diff --git a/hardware/3D_Print-Designs/tetrahedron40mmC.stl b/hardware/3D_Print-Designs/tetrahedron40mmC.stl new file mode 100644 index 0000000000000000000000000000000000000000..67d85f68170627b9db045f9e4e5261799eb557b8 GIT binary patch literal 5684 zcma)AMZ)I&+s0inx-noe{B&t|%A$uDBA5(!-+!(3?e$-KpBX$b$L&7fZ++Lb zzHjxc?=C&_>T7+aEpPN~9_-s%>fKe^(Kpz?xwp5pwDij0;K0+%mk$jME%PszZQ1#H z>BV)=uJ2j3cC9IX2Iy6q?x~!uZ~CIeEa;Ng)yws%31be{@Z7U)SN3d?1m7T73iM1m zUX`DU1b{?!s1)mqb+nnJF;$-`U#M@Ye6n=mDOhrPa&i^xTfFA2iI@9t)cX71tr#;; zh$}+;CjB5Z6QpJZCAkFxJs(Oy%y?^Bz?{G(H@+ z(Qj^!BTp_LAdqwrEX6(*iLc&%VTBS}C2Unpv^gD#TBXtD+{6T`5LU@Qm5%ERyGBPo zm_R2i3lDyP&H#dJ&B%0W6X{=Zv>>lKGW2;t_HHNWOycW|E=^~LJx-k)?IGa|7NaN%3 zae8ux-FF;O_&47S*!NBr;vm>|CSa9Ts3k-ip9Fg_`z0ohmyIbk(E%y7iY-ADniH&p zrQmsFm9+^~f(OkMq%;TOUv~0YVSFXt^XwO1clU6|sYSj*Gs2$K_@C7@6L93 zF8jk)HP;wN0kZLq(tVJpiy4IH93Nh{V3pTnGnhq@={bq4MmaZoe_MUB7%N{Tq$A{G zP9m!-&PQ{?c^=k5G~Sic7Azj<;9#I zOfO#3D!NMEkK1V~=Y%ovoTc!r8H@?9<5TEhDUNPTwEI4YSg{oQ5feOLK}z>IBCUN1 zo}Za)&-!`NxGK?gy*5a>d<;CIbrpyfiLT5emS8FP)M{SJYBvy=mZTEP>bXj>g|St6 z&$XX3;XF@1c6Fs0gdZ%$R>edKG#Dw?U5-i2h zjfuO&kDFQl2vx!s#>C%gD!02$HjB?cR4;G%Xn@zj-vWiYfpY%X&!8=zZZsD%Ral=aP-hn4b`I&QU7TWsM zl(6?f)^{u2*#+H29r{aNhw3(FbmU&CE;l7ZiV2k>Yb77E_z~SwS)U^=f7^ZH)U5+g z@-G}8y!Ut9kiiOAt_HS*p6`qpqm^uQu{u6UH2d%jcWC?jQqOKKb)xoL2$n*J(`l(d zSOuy>r9kM^*POr<&Yjagi#4Wt>yNK7qg3%Mf7!?Rp%Vc2+5(X{Nd0iVmh}|~uO*4j zcJ2&^w%;SxeQqtxOp*ua2;Gv;;JFFy$b8PvN{rLZ#O|n2OMEf}yOILI)y}jsF~PMI zS0Y??e=&h|q#M{XifMQ5Ht!$tiKBGr9~bwIenw~e81Ja&XZxQ+MXK5|6_#Aq#cv7%?=WK?~5KEIx#)CC4>t7r5%E3lXL+~QVmpAA>?XukL`rXd` zh03hu4;+km=Sa@)_E7j+ot$jD%w>0GS)TRA{=@I)u4Rff>rQfh@KLO~^-rj_!C9-b znbYQ#C|x?ccgi|0=Y0}k>-UQ!f8<6Dq{=hl4^x4G)QUS^ijy;ZyB)b26a-wq&rK>= zI@=)o;@mx|EV0(XPek+aL?ezx zLKoW}t$+Jnuy$?hDuyS0)>CU<#KkmkuF2I~`{%>%+>V-rFCj}-%GAS_NPBK6j zA_43P2;B_yG=MOm7|6tCMo~Vx8R$WTFk=QIRx^MB7U0dw22#figlB-XAutUxFaQ9z CArG7Y diff --git a/hardware/KiCad/0001-FireFly/0001-FireFly-backups/0001-FireFly-2025-09-07_181506.zip b/hardware/KiCad/0001-FireFly/0001-FireFly-backups/0001-FireFly-2025-09-07_181506.zip deleted file mode 100644 index 6340087752320a6539cd87d444dd4dda1a167ed6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3037 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 mfkF6R#{ZV#7b6t>TgFi}FleSDfdT+PN0