Mit OpenSCAD zum 3D Modell

Meine gestern zusammengebaute DIY-Smartwatch braucht ein Gehäuse. Aber:

Verdammt! Auf Thingiverse.com gibt es kein 3D Modell dafür!

Kein Problem … dann machen wir es eben selbst.


Das ist offen gesagt das erste Mal, dass ich wirklich ein Gehäuse brauche und im Netz (noch) keines gefunden habe.
Doch zum Glück war bei diversen “Empfehlungen” die Software OpenSCAD dabei, die gegenüber ihren Konkurrenten wie FreeCAD und weiß der Geier wie die anderen heißen nur 20 MB groß war, während die anderen bei 200 MB anfingen.

Als Minimalist dachte ich zuerst “Hey Cool” um danach gleich zu zweifeln, weil: Wenn es so klein ist, kann es vermutlich nichts.

Aber für meine Zwecke stellte sich dieses Stück Software als ideal dar. Es baut nämlich auf einer Script-Sprache auf, mit der man sein Modell aus geometrischen Figuren zusammensetzen kann.

Und das ist eine Form, in der ich leicht denken kann. Es ist wie damals in der Schule, als man mit Lineal und Zirkel bewaffnet Quader und Pyramiden vermessen und die fehlenden Punkte ausrechnen musste.

Wie man eine offene Schachtel baut

Bildlich gesprochen: Man erzeugt einen massiven Quader und subtrahiert einen etwas kleineren Quader aus ihm heraus, sodass genau die Ränder und der Boden der Schachtel übrig bleiben.

Das ist es … mehr kann ich bis dato auch nicht in OpenSCAD und trotzdem reicht das voll und ganz aus.

Nachdem laut Online-Hilfe cube([length, width, height]) einen Quader erzeugt, braucht man noch eine “Funktion” für das “rausschneiden” und die heißt difference().

Meine Smartwatch ist etwa 46x38x16 Millimeter groß. Soll die Schachtel eine Dicke von 1mm haben, lautet das OpenSCAD Script:

1difference() {
2  translate([0,0,0]) cube([48, 40, 17]); //shell
3  translate([1,1,1]) cube([46, 38, 16]); //inner space
4}

Wir bauen einen äußeren Quader angefangen bei Koordinate (0,0,0) und dann einen zweiten Quader startend bei (1,1,1) der in allen Dimensionen um 2mm kleiner ist außer bei der Höhe, denn dort soll ja oben offen bleiben.

Es kann nicht schaden bei offenen Stellen den zweiten Quader etwas größer zu dimensionieren, damit er wirklich “ins Freie” durchsticht. Endet das subtrahierte Objekt nämlich genau auf der Grenzfläche, kann am Ende dennoch eine hauchdünne Schicht herauskommen, die gedruckt wird.

Modell wie Steinmetz herausarbeiten

Und genau das gleiche macht man für alle anderen Öffnungen. In meinem Fall sind das das Display, der On/Off Schalter, diverse Buttons und LEDs. Man misst mit dem Lineal, wie weit die Öffnung von der Ursprungsecke entfernt ist und fügt weitere translate und cube Zeilen an. difference() behandelt das erste Objekt wie einen rohren Felsblock und alle weiteren Objekte werden aus diesem Block herausgeschlagen.

Mit weiteren Objekt-Bezeichnern wie cylinderlassen sich auch runde Elemente herausstanzen. Und so kam am Ende mein Entwurf für ein primitives Smartwatch Gehäuse geraus

 1difference() {
 2  translate([0,0,0]) cube([48, 41, 17]); //shell
 3  
 4  translate([1,1,1]) cube([46, 39, 17]); //inner space
 5  translate([8.5,2.5,-1]) cube([24.5, 36, 10]);//display 
 6  translate([32,12.5,-1]) cube([3.5, 16, 10]);//display 
 7  translate([2,17,-1]) cube([6, 7, 3]);  //top LED
 8
 9  translate([8.5,-1,2.5]) cube([16, 10, 5]); //wheel
10  translate([30,-1,2.5]) cube([7, 5, 3]);  //on/off
11  translate([20,-1,12]) cube([9, 5, 6]); //usb
12
13  translate([11.5,37,3]) cube([7, 5, 4]);  //button
14  translate([11.5,37,11]) cube([7, 5, 4]); //button
15  translate([21,37,3]) cube([6, 5, 6]);  //side LED
16  translate([29.5,37,3]) cube([7, 5, 4]);  //button
17
18  translate([-1, 7, 12]) cube([6, 27, 10]); //top band
19  translate([45, 7, 12]) cube([6, 27, 10]); //bottom band
20  
21  translate([4, 4, -1]) cylinder(5, 1.7, 1.7); //screw
22  translate([44, 4, -1]) cylinder(5, 1.7, 1.7); //screw
23  translate([4, 37, -1]) cylinder(5, 1.7, 1.7); //screw
24  translate([44, 37, -1]) cylinder(5, 1.7, 1.7); //screw
25};

Das Teil ist einfach nur primitiv, man könnte jetzt viele Zahlen durch Variablen und Rechnungen ersetzen, doch für mich war das direkte verfüttern der Koordinaten ausreichend, um nach 15 Minuten den ersten Entwurf fertig zu haben.

DIY 8266 Smartwatch

Nacharbeit und Testdruck

Es brauchte letztendlich dann doch mehrere Anläufe, bis ein vernüftiges Ergebnis fertig war.
Einerseits hatte ich auf einige Öffnungen vergessen, andererseits habe ich gelernt, dass ein 1 Millimeter mehr Freiraum extrem helfen kann, weil es sonsten meist zu eng ist, um das Gerät unbeschadet ins Gehäuse hineinzubekommen.

Und während dieser Größentests dabei ist mir leider auch das Display etwas gesplittert.

Doch wenn man die Druckzeiten (etwa 40 Minuten pro Versuch) wegrechnet, kann man sagen, dass ich maximal eine Stunde für das Modell gebraucht habe, inklusive aller Einbauvergänge und Scriptkorrekturen.

Fazit

Mann! Das hätte man mir früher zeigen sollen!

Ich dachte immer, dass Modelle zu erstellen höhere Magie sei und man Tage damit verbringt, Linien an die richtige Stelle zu setzen. Und überhaupt glaubte ich, dass man alles mit der Maus Millimeter für Millimeter zusammenklicken muss.

Aber die Idee mit den Koordinaten-Scripts ist echt super. Mag sein, dass man komplexere Sachen damit nicht so gut lösen kann, aber für meinen Bedarf an MCU Gehäusen ist OpenSCAD perfekt.
Denn da brauche ich meist nur Quader mit Schalter-Löchern.

Das heißt dann, dass ich in Zukunft nicht mehr “ähnliche” Gehäuse drucken muss um sie danach zurecht zu schleifen, sondern ich kann an den nötigen Stellen gleich das Modell patchen.

Also 10 Sterne und Daumen hoch für dieses kostenlose und einfache Tool.


Wenn sich eine triviale Erkenntnis mit Dummheit in der Interpretation paart, dann gibt es in der Regel Kollateralschäden in der Anwendung.
frei zitiert nach A. Van der Bellen
... also dann paaren wir mal eine komplexe Erkenntnis mit Klugheit in der Interpretation!