Zum Inhalt springen
Dashboard Kelvin v4.0 Denkt weiter. v4.0

ARVO Kelvin v4.0

Adaptive PID-Kühlanlage für High-End-Aquarien. ESP32-S3 gesteuert, MOSFET-geschützt, Home Assistant nativ, 3× Noctua NF-A14 PWM. Präzise Temperaturregelung durch Verdunstungskühlung — leise, vorausschauend, intelligent.

±0.15°C
Genauigkeit
3×140mm
Noctua Lüfter
≤37 dB
bei 2m (≤50%)
IP65
Schutzklasse

Signalfluss

PT1000
Klasse A, ±0.15°C
MAX31865
RTD→Digital (SPI)
ESP32-S3
Xtensa, 240 MHz
PID
kp=0.3 ki=0.004
IRLZ44N
MOSFET (inverted)
3× Noctua
PWM 25kHz

01 Kernkomponenten

Microcontroller
ESP32-S3 N8R8
Waveshare, Xtensa Dual-Core 240 MHz, 8MB Flash + 8MB PSRAM, WiFi + BLE, USB-C
Breakout-Board
Meshnology N40
KF-Schraubklemmen, TXS0108E Level-Shifter (5V!), integrierter Switching-Regulator
Temperatursensor
iOVEO PT1000
Klasse A, ±0.15°C, 2m Kabel, IP68, Edelstahlhülse
Sensor-Interface
Adafruit MAX31865
RTD-zu-Digital, SPI, Ref: 4300Ω (nicht 430!)
Display
SH1106 OLED
128×64, I2C (0x3C), 3.3V, AZDelivery
Lüfter
3× NF-A14 PWM
Noctua chromax, 12V, 0.13A, 25kHz PWM, 3.3V-kompatibel
Netzteil
Youngine 60W
230V AC → 12V DC / 5A, IP67
MOSFET
IRLZ44N
Logic-Level N-Channel, V_GS(th) 1.0–2.0V, PWM-Schutz auf Noctua Pin 4
Steckverbinder
GX12-4 Panel
IP65, 4-Pin, Y-Kabel-System mit Ancable Splitter

02 Architektur

Stern-Masse-Topologie

Alle GND-Pfade treffen sich an einem Punkt — Klemme KL-1 (JOYELEC D1-5). 6 Adern: ESP32 GND, MAX31865 GND, OLED GND, N40-GND, 12V-GND, PT1000-Schirm. Verhindert Masseschleifen für saubere Sensormessung.

Stromversorgung (v4.0)

Meshnology N40 Breakout-Board hat einen integrierten Switching-Regulator (12V→5V). Der separate LM2596S entfällt. ESP32-S3 internes LDO erzeugt 3.3V. Verteilt via Klemme KL-2 (JOYELEC D1-2) an MAX31865 VIN und OLED VCC.

N40 KF-KLEMMEN = 5V!
N40-KF-Klemmen führen 5V (TXS0108EPWR Level-Shifter). 3.3V-Peripherie (MAX31865, OLED) NUR an ESP32-Header-Pins — NIEMALS an KF-Klemmen.

MOSFET-Schutz (v4.0)

IRLZ44N Logic-Level N-Channel MOSFET auf der Noctua PWM-Leitung (Pin 4). Schützt den ESP32-S3 vor 5V-Backfeed durch die internen 10kΩ Pull-Ups der Noctua-Lüfter nach +12V. PWM-Signal ist invertiert (ESPHome-Config berücksichtigt das).

03 Pin-Belegung

SPI
I2C
PWM / Signal
Power
Pulse Counter
GPIOFunktionZielProtokollBus
GPIO12SPI CLKMAX31865 CLKSPI (HSPI IOMUX)
GPIO11SPI MOSIMAX31865 SDISPI (HSPI IOMUX)
GPIO13SPI MISOMAX31865 SDOSPI (HSPI IOMUX)
GPIO10SPI CSMAX31865 CSSPI (HSPI IOMUX)
GPIO5PWM 25kHz→ IRLZ44N Gate → Noctua Pin 4LEDC (inverted!)
GPIO6Tach InputMaster-Fan Pin 3PCNT
GPIO17I2C SDAOLED SDAI2C (GPIO Matrix)
GPIO18I2C SCLOLED SCLI2C (GPIO Matrix)
5VStromeingang← N40 Switching-RegulatorPower
3.3VStromausgang→ KL-2 Verteiler (Header-Pins!)Power
GNDMasse→ KL-1 Stern-GNDPower

04 Stromversorgung

230V AC → Youngine 60W IP67 → 12V DC / 5A ├── N40 Switching-Reg. 5V → ESP32-S3 → LDO → 3.3V │ ├── MAX31865 VIN (via KL-2, Header-Pins!) │ └── OLED VCC (via KL-2, Header-Pins!) ├── IRLZ44N MOSFET → Noctua Pin 4 (PWM, Drain) └── Direkt 12V → Ancable Splitter → 3× Noctua (0.39A gesamt)
5V-BACKFEED (v4.0 Root Cause)
Noctua NF-A14 hat interne ~10kΩ Pull-Ups auf Pin 4 (PWM) nach +12V. Bei aktivem PWM-Signal: ~5V am GPIO. ESP32-C3 hatte keine 5V-toleranten GPIOs → beide C3 zerstört. Lösung: IRLZ44N MOSFET zwischen ESP32-S3 GPIO5 und Noctua Pin 4.

05 Elektrische Spezifikationen

ParameterWertEinheitBedingung
Spannungen
Netzspannung230V ACYoungine Eingang
Systemspannung12V DCHauptbus
ESP32 Versorgung5.0V DCN40 Switching-Regulator
Logikpegel3.3VESP32 LDO
Prozessor
CPU Taktfrequenz240MHzXtensa Dual-Core (ESP32-S3)
Flash Speicher8MBIn-Package
PSRAM8MBOPI (Octal SPI)
Lüfter
Lüfter Stromaufnahme3 × 0.13A12V, 100% PWM
Gesamtleistung Lüfter4.68W3× NF-A14
PWM Frequenz25kHzNoctua-Spezifikation
Tach-Signal2Pulse/UOpen Collector (PCNT)
Lautstärke (Komfort)≤37dB≤50% PWM, 2m Abstand
PID-Limit Empfehlung50–60%Dauerbetrieb max.
Sensorik
Temperatur-Genauigkeit±0.15°CPT1000 Klasse A
Referenzwiderstand4300ΩAdafruit MAX31865
Sensor Update-Rate5sESPHome-Default

06 Build Guide — Übersicht

Lötstellen
55
Presets P1–P4 (HAKKO FX-888DX)
Klemmen
2
JOYELEC D1-5 + D1-2
Phasen
3
A (GX12) → B (MAX31865) → C (ESP32)
Lötzinn
Sn99,3Cu0,7
Felder ISO-Core, Ø0.5mm, bleifrei

HAKKO Temperatur-Presets

PresetTemperaturEinsatzSpitze
P1330°CKeramik-Kondensatoren (max 3s!)T18-D12 (1.2mm)
P2350°CStandard — Header, ESP32, OLED, DrähteT18-D12 / D24
P3370°CDicke Kabel, GX12-CupsT18-D24 (2.4mm)
P4380°CElko C2 — kurz und heiß, max 3sT18-D12
P5400°CRESERVE — Klemmen ersetzen Sternpunkte

06a Phase A — GX12 Y-Kabel

~20 Lötstellen P3 370°C

GX12-Cups und Noctua-Kabelenden verlöten. Verbindungstyp: Cup-to-Strand (CTS). Spitze: T18-D24 (2.4mm Meißel).

IDLötstelleBeschreibung
A-01…A-04GX12 Stecker (Plug)4 Cups × 4 Adern
A-05…A-08GX12 Buchse (Socket)4 Cups × 4 Adern
A-09…A-20Noctua-Kabelenden3 Fans × 4 Adern = 12 Verbindungen
A-21…A-24EntfallenAncable Splitter übernimmt

06b Phase B — MAX31865 Bestückung

~12 Lötstellen P1/P2/P4

ESD-PFLICHT
MAX31865 ist ESD-empfindlich. Handschlaufe anlegen BEVOR das Board berührt wird.
IDBauteilPresetHinweis
B-01…B-02C1 — 100nF Keramik (VIN)P1 (330°C)Max 3s Kontakt!
B-03…B-04C2 — 10µF Elko (VIN)P4 (380°C)Kurz und heiß, max 3s
B-05…B-06C3 — 100nF Keramik (VOUT)P1 (330°C)Max 3s Kontakt!
B-07…B-08C4 — 1nF Keramik (RTD+)P1 (330°C)Differenzfilter
B-09…B-10C5 — 1nF Keramik (RTD-)P1 (330°C)Differenzfilter
B-11…B-12PT1000 KabelP2 (350°C)RTD+ / RTD- Pads

06c Phase C — ESP32-S3 Integration

~15 Lötstellen + 2 Klemmen P2 350°C

ESD-PFLICHT
ESP32-S3 + MAX31865 + OLED — alle drei ESD-empfindlich.
IDVerbindungBeschreibung
C1-01…06SPI + Power (Dupont)6× Dupont auf N8R8 Header-Pins (nicht KF-Klemmen!)
C2-01…02I2C-Bus (Dupont)SDA (GPIO17), SCL (GPIO18) → OLED
C3-01PWM-SignalGPIO5 → IRLZ44N Gate → Noctua Pin 4 (Drain)
C3-02Tach-SignalGPIO6 ← Master-Fan Pin 3 (direkt, PCNT)
C4-xxMOSFET-VerdrahtungIRLZ44N: Gate←GPIO5, Source←GND, Drain→Noctua Pin 4
C5-xx12V-EingangN40 VIN (über KF-Klemmen)

Klemmen-Montage

KlemmeTypAdernFunktion
KL-1JOYELEC D1-56 AdernStern-GND (ESP32, MAX, OLED, N40, 12V, PT1000-Schirm)
KL-2JOYELEC D1-23 Adern3.3V-Verteiler (ESP32 → MAX31865 VIN + OLED VCC)
💡 Tipp vom Troubleshooting-Team
28AWG-Litzenenden vor dem Einstecken in die Klemmen mit ~3mm Lot verzinnen. Verhindert einzelne Litzen die sich abspreizen.

06d Klemmen-Prüfpunkte

Phase-C-Gate — alle 6 Punkte müssen bestanden sein bevor weitergearbeitet wird.

  • KL-01: Klemme KL-1 Sichtprüfung — alle 6 Adern bis Anschlag eingesteckt
  • KL-02: Klemme KL-2 Sichtprüfung — alle 3 Adern bis Anschlag eingesteckt
  • KL-03: Zugtest beide Klemmen — leicht ziehen, nichts löst sich
  • KL-04: Stern-GND Durchgang — jede Ader gegen jede, alle < 0.5Ω
  • KL-05: 3.3V-Verteiler Durchgang — jede Ader gegen jede
  • KL-06: Kurzschluss-Check 3.3V↔GND — muss ∞ sein

07 ESPHome-Konfiguration

Board
esp32-s3-devkitc-1
Framework: ESP-IDF (PSRAM-Support)
Config-Datei
ESPHOME_S3_FINAL.yaml
OTA + API aktiv, Fallback-AP

Bus-Konfiguration

spi:
  clk_pin: GPIO12   # HSPI IOMUX
  mosi_pin: GPIO11  # HSPI IOMUX
  miso_pin: GPIO13  # HSPI IOMUX

i2c:
  sda: GPIO17          # GPIO Matrix
  scl: GPIO18          # GPIO Matrix
  scan: true

08 PID-Regelung

Kp
0.3
Proportional
Ki
0.004
Integral
Kd
1.0
Derivativ
Ziel
25°C
Konfigurierbar

Der PID-Regler berechnet alle 5 Sekunden die optimale Lüfterleistung. Der Output (0–100%) steuert den PWM-Duty-Cycle über den IRLZ44N MOSFET (Signal invertiert). Integral-Clamp ±20 verhindert Windup. Deadband entfernt — Lüfter laufen immer minimal.

🔊 DEZIBEL-TEST (v4.0)
Lautstärkemessung 0–100% PWM (Decibel X Pro, Z-Bewertung). Komfortzone: 0–50% PWM (≤52 dB direkt, ≤37 dB bei 2m). Ab 70% störend, ab 80% nicht dauerhaft zumutbar. PID-Limit-Empfehlung: max 50–60% Dauerbetrieb.

Auto-Tune ist im letzten Build-Schritt verfügbar und passt Kp/Ki/Kd automatisch an die realen Bedingungen des Aquariums an.

09 Home Assistant Entities

EntityTypFunktion
sensor.aquarium_temperaturSensorWassertemperatur °C (Median, Clamp 15–40°C)
sensor.luefter_drehzahlSensorRPM Master-Fan (Moving Average, 10 Werte)
fan.luefter_geschwindigkeitFanLüfter ein/aus + Speed-Control
climate.aquarium_kuehlungClimatePID-Thermostat (Ziel: 25°C, Range 20–30°C)
number.luefter_max_geschwindigkeitNumberMax-Speed 0–100% (Schritt 5%)
switch.nachtmodusSwitchBegrenzt Max-Speed auf 40%
binary_sensor.luefter_ausfallBinaryAlarm: Speed >10% aber RPM <100 für >30s

OLED-Display

SH1106 128×64, I2C. Zeigt live: Produktname, Temperatur, Lüfter-%, RPM, und Status ("Kühlt" / "Standby").

Sonderfunktionen

Nachtmodus: Template-Switch der max_fan_speed auf 40% begrenzt. Lüfter laufen leiser, PID regelt innerhalb des reduzierten Bereichs.

Lüfterausfall-Erkennung: Wenn Fan-Speed > 10% aber RPM < 100 für mehr als 30 Sekunden → binary_sensor schaltet auf "Problem". Triggert HA-Notification.

10 Sicherheitsregeln

5V-BACKFEED — MOSFET PFLICHT
Noctua NF-A14 hat interne ~10kΩ Pull-Ups auf PWM-Pin nach +12V. IRLZ44N MOSFET zwischen ESP32 GPIO5 und Noctua Pin 4 ist PFLICHT. Ohne MOSFET: ~5V am GPIO → ESP32 tot (v3.1 Vorfall: beide C3 zerstört).
N40 KF-KLEMMEN = 5V
N40-KF-Klemmen führen 5V (TXS0108EPWR Level-Shifter). 3.3V-Peripherie (MAX31865, OLED) NUR an ESP32-Header-Pins — NIEMALS an KF-Klemmen.
KEIN DUAL POWER
USB und 5V-Pin NIEMALS gleichzeitig anschließen. Backfeed zerstört den ESP32.
POLARITÄT
DREIFACH prüfen vor jedem 12V-Anschluss. Kein Verpolungsschutz verbaut.
ESD
Handschlaufe IMMER vor Berühren von ESP32-S3, MAX31865, OLED anlegen.
🔧 REFERENZWIDERSTAND
reference_resistance: 4300NICHT 430! Adafruit-Board hat 4300Ω.
📺 DISPLAY-TREIBER
SH1106-Treiber verwenden — NICHT SSD1306. Falscher Treiber = kein Bild.
🔌 TACH-SIGNAL
GPIO6 Tach DIREKT anschließen — kein 10kΩ Serienwiderstand! Blockiert PCNT. Spannungsteiler-Lösung im Backlog.

