Files
Vordach-mit-openscad/vordach.scad
T

339 lines
13 KiB
OpenSCAD
Raw Normal View History

2026-05-17 15:27:40 +02:00
// ============================================================
// 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 (010 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
// ============================================================