first
This commit is contained in:
commit
c87b0b1775
23 changed files with 2658 additions and 0 deletions
33
01_3D-Druck/openscad/README_openscad.md
Normal file
33
01_3D-Druck/openscad/README_openscad.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# OpenSCAD-Modelle
|
||||
|
||||
Parametrische Quellmodelle der Schlüsselteile. In [OpenSCAD](https://openscad.org)
|
||||
öffnen, Parameter im Customizer anpassen, mit **F6** rendern und über
|
||||
*Datei → Export → STL* slicebereit exportieren.
|
||||
|
||||
| Datei | Bauteil |
|
||||
|-------|---------|
|
||||
| `aktivitaets-tile.scad` | Phasen-Basistile (100×100, Verankerung Ø50, Puzzle-Tabs) |
|
||||
| `aktivitaets-plaque.scad` | Beidseitiges Aktivitätsplättchen (Ø49) — Text per Variable |
|
||||
| `action-stein.scad` | Szenario-Träger mit Kartenschlitz + M8-Gewichtsaussparung |
|
||||
| `gate-tor.scad` | Gate-Tor mit 4 Rollen-Steckplätzen + Kartenschlitz |
|
||||
|
||||
## Serienfertigung der Plättchen
|
||||
|
||||
`aktivitaets-plaque.scad` enthält den Text als Variablen (`front_id`,
|
||||
`front_name`, `back_text`). Für alle 38 Aktivitäten empfiehlt sich ein kleines
|
||||
Skript, das die Werte aus den `service-lifecycle_*.yaml` liest und je Aktivität
|
||||
ein STL erzeugt (z.B. via OpenSCAD-Kommandozeile `-D` Parameter-Override):
|
||||
|
||||
```bash
|
||||
openscad -o op_05.stl \
|
||||
-D 'front_id="op_05"' \
|
||||
-D 'front_name="Ueberwachen der Services"' \
|
||||
-D 'back_text="..."' \
|
||||
aktivitaets-plaque.scad
|
||||
```
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Gravur-Text bewusst kurz halten; lange Kurzbeschreibungen ggf. auf Label auslagern.
|
||||
- Umlaute in Gravuren je nach Font kritisch — im Zweifel `ae/oe/ue` verwenden (so in den Vorlagen).
|
||||
- Vor Serienstart **ein** Tile + Plättchen + Stein als Passungs-Funktionsmuster drucken.
|
||||
42
01_3D-Druck/openscad/action-stein.scad
Normal file
42
01_3D-Druck/openscad/action-stein.scad
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
// Action-Stein: Szenario-Traeger mit aufrechtem Kartenschlitz
|
||||
// SLC-Workshop Tabletop · Einheiten: mm
|
||||
|
||||
/* [Fuss] */
|
||||
foot_d = 49; // sitzt in Verankerung (Ø50)
|
||||
foot_h = 5;
|
||||
stand_ring = 70; // optionaler Standring fuer Kippstabilitaet
|
||||
use_ring = true;
|
||||
|
||||
/* [Koerper] */
|
||||
body_d = 35;
|
||||
body_h = 30;
|
||||
|
||||
/* [Kartenschlitz] */
|
||||
card_w = 74; // fuer Karte 70 mm breit
|
||||
card_t = 4; // Schlitzdicke
|
||||
card_h = 25; // Einstecktiefe
|
||||
|
||||
/* [Gewichtseinlage M8] */
|
||||
nut_af = 13; // Schluesselweite M8-Mutter
|
||||
nut_h = 6.5;
|
||||
$fn = 96;
|
||||
|
||||
module base() {
|
||||
if (use_ring)
|
||||
cylinder(d = stand_ring, h = 2);
|
||||
translate([0,0,0]) cylinder(d = foot_d, h = foot_h);
|
||||
}
|
||||
|
||||
module body() {
|
||||
translate([0,0,foot_h]) cylinder(d = body_d, h = body_h);
|
||||
}
|
||||
|
||||
difference() {
|
||||
union() { base(); body(); }
|
||||
// Kartenschlitz (zentriert in X, durch den Koerperkopf)
|
||||
translate([-card_w/2, -card_t/2, foot_h + body_h - card_h])
|
||||
cube([card_w, card_t, card_h + 1]);
|
||||
// Gewichtsaussparung im Fuss (Sechskant fuer M8-Mutter)
|
||||
translate([0, 0, -0.1])
|
||||
cylinder(d = nut_af / cos(30), h = nut_h, $fn = 6);
|
||||
}
|
||||
77
01_3D-Druck/openscad/aktiv-feld.scad
Normal file
77
01_3D-Druck/openscad/aktiv-feld.scad
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
// Aktiv-Feld — RACI-Stecklochleiste
|
||||
// SLC-Workshop Tabletop · Einheiten: mm
|
||||
// Steht NEBEN dem Action-Stein. Bei jeder Aktivitaet werden die beteiligten
|
||||
// Rollen-Figuren nach RACI in die passende Zone gesteckt:
|
||||
// R = Responsible · A = Accountable (genau 1) · C = Consulted · I = Informed
|
||||
// Anpassen und mit OpenSCAD nach STL exportieren (F6 -> Export).
|
||||
|
||||
/* [Leiste] */
|
||||
strip_w = 26; // Tiefe (zum Spieler)
|
||||
strip_h = 6; // Dicke
|
||||
corner_r = 3;
|
||||
|
||||
/* [Steckplaetze] */
|
||||
pin_hole_d = 4.2; // Loch fuer Figuren-Pin (Pin Oe 4,0 + Spiel)
|
||||
pin_hole_depth = 4;
|
||||
pin_pitch = 8; // Mitte-zu-Mitte innerhalb einer Zone
|
||||
zone_gap = 10; // Luecke zwischen den Zonen
|
||||
end_margin = 8; // Rand links/rechts
|
||||
socket_y = 5; // Lochreihe nach hinten versetzt (weg von der Beschriftung)
|
||||
|
||||
/* [Beschriftung] */
|
||||
label_size = 7; // Buchstabengroesse
|
||||
label_depth = 0.8; // Gravurtiefe
|
||||
label_y = -8; // Position der Buchstaben (vorne, zum Spieler)
|
||||
|
||||
/* [Zonen] */
|
||||
// [Label, Anzahl Steckplaetze] — A bewusst nur 1 (genau eine Rolle accountable)
|
||||
zones = [ ["R", 2], ["A", 1], ["C", 3], ["I", 3] ];
|
||||
|
||||
$fn = 48;
|
||||
|
||||
// --- Hilfsfunktionen -------------------------------------------------------
|
||||
function zone_span(c) = (c - 1) * pin_pitch;
|
||||
|
||||
function sumspan(i = 0) =
|
||||
i >= len(zones) ? 0 : zone_span(zones[i][1]) + sumspan(i + 1);
|
||||
|
||||
function total_len() =
|
||||
end_margin * 2 + zone_gap * (len(zones) - 1) + sumspan();
|
||||
|
||||
// linker Startversatz der Zone idx (Summe vorheriger Zonen + Luecken)
|
||||
function zone_offset(idx, i = 0, acc = 0) =
|
||||
i >= idx ? acc
|
||||
: zone_offset(idx, i + 1, acc + zone_span(zones[i][1]) + zone_gap);
|
||||
|
||||
// --- Geometrie -------------------------------------------------------------
|
||||
module rounded_rect(l, w, h, r) {
|
||||
linear_extrude(h)
|
||||
offset(r) offset(-r)
|
||||
square([l, w], center = true);
|
||||
}
|
||||
|
||||
module raci_strip() {
|
||||
L = total_len();
|
||||
difference() {
|
||||
rounded_rect(L, strip_w, strip_h, corner_r);
|
||||
|
||||
for (idx = [0 : len(zones) - 1]) {
|
||||
cnt = zones[idx][1];
|
||||
sx = -L/2 + end_margin + zone_offset(idx);
|
||||
|
||||
// Steckplaetze der Zone
|
||||
for (i = [0 : cnt - 1])
|
||||
translate([sx + i * pin_pitch, socket_y, strip_h - pin_hole_depth])
|
||||
cylinder(d = pin_hole_d, h = pin_hole_depth + 0.1);
|
||||
|
||||
// Zonen-Beschriftung (mittig unter den Loechern)
|
||||
cx = sx + zone_span(cnt) / 2;
|
||||
translate([cx, label_y, strip_h - label_depth])
|
||||
linear_extrude(label_depth + 0.1)
|
||||
text(zones[idx][0], size = label_size,
|
||||
halign = "center", valign = "center");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
raci_strip();
|
||||
48
01_3D-Druck/openscad/aktivitaets-plaque.scad
Normal file
48
01_3D-Druck/openscad/aktivitaets-plaque.scad
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
// Beidseitiges Aktivitaetsplaettchen (Rundscheibe fuer Verankerung)
|
||||
// SLC-Workshop Tabletop · Einheiten: mm
|
||||
// Text per Variable setzen; fuer Serie ueber Skript je Aktivitaet generieren.
|
||||
|
||||
/* [Scheibe] */
|
||||
disc_d = 49; // Durchmesser (Verankerung 50 - Passung)
|
||||
disc_h = 4; // Dicke
|
||||
chamfer = 1; // Fase als Griffhilfe
|
||||
|
||||
/* [Gravur] */
|
||||
engrave_depth = 0.8;
|
||||
front_id = "op_05";
|
||||
front_name = "Ueberwachen der Services";
|
||||
back_text = "Laufende Ueberwachung von Verfuegbarkeit, Leistung und Qualitaet des Service.";
|
||||
font = "Liberation Sans:style=Bold";
|
||||
$fn = 96;
|
||||
|
||||
module disc_body() {
|
||||
// Scheibe mit beidseitiger Fase
|
||||
hull() {
|
||||
cylinder(d = disc_d - 2*chamfer, h = 0.01);
|
||||
translate([0,0,chamfer]) cylinder(d = disc_d, h = disc_h - 2*chamfer);
|
||||
translate([0,0,disc_h-0.01]) cylinder(d = disc_d - 2*chamfer, h = 0.01);
|
||||
}
|
||||
}
|
||||
|
||||
module front_engraving() {
|
||||
translate([0, 6, disc_h - engrave_depth])
|
||||
linear_extrude(engrave_depth + 0.1)
|
||||
text(front_id, size=7, halign="center", font=font);
|
||||
translate([0, -6, disc_h - engrave_depth])
|
||||
linear_extrude(engrave_depth + 0.1)
|
||||
text(front_name, size=3.2, halign="center", font=font);
|
||||
}
|
||||
|
||||
module back_engraving() {
|
||||
// gespiegelt, weil Rueckseite
|
||||
mirror([1,0,0])
|
||||
translate([0, 0, -0.1])
|
||||
linear_extrude(engrave_depth + 0.1)
|
||||
text(back_text, size=2.6, halign="center", font=font);
|
||||
}
|
||||
|
||||
difference() {
|
||||
disc_body();
|
||||
front_engraving();
|
||||
back_engraving();
|
||||
}
|
||||
52
01_3D-Druck/openscad/aktivitaets-tile.scad
Normal file
52
01_3D-Druck/openscad/aktivitaets-tile.scad
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
// Phasen-Basistile mit zentraler Verankerung und Puzzle-Tabs
|
||||
// SLC-Workshop Tabletop · Einheiten: mm
|
||||
// Anpassen und mit OpenSCAD nach STL exportieren (F6 -> Export).
|
||||
|
||||
/* [Tile] */
|
||||
tile_size = 100; // Kantenlaenge
|
||||
tile_height = 6; // Dicke
|
||||
corner_r = 3; // Eckenradius
|
||||
|
||||
/* [Verankerung / Sockel] */
|
||||
socket_d = 50; // Durchmesser Vertiefung
|
||||
socket_depth = 4; // Tiefe
|
||||
fit_clear = 0.4; // Spielpassung
|
||||
|
||||
/* [Puzzle-Tabs] */
|
||||
tab_w = 12; // Breite
|
||||
tab_d = 6; // Tiefe (Ueberstand / Aussparung)
|
||||
tab_h = tile_height;
|
||||
$fn = 64;
|
||||
|
||||
module rounded_square(s, r, h) {
|
||||
linear_extrude(h)
|
||||
offset(r) offset(-r)
|
||||
square([s, s], center=true);
|
||||
}
|
||||
|
||||
module tab(positive=true) {
|
||||
// Tab ragt heraus (positive) oder wird ausgespart (negative)
|
||||
d = positive ? tab_d : tab_d + fit_clear;
|
||||
w = positive ? tab_w : tab_w + fit_clear;
|
||||
translate([0, 0, tab_h/2])
|
||||
cube([w, d*2, tab_h], center=true);
|
||||
}
|
||||
|
||||
module tile() {
|
||||
difference() {
|
||||
union() {
|
||||
rounded_square(tile_size, corner_r, tile_height);
|
||||
// Tabs an Nord- und Ost-Kante (positive)
|
||||
translate([0, tile_size/2, 0]) tab(true);
|
||||
translate([ tile_size/2, 0, 0]) rotate([0,0,90]) tab(true);
|
||||
}
|
||||
// Verankerung
|
||||
translate([0, 0, tile_height - socket_depth])
|
||||
cylinder(d = socket_d + fit_clear, h = socket_depth + 0.1);
|
||||
// Slots an Sued- und West-Kante (negative)
|
||||
translate([0, -tile_size/2, 0]) tab(false);
|
||||
translate([-tile_size/2, 0, 0]) rotate([0,0,90]) tab(false);
|
||||
}
|
||||
}
|
||||
|
||||
tile();
|
||||
70
01_3D-Druck/openscad/gate-tor.scad
Normal file
70
01_3D-Druck/openscad/gate-tor.scad
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
// Gate-Tor mit Rollen-Steckplaetzen und Kartenschlitz
|
||||
// SLC-Workshop Tabletop · Einheiten: mm
|
||||
|
||||
/* [Tor] */
|
||||
opening_w = 90; // lichte Weite
|
||||
opening_h = 100; // lichte Hoehe
|
||||
thick = 8; // Materialstaerke (Tiefe)
|
||||
post_w = 12; // Pfostenbreite
|
||||
top_h = 14; // Hoehe des Querbalkens
|
||||
|
||||
/* [Fuesse] */
|
||||
foot_w = 60;
|
||||
foot_d = 30;
|
||||
foot_h = 4;
|
||||
|
||||
/* [Rollen-Steckplaetze] */
|
||||
peg_d = 8.2; // Loch fuer Figuren-Pin (Ø7,5 + Passung)
|
||||
peg_count = 4;
|
||||
peg_depth = 6;
|
||||
|
||||
/* [Kartenschlitz oben] */
|
||||
card_w = 65;
|
||||
card_t = 3;
|
||||
card_depth = 10;
|
||||
$fn = 48;
|
||||
|
||||
total_w = opening_w + 2*post_w;
|
||||
total_h = opening_h + top_h + foot_h;
|
||||
|
||||
module arch() {
|
||||
difference() {
|
||||
// Aussenkontur
|
||||
translate([-total_w/2, 0, 0])
|
||||
cube([total_w, thick, opening_h + top_h]);
|
||||
// Oeffnung
|
||||
translate([-opening_w/2, -0.1, 0])
|
||||
cube([opening_w, thick + 0.2, opening_h]);
|
||||
}
|
||||
}
|
||||
|
||||
module feet() {
|
||||
for (x = [-1, 1])
|
||||
translate([x*(opening_w/2 + post_w/2) - foot_w/2, -(foot_d-thick)/2, 0])
|
||||
cube([foot_w, foot_d, foot_h]);
|
||||
}
|
||||
|
||||
module peg_holes() {
|
||||
// Lochreihe entlang der Vorderkante der Fuesse
|
||||
spacing = (opening_w + post_w) / (peg_count - 1);
|
||||
for (i = [0 : peg_count - 1])
|
||||
translate([-(opening_w + post_w)/2 + i*spacing, foot_d/2 - peg_d, foot_h])
|
||||
rotate([180,0,0])
|
||||
cylinder(d = peg_d, h = peg_depth);
|
||||
}
|
||||
|
||||
module card_slot() {
|
||||
translate([-card_w/2, thick/2 - card_t/2, opening_h + top_h - card_depth])
|
||||
cube([card_w, card_t, card_depth + 0.1]);
|
||||
}
|
||||
|
||||
// Tor inkl. Kartenschlitz
|
||||
difference() {
|
||||
translate([0,0,foot_h]) arch();
|
||||
translate([0,0,foot_h]) card_slot();
|
||||
}
|
||||
// Fuesse inkl. Rollen-Steckplaetze
|
||||
difference() {
|
||||
feet();
|
||||
peg_holes();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue