diff --git a/openscad/README.md b/openscad/README.md index 3535a57..d60581a 100644 --- a/openscad/README.md +++ b/openscad/README.md @@ -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. @@ -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. @@ -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 | @@ -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. diff --git a/openscad/mushroom.scad b/openscad/mushroom.scad index 9af5d78..ad27eb3 100644 --- a/openscad/mushroom.scad +++ b/openscad/mushroom.scad @@ -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 @@ -42,8 +44,9 @@ use use /* [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] */ @@ -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] */ @@ -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 @@ -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 @@ -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]); } @@ -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")); @@ -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(); diff --git a/openscad/rendu_champignon_berceau.png b/openscad/rendu_champignon_berceau.png index 019ad44..01963a3 100644 Binary files a/openscad/rendu_champignon_berceau.png and b/openscad/rendu_champignon_berceau.png differ diff --git a/openscad/rendu_champignon_eclate.png b/openscad/rendu_champignon_eclate.png new file mode 100644 index 0000000..0601357 Binary files /dev/null and b/openscad/rendu_champignon_eclate.png differ