Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
0b79bd1
hw: OpenSCAD enclosure and outdoor sensor shield in openscad/
arcadien Oct 25, 2026
e474cb0
hw: side cable gland, table stand, smaller sensor shield, open-box re…
arcadien Oct 26, 2026
fddac9a
hw: decorative mushroom enclosure, cropped PCB model
arcadien Oct 26, 2026
f8355b5
hw: mushroom v2 — one-piece cap on a tilted stem, lobed outline, tip
arcadien Oct 26, 2026
05aad2a
hw: mushroom stem and ground — lobed stem, flared foot, wavy ring, grass
arcadien Oct 26, 2026
8810db2
hw: printable 3MF exports in openscad/print/ and export.sh
arcadien Oct 26, 2026
514ad34
hw: removable 18650 cradle for the mushroom stem
arcadien Oct 27, 2026
9c05e79
hw: ballast chamber in the mushroom stem
arcadien Oct 27, 2026
efdd7e8
hw: ballast chamber follows the stem skin
arcadien Oct 27, 2026
4fc2a83
hw: README — print the mushroom stem with 6 walls
arcadien Oct 27, 2026
565fdfe
docs: CLAUDE.md hardware and OpenSCAD conventions
arcadien Oct 27, 2026
d6d6f19
docs: power wire pairs red/black battery, white/blue regulated
arcadien Oct 27, 2026
9da0d27
docs: blue wire reserved for power, purple for select signals
arcadien Oct 27, 2026
41b3003
hw: mushroom.scad — move mid-file parameters to the header
arcadien Oct 27, 2026
ff3cea7
docs: CLAUDE.md hardware conventions — full color tables, wire ends, …
arcadien Oct 27, 2026
5e9bc86
hw: mushroom — BME280 plugged under the PCB, no sensor wires
arcadien Oct 27, 2026
a091648
hw: mushroom battery harness PDF, sensor render, chassis/deck/gills 3MF
arcadien Oct 27, 2026
6662107
docs: mushroom wiring, assembly order and parts list
arcadien Oct 27, 2026
86c4170
conf: ignore KiCad local history and lock files
arcadien Oct 27, 2026
1576834
hw: mushroom dome — corbels instead of rim tabs, apex over the radio
arcadien Oct 28, 2026
35fef86
hw: mushroom dome 3MF, reframed renders, corbel section render
arcadien Oct 28, 2026
99f4b5a
docs: mushroom dome corbels, apex over J1, dot counts, heights
arcadien Oct 28, 2026
5a2493c
hw: mushroom gourd cap from sketch, foot shortened 30 mm
arcadien Nov 2, 2026
f963398
hw: mushroom renders for the gourd cap, reframed cameras
arcadien Nov 2, 2026
7c7991a
hw: mushroom console render reframed for the narrower rim
arcadien Nov 2, 2026
1cc5e23
docs: mushroom gourd cap, shorter foot, reduced ballast, stability note
arcadien Nov 2, 2026
713b120
hw: mushroom wider waist, half the dots, larger share of big dots
arcadien Nov 2, 2026
2ffc4fb
docs: mushroom waist and dot counts
arcadien Nov 2, 2026
57d1d38
hw: mushroom stem without waist, straight taper up to the collar
arcadien Nov 2, 2026
4fefffd
docs: mushroom stem dimensions
arcadien Nov 2, 2026
0bba801
hw: regenerate mushroom 3MF for the gourd cap and shorter stem
arcadien Nov 2, 2026
47666c6
hw: mushroom top brought back toward the stem axis
arcadien Nov 2, 2026
13f0cc0
docs: mushroom top offset, antenna path, stability estimate, harness …
arcadien Nov 2, 2026
99fc8bc
hw: mushroom top leans 8° from the narrowing shoulder
arcadien Nov 2, 2026
0799d3d
docs: mushroom top lean, antenna follows the neck
arcadien Nov 2, 2026
5860c6f
hw: mushroom board and battery 20 mm higher, ballast back to ~229 g
arcadien Nov 2, 2026
77bc9b3
hw: mushroom board turned 180°, apex back over J1
arcadien Nov 2, 2026
3937d6c
docs: mushroom raised electronics, rotated board, W5/W6 60 mm, JST in…
arcadien Nov 2, 2026
81b3dbe
docs: mushroom harness diagram label, cradle spans stem and chamber
arcadien Nov 2, 2026
675a3a1
hw: mushroom electronics 20 mm higher again, slanted top vent
arcadien Nov 2, 2026
fcf9836
docs: mushroom chamber height, top vent, W5/W6 70 mm, ballast figures
arcadien Nov 2, 2026
49078fb
hw: regenerate mushroom 3MF for raised electronics, rotated board and…
arcadien Nov 2, 2026
743cc29
docs: mushroom harness checked against the model, W3/W4 100 mm
arcadien Nov 2, 2026
3cc6374
hw: mushroom USB moved to a side bulge on the foot
arcadien Nov 2, 2026
a56efc3
hw: mushroom renders with the foot bulge, new USB side render
arcadien Nov 2, 2026
613dffb
docs: mushroom USB in the foot, W7-W10, second JST pair, assembly steps
arcadien Nov 2, 2026
cc14016
docs: mushroom harness, remove clipped label
arcadien Nov 2, 2026
d990efb
hw: mushroom USB back under the cap, foot bulge dropped
arcadien Nov 2, 2026
3446343
hw: mushroom charger to measured size, 28.7 x 17.15 x 0.9
arcadien Nov 2, 2026
155496e
docs: mushroom charger size, cap lift for battery change
arcadien Nov 2, 2026
dce222e
hw: mushroom bulbous amanita foot and upturned ring from sketch
arcadien Nov 2, 2026
a3b6316
docs: mushroom bulbous foot, cup ring, ballast and stability figures
arcadien Nov 2, 2026
e32b4b4
hw: mushroom bulb narrows faster, slimmer foot
arcadien Nov 2, 2026
e994143
docs: mushroom cap top is solid only to avoid supports, keep infill low
arcadien Nov 2, 2026
39b8190
docs: mushroom neck diameter
arcadien Nov 2, 2026
d1b4257
hw: mushroom cap rim 6 mm wide for bed adhesion
arcadien Nov 2, 2026
a30d16e
docs: mushroom cap rim width
arcadien Nov 2, 2026
d92b84b
hw: regenerate mushroom 3MF for bulb foot, cup ring, cap rim and charger
arcadien Nov 2, 2026
697ea87
docs: mushroom harness wire gauge, pair rings, JST polarity
arcadien Nov 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ flash.log

