- puck_h 6 -> 8 mm, damit Ø6-Magnete in die Kante passen. - 2 abgeflachte Kontaktstellen (Eingang/Ausgang, x=±47) mit je 1 Magnettasche Ø6,2x2,2 auf Hoehenmitte -> Pucks koppeln zur Kette + an die Ring-Koepfe. - Mulden-Ring 15° gedreht, damit keine Mulde auf der Kopplungsachse liegt. - Parameter coupling=true (abschaltbar). Polaritaet konsistent einkleben. - materialliste + README_3d-druck + README_openscad nachgezogen (8 mm, Magnete ~100). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
110 lines
4.5 KiB
OpenSCAD
110 lines
4.5 KiB
OpenSCAD
// 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);
|