Dominic Böttger

← Zurück zum Blog

Vom Datenblatt zum Schnappverschluss: Ein 3D-Gehäuse mit Claude Code entwerfen

Veröffentlicht am 30. Juli 2026 von Dominic Böttger (vor 3 Tagen) · 11 Min. Lesezeit

Ich hatte ein Problem, das nichts mit Software zu tun hatte: Auf meinem Schreibtisch lag ein Luftqualitätssensor als loser Haufen Einzelteile. Ein kleines ESP32-C6-Entwicklungsboard, ein Sensirion SEN66 in der Größe einer Streichholzschachtel und sechs Kabel dazwischen. Er hat wunderbar gemessen — Feinstaub, CO₂, Temperatur, Luftfeuchte — und sah aus wie etwas, das beim nächsten Vorbeigehen kaputtgeht.

Es brauchte also ein Gehäuse. Ich kann Blender bedienen — nicht auf Profi-Niveau, aber es reicht für eine Aufgabe wie diese. Und genau das macht die Sache interessant: Die Frage war nie, ob ich die Kiste selbst modellieren kann. Die Frage war, wie lange es dauert. Ein Zweikammer-Gehäuse mit Deckel, Lüftungsschlitzen und Schnappverbindungen von Hand zu bauen ist auf meinem Niveau ein Abend Arbeit, und jede Korrektur danach ist die nächste Runde davon. Die KI ist darin schlicht schneller als ich.

Also habe ich etwas anderes versucht. Ich habe Claude Code das Gehäuse entwerfen lassen. Nicht „generiere mir irgendwie eine STL-Datei”, sondern als echte Konstruktionsaufgabe, mit Datenblättern, Toleranzen und Schnappverbindungen. Was jetzt kommt, ist der Bericht darüber, was funktioniert hat, was nicht, und warum es am Ende nur drei Drucke gebraucht hat statt zehn.

Warum das überhaupt funktioniert: CAD als Text

Die entscheidende Wahl fiel vor der ersten Zeile: das Werkzeug. Die meisten 3D-Programme arbeiten visuell — man zieht Formen mit der Maus, und das Ergebnis ist ein Netz aus Millionen Dreiecken. Damit kann eine KI wenig anfangen. Sie sieht deinen Bildschirm nicht, und ein Dreiecksnetz lässt sich nicht sinnvoll als Text bearbeiten.

OpenSCAD funktioniert völlig anders. Dort beschreibt man einen Körper in einer einfachen Programmiersprache, und die Software baut ihn. Ungefähr so:

// Eine Kiste, 40 mm breit, mit einem Loch von 20 mm darin
difference() {
    cube([40, 30, 15]);
    cylinder(h = 20, d = 20);
}

Das ist der ganze Trick. difference() heißt „zieh die zweite Form von der ersten ab”. cube und cylinder sind genau das, was man vermutet. Keine Menüs, keine Maus, kein verborgener Zustand — nur Text.

Für eine KI ist das das perfekte Medium, und zwar aus drei Gründen. Sie kann Text schreiben. Sie kann Text gezielt ändern — eine einzelne Zahl statt eines kompletten Neuentwurfs. Und eine Textdatei kann man versionieren, vergleichen und kommentieren, sodass jedes Maß im Modell einen Vermerk trägt, woher es stammt.

Die zweite wichtige Eigenschaft ist der parametrische Aufbau. Alle Maße stehen oben in der Datei als benannte Werte:

wall       = 2.0;   // Wandstärke
pcb_l      = 51.8;  // Platinenlänge (aus der Espressif-Zeichnung)
pcb_tol    = 0.35;  // Spiel rund um die Platine
snap_depth = 0.85;  // wie weit die Haltenoppen vorstehen

Alles andere wird daraus berechnet. Ändert man die Wandstärke von 2 auf 2,5 mm, passen sich Außenmaße, Deckel, Kammerpositionen und Lüftungsschlitze von selbst an. Genau deshalb hat das Gehäuse sieben Revisionen überlebt, ohne je neu gebaut zu werden. Jede Korrektur war ein chirurgischer Eingriff an einer Stelle der Datei.

Die Installation ist unter Arch Linux ein Einzeiler, und für jede andere Distribution gibt es das Äquivalent:

sudo pacman -S openscad

Schritt 1: Maße besorgen statt raten

