Files
Vordach-mit-openscad/vordach1.scad
T
2026-05-17 15:27:40 +02:00

339 lines
13 KiB
OpenSCAD
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ============================================================
// 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
// ============================================================