11 Gehäuse

Material
PETG
3D-Druck v4.0
Schutzklasse
IP65
Spritzwasserschutz
Befestigung
M3
Heatset-Inserts

Durchführungen: 2× PG7 (Netzteilkabel + PT1000-Kabel), 1× GX12 Panel-Mount (Lüfter). O-Ring-Dichtung im Deckel. Silikagel-Beutel im Innenraum gegen Feuchtigkeit.

💡 OLED-Fenster
Nach dem Abdichten des OLED-Fensters: 24h Trockenzeit einhalten bevor der Deckel geschlossen wird.

12 Aktueller Status

Phase A — GX12 Y-Kabel 23 Lötstellen
✅ Abgeschlossen. 19/19 Final-Check bestanden.
Phase B — MAX31865 Bestückung ~12 Lötstellen
⬜ Teile da, bereit. Kondensatoren C1-C6 + PT1000-Anschluss.
Phase C — ESP32-S3 Integration ~15 + 2 KL
🔧 IN ARBEIT. ESP32-S3 geflasht ✅, Lüfter-Test ✅, MOSFET ✅, Anschlusskonzept ✅.
Gehäuse-Montage
⏳ Ausstehend. Heatset-Inserts, PG7, GX12, Abdichtung.
Endtest & PID Auto-Tune
⏳ Ausstehend. Dichtigkeitstest, 72h Langzeittest, Installation.
Breadboard-Validierung
✅ Bestanden
Δ PT1000 vs. Referenz: 0.0°C
Lüfter-Test (v4.0)
✅ Bestanden
PWM 0-100% stufenlos, RPM stabil
Materialkosten
252,89€
Nur verbaute Teile — Details →

13 Material-Kalkulation

Nur aktuell verbaute und verwendete Komponenten. Werkzeug, Prototyping-Material und defekte Teile sind nicht enthalten.

Kernkomponenten

#KomponenteStückpreisAnmerkung
1Waveshare ESP32-S3-Zero11,95 €
2Meshnology N40 Breakout10,50 €
3Adafruit MAX31865 (2×)26,96 €
4iOVEO PT1000 Klasse A15,00 €
5Noctua NF-A14 PWM (3×)90,00 €3 × 30 €
6IRLZ44N MOSFET0,50 €
7MeanWell LRS-50-12 Netzteil26,99 €
8Gehäuse (3D-Druck + Zubehör)43,00 €

Steckverbinder

#KomponenteStückpreisAnmerkung
9GX12-4 Steckverbinder-Set3,00 €
10JST-XH Stecker/Buchsen3,00 €

Verkabelung

#KomponenteStückpreisAnmerkung
114-adriges Kabel (geschirmt)4,00 €
12PWM-Splitter Y-Kabel2,99 €
13Aderendhülsen-Set1,00 €

Verbrauchsmaterial

#KomponenteStückpreisAnmerkung
14Schrauben-Set M2/M31,00 €
15Keramik-Kondensatoren0,30 €
16Elko-Kondensatoren0,30 €
17Widerstände (diverse)0,20 €
18Schrumpfschlauch-Set0,20 €
19Lötzinn1,00 €
20Kabelbinder1,00 €
21Kabel + Stecker (diverse)10,00 €
Gesamtkosten Material
252,89 €
21 Positionen · nur verbaute Teile · Stand März 2026
💡 Hinweis
Werkzeug (Lötstation, Multimeter, Crimper etc.) und Prototyping-Material (Breadboard, Dupont-Kabel) sind in dieser Kalkulation nicht enthalten. Die Preise entsprechen den tatsächlich gezahlten Beträgen.