107 lines
3.9 KiB
OpenSCAD
107 lines
3.9 KiB
OpenSCAD
// RACI-Konsolen-Board (rund, B+ symmetrisch) — SLC-Workshop Tabletop · mm
|
|
// Pendant zum Blender-Modell (../blender/raci-board.py). Gleiche Maße.
|
|
// Rund Ø260, Mittelmulde Ø50 (Chip), 10 Sockel Ø32,8 in 4 gleich grossen 90°-Sektoren
|
|
// (symmetrisches Kreuz, Trennlinien 0/90/180/270), R3·A1·C4·I2, Sockel je Sektor
|
|
// gleichmaessig verteilt; Phasenname (DESIGN) im Mulden-Boden; Card-Schlitz 70x5, tief.
|
|
|
|
/* [Board] */
|
|
board_r = 130; // Aussenradius (Ø260)
|
|
base_h = 14;
|
|
edge_cham = 2; // Fase obere Aussenkante
|
|
|
|
/* [Mittelmulde / Chip] */
|
|
chip_d = 50;
|
|
chip_dep = 2.2;
|
|
notch_d = 14;
|
|
|
|
/* [Sockel] — Figuren-Sockel Ø32 + Spiel */
|
|
sock_d = 32.8;
|
|
sock_dep = 2.0;
|
|
sock_lead = 0.8;
|
|
ring_r = 88;
|
|
|
|
/* [Sektoren] — Name, Wort-Mittenwinkel, Sockelwinkel (Grad, 90=oben) */
|
|
// 4 gleich grosse 90°-Sektoren in den Diagonalen; Trennlinien-Kreuz bei 0/90/180/270.
|
|
SEC = [
|
|
["RESPONSIBLE", 135, [98, 135, 172]],
|
|
["ACCOUNTABLE", 45, [45]],
|
|
["CONSULTED", -45, [-8, -33, -57, -82]],
|
|
["INFORMED", -135, [-98, -172]],
|
|
];
|
|
DIV = [0, 90, 180, 270];
|
|
ridge_w = 2.6; ridge_dep = 1.4;
|
|
|
|
/* [Gravur] */
|
|
word_size = 6; word_dep = 0.9;
|
|
word_r = ring_r + sock_d/2 + 9;
|
|
design_size = 9; design_dep = 1.0;
|
|
|
|
/* [Action-Card-Halter] */
|
|
card_cy = 116; card_bw = 84; card_bd = 22; card_bh = 16;
|
|
slot_w = 70; slot_t = 5; slot_depth = 27; slot_tilt = 12;
|
|
|
|
$fn = 128;
|
|
|
|
// --- Grundkoerper (rund, Oberkante gefast) ---------------------------------
|
|
module board_blank() {
|
|
hull() {
|
|
cylinder(r = board_r - edge_cham, h = base_h);
|
|
cylinder(r = board_r, h = base_h - edge_cham);
|
|
}
|
|
}
|
|
module card_block() {
|
|
translate([0, card_cy, (base_h + card_bh)/2])
|
|
cube([card_bw, card_bd, base_h + card_bh], center = true);
|
|
}
|
|
|
|
// --- Aussparungen ----------------------------------------------------------
|
|
module chip_well() {
|
|
translate([0, 0, base_h - chip_dep]) cylinder(d = chip_d, h = chip_dep + 0.1);
|
|
translate([0, -chip_d/2, base_h - chip_dep]) cylinder(d = notch_d, h = chip_dep + 0.1); // Greifkerbe
|
|
}
|
|
module figure_socket(a) {
|
|
x = ring_r*cos(a); y = ring_r*sin(a); z0 = base_h - sock_dep;
|
|
translate([x, y, z0]) {
|
|
cylinder(d = sock_d, h = sock_dep + 0.1);
|
|
translate([0,0,sock_dep - sock_lead]) cylinder(d1 = sock_d, d2 = sock_d + 2*sock_lead, h = sock_lead + 0.1);
|
|
}
|
|
}
|
|
module divider(a) { // flache Trennlinie (graviert)
|
|
di = chip_d/2 + 5; do = ring_r + sock_d/2 + 6; rmid = (di+do)/2;
|
|
translate([rmid*cos(a), rmid*sin(a), base_h - ridge_dep])
|
|
rotate([0,0,a])
|
|
linear_extrude(ridge_dep + 0.1) square([do-di, ridge_w], center = true);
|
|
}
|
|
module sector_label(txt, a) {
|
|
rot = (sin(a) >= 0) ? a - 90 : a + 90; // tangential, lesbar
|
|
translate([word_r*cos(a), word_r*sin(a), base_h - word_dep])
|
|
rotate([0,0,rot])
|
|
linear_extrude(word_dep + 0.1) text(txt, size = word_size, halign="center", valign="center");
|
|
}
|
|
module design_label() { // im Mulden-Boden
|
|
translate([0, 0, base_h - chip_dep - design_dep])
|
|
linear_extrude(design_dep + 0.1) text("DESIGN", size = design_size, halign="center", valign="center");
|
|
}
|
|
module card_slot() { // oben offen, tief, leicht nach hinten geneigt
|
|
sb = base_h + card_bh - slot_depth; sh = slot_depth + 20;
|
|
translate([0, card_cy, sb + sh/2]) rotate([-slot_tilt, 0, 0])
|
|
cube([slot_w, slot_t, sh], center = true);
|
|
}
|
|
|
|
// --- Zusammenbau -----------------------------------------------------------
|
|
module raci_board() {
|
|
difference() {
|
|
union() { board_blank(); card_block(); }
|
|
chip_well();
|
|
for (s = SEC) for (a = s[2]) figure_socket(a);
|
|
for (a = DIV) divider(a);
|
|
card_slot();
|
|
for (s = SEC) sector_label(s[0], s[1]);
|
|
design_label();
|
|
}
|
|
}
|
|
|
|
raci_board();
|
|
|
|
echo(board_d = 2*board_r, base_h = base_h, chip = chip_d, sock = sock_d,
|
|
ring_r = ring_r, sockets = 10, card_slot = [slot_w, slot_t, slot_depth]);
|