# --- KiCAD cache ---
hardware/kicad/fp-info-cache
# sauvegardes locales et verrous de KiCad
.history/
*.lck

# --- RBD ephemeral push validation cache ---
.rbd/.push-validated
Expand Down
42 changes: 42 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,3 +93,45 @@ find src lib include test -name '*.cpp' -o -name '*.h' | xargs clang-format -i
| `USE_CHARGE_PUMP` | Board uses a charge pump for sensor power |
| `SLEEP_TIME_IN_SECONDS` | Hibernate duration between measurements |
| `BATTERY_VOLTAGE_X10_ID` / `ANALOG1_X10_ID` | X10 meter IDs for reporting |

## Hardware Conventions

### Wire colors
Power goes in pairs (thick wire):
| Pair (+ / −) | Use |
|---------------|-----|
| red / black | battery and 5V: B+/B−, VBAT, switched battery rail, VUSB |
| white / blue | regulated or stepped voltages: 3V3, buck/boost outputs (never yellow) |
| grey | speaker |

Signals (thin wire), by role:
| Color | Use |
|--------|-----|
| yellow | clocks: SCK, BCLK, SCL, SD_CLK |
| green | data: MOSI, DIN, SDA, SD_D0 |
| purple | select / frame: CS, LRC/WS, SD_CMD |
| red | status: DC, interrupts, PIR out |
| orange | reset, detect (RST, USB_DET) |
| brown | enables / analog: BL_EN, VBAT/2, *_SD, *_EN |

The kit has 10 colors: red, black, white, blue, yellow, green, purple, orange, brown, grey. **Blue is reserved for power** (regulated GND) and never carries a signal. When several buses share colors, tell them apart with 1 / 2 / 3 heat-shrink rings at each end.

### Wire ends
Label every wire end as **soldered**, **Dupont** or **JST-XH** (with F/M contact), on both ends, and give each wire's length, in every doc and diagram.

### Resistors
Current-limiting and pull resistors sit **at the board end**, never at the LED or the sensor.

### Images
Strip EXIF/GPS from every image before committing: `python3 ~/.claude/skills/hardware-change/scripts/strip_exif.py <paths>` (`--check` to verify).

### Commits
No pre-push hook; prefixes are the RBD ones above plus `hw:` for hardware (`openscad/`, `hardware/`) and `docs:` for doc-only commits. Make granular commits, one per area, and push after each.

## Modeling

### OpenSCAD / Printing
- Define all parameters at the top of the file, before any formula that uses them. Expose dimensions as named parameters.
- After editing, render with `openscad -o` and check for errors before saying it's done.
- Don't claim parts fit an Ender 3 (220x220) or CR-10 plate unless you've checked the bounding boxes. Flag any overhang over 45° that a design change introduces.
- Regenerating 3MF files wipes the Orca plate layout, so warn me before doing it.
1 change: 1 addition & 0 deletions openscad/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
out/
219 changes: 219 additions & 0 deletions openscad/README.md

Large diffs are not rendered by default.

38 changes: 38 additions & 0 deletions openscad/assembly.scad
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Vue d'ensemble : boîtier version "ext" + abri de sonde clipsé dessous,
// au mur (mount = "wall") ou sur le pied de table (mount = "stand", stand.scad).
// Les paramètres ci-dessous doivent rester alignés sur les modèles.
// Rendu : openscad --preview --camera=0,0,0,-20,-25,0,0 --viewall --autocenter --imgsize=1000,1200 -o rendu.png assembly.scad
// openscad --preview -D 'mount="stand"' --camera=0,0,0,-20,-35,0,0 --viewall --autocenter --imgsize=1000,1200 -o rendu_pied.png assembly.scad

mount = "wall"; // [wall, stand]

use <tinysensor_box.scad>
use <sensor_shield.scad>
use <stand.scad>
use <euro2.scad>
// paramètres repris des deux fichiers
cav_w = 95.98; reach = 22.4; base_h = 2.4 + 5 + 1.6 + 25 + 2;
gap = 10; plate_t = 1.6; n = 4; stack_h = (n + 1) * gap + plate_t;
wall_y = 40; clip_t = 4; clip_gap = 6;
cx = cav_w / 2; oy = -reach - (stack_h + clip_gap); W = wall_y + clip_t;
// mur

// boîtier
color("DimGray") base(usage = "ext");
color("Gray") translate([0, 0, base_h]) lid();
// abri (coords d'usage de l'abri -> coords boîtier)
multmatrix([[1, 0, 0, cx], [0, 0, 1, oy], [0, -1, 0, W], [0, 0, 0, 1]]) {
color("White") base_print();
for (i = [1 : n]) color("WhiteSmoke") translate([0, 0, i * gap + plate_t]) mirror([0, 0, 1]) plate_print();
color("Gainsboro") translate([0, 0, stack_h]) mirror([0, 0, 1]) cap_print();
}
color("SteelBlue") translate([cx, oy, 0]) clip_use();
if (mount == "stand") {
color("Peru") mast_use();
color("Sienna") foot_use();
}

