// Station-Puck (= Gate-Puck) — runde Station mit 7 Figurenplaetzen + Etikettenmulde // SLC-Workshop Tabletop · Einheiten: mm // EIN Modell fuer die ganze Bahn: 37x in Phasenfarbe (Stationen) + 3x in Rot (Gates). // Unterschied Station/Gate = nur Filamentfarbe + aufgeklebtes Etikett (ID bzw. G1/G2/G3). // // Aufbau (von aussen nach innen): // - Aussenrand Ø100, ~5 mm breit, bleibt auf voller Hoehe // - leichte Einbuchtung (Spielflaeche) innerhalb des Rands // - Ring aus 7 Figurenmulden (Sockel Ø20 wird REINGESTELLT, daher Ø22) // - Mitte: flache Mulde fuer ein rundes Etikett Ø37 // // KOPPLUNG (coupling=true): Eingang/Ausgang als abgeflachte Kontaktstelle mit je // einer Magnettasche -> Pucks koppeln zur Kette + an die Phasen-Ring-Koepfe. // Dafuer ist der Puck 8 mm hoch (Ø6-Magnet passt in die Kante). // POLARITAET beim Einkleben konsistent: alle AUSGANG (+X) z.B. Nordpol nach // aussen, alle EINGANG (-X) Suedpol nach aussen -> Nachbarn ziehen sich an. // // Beschriftung: KEINE Gravur. ID/Phasenfarbe via Etikett Ø37 in der Mitte. /* [Puck] */ puck_d = 100; // Aussendurchmesser puck_h = 8; // Gesamthoehe (8 -> Ø6-Magnet passt in die Kante) edge_cham = 1; // Fase obere Aussenkante (Optik/Griff) /* [Rand + Einbuchtung] */ rim_w = 5; // Randbreite (bleibt auf voller Hoehe) recess_dep = 1.2; // Tiefe der Einbuchtung (Spielflaeche) /* [Figurenplaetze] — Sockel Ø20 wird reingestellt */ spot_count = 7; // Anzahl Standmulden im Ring spot_d = 22; // Mulden-Ø (Sockel Ø20 + Luft -> reinstellbar) spot_dep = 1.5; // Tiefe der Standmulde (zusaetzlich zur Einbuchtung) spot_ring_r = 33; // Radius des Mulden-Kreises (Mitte-Mitte) spot_lead = 0.8; // Einfuehr-Fase oben an der Mulde spot_a0 = 15; // Winkel-Offset: keine Mulde auf der Kopplungsachse (X) /* [Etikettenmulde Mitte] — rundes Etikett Ø37 */ label_d = 37.5; // Mulden-Ø (Etikett Ø37 + 0,5 Spiel); Puck-Rand bleibt sichtbar label_dep = 0.3; // flach: Etikett sitzt plan + kantengeschuetzt /* [Kopplung] — Magnete an Eingang/Ausgang */ coupling = true; // Flats + Magnettaschen an +X/-X flat_at = 47; // Abstand der Kontakt-Flache von der Mitte (Flat-Tiefe = 50-47 = 3) mag_d = 6.2; // Loch fuer Ø6-Magnet mag_t = 2.2; // Tiefe (Ø6x2-Magnet + Spiel) $fn = 96; // abgeleitet play_d = puck_d - 2*rim_w; // Spielflaeche Ø90 play_z = puck_h - recess_dep; // Hoehe der eingebuchteten Spielflaeche (6.8) // --- Grundkoerper mit gefaster Oberkante ------------------------------------ module puck_blank() { hull() { cylinder(d = puck_d - 2*edge_cham, h = puck_h); cylinder(d = puck_d, h = puck_h - edge_cham); } } // --- eine Figurenmulde mit Einfuehr-Fase ------------------------------------ module figure_spot() { z0 = play_z - spot_dep; union() { translate([0, 0, z0]) cylinder(d = spot_d, h = spot_dep + 0.1); translate([0, 0, play_z - spot_lead]) cylinder(d1 = spot_d, d2 = spot_d + 2*spot_lead, h = spot_lead + 0.1); } } // --- Kopplung: Flat-Schnitt + Magnettasche je Seite ------------------------ module coupling_flat_cut() { // entfernt Material jenseits von x = +/- flat_at -> zwei Kontakt-Flachen for (s = [-1, 1]) translate([s * (flat_at + 40), 0, puck_h/2]) cube([80, puck_d + 20, puck_h + 2], center = true); } module coupling_magnets() { // +X (Ausgang): Tasche von der Flache nach innen translate([flat_at + 0.3, 0, puck_h/2]) rotate([0, -90, 0]) cylinder(d = mag_d, h = mag_t + 0.3, $fn = 32); // -X (Eingang) translate([-flat_at - 0.3, 0, puck_h/2]) rotate([0, 90, 0]) cylinder(d = mag_d, h = mag_t + 0.3, $fn = 32); } module puck() { difference() { puck_blank(); if (coupling) coupling_flat_cut(); // Einbuchtung / Spielflaeche translate([0, 0, play_z]) cylinder(d = play_d, h = recess_dep + 0.1); // 7 Figurenmulden im Ring (mit Offset, frei von der Kopplungsachse) for (i = [0 : spot_count - 1]) { a = spot_a0 + 360/spot_count * i; translate([spot_ring_r*cos(a), spot_ring_r*sin(a), 0]) figure_spot(); } // Etikettenmulde Mitte translate([0, 0, play_z - label_dep]) cylinder(d = label_d, h = label_dep + 0.1); // Magnettaschen if (coupling) coupling_magnets(); } } puck(); echo(puck_d = puck_d, puck_h = puck_h, spielflaeche = play_d, figurenplaetze = spot_count, spot_d = spot_d, etikett_mulde = label_d, kopplung = coupling);