Phasen-Ring: SLC-Uebersicht <-> Bahn-Koepfe (5 Segmente)

- Neues phasen-ring.scad: 5x 72°-Ringsegment (Ø180/Ø84x8). Zusammengesteckt
  = SLC-Uebersichts-Donut, auseinandergenommen = farbige Phasen-Koepfe der
  Puck-Bahn (Design-Segment = Start vor dem ersten Puck).
- Je Phasenfarbe (wie die Pucks), gravierter Name + Sublabel + Icon.
- Magnettaschen Ø6x2 (2 je Stosskante): Magnete optional, sonst lose auflegen.
- Parametrisch: render_mode single (Export je phase=0..4) / ring (Vorschau).
- materialliste (§7 + Stueckliste) und README_openscad nachgezogen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
breitenbach76 2026-06-04 23:16:14 +02:00
parent 7dd45a39a6
commit 2aaf2fce4f
3 changed files with 154 additions and 0 deletions

View file

@ -8,6 +8,7 @@ Parametrische Quellmodelle der Schlüsselteile. In [OpenSCAD](https://openscad.o
|-------|---------|
| `puck.scad` | **Station-/Gate-Puck** (Ø100, Rand + Einbuchtung, 7 Figurenmulden Ø22, Etikettenmulde Ø37,5) |
| `aktiv-feld.scad` | RACI-Fläche (R · A · C · I, 2×2) — separates mobiles Board, 130×130 |
| `phasen-ring.scad` | **Phasen-Ring** (5× 72°-Segment): Übersichts-Donut ↔ Bahn-Köpfe, Magnettaschen, `phase=0..4` |
## Ein Puck für die ganze Bahn

View file

@ -0,0 +1,132 @@
// Phasen-Ring 5 Segmente (Donut) als SLC-Uebersicht, die auseinandergenommen
// die Phasen-KOEPFE der linearen Puck-Bahn bilden (Design-Segment = Start).
// SLC-Workshop Tabletop · Einheiten: mm
//
// - 1 Segment = 72°-Ringsegment in seiner Phasenfarbe (wie die Pucks).
// - Beschriftung GRAVIERT (nur 5 Stueck): Phasenname + Sublabel + einfaches Icon.
// - Magnettaschen an beiden Stosskanten: Magnete einkleben -> haelt als Ring zusammen;
// ohne Magnete einfach lose aneinanderlegen (Taschen stoeren nicht).
//
// EXPORT: render_mode="single" + phase=0..4 -> ein Segment je Phase als STL.
// VORSCHAU: render_mode="ring" -> alle 5 farbig zusammengesetzt.
/* [Render] */
render_mode = "ring"; // "single" (Export) oder "ring" (Vorschau)
phase = 0; // 0 Design · 1 Transition · 2 Operation · 3 Support · 4 Review
/* [Ring-Geometrie] */
r_out = 90; // Aussenradius (Ø180)
r_in = 42; // Innenradius (Ø84)
seg_h = 8; // Dicke (etwas dicker als Pucks -> Platz fuer Magnete in der Kante)
seg_ang = 72; // 360/5
gap_deg = 1.2; // kleiner Spalt zwischen Segmenten (Passung)
/* [Magnettaschen] (an den Stosskanten) */
mag_d = 6.2; // Loch fuer Ø6-Magnet
mag_t = 2.2; // Tiefe (Ø6x2-Magnet + Spiel)
mag_r1 = 56; // Radius Tasche 1
mag_r2 = 78; // Radius Tasche 2
/* [Gravur] */
eng_depth = 0.8;
name_size = 7;
sub_size = 3.4;
$fn = 96;
// --- Phasendaten ------------------------------------------------------------
names = ["DESIGN", "TRANSITION", "OPERATION", "SUPPORT", "REVIEW"];
subs = ["Planung & Architektur", "Kontrollierte Ueberfuehrung",
"Stabiler laufender Betrieb", "Nutzeranfragen & Incidents",
"Continual Improvement"];
// Phasenfarben (nur Vorschau; im Druck = Filament)
pcol = [[0.16,0.44,0.69], [0.88,0.54,0.12], [0.23,0.62,0.29],
[0.12,0.62,0.62], [0.49,0.31,0.64]];
// --- Geometrie-Helfer -------------------------------------------------------
module ring_sector(a) {
// Ringsegment ueber Winkel a, Bisektor zeigt nach +Y (oben)
a0 = 90 - a/2;
a1 = 90 + a/2;
big = r_out + 10;
intersection() {
difference() { // Annulus
cylinder(r = r_out, h = seg_h);
translate([0,0,-0.5]) cylinder(r = r_in, h = seg_h + 1);
}
linear_extrude(seg_h) // Tortenstueck
polygon([[0,0],
[big*cos(a0), big*sin(a0)],
[big*cos(90), big*1.2],
[big*cos(a1), big*sin(a1)]]);
}
}
module magnet_pocket(edge_ang, inward_ang, r) {
translate([r*cos(edge_ang), r*sin(edge_ang), seg_h/2])
rotate([0,0,inward_ang]) rotate([0,90,0])
translate([0,0,-0.3]) cylinder(d = mag_d, h = mag_t + 0.3, $fn = 32);
}
// --- Icons (einfache gravierte Glyphen, 2D) ---------------------------------
module icon(i) {
// zentriert um (0,0), ~14 mm
if (i == 0) // Design: Dokument
difference() {
square([10,13], center=true);
translate([2.5,5.5]) rotate(45) square([6,6]); // gefaltete Ecke
}
else if (i == 1) // Transition: Pfeil nach rechts
union() {
translate([-6,-1.6]) square([9,3.2]);
translate([3,0]) polygon([[0,-5],[6,0],[0,5]]);
}
else if (i == 2) // Operation: Zahnkranz (Ring)
difference() { circle(r=6.5); circle(r=3.2); }
else if (i == 3) // Support: Sprechblase
union() {
translate([0,1]) square([13,9], center=true);
translate([-4,-3.5]) polygon([[0,0],[5,0],[0,-4]]);
}
else // Review: Kreis-Pfeil (Loop)
union() {
difference() {
difference(){ circle(r=6.5); circle(r=3.8); }
translate([3,3]) square([8,8]); // Luecke oben rechts
}
translate([6.5,2]) polygon([[-2,0],[2,2],[2,-3]]); // Pfeilspitze
}
}
// --- ein Segment ------------------------------------------------------------
module phase_segment(idx) {
a = seg_ang - gap_deg;
e0 = 90 - a/2; // untere Kante
e1 = 90 + a/2; // obere Kante
difference() {
ring_sector(a);
// Magnettaschen: 2 je Stosskante
magnet_pocket(e0, e0 + 90, mag_r1);
magnet_pocket(e0, e0 + 90, mag_r2);
magnet_pocket(e1, e1 - 90, mag_r1);
magnet_pocket(e1, e1 - 90, mag_r2);
// Gravur (oben)
translate([0,0,seg_h - eng_depth]) linear_extrude(eng_depth + 0.1) {
translate([0,82]) scale(0.9) icon(idx);
translate([0,66]) text(names[idx], size=name_size,
halign="center", valign="center");
translate([0,53]) text(subs[idx], size=sub_size,
halign="center", valign="center");
}
}
}
// --- Ausgabe ----------------------------------------------------------------
if (render_mode == "ring") {
for (i = [0:4])
color(pcol[i]) rotate([0,0, -i*72]) phase_segment(i);
} else {
color(pcol[phase]) phase_segment(phase);
}
echo(r_out=r_out, r_in=r_in, seg_h=seg_h, seg_ang=seg_ang);