Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 6 additions & 3 deletions openscad/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ Pièces :
- base bulbeuse dissymétrique (`bulb_r`, `bulb_z`, `bulb_up`, `bulb_dn`, `foot_dir`) : épaule plus marquée d'un côté, dessous arrondi à 44° au plus ;
- anneau en **coupelle** sous le chapeau (`ring_z`, `ring_ext`, `ring_rise`), bord relevé et ondulé (`ring_amp`), 45° au plus : sans support. Les ondulations sont calées (`ring_rot`) pour que la coupelle soit en creux sous la prise USB : son bord reste à 2 mm en deçà de la fenêtre sous la fiche (vérifié par un `assert`), le câble se branche par en dessous.
- En haut, un tenon incliné de 6° (`cap_tilt`) s'emboîte dans le fourreau, 1 vis M3 radiale côté +X, sous la prise USB (`collar_screw_a`).
- **Berceau** (`cradle`) 74,8 × Ø28,6 mm : gouttière amovible pour une **18650 nue** (65 mm, téton plat ; `cell_l` pour une autre longueur), sans soudure sur l'accu. Deux **butées à languette** (plaque 13 × 11 mm, languette 3 × 7 percée) glissées dans des rainures : ressort côté « − » en bas, bossage côté « + » en haut (polarité gravée sur les bouts). Les languettes traversent le fond et sortent dans le méplat, où passent les fils jusqu'au fourreau (W1 rouge 40 mm, W2 noir 110 mm, soudé → JST-XH F, voir *Câblage*) ; on soude les fils sur les languettes, pas sur l'accu. L'accu entre par la fente du dessus en comprimant le ressort (≈ 4 mm, `spring_c`). Trou de tirage Ø2,5 en haut (ficelle, nœud à l'intérieur). Imprimé à plat, méplat sur le plateau, sans support. ![Berceau : monté et nu](rendu_champignon_berceau.png)
- **Berceau** (`cradle`) 74,8 × Ø27,8 mm : gouttière amovible pour une **18650 nue** (65 mm, téton plat ; `cell_l` pour une autre longueur), sans soudure sur l'accu. Deux **butées à languette** (plaque 13 × 11 mm, languette 3 × 7 percée) glissées dans des rainures : ressort côté « − » en bas, bossage côté « + » en haut (polarité gravée sur les bouts). Languettes vers le haut : chaque fil soudé dessus sort par l'encoche voisine (`wire_notch`) et longe l'accu dans la fente du dessus jusqu'au fourreau (W1 rouge 40 mm, W2 noir 110 mm, soudé → JST-XH F, voir *Câblage*) ; on soude les fils sur les languettes, pas sur l'accu. L'accu entre par la fente du dessus en comprimant le ressort (≈ 4 mm, `spring_c`). Trou de tirage Ø2,5 en haut (ficelle, nœud à l'intérieur). Flancs allégés par 3 fenêtres de chaque côté, sous les lèvres qui retiennent l'accu (`cr_win`, 15,5 g au lieu de 21 g en plein). Imprimé à plat, méplat sur le plateau, sans support. ![Berceau : monté et nu](rendu_champignon_berceau.png)
- **Sol** (`ground`) : disque de 1 mm au contour lobé (Ø~145, `ground_R`), frange d'herbe en zigzag autour du pied, touffes de grands brins et brins isolés (`grass_*`, `fringe_h`). Pièce séparée à imprimer en vert ; le pied se colle dessus. Élargit l'appui au sol.
- **Pois** (`dot`) rapportés, collés dans des logements de 0,8 mm, répartis par tirage sur la surface réelle (écart mini `dot_gap`) : 99 (Ø6 × 45, Ø8 × 26, Ø10 × 28), l'écho OpenSCAD donne le nombre par taille.

Expand All @@ -142,12 +142,14 @@ Le contour vu de dessus est une somme d'harmoniques (2 à 7) à phases aléatoir

### Montage, accu

![Vue éclatée : sol et pied, accu, disque à lamelles, châssis et chargeur, plancher percé, carte + BME280, dôme](rendu_champignon_eclate.png)

0. Pied à l'envers : grenaille par le trou du fond (quelques gouttes de colle pour la figer et éviter qu'elle sonne), bouchon collé dans son lamage (époxy), puis pied collé sur le sol.
1. Carte : souder une **barrette femelle 2,54 1×6** sur le **dessous** de la carte, dans l'empreinte « I2C » ; les JST « I2C » et « I2C_SPI » ne sont pas posés (voir *Câblage*). Côté breakout, souder sa barrette mâle de façon que la puce regarde le disque une fois enfiché (corps du breakout vers l'intérieur du châssis, à vérifier selon le modèle de breakout).
2. Module de charge : souder W5 / W6 (rouge / noir, 70 mm, OUT+ / OUT− soudé → bornier à vis J13). W3 / W4 se soudent à l'étape 3 : le boîtier JST-XH (~7,4 × 5,8 mm) passe de justesse dans la fenêtre de la paroi +Y (8 mm de large), on passe donc l'extrémité nue.
3. Plancher posé dans le châssis, carte vissée par-dessus (la barrette femelle traverse la fenêtre du plancher) ; châssis retourné, BME280 enfiché par le dessous ouvert du châssis. Module de charge dans sa glissière ; W5 / W6 (rouge / noir, 70 mm, TP4056 soudé → bornier à vis) vissés sur J13 ; W3 / W4 (rouge / noir, 100 mm, TP4056 soudé → JST-XH M) : JST-XH M déjà serti, côté chambre ; pousser l'autre extrémité, nue, de l'intérieur de la chambre vers l'extérieur par la fenêtre de la paroi +Y (x = 22), puis la souder sur B+ / B− du TP4056 ; le côté JST reste dans la chambre, au-dessus du berceau. Enfin châssis sur le disque à lamelles (4 vis par en dessous).
4. Disque à lamelles poussé dans le dôme jusqu'aux 3 consoles, 3 vis M3 × 10 auto-taraudeuses par en dessous (têtes entre les lamelles). L'antenne du module 433 MHz monte droit de J1 dans le haut de la gourde.
5. Berceau : butées dans les rainures, W1 rouge 40 mm / W2 noir 110 mm soudés sur les languettes (W2 dans le méplat) → JST-XH F ; accu clipsé ; berceau dans le pied par le haut (ressort en bas).
5. Berceau : butées dans les rainures, W1 rouge 40 mm / W2 noir 110 mm soudés en haut des languettes, sortis par les encoches des bouts (W2 longe l'accu dans la fente du dessus) → JST-XH F ; accu clipsé ; berceau dans le pied par le haut (ressort en bas).
6. Chapeau tenu ~50 mm au-dessus du pied, brancher la paire JST-XH, la loger dans la chambre juste au-dessus du berceau (trou central du disque), chapeau emboîté sur le tenon, vis radiale.
7. Changer l'accu : retirer la vis radiale, soulever le chapeau (~50 mm) : la paire JST-XH apparaît, la débrancher, sortir le berceau par la ficelle.

Expand All @@ -170,7 +172,7 @@ Plan imprimable A4 : [`faisceau_champignon.pdf`](faisceau_champignon.pdf) (gén
| # | Couleur | Signal | De (extrémité) | Vers (extrémité) | Longueur | Section |
|---|---|---|---|---|---|---|
| W1 | rouge | B+ | languette « + » du berceau (haut) — soudé | JST-XH 2p, broche 1 — JST-XH F (côté berceau) | 40 mm | 22–24 AWG |
| W2 | noir | B− | languette « − » du berceau (bas, passe dans le méplat) — soudé | JST-XH 2p, broche 2 — JST-XH F | 110 mm | 22–24 AWG |
| W2 | noir | B− | languette « − » du berceau (bas, longe l'accu dans la fente du dessus) — soudé | JST-XH 2p, broche 2 — JST-XH F | 110 mm | 22–24 AWG |
| W3 | rouge | B+ | JST-XH 2p broche 1 — JST-XH M (côté chapeau) | TP4056 B+ — soudé | 100 mm | 22–24 AWG |
| W4 | noir | B− | JST-XH 2p broche 2 — JST-XH M | TP4056 B− — soudé | 100 mm | 22–24 AWG |
| W5 | rouge | +BATT | TP4056 OUT+ — soudé | J13 « RAW IN » borne 1 (+BATT) — bornier à vis | 70 mm | 22–24 AWG |
Expand All @@ -187,6 +189,7 @@ Cheminement :

### Points ouverts

- Berceau (1er tirage) : entrait tout juste dans le pied et le fil « − » ne passait pas (encoche coupée à la pince). Corrigé pour le prochain tirage : jeu `cr_fit` 0,8, rainures des butées plus profondes (`bt_sink`), languettes vers le haut, encoche du fil à chaque bout (`wire_notch`).
- Cotes à mesurer : butées (épaisseur de tôle `bt_t`, ressort comprimé `spring_c`), position de la prise du module de charge (`usb_cut`), breakout BME (`bme_w/d`, `bme_edge`, hauteur de la barrette femelle `fh_h`).
- Pas de lame d'air entre le dôme et la carte : le capteur est sous le plancher, ventilé par en dessous ; échauffement au soleil à vérifier par mesure.
- Stabilité : réglée par le lest, à vérifier une fois imprimé. Estimation (coque PETG pleine, appui r ~38 mm) : basculement vers ~15° sans lest, ~21° avec 350 g, ~28° avec la chambre pleine (~1 kg, ~1,7 kg au total, centre de gravité à ~69 mm). Un remplissage partiel suffit : à figer à la colle, pied à l'endroit.
Expand Down
55 changes: 45 additions & 10 deletions openscad/mushroom.scad
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
// openscad --preview -D 'part="assembly"' --camera=10,0,145,75,0,25,950 --imgsize=1000,1300 -o rendu_champignon.png mushroom.scad
// openscad --preview -D 'part="assembly"' --camera=0,0,90,112,0,200,720 --imgsize=1000,1000 -o rendu_champignon_dessous.png mushroom.scad
// openscad --preview -D 'part="assembly"' --camera=0,0,30,65,0,40,260 --imgsize=1000,800 -o rendu_champignon_pied.png mushroom.scad
// openscad --preview -D 'part="exploded"' --camera=0,0,330,70,0,25,1950 --imgsize=1000,1800 -o rendu_champignon_eclate.png mushroom.scad
// openscad --preview -D 'part="cradle_view"' --camera=40,20,10,55,0,30,230 --imgsize=1200,800 -o rendu_champignon_berceau.png mushroom.scad
// openscad --preview -D 'part="section"' --camera=0,0,150,90,0,0,850 --imgsize=1000,1300 -o rendu_champignon_coupe.png mushroom.scad
// openscad --preview -D 'part="sensor"' --camera=-18,5,166,96,0,0,150 --imgsize=1200,800 -o rendu_champignon_capteur.png mushroom.scad
// openscad --preview -D 'part="console"' --camera=56,0,5,75,0,-20,95 --imgsize=1200,800 -o rendu_champignon_console.png mushroom.scad # ~4 min
Expand All @@ -42,8 +44,9 @@ use <pcb.scad>
use <euro2.scad>

/* [Rendu] */
part = "assembly"; // [assembly, section, sensor, console, cap, gills, chassis, deck, stem, ground, cradle, plug, dot]
part = "assembly"; // [assembly, exploded, cradle_view, section, sensor, console, cap, gills, chassis, deck, stem, ground, cradle, plug, dot]
dot_d = 8; // diamètre du pois exporté (part = "dot")
explode = 40; // vue éclatée : écart entre étages (part = "exploded")
cap_color = "#c0392b"; // rendu uniquement (tue-mouches ; panthère : "#8b5a2b")

/* [Carte v2.2 découpée — voir pcb.scad] */
Expand Down Expand Up @@ -149,15 +152,18 @@ ring_rot = 131; // phase des ondulations de la coupelle (°) : son creux le p
/* [Berceau de l'accu] */
cell_d = 18.6; // 18650 nue, téton plat (protégée / à bouton : jusqu'à ~70)
cell_l = 65;
cr_fit = 0.4; // jeu berceau / logement (au rayon)
cr_fit = 0.8; // jeu berceau / logement (au rayon ; 0.4 : 1er tirage entré tout juste)
cell_up = 2; // déport de l'accu vers le dessus ouvert (épaisseur du fond sous l'accu)
bt_w = 13; // butées à languette : plaque 13 x 11, languette 3 x 7 (percée)
bt_h = 11;
bt_t = 0.4; // épaisseur de la tôle (à mesurer)
bt_tab = [3, 7];
bt_tab = [3, 7]; // languette vers le haut (côté ouvert), fil soudé dessus
cr_win = [3, 15, 4, 14]; // allègement : fenêtres par flanc (nombre, longueur, bas, haut au-dessus du méplat) ; fond et rails gardés
wire_notch = [4.5, 3]; // passage du fil au-dessus de chaque bout : largeur, profondeur sous le dessus de l'accu
bt_dimple = 1.8; // bossage de la butée « + »
spring_c = 4; // ressort de la butée « − » comprimé (10.7 libre)
bt_slot = 0.8; // rainure de la plaque
bt_sink = 1.5; // rainure plus profonde que la plaque (1er tirage : languette 1 mm au-dessus du bord ; +0.4 pour cr_fit 0.8)
bt_win = 10.5; // fenêtre devant la plaque (passage du ressort / du bossage)

/* [Sol] */
Expand Down Expand Up @@ -497,8 +503,8 @@ module stem() {

// ---------- berceau de l'accu ----------
// Gouttière imprimée à plat (méplat sur le plateau, ouverte vers le haut), glissée dans le pied par le haut.
// Une butée à languette par bout, glissée dans une rainure ; la languette traverse le fond et ressort
// dans le méplat, où passent aussi les fils (jusqu'au fourreau). Ressort « − » en bas, bossage « + » en haut.
// Une butée à languette par bout, glissée dans une rainure, languette vers le haut ; le fil soudé dessus sort par
// l'encoche voisine et longe l'accu dans la fente du dessus (jusqu'au fourreau). Ressort « − » en bas, bossage « + » en haut.
// Repère d'impression : X = axe de l'accu (X = 0 en bas), méplat en Z = 0.
cr_r = bore_r - cr_fit;
cr_flat = cr_r * cos(45); // méplat : flancs à 45° au plus
Expand All @@ -522,12 +528,18 @@ module cradle() {
translate([cr_end, -cell_d / 2 - 0.3, cl_z + 1]) cube([cr_len - 2 * cr_end, cell_d + 0.6, 2 * cr_r]);
for (s = [0, 1]) {
xs = s == 0 ? 1.6 : cr_len - 1.6 - bt_slot; // rainure
// rainure de la plaque, ouverte en haut ; prolongée par la fente de la languette à travers le fond
translate([xs, -(bt_w + 0.6) / 2, cl_z - bt_h / 2]) cube([bt_slot, bt_w + 0.6, 2 * cr_r]);
translate([xs, -(bt_tab[0] + 0.6) / 2, -1]) cube([bt_slot, bt_tab[0] + 0.6, cl_z]);
// rainure de la plaque, ouverte en haut (languette vers le haut)
translate([xs, -(bt_w + 0.6) / 2, cl_z - bt_h / 2 - bt_sink]) cube([bt_slot, bt_w + 0.6, 2 * cr_r]);
// encoche du fil à côté de la languette, à travers les parois du bout, jusqu'au-dessus de l'accu :
// le fil longe ensuite l'accu dans la fente du dessus (≈3 mm sous le logement)
translate([s == 0 ? -1 : cr_len - cr_end - 1, -(bt_w + 0.6) / 2 - wire_notch[0] + 2, cl_z + cell_d / 2 - wire_notch[1]])
cube([cr_end + 2, wire_notch[0], 2 * cr_r]);
// fenêtre devant la plaque
translate([s == 0 ? xs + bt_slot - eps : cr_len - cr_end - eps, -bt_win / 2, cl_z - bt_h / 2]) cube([1 + 2 * eps, bt_win, 2 * cr_r]);
}
// fenêtres traversantes dans les flancs, sous les lèvres qui retiennent l'accu (dessus en pont)
let(n = cr_win[0], l = cr_win[1], post = (cr_len - 2 * cr_end - 8 - n * l) / (n - 1))
for (i = [0 : n - 1]) translate([cr_end + 4 + i * (l + post), -cr_r - 1, cr_win[2]]) cube([l, 2 * cr_r + 2, cr_win[3] - cr_win[2]]);
// trou de tirage dans le bout du haut (ficelle, nœud à l'intérieur)
translate([cr_len - cr_end - 1, 0, cl_z + cell_d / 2 + 0.8]) rotate([0, 90, 0]) cylinder(d = 2.5, h = cr_end + 2, $fn = 24);
// polarité, gravée sur les faces des bouts
Expand Down Expand Up @@ -580,9 +592,9 @@ module ground() {
module cradle_cell() { // berceau, accu, butées (repère d'impression)
color("#303030") cradle();
color("#2e6fd8") translate([cell_x0, 0, cl_z]) rotate([0, 90, 0]) cylinder(d = cell_d, h = cell_l);
color("Silver") for (x = [1.6, cr_len - 1.6 - bt_t]) translate([x, -bt_w / 2, cl_z - bt_h / 2]) {
color("Silver") for (x = [1.6, cr_len - 1.6 - bt_t]) translate([x, -bt_w / 2, cl_z - bt_h / 2 - bt_sink]) {
cube([bt_t, bt_w, bt_h]);
translate([0, (bt_w - bt_tab[0]) / 2, -bt_tab[1]]) cube([bt_t, bt_tab[0], bt_tab[1]]);
translate([0, (bt_w - bt_tab[0]) / 2, bt_h]) cube([bt_t, bt_tab[0], bt_tab[1]]);
}
}
module charger() { color("#1a4fa0") translate([0, -chg_w / 2, 0]) cube([chg_t, chg_w, chg_l]); color("Silver") translate([chg_t, -4, 0]) cube([3, 8, 5.5]); }
Expand Down Expand Up @@ -628,6 +640,27 @@ module assembled() {
}
}

// vue éclatée, ordre de montage : accu sorti du pied, chapeau levé ; dans le chapeau, de bas en haut :
// disque, châssis + chargeur, plancher, carte + BME280, dôme
module exploded(e = explode) {
color("Ivory") stem();
color("#4a8f3c") translate([0, 0, -ground_t]) ground();
translate([0, 0, 2 * e]) cradle_placed() cradle_cell();
translate([0, 0, 4 * e]) cap_xf() {
color("Ivory") gills();
translate([0, 0, e]) { color("Beige") chassis(); translate([chg_x + 0.15, 0, ch_z]) charger(); }
translate([0, 0, 2 * e + 15]) color("WhiteSmoke") translate([0, 0, deck_z]) deck();
translate([0, 0, 3 * e + 30]) {
translate([i2c_p1[0], i2c_p1[1], pcb_z]) rotate(180) bme();
translate([0, 0, pcb_z]) rotate(180) pcb_v22_cropped(jst_eh = false);
}
translate([0, 0, 5 * e + 60 - cap_skirt]) {
color(cap_color) cap();
for (d = dots) at_dot(d) translate([0, 0, -dot_pocket]) color("White") dot(d[2]);
}
}
}

echo(str("Contour : graine ", lobe_seed, ", orientation ", rot, "°, indice de jeu ", round(worst(rot) * 100) / 100, worst(rot) <= 1 ? " (ok : >= 3 mm partout)" : " (ATTENTION : électronique à moins de 3 mm du dôme, augmenter cap_R / cap_H ou changer de graine)"));
echo(str("Pois : ", len(dots), " au total — ", [for (s = dot_sizes) str("Ø", s, " x", len([for (d = dots) if (d[2] == s) 1]))]));
echo(str("Sommet du dôme : ", [for (v = [apex[0], apex[1]]) round(v * 10) / 10], " (J1 « RADIO » en ", [for (v = radio_p) round(v * 10) / 10], "), ", round(apex[2] - cap_skirt - pcb_z - pcb_t), " mm au-dessus de la carte ; ", round(collar_h * sin(cap_tilt) + apex[0] * cos(cap_tilt) + (apex[2] - cap_skirt) * sin(cap_tilt)), " mm de l'axe du pied en X"));
Expand All @@ -649,6 +682,8 @@ else if (part == "sensor") difference() { // gros plan : BME280 enfiché sous
translate([-100, -100, 70]) cube([200, 200, 30]);
}
else if (part == "console") console_cut(tab_a[0]);
else if (part == "exploded") exploded();
else if (part == "cradle_view") { cradle_cell(); translate([0, 40, 0]) color("Gold") cradle(); } // berceau monté et nu
else if (part == "section") difference() { assembled(); translate([-200, -200, -1]) cube([400, 200, 400]); }
else {
assembled();
Expand Down
Binary file modified openscad/rendu_champignon_berceau.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added openscad/rendu_champignon_eclate.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading