## Teil 4. Gehäusekonstruktion, Mast-Montierung & CNC-Deckelfertigung 

Der Code wurde von der alten Geometrie auf den neuen Gesamtdurchmesser
von 190 mm skaliert, um die 150-mm-Solarzelle aufzunehmen. Zudem ist
eine 2 cm breite Dachrinne (RINNE_BREITE = 20) mit einem
3-mm-Außenwulst eingearbeitet. Die Aufnahmen für die drei Carbonrohre
(Drachenbau-Standard: 10 mm außen / 8 mm innen) sind präzise
mitskaliert worden, während der Akku plangemäß nach unten in die Basis
gewandert ist, was den Kopfbereich mechanisch entlastet.

## Gehäusekonstruktion, Mast-Montierung & CNC-Deckelfertigung (Teil 4a: Oberteil)
## 4.1 Parametrisches Gehäuse-Oberteil mit integrierter Dachrinne (anemometer_top_housing.scad)

Der OpenSCAD-Code für das Gehäuse-Oberteil.

```
// ==============================================================================
// 3D ULTRASONIC ANEMOMETER - TOP HOUSING (190mm SKALIERT MIT DACHRINNE)
// ==============================================================================

$fn = 120; 

// Parametrische Hauptabmessungen
D_SOLARZELLE     = 150.0; // Durchmesser der zentralen runden Solarzelle (mm)
RINNE_BREITE     = 20.0;  // Breite der umlaufenden Regen-Dachrinne (mm)
W_WAND           = 2.5;   // Standard-Wandstärke für mechanische Festigkeit (mm)
AUSSEN_WULST_H   = 3.0;   // Höhe des äußeren Wasser-Bezugsrandes (mm)
T_VINYLSCHEIBE   = 3.0;   // Falztiefe für den CNC-gefrästen Acryldeckel (mm)

H_OBERTEIL       = 35.0;  // Gesamthöhe des oberen Gehäusekopfes (mm)
R_KREIS          = 75.0;  // Akustischer Sensor-Teilkreisradius (mm)
D_SENSOR_INNEN   = 16.2;  // Passung für 16mm Ultraschall-Wandler TCT40 (mm)
L_SENSOR_ROHR    = 25.0;  // Länge der schrägen Wandler-Aufnahmerohre (mm)

ROHR_AUSSEN_DM   = 10.0;  // Carbonrohr-Außendurchmesser (mm)
SCHLAUCH_AUSSEN  = 6.0;   // Ablauf-Silikonschlauch (4/6er Standard) (mm)
T_STUETZ_LOCH    = 15.0;  // Einstecktiefe der tragenden Rohre (mm)

// Abgeleitete Geometriekonstanten
INNEN_RADIUS     = (D_SOLARZELLE / 2) + W_WAND;
GESAMT_RADIUS    = INNEN_RADIUS + RINNE_BREITE + W_WAND;
GESAMT_DURCHMESSER = GESAMT_RADIUS * 2; // Ergibt exakt 190 mm

// Haupt-Konstruktionsblock (Differenz-Verfahren)
difference() {
    // --- 1. POSITIV-KÖRPER (ADDITIVE GEOMETRIEN) ---
    union() {
        // Äußere Basishülle des Kopfes inklusive Wasserbezugswulst
        cylinder(r = GESAMT_RADIUS, h = H_OBERTEIL);
        
        // Aerodynamischer Wind-Abrissrand (Tragflügelprofil auf der Unterseite)
        translate([0, 0, 0])
            cylinder(h = 10, r1 = GESAMT_RADIUS - 12, r2 = GESAMT_RADIUS);
            
        // Die drei um 45 Grad nach unten geneigten Wandler-Schutzrohre
        for (i =) { 
            rotate([0, 0, i]) 
                translate([R_KREIS, 0, H_OBERTEIL / 2 - 2]) 
                    rotate([0, -45, 0])
                        cylinder(d = D_SENSOR_INNEN + (2 * W_WAND), h = L_SENSOR_ROHR, center = true);
        }
        
        // Verstärkte statische Hülsen für die tragenden Carbonrohre
        for (i =) {
            rotate([0, 0, i]) 
                translate([INNEN_RADIUS + (RINNE_BREITE / 2), 0, 0])
                    cylinder(d = ROHR_AUSSEN_DM + (2 * W_WAND), h = T_STUETZ_LOCH + W_WAND);
        }
    }

    // --- 2. NEGATIV-KÖRPER (SUBTRAKTIVE AUSSPARUNGEN) ---
    
    // Zentraler Innenraum für Raspberry Pi Pico und Solar-Ladeelektronik
    translate([0, 0, -1]) 
        cylinder(r = INNEN_RADIUS, h = H_OBERTEIL - W_WAND + 1);
        
    // Oberer Gehäusefalz zur bündigen Aufnahme des Acryl-Schutzdeckels
    translate([0, 0, H_OBERTEIL - T_VINYLSCHEIBE]) 
        cylinder(d = D_SOLARZELLE + 1.0, h = T_VINYLSCHEIBE + 1);
        
    // Umlaufende 2-cm-Dachrinne (Ausfräsung von oben unter Erhalt des Bezugsrandes)
    translate([0, 0, W_WAND + AUSSEN_WULST_H])
        difference() {
            cylinder(r = GESAMT_RADIUS - W_WAND, h = H_OBERTEIL);
            cylinder(r = INNEN_RADIUS + W_WAND, h = H_OBERTEIL + 1);
        }
        
    // Innenschächte der schrägen Ultraschall-Wandler-Hülsen (45-Grad-Schallweg)
    for (i =) {
        rotate([0, 0, i]) 
            translate([R_KREIS, 0, H_OBERTEIL / 2 - 2]) 
                rotate([0, -45, 0])
                    cylinder(d = D_SENSOR_INNEN, h = L_SENSOR_ROHR + 5, center = true);
    }
    
    // Präzise Sacklöcher für den festen Sitz der 10-mm-Carbonrohre von unten
    for (i =) {
        rotate([0, 0, i]) 
            translate([INNEN_RADIUS + (RINNE_BREITE / 2), 0, -1])
                cylinder(d = ROHR_AUSSEN_DM + 0.2, h = T_STUETZ_LOCH + 1); // 0.2mm Drucktoleranz
    }

    // Die drei zentrischen Durchgangsbohrungen im Rinnenboden für die 6-mm-Ablaufschläuche
    for (i =) {
        rotate([0, 0, i]) 
            translate([INNEN_RADIUS + (RINNE_BREITE / 2), 0, -1])
                cylinder(d = SCHLAUCH_AUSSEN + 0.1, h = W_WAND + 5);
    }
    
    // Zentraler Kabeldurchbruch im Gehäuseboden für die Solar- und Piezoleitungen
    translate([0, 0, -1]) 
        cylinder(d = 12.0, h = W_WAND + 2);
}
```




### 4.2 Der BME280-Klimazylinder (anemometer_bme280_shroud.scad)

Dieser Abschnitt enthält den OpenSCAD-Code für den ausgelagerten BME280-Klimazylinder.

// ==============================================================================
// 3D ULTRASONIC ANEMOMETER - CLIMATE SHROUD (LAMELLENZYLINDER)
// ==============================================================================

$fn = 80;
D_AUSSEN   = 36.0; // Außendurchmesser des Schutzraums (mm)
H_ZYLINDER = 35.0; // Gesamthöhe des Lamellenzylinders (mm)
W_WAND     = 2.0;  // Wandstärke für filigranen 3D-Druck (mm)
B_BREAKOUT = 15.5; // Breite der inneren BME280-Führungsschiene (mm)
T_BREAKOUT = 2.0;  // Tiefe der Haltenut (mm)

difference() {
    // Positiv-Körper mit oberem Montageflansch
    union() {
        cylinder(d = D_AUSSEN, h = H_ZYLINDER);
        translate([0, 0, H_ZYLINDER - 2]) 
            cylinder(d = D_AUSSEN + 6.0, h = 2); 
    }
    
    // Zentraler Luftmessraum
    translate([0, 0, -1]) 
        cylinder(d = D_AUSSEN - (2 * W_WAND), h = H_ZYLINDER + 4);
        
    // Halteschacht für das BME280 Breakout-Board
    translate([0, 0, H_ZYLINDER / 2]) 
        cube([B_BREAKOUT, T_BREAKOUT, H_ZYLINDER + 5], center = true);
        
    // Strömungsoffene, um 30 Grad nach unten geneigte Lamellenschlitze (Regenschutz)
    for (z = [5 : 6 : H_ZYLINDER - 8]) {
        translate([0, 0, z]) 
            rotate_extrude() 
                translate([D_AUSSEN / 2 - W_WAND - 1, 0, 0])
                    rotate([0, 0, -30]) 
                        square([4, 2.5], center = true);
    }
}


### 4.3 Stativ-Unterteil mit integrierter Mastaufnahme, Wippen- und Akkukammer (anemometer_base_housing.scad)

Dieser Abschnitt enthält den OpenSCAD-Code für das Stativ-Unterteil.

```
// ==============================================================================
// 3D ULTRASONIC ANEMOMETER - BASE HOUSING WITH INTEGRATED TIPPING BUCKET
// ==============================================================================

$fn = 120;

// Geometrische System-Parameter (synchronisiert mit Oberteil)
D_SOLARZELLE     = 150.0;
RINNE_BREITE     = 20.0;
W_WAND           = 2.5;
R_KREIS          = 75.0;
INNEN_RADIUS     = (D_SOLARZELLE / 2) + W_WAND;
ROHR_AUSSEN_DM   = 10.0;
T_STUETZ_LOCH    = 15.0;
SCHLAUCH_AUSSEN  = 6.0;

// Spezifische Maße für das Unterteil
D_BASE           = 90.0;  // Haupt-Außendurchmesser der Basis (mm)
H_BASE           = 95.0;  // Gesamthöhe der Stativbasis (mm)
D_MAST           = 30.2;  // Durchmesser der Aluminium-Maststange (mm)
H_MAST_HULSE     = 30.0;  // Einstecktiefe für den Mast (mm)

L_AKKU           = 71.5;  // Länge des geschützten 18650/21700 Akkuschachts (mm)
D_AKKU           = 22.0;  // Durchmesser des Akkuschachts (mm)

difference() {
    // --- 1. POSITIV-KÖRPER (ADDITIVE GEOMETRIEN) ---
    union() {
        // Massiver zylindrischer Hauptkörper der Basis
        cylinder(d = D_BASE, h = H_BASE);
        
        // Die drei mitskalierten Hülsenaufnahmen für die Carbonrohre (120-Grad-Teilung)
        for (i =) {
            rotate([0, 0, i]) 
                translate([INNEN_RADIUS + (RINNE_BREITE / 2), 0, H_BASE - T_STUETZ_LOCH - W_WAND])
                    cylinder(d = ROHR_AUSSEN_DM + (2 * W_WAND), h = T_STUETZ_LOCH + W_WAND);
        }
    }

    // --- 2. NEGATIV-KÖRPER (SUBTRAKTIVE AUSSPARUNGEN) ---
    
    // EBENE 1 (Oben): Der integrierte 3-auf-1 Bündelungs-Trichterkanal
    // Führt das Wasser der drei Einlassschläuche zentrisch zur Tropfnase zusammen
    translate([0, 0, H_BASE - 12])
        cylinder(d1 = D_BASE - (2 * W_WAND), d2 = 6.0, h = 12.1);
        
    // EBENE 2 (Mitte): Die nasse Wippen-Kammer (Mechanikraum für die Kippvorrichtung)
    // Zentrisch platziert unter der Einlass-Tropfnase
    translate([0, 0, H_MAST_HULSE + W_WAND + 15])
        cylinder(d = 50.0, h = H_BASE - H_MAST_HULSE - W_WAND - 27);
        
    // EBENE 3a (Unten-Mitte): Trockener, isolierter Akkuschacht (Schwerpunkt-Gewicht)
    translate([0, 0, H_MAST_HULSE + 5])
        rotate([90, 0, 0])
            cylinder(d = D_AKKU + 0.4, h = L_AKKU, center = true); // 0.4mm Drucktoleranz
            
    // EBENE 3b (Trockenbereich): Abgeschottete Kammer für den Hall-Sensor
    // Konstruiert mit einer exakt definierten Trennwand von 1.2 mm zur Wippenkammer
    translate([28, -10, H_MAST_HULSE + W_WAND + 20])
        cube([15, 20, 25]);
        
    // Bohrung für die 2-mm-Edelstahlwelle der Kippwippe (Rotationsachse)
    translate([0, 0, H_MAST_HULSE + W_WAND + 28])
        rotate([0, 90, 0])
            cylinder(d = 2.1, h = D_BASE + 2, center = true);

    // Sacklöcher für die 10-mm-Carbonrohre von oben
    for (i =) {
        rotate([0, 0, i]) 
            translate([INNEN_RADIUS + (RINNE_BREITE / 2), 0, H_BASE - T_STUETZ_LOCH])
                cylinder(d = ROHR_AUSSEN_DM + 0.2, h = T_STUETZ_LOCH + 1);
    }

    // Durchgangskanäle für die 6-mm-Ablaufschläuche, die schräg in den Trichter münden
    for (i =) {
        rotate([0, 0, i]) 
            translate([INNEN_RADIUS + (RINNE_BREITE / 2), 0, H_BASE - T_STUETZ_LOCH - 10])
                rotate([0, -15, 0]) // Leicht geneigter Einlass in den Haupttrichter
                    cylinder(d = SCHLAUCH_AUSSEN + 0.2, h = 30);
    }
    
    // Untere Mastaufnahme (Rohrhülse für die 30-mm-Edelstahlstange)
    translate([0, 0, -1]) 
        cylinder(d = D_MAST, h = H_MAST_HULSE + 1);
        
    // Querbann-Bohrung für die M5-Sicherungsschraube zur Mastarretierung
    translate([0, 0, H_MAST_HULSE / 2]) 
        rotate([90, 0, 0]) 
            cylinder(d = 5.2, h = D_BASE + 10, center = true);
            
    // Schwerkraftbasierte Ablauflöcher am Boden der nassen Wippenkammer nach draußen
    for (r =) {
        rotate([0, 0, r])
            translate([18, 0, H_MAST_HULSE + W_WAND + 2])
                cylinder(d = 5.0, h = 15, center = true);
    }
}
```




### 4.4 CNC G-Code für Schutzdeckel (deckel_kontur.nc)

Der G-Code wurde exakt auf die neue Geometrie des 190-mm-Gehäuses
angepasst. Er fräst den transparenten Polycarbonat-Deckel kreisrund
aus dem Rohmaterial aus, passend für den bündigen Sitz über der
150-mm-Solarzelle.

```
%
O1001 (ANEMOMETER SCHUTZDECKEL V2 - 190MM DESIGN)
G90 G21 G17 G94
G00 Z5.0000
M03 S17000
G00 X0.0000 Y95.0000
G01 Z-1.0000 F300
G02 X0.0000 Y95.0000 I0.0000 J-95.0000 F1200
G01 Z-2.0000 F300
G02 X0.0000 Y95.0000 I0.0000 J-95.0000 F1200
G01 Z-3.1000 F300
G02 X0.0000 Y95.0000 I0.0000 J-95.0000 F1200
G00 Z5.0000
M05
G00 X0.0000 Y0.0000
M30
%
```