// pièce de 2 € pour l'échelle (euro2.scad)
// au mur : à plat contre le mur, à droite de l'abri ; sur pied : posée sur la table devant la semelle
if (mount == "stand") translate([cx + 45, -114, 115]) rotate([-90, 0, 0]) euro2();
else translate([cav_w + 35, -60, 0]) euro2();
Binary file added openscad/champignon_graines.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions openscad/euro2.scad
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// Pièce de 2 € (Ø25,75 × 2,2 mm, cœur Ø18,75), posée à plat sur Z = 0 : sert d'échelle dans les rendus.
module euro2() {
color("Silver") difference() { cylinder(d = 25.75, h = 2.2, $fn = 96); translate([0, 0, -0.1]) cylinder(d = 18.75, h = 2.4, $fn = 96); }
color("Gold") cylinder(d = 18.75, h = 2.2, $fn = 96);
}

euro2();
49 changes: 49 additions & 0 deletions openscad/export.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/usr/bin/env bash
# Exporte toutes les pièces imprimables en 3MF (orientation d'impression) dans print/.
# Usage : ./export.sh [stl] — "stl" pour des STL au lieu des 3MF.
# Le suffixe _xN indique le nombre d'exemplaires à imprimer.
set -euo pipefail
cd "$(dirname "$0")"
OPENSCAD=$(ls ~/bin/OpenSCAD-*.AppImage | tail -1)
ext=${1:-3mf}
out=print
mkdir -p "$out"

jobs=()
run() { # run <fichier.scad> <sortie> [-D ...]
local src=$1 dst=$2; shift 2
"$OPENSCAD" "$@" -o "$out/$dst.$ext" "$src" >"$out/$dst.log" 2>&1 && rm "$out/$dst.log" &
jobs+=($!)
}

# Boîtier mural
run tinysensor_box.scad box_base_ext -D 'part="base"' -D 'usage="ext"'
run tinysensor_box.scad box_base_int -D 'part="base"' -D 'usage="int"'
run tinysensor_box.scad box_lid -D 'part="lid"'
# Abri de sonde
run sensor_shield.scad shield_cap -D 'part="cap"'
run sensor_shield.scad shield_plate_x4 -D 'part="plate"'
run sensor_shield.scad shield_base -D 'part="base"'
run sensor_shield.scad shield_clip -D 'part="clip"'
# Pied de table
run stand.scad stand_mast -D 'part="mast"'
run stand.scad stand_foot -D 'part="foot"'
# Champignon (nombre de pois : voir l'écho « Pois » de mushroom.scad)
run mushroom.scad mushroom_cap -D 'part="cap"'
run mushroom.scad mushroom_gills -D 'part="gills"'
run mushroom.scad mushroom_chassis -D 'part="chassis"'
run mushroom.scad mushroom_deck -D 'part="deck"'
run mushroom.scad mushroom_stem -D 'part="stem"'
run mushroom.scad mushroom_ground -D 'part="ground"'
run mushroom.scad mushroom_cradle -D 'part="cradle"'
run mushroom.scad mushroom_plug -D 'part="plug"'
run mushroom.scad mushroom_dot6_x45 -D 'part="dot"' -D 'dot_d=6'
run mushroom.scad mushroom_dot8_x26 -D 'part="dot"' -D 'dot_d=8'
run mushroom.scad mushroom_dot10_x28 -D 'part="dot"' -D 'dot_d=10'

fail=0
for j in "${jobs[@]}"; do wait "$j" || fail=1; done
if ls "$out"/*.log >/dev/null 2>&1; then
echo "Échec : voir $out/*.log" >&2; exit 1
fi
[ $fail -eq 0 ] && echo "OK : $(ls "$out"/*."$ext" | wc -l) fichiers dans $out/"
Binary file added openscad/faisceau_champignon.pdf
Binary file not shown.
Loading
Loading