// ============================================================ // 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 // ============================================================