Mein erster Versuch scheiterte aus dem langweiligsten Grund, den man sich vorstellen kann: Das Modell hat die Maße erfunden. Claude Code produzierte ein sauberes, gut kommentiertes Gehäuse — für einen Sensor mit 48,5 mm Länge und 12,5 mm Höhe. Der echte SEN66 ist 55,2 mm lang und 21,3 mm hoch. Die Kammer war fast 7 mm zu kurz und 9 mm zu flach. Da hätte nie etwas hineingepasst.

Das ist die erste und wichtigste Lehre: Sprachmodelle haben eine grobe Vorstellung davon, wie verbreitete Bauteile aussehen, und grob ist im Maschinenbau wertlos. Ein Teil passt oder es passt nicht.

Die Lösung war einfach — ich habe die offiziellen Dokumente holen lassen:

  • Das Sensirion-SEN6x-Datenblatt, ein 60-Seiten-PDF. Auf Seite 55 steht eine bemaßte technische Zeichnung mit jedem Maß auf den Zehntelmillimeter.
  • Die PCB-Layout-Zeichnung des ESP32-C6-DevKitC-1 von Espressif, die die Platine mit 51,8 × 25,4 mm samt Pin-Abständen angibt.

Claude Code hat beide PDFs geladen und die relevanten Seiten als Bild gelesen — technische Zeichnungen sind Grafik, nicht Text, das geht also nur, wenn das Modell die Seite wirklich anschauen kann. Ab da trug jedes Maß in der Datei einen Quellenkommentar. Nicht „etwa 25 mm”, sondern „25,4 mm (Espressif-Layout, Rev. 1.1)”.

Das nackte SEN66-Sensormodul — ein streichholzschachtelgroßes Gehäuse mit Lüfteröffnung, Lufteinlass und einem winzigen Steckverbinder an der Seite

Die Zeichnung verriet außerdem etwas, das ich nie geraten hätte: Beim SEN66 liegen Lufteinlass und Lüfterauslass auf derselben großen Oberseite. Diese einzige Tatsache bestimmte die gesamte Architektur — der Deckel brauchte ein großes Fenster über dem Sensor, und der Sensor musste bündig direkt darunter sitzen.

Schritt 2: Sich selbst kontrollieren lassen

Bevor ein Gramm Filament verbraucht wurde, kam ein weiterer Schritt dazwischen: OpenSCAD kann ein Modell von der Kommandozeile aus als Bild rendern.

openscad -D 'part="body"' --render -o preview.png \
  --imgsize=1600,1000 --camera=0,0,0,58,0,22,0 --viewall modell.scad

Claude Code hat diese Vorschauen erzeugt und sich dann selbst angeschaut. Das klingt nach Spielerei, hat aber echte Fehler gefangen: einen Lüftungsschlitz, der versehentlich durch eine Wand schnitt, einen Kabelkanal auf falscher Höhe, einen Deckel, dessen Verstärkungsstege genau über der Lüfteröffnung des Sensors landeten. All das ist auf einem Bild offensichtlich und im Code unsichtbar.

Explosionsansicht des fertigen Gehäuses: unten der Korpus mit zwei Kammern, darüber der Deckel von unten mit Dichtlippe, Rastnoppen, Lüftungsgitter und dem großen Sensorfenster

Das ist der Punkt, an dem die Sache aufhört, ein Textgenerator zu sein, und anfängt, eine Konstruktionsschleife zu werden: bauen, anschauen, korrigieren.

Schritt 3: Drucken, fotografieren, patchen

Und dann kam der Teil, den kein Datenblatt ersetzt. Ich habe gedruckt. Und der erste Druck sah so aus:

Erster Druck: das weiße Gehäuse mit dem Board, das lose obenauf liegt, und Jumperkabeln, die in alle Richtungen abgehen

Die Sensorkammer passte. Die Boardkammer nicht — nicht einmal annähernd. Und der Grund ist lehrreich: Meine Jumperkabel stecken auf Pins, die auf der Unterseite der Platine herausstehen. Das Modell war davon ausgegangen, dass die Stecker oben aufsitzen. Also hatte es die Platine 15 mm über dem Boden platziert, um darunter Platz zu lassen — für Stecker, die dort nicht waren, während die echten keinen Platz hatten.

Ich habe es fotografiert und das Bild geschickt. Das wurde das Muster für alles Weitere: Das Foto ist der Debug-Kanal. Ich habe nicht beschrieben, was falsch war. Ich habe es gezeigt. Und in fast jedem Foto hat Claude Code etwas im Modell gefunden, das keine Zeichnung verraten hatte.

Hier die vollständige, unschöne Liste:

Die Stecker waren auf der falschen Seite. Annahme: von oben aufgesteckt. Realität: hängen unter der Platine. Die Boardhöhe musste zweimal neu gebaut werden — erst zu hoch, dann zu tief, dann richtig.

Die Stecker waren breiter als gedacht. Sie sitzen direkt auf den Pinreihen an den Platinenkanten — genau dort, wo ich meine Auflageschienen hatte. Die Platine muss in der Mitte getragen werden, weil dort als einziger Stelle nichts nach unten heraussteht.

Zwei Lötpins mitten auf der Platine. Genau an der Stelle, wo die neue Mittelauflage hinsollte. Ich hatte sie in der Layout-Zeichnung gesehen und falsch verortet. Es brauchte ein Nahaufnahme-Foto der Platinenunterseite und eine gezielte Nachfrage von mir, bis die Auflage in vier Pads mit einer Lücke dazwischen aufgeteilt wurde.

Die Unterseite des ESP32-C6-Boards — zwei Lötpins sitzen in der Mitte, wo eine Auflageschiene kollidiert wäre

Der Sensor ist tailliert, nicht eingekerbt. Die Datenblattzeichnung zeigt vier Merkmale an den Seitenflächen des SEN66. Ich habe sie als Vertiefungen zum Einrasten gelesen. Falsch — das Gehäuse ist dort einfach schmaler. Meine sorgfältig konstruierten Rastnasen griffen ins Leere. Aufgefallen ist mir das erst, als ich den Satz sagte: „An der Stelle ist das Gehäuse schmaler und die Nasen liegen nicht an.” Die Lösung: seitlich gar keine Rastung mehr, sondern dünne Quetschrippen plus ein Deckel, der das Modul von oben niederhält.

Der USB-Ausschnitt war breiter als die Platine. Das war mein Lieblingsfehler, weil die Geometrie fehlerfrei und die Funktion Unsinn war: eine einzige 26 mm breite Öffnung für beide USB-C-Buchsen. Die Platine ist 25,4 mm breit. Zog man am Kabel, rutschte das Board also durch seine eigene Öffnung heraus.

Die USB-Seite des zweiten Drucks: eine breite Öffnung, durch die das Board herausrutschen konnte

Die Lösung waren zwei getrennte 11-mm-Fenster mit einem 3 mm breiten Steg dazwischen. Die Platinenkante schlägt jetzt an diesem Steg an und bleibt drin. Die Stecker passen weiterhin durch, das Board nicht mehr.

Die korrigierte USB-Wand am fertigen Druck: beide USB-C-Buchsen sitzen in einem eigenen Fenster, dazwischen der Steg, an dem die Platinenkante jetzt anschlägt

Der Deckel ging zu leicht zu. Er hielt nur durch Reibung und rastete nicht immer ein. Drei Parameter haben es gelöst: größere Rastnoppen, tieferer Eingriff, strammere Lippenpassung.

Das Muster dahinter ist immer dasselbe. Datenblätter beschreiben Geometrie, nicht Verbauung. Wie ein Bauteil tatsächlich verkabelt wird, wohin die Stecker zeigen, was wo heraussteht — ein Mensch mit dem Teil in der Hand sieht das in zwei Sekunden, und die Zeichnung sagt darüber kein Wort.

Das Ergebnis

Das fertige Gehäuse, geöffnet: das Board eingeclipst in der linken Kammer mit beiden USB-Buchsen in ihren Fenstern, der Sensor in der rechten Kammer, die Kabel durch die Trennwand, daneben der Deckel

Das fertige Gehäuse misst 119 × 40 × 32 mm und braucht keine einzige Schraube:

  • Zwei Kammern. Sensor links, Board rechts, dazwischen eine Trennwand, die die Abwärme der Elektronik vom Temperatursensor fernhält. Das ist relevant: Der SEN66 misst mehrere Grad zu warm, wenn er neben einer Wärmequelle sitzt.
  • Das Board klickt ein. Vier Posten mit Haltenoppen greifen von oben über die Platinenkante, zwei Schienen tragen sie von unten in der Mitte, wo nichts heraussteht.
  • Zwei USB-Fenster mit Ziehsicherung. Kabel rein, Kabel raus, das Board bleibt drin.
  • Der Deckel schnappt. Vier kugelförmige Noppen rasten in flache Mulden in den Wänden. Die Kugelform ist hier der Trick, weil sie sich selbst zentriert und — anders als klassische Schnapphaken — nicht entlang der Druckschichten bricht.
  • Alles Sichtbare bleibt sichtbar. Die Status-LED leuchtet durch ein Gitter, der Boot-Taster bleibt erreichbar, und der Sensor atmet durch ein großes Fenster im Deckel.

Nahaufnahme des Deckels von unten: die umlaufende Lippe mit zwei der kugelförmigen Rastnoppen und das Gitter, das über dem Board sitzt

Das geschlossene Gehäuse, die Status-LED leuchtet grün durch das Lüftungsgitter

Sieben Revisionen des Modells — aber nur drei tatsächliche Drucke. Dieses Verhältnis ist das eigentliche Ergebnis. Die Renderings und die Fotos haben die Fehler gefangen, bevor sie Filament gekostet haben.

Das Rezept

Wenn du das nachmachen willst, decken fünf Regeln das meiste ab:

Textbasiertes CAD wählen. OpenSCAD, nicht Fusion. Das Modell muss lesen und ändern können, was es gebaut hat.

Keine geratenen Maße. Bestehe auf dem offiziellen Datenblatt oder der Layout-Zeichnung, und lass jeden Wert einen Quellenkommentar tragen. Was sich aus keinem Dokument belegen lässt, wird mit dem Messschieber gemessen — von dir.

Rendern vor dem Drucken. Bilder erzeugen lassen und das Modell draufschauen lassen. Kostet Sekunden, spart Stunden.

Fotografieren statt beschreiben. „Passt nicht” produziert Vermutungen. Ein Foto produziert eine Diagnose. Das ist der stärkste Hebel im ganzen Prozess.

Eine Änderung pro Druck. Wenn du drei Dinge gleichzeitig änderst und es passt trotzdem nicht, hast du nichts gelernt.

Und eine sechste Regel, die erst im Rückblick klar wird: weiter nachfragen. Die Hälfte der Fehler oben hat nicht das Modell gefunden, sondern meine eigenen Fragen — „passt das Board dann noch rein, wenn der Steg da ist?”, „wie hält der Deckel, wenn er plan aufliegt?”. Jede einzelne dieser Fragen hat einen echten Konstruktionsfehler aufgedeckt. Das ist genau das Muster, das ich in KI schreibt schneller als dein Schatten beschrieben habe: Die Maschine produziert im Tempo, der Mensch wacht über das Ergebnis. Bei physischen Teilen ist diese Rolle brutal offensichtlich, weil es keinen Interpretationsspielraum gibt. Es passt oder es passt nicht.

Wo das nicht funktioniert

Fairerweise zu den Grenzen. Der Ansatz ist stark bei technischer, kantiger Geometrie mit bekannten Maßen: Gehäusen, Halterungen, Aufnahmen, Adaptern, Distanzstücken. Er ist schwach oder unbrauchbar bei organischen Formen und Freiformflächen, bei allem Ergonomischen, das sich in der Hand gut anfühlen muss, bei Teilen ohne jede Dokumentation und bei echter Baugruppen-Kinematik wie Zahnrädern oder belasteten Scharnieren.

Und ohne Drucker und ohne Geduld funktioniert es gar nicht. Die Feedback-Schleife braucht das physische Teil. Wer auf eine fertige STL aus einem einzigen Prompt hofft, wird enttäuscht — und würde das Ergebnis wahrscheinlich nicht in seiner Wohnung verbauen wollen.

Dateien

Das Gehäuse passt für ein ESP32-C6-DevKitC-1 zusammen mit einem Sensirion SEN66 (oder jedem anderen SEN6x — die haben dieselbe Bauform):

Alle drei Drucke sind in PLA mit 0,2 mm Schichthöhe entstanden, ohne Stützstrukturen — die Rastung funktioniert in PLA einwandfrei. Falls sie auf deinem Drucker zu stramm oder zu locker ausfällt, sind snap_depth und pcb_snap_depth in der SCAD-Datei die beiden Werte zum Nachstellen.

Der Sensor selbst läuft übrigens mit ESPHome und meldet nach Home Assistant — inklusive CO₂-Ampel auf der Onboard-LED des Boards, die ab 800 ppm gelb und ab 1400 ppm rot wird. Aber das ist ein Thema für einen eigenen Post.

Geschrieben von Dominic Böttger

← Zurück zum Blog

Kommentare werden über GitHub Discussions bereitgestellt. Zum Kommentieren wird ein GitHub-Konto benötigt.

Aktuelle Blogbeiträge