339 lines
13 KiB
OpenSCAD
339 lines
13 KiB
OpenSCAD
// ============================================================
|
||
// PARAMETRISCHES VORDACH - OpenSCAD
|
||
// Autor: John M. Wayne
|
||
// Datum: 2026-05-16
|
||
// Lizenz: CC BY 4.0
|
||
//
|
||
// EINHEITENSYSTEM: alle Maße in Millimeter (mm)
|
||
//
|
||
// KOORDINATENURSPRUNG:
|
||
// X = Breite (entlang der Hauswand)
|
||
// Y = Tiefe (Auskragung vom Haus weg)
|
||
// Z = Höhe
|
||
//
|
||
// MONTAGEHINWEIS:
|
||
// Die Wandseite liegt bei Y = 0.
|
||
// Die Pfosten stehen auf Z = 0 (Bodenebene).
|
||
// ============================================================
|
||
|
||
|
||
// ============================================================
|
||
// 1. GLOBALE PARAMETER – hier zentral anpassen
|
||
// ============================================================
|
||
|
||
// --- Gesamtgeometrie ---
|
||
vordach_breite = 3000; // [mm] Breite des Vordachs entlang der Hauswand
|
||
vordach_tiefe = 1500; // [mm] Auskragung (Tiefe) vom Haus nach außen
|
||
dach_neigung_grad = 7; // [°] Gefälle nach vorne (min. 5° für Stegplatten)
|
||
|
||
// --- Pfosten ---
|
||
pfosten_breite = 100; // [mm] Querschnitt Pfosten (quadratisch)
|
||
pfosten_hoehe = 2400; // [mm] Pfostenhöhe ab Boden (Unterkante Dach vorne)
|
||
pfosten_anzahl = 2; // Anzahl Frontstützen (bei Breite > 3 m: 3 empfohlen)
|
||
|
||
// --- Wandhalterung / Pfette ---
|
||
pfette_breite = 120; // [mm] Breite der Wandpfette (Holz oder Stahl)
|
||
pfette_hoehe = 180; // [mm] Höhe der Wandpfette
|
||
|
||
// TOLERANZ HAUSWAND:
|
||
// Mauerwerk ist selten exakt lotrecht. Empfohlene Montagetoleranz:
|
||
// - Dübelbohrlöcher ±5 mm übermessen (Langloch in Z-Richtung)
|
||
// - Pfette mit Beilagscheiben (0–10 mm) unterlegen
|
||
// - 'wandtoleranz_z': Z-Versatz der Pfette gegenüber Sollhöhe
|
||
// (+ = Pfette höher, - = Pfette tiefer; typisch ±20 mm)
|
||
// - 'wandtoleranz_y': Luftspalt Pfette <-> Wand (Putz, Dämmung)
|
||
wandtoleranz_z = 0; // [mm] Höhenkorrektur Wandmontage
|
||
wandtoleranz_y = 5; // [mm] Abstand Pfette zur Wandoberfläche
|
||
|
||
// --- Dachfläche / Sparren ---
|
||
sparren_breite = 80; // [mm] Sparrenquerschnitt Breite
|
||
sparren_hoehe = 120; // [mm] Sparrenquerschnitt Höhe
|
||
sparren_abstand = 500; // [mm] Achsabstand der Sparren
|
||
// Richtwerte je Dachmaterial:
|
||
// Stegplatten (PC): max. 600 mm Glas (VSG): max. 500 mm
|
||
// Trapezblech: max. 1250 mm Bitumenwellpl.: max. 450 mm
|
||
dach_ueberstand_vorne = 100; // [mm] Überstand Eindeckung an der Traufe
|
||
dach_ueberstand_seite = 50; // [mm] Seitlicher Überstand
|
||
|
||
// --- Dacheindeckung ---
|
||
// MATERIAL-UMSCHALTER (Wert als String eintragen):
|
||
// "stegplatten" → Polycarbonat-Stegplatten (16 mm)
|
||
// "glas" → Verbundsicherheitsglas VSG ( 8 mm)
|
||
// "blech" → Trapezblech / Aluminium (35 mm inkl. Profil)
|
||
// "bitumen" → Bitumenwellplatten (43 mm inkl. Welle)
|
||
dach_material = "stegplatten";
|
||
|
||
// Materialstärken (werden per dach_staerke() automatisch gewählt)
|
||
stegplatten_staerke = 16;
|
||
glas_staerke = 8;
|
||
blech_staerke = 35;
|
||
bitumen_staerke = 43;
|
||
|
||
// --- Verbindungselemente (Visualisierung) ---
|
||
schraube_dm = 12; // [mm] Schraubendurchmesser (M12)
|
||
ankerplatte_groesse = 150; // [mm] Fußplatte Pfosten (quadratisch)
|
||
ankerplatte_staerke = 10; // [mm] Plattendicke
|
||
|
||
// --- Renderqualität ---
|
||
$fn = 32; // Auflösung Zylinder (32 = schnell, 128 = Druckqualität)
|
||
|
||
|
||
// ============================================================
|
||
// 2. ABGELEITETE GRÖSSEN – nicht manuell ändern
|
||
// ============================================================
|
||
|
||
// Dachhöhe hinten (Wandseite) aus Neigung + Tiefe
|
||
dach_hoehe_vorne = pfosten_hoehe;
|
||
dach_hoehe_hinten = pfosten_hoehe + tan(dach_neigung_grad) * vordach_tiefe;
|
||
|
||
// Materialstärke per ternärer Kette
|
||
// HINWEIS: OpenSCAD-Funktionen dürfen nicht auf globale String-Variablen
|
||
// zugreifen, daher direkte Referenz auf die globalen Stärken-Variablen.
|
||
function dach_staerke() =
|
||
dach_material == "stegplatten" ? stegplatten_staerke :
|
||
dach_material == "glas" ? glas_staerke :
|
||
dach_material == "blech" ? blech_staerke :
|
||
dach_material == "bitumen" ? bitumen_staerke :
|
||
stegplatten_staerke; // Fallback
|
||
|
||
// Sparrenlänge (Schräglänge auf der Dachneigung)
|
||
sparren_laenge = vordach_tiefe / cos(dach_neigung_grad) + dach_ueberstand_vorne;
|
||
|
||
// Anzahl Sparren
|
||
sparren_count = floor((vordach_breite + 2 * dach_ueberstand_seite) / sparren_abstand) + 1;
|
||
|
||
// Dübelabstand Wandpfette (alle 500 mm ein Befestigungspunkt)
|
||
duebel_abstand = 500;
|
||
duebel_anzahl = round(vordach_breite / duebel_abstand);
|
||
|
||
|
||
// ============================================================
|
||
// 3. MODULE
|
||
// ============================================================
|
||
|
||
// ------------------------------------------------------------
|
||
// 3.1 PFOSTEN (Frontstütze)
|
||
// Ursprung: Unterkante, Mitte des Pfostenquerschnitts
|
||
//
|
||
// Montagehinweis:
|
||
// Ankerplatten mit chemischem Dübel (z. B. Hilti HIT-RE 500)
|
||
// befestigen. Bohrdurchmesser = schraube_dm + 1 mm Spielpassung.
|
||
// ankerplatte_groesse an vorhandenes Fundament anpassen.
|
||
// ------------------------------------------------------------
|
||
module pfosten(hoehe = pfosten_hoehe) {
|
||
|
||
// Schaft
|
||
color("SaddleBrown", 0.9)
|
||
translate([-pfosten_breite/2, -pfosten_breite/2, 0])
|
||
cube([pfosten_breite, pfosten_breite, hoehe]);
|
||
|
||
// Fußplatte
|
||
color("Silver")
|
||
translate([-ankerplatte_groesse/2, -ankerplatte_groesse/2, -ankerplatte_staerke])
|
||
cube([ankerplatte_groesse, ankerplatte_groesse, ankerplatte_staerke]);
|
||
|
||
// Ankerschrauben (Visualisierung, 4 Stück)
|
||
for (dx = [-1, 1])
|
||
for (dy = [-1, 1])
|
||
color("DarkGray")
|
||
translate([dx * (ankerplatte_groesse/2 - 20),
|
||
dy * (ankerplatte_groesse/2 - 20),
|
||
-ankerplatte_staerke])
|
||
cylinder(d = schraube_dm,
|
||
h = ankerplatte_staerke + 30,
|
||
center = false);
|
||
|
||
// Kopfplatte (Auflager für Sparren)
|
||
color("Silver")
|
||
translate([-ankerplatte_groesse/2, -ankerplatte_groesse/2, hoehe])
|
||
cube([ankerplatte_groesse, ankerplatte_groesse, ankerplatte_staerke]);
|
||
}
|
||
|
||
|
||
// ------------------------------------------------------------
|
||
// 3.2 WANDHALTERUNG / WANDPFETTE
|
||
// Verläuft entlang der gesamten Breite an der Hauswand.
|
||
//
|
||
// Montagehinweis:
|
||
// - wandtoleranz_y erzeugt Luftspalt (Putz, Dämmung, Belüftung)
|
||
// - wandtoleranz_z korrigiert Höhenabweichungen im Mauerwerk
|
||
// - Dübelmuster: alle duebel_abstand mm ein Befestigungspunkt
|
||
// - Holzpfette: druckimprägniert C24, Hirnholz mit Anstrich
|
||
// - Stahlpfette: feuerverzinkt, Wandanschluss mit EPDM abdichten
|
||
// ------------------------------------------------------------
|
||
module wandpfette() {
|
||
|
||
// Z-Position: Sparrenauflager bündig mit Oberkante Pfette
|
||
let (pfette_z = dach_hoehe_hinten - pfette_hoehe + wandtoleranz_z) {
|
||
|
||
// Pfettenkörper
|
||
color("Peru", 0.9)
|
||
translate([0, wandtoleranz_y, pfette_z])
|
||
cube([vordach_breite, pfette_breite, pfette_hoehe]);
|
||
|
||
// Dübel / Wandschrauben (Visualisierung)
|
||
for (i = [0 : duebel_anzahl])
|
||
let (x = i * (vordach_breite / max(duebel_anzahl, 1)))
|
||
color("DarkGray")
|
||
translate([x, -80, pfette_z + pfette_hoehe / 2])
|
||
rotate([90, 0, 0])
|
||
cylinder(d = 16, h = 80);
|
||
}
|
||
}
|
||
|
||
|
||
// ------------------------------------------------------------
|
||
// 3.3 SPARREN
|
||
// Ein einzelner Dachsparren, geneigt per dach_neigung_grad.
|
||
// Ursprung: Wandpfettenauflager (Y=0, Z=dach_hoehe_hinten)
|
||
//
|
||
// Hinweis Materialwahl:
|
||
// Stegplatten → Sparren in Falllinie (Hohlkammern = Entwässerung)
|
||
// Glas → alle 500 mm (Statik nachweisen!)
|
||
// Trapezblech → bis 1250 mm selbsttragend
|
||
// Bitumen → Vollschalung oder max. 450 mm Abstand
|
||
// ------------------------------------------------------------
|
||
module sparren(laenge = sparren_laenge) {
|
||
|
||
color("BurlyWood")
|
||
rotate([-dach_neigung_grad, 0, 0])
|
||
cube([sparren_breite, laenge, sparren_hoehe]);
|
||
}
|
||
|
||
|
||
// ------------------------------------------------------------
|
||
// 3.4 DACHFLÄCHE / EINDECKUNG
|
||
// Vereinfachte geneigte Plattengeometrie.
|
||
//
|
||
// Stegplatten (PC):
|
||
// - Überlappung min. 100 mm in Falllinie, Aluabschlussband
|
||
// - Ausdehnung ca. 2.5 mm/m/10 K → Klemmprofil nicht festklemmen
|
||
// - UV-Schutzseite (blaue Folie) IMMER nach oben
|
||
// - Randversiegelung: Aluband oben + gelochtes Lüftungsband unten
|
||
//
|
||
// Glas (VSG):
|
||
// - Randeinstand min. 20 mm im Klemmprofil
|
||
// - Eigengewicht 10 mm VSG ≈ 25 kg/m² → Statik erforderlich!
|
||
// - Thermisch getrennte Profile (Wärmebrücke vermeiden)
|
||
// - Norm: VSG nach DIN 18008
|
||
//
|
||
// Trapezblech:
|
||
// - Dachneigung min. 3° (Stehfalz) / 5° (Trapez)
|
||
// - First/Traufe mit vorkomprimiertem Dichtband
|
||
// - Schrauben IMMER durch Hochrippe mit Scheibendichtung
|
||
//
|
||
// Bitumenwellplatte:
|
||
// - Längsüberlappung: 1 Welle; Querüberlappung: min. 200 mm
|
||
// - First: Firsthaube + Schaumstoff-Dichtstreifen
|
||
// ------------------------------------------------------------
|
||
module dachflaeche() {
|
||
|
||
let (staerke = dach_staerke(),
|
||
breite_gesamt = vordach_breite + 2 * dach_ueberstand_seite) {
|
||
|
||
color("LightBlue", 0.5)
|
||
translate([-dach_ueberstand_seite, 0, dach_hoehe_hinten])
|
||
rotate([-dach_neigung_grad, 0, 0])
|
||
cube([breite_gesamt, sparren_laenge, staerke]);
|
||
}
|
||
}
|
||
|
||
|
||
// ------------------------------------------------------------
|
||
// 3.5 LÄNGSTRÄGER (First- und Traufpfette)
|
||
// Horizontale Träger parallel zur Hauswand.
|
||
// y_pos: Achsposition in Y, z_pos: Unterkante in Z
|
||
// ------------------------------------------------------------
|
||
module laengstraeger(y_pos, z_pos) {
|
||
color("Sienna", 0.85)
|
||
translate([0, y_pos - sparren_breite / 2, z_pos])
|
||
cube([vordach_breite, sparren_breite, sparren_hoehe]);
|
||
}
|
||
|
||
|
||
// ============================================================
|
||
// 4. HAUPTASSEMBLIERUNG
|
||
// ============================================================
|
||
|
||
module vordach_komplett() {
|
||
|
||
// --- Pfosten ---
|
||
// Gleichmäßig über die Breite verteilt an der Vorderkante
|
||
let (abstand = (pfosten_anzahl > 1)
|
||
? (vordach_breite - pfosten_breite) / (pfosten_anzahl - 1)
|
||
: 0) {
|
||
|
||
for (i = [0 : pfosten_anzahl - 1])
|
||
let (px = pfosten_breite / 2 + i * abstand)
|
||
translate([px,
|
||
vordach_tiefe - pfosten_breite / 2,
|
||
0])
|
||
pfosten();
|
||
}
|
||
|
||
// --- Wandpfette ---
|
||
wandpfette();
|
||
|
||
// --- Sparren ---
|
||
for (i = [0 : sparren_count - 1])
|
||
let (sx = -dach_ueberstand_seite + i * sparren_abstand)
|
||
translate([sx, 0, dach_hoehe_hinten])
|
||
sparren();
|
||
|
||
// --- Firstpfette (wandseitig) und Traufpfette (vorne) ---
|
||
laengstraeger(0, dach_hoehe_hinten - sparren_hoehe);
|
||
laengstraeger(vordach_tiefe, dach_hoehe_vorne - sparren_hoehe);
|
||
|
||
// --- Dachfläche ---
|
||
dachflaeche();
|
||
}
|
||
|
||
|
||
// ============================================================
|
||
// 5. RENDER-AUFRUF
|
||
// ============================================================
|
||
|
||
vordach_komplett();
|
||
|
||
|
||
// ============================================================
|
||
// 6. DEBUG / SCHNITTANSICHT (Kommentar entfernen zum Aktivieren)
|
||
// ============================================================
|
||
|
||
// Querschnitt in der Mitte (Y-Schnitt):
|
||
// intersection() {
|
||
// vordach_komplett();
|
||
// translate([vordach_breite/2 - 5, -100, -100])
|
||
// cube([10, vordach_tiefe + 200, dach_hoehe_hinten + 500]);
|
||
// }
|
||
|
||
// Einzelmodule isoliert testen:
|
||
// pfosten();
|
||
// wandpfette();
|
||
// sparren();
|
||
// dachflaeche();
|
||
|
||
|
||
// ============================================================
|
||
// 7. ANPASSUNGSGUIDE (Kurzreferenz)
|
||
// ============================================================
|
||
//
|
||
// AUFGABE VARIABLE(N)
|
||
// ─────────────────────────────────────────────────────────
|
||
// Größe ändern vordach_breite, vordach_tiefe
|
||
// Gefälle einstellen dach_neigung_grad
|
||
// Dachmaterial wechseln dach_material (+ sparren_abstand prüfen!)
|
||
// Putzausgleich Wand wandtoleranz_y
|
||
// Höhenausgleich Wand wandtoleranz_z
|
||
// Pfosten-Querschnitt pfosten_breite
|
||
// Pfostenanzahl erhöhen pfosten_anzahl
|
||
// Überstand Traufe/Seite dach_ueberstand_vorne / dach_ueberstand_seite
|
||
// Renderauflösung $fn (oben, global)
|
||
// ─────────────────────────────────────────────────────────
|
||
//
|
||
// EXPORTHINWEIS:
|
||
// F5 = Vorschau (OpenCSG, schnell)
|
||
// F6 = vollständiges Render (CGAL) → dann STL / DXF exportieren
|
||
// File → Export → DXF → 2D-Projektion für Werkstattzeichnung
|
||
// ============================================================
|