OpenSCAD: Programmatisk 3D-modellering for ingeniører

MiddelsKode på GitHub4 min lesetid

OpenSCAD er det kraftigste verktøyet for ingeniører som vil skape 3D-modeller med presisjon og kontroll. I stedet for å dra og slippe geometri, skriver du kode som genererer eksakte, parametriske design som kan tilpasses i sanntid.

Hva du trenger

  • OpenSCAD software (gratis nedlasting fra openscad.org)
  • Teksteditor eller OpenSCAD’s innebygde editor
  • 3D-printer for å teste design (finn utvalg hos RoboNordic)
  • Grunnleggende programmeringskunnskap (valgfritt, men nyttig)

Hvorfor velge OpenSCAD?

Der tradisjonelle CAD-programmer bruker grafiske grensesnitt, bygger OpenSCAD modeller gjennom konstruktiv solid geometri (CSG). Dette gjør det ideelt for tekniske deler hvor presise mål og parametriske endringer er kritiske. Tenk deg å kunne endre alle dimensjoner på et komplekst design ved å justere noen få variabler øverst i koden.

OpenSCAD-syntaks: Grunnleggende struktur

OpenSCAD-kode følger en funksjonsbasert struktur hvor hver operasjon returnerer et geometrisk objekt. Her er den grunnleggende syntaksen:

// Kommentarer starter med //
parameter = verdi;
operasjon() {
    geometri;
}

Alle kommandoer avsluttes med semikolon, og operasjoner som påvirker underliggende geometri bruker krøllparenteser.

Primitiver: Byggesteinene

OpenSCAD har seks grunnleggende 3D-primitiver som danner basis for alle modeller:

Kubiske former

cube([20, 10, 5]);           // Boks med spesifiserte dimensjoner
cube(10);                    // Kube med alle sider = 10
cube([10, 10, 10], center=true); // Sentrert kube

Sylindriske former

cylinder(h=20, r=5);         // Sylinder: høyde 20, radius 5
cylinder(h=15, r1=8, r2=3);  // Konisk: ulik radius topp/bunn
sphere(r=10);                // Kule med radius 10

Tips: Bruk $fn=50 øverst i koden for å øke oppløsningen på buede overflater. Høyere verdier gir jevnere kurver, men øker renderingstiden.

Transformasjoner: Flytte og manipulere geometri

Transformasjoner lar deg posisjonere, rotere og skalere geometri i rommet:

Posisjonering og orientering

translate([10, 5, 0])        // Flytt langs x, y, z-akser
    cube(5);

rotate([0, 0, 45])          // Roter 45 grader rundt z-aksen
    cube(10);

scale([2, 1, 0.5])          // Skaler ulike faktorer per akse
    sphere(10);

Boolean-operasjoner

Disse operasjonene kombinerer geometri på kraftige måter:

union() {           // Forening (standard hvis ikke spesifisert)
    cube(10);
    cylinder(h=15, r=3);
}

difference() {      // Subtraksjon
    cube(10);
    cylinder(h=12, r=4);
}

intersection() {    // Kun overlappende volum
    cube(10);
    sphere(8);
}

Moduler: Gjenbrukbare komponenter

Moduler er OpenSCADs måte å organisere og gjenbruke kode. De fungerer som funksjoner som genererer geometri:

module skrue(lengde=20, diameter=4, hode_diameter=8) {
    union() {
        cylinder(h=lengde, r=diameter/2);           // Skruestamme
        cylinder(h=2, r=hode_diameter/2);           // Skruehode
    }
}

// Bruk modulen
skrue(lengde=30, diameter=5);
skrue(lengde=15, diameter=3, hode_diameter=6);

Tips: Organiser komplekse prosjekter ved å dele moduler i separate filer og bruke include <filnavn.scad> eller use <filnavn.scad> for å importere dem.

Parametrisk design: Kraften i variabler

Det virkelige potensialet i OpenSCAD ligger i parametrisk design. Ved å definere alle kritiske mål som variabler, kan du raskt tilpasse design:

// Parametere for en teknisk boks
lengde = 50;
bredde = 30;
hoyde = 20;
vegg_tykkelse = 2;
skrue_diameter = 3;
skrue_avstand = 5;

module teknisk_boks() {
    difference() {
        // Ytre boks
        cube([lengde, bredde, hoyde]);
        
        // Indre hulrom
        translate([vegg_tykkelse, vegg_tykkelse, vegg_tykkelse])
            cube([lengde-2*vegg_tykkelse, 
                  bredde-2*vegg_tykkelse, 
                  hoyde]);
        
        // Skruehull i hjørner
        for(x = [skrue_avstand, lengde-skrue_avstand])
            for(y = [skrue_avstand, bredde-skrue_avstand])
                translate([x, y, -1])
                    cylinder(h=vegg_tykkelse+2, r=skrue_diameter/2);
    }
}

teknisk_boks();

Tips: Bruk for-løkker og matematiske funksjoner for å skape komplekse, repeterende mønstre. OpenSCAD støtter trigonometriske funksjoner, arrays og betingede uttrykk.

Avanserte teknikker

Linear og rotasjonell ekstrudering

Lag 3D-objekter fra 2D-profiler:

linear_extrude(height=10)      // Trekk 2D-form oppover
    circle(r=5);

rotate_extrude(angle=360)      // Roter rundt z-aksen
    translate([10, 0])
        circle(r=2);

Minkowski-sum og hull()

Disse operasjonene gir avanserte geometriske muligheter:

minkowski() {          // Avrund kanter
    cube([10, 10, 1]);
    sphere(r=2);
}

hull() {              // Konveks form rundt objekter
    translate([0, 0, 0]) sphere(r=3);
    translate([10, 10, 10]) sphere(r=3);
}

Vanlige feil

  • Glemte semikolon: Alle kommandoer må ende med semikolon. Manglende semikolon gir parseringsfeil.
  • Z-fighting i boolean-operasjoner: Når flater ligger eksakt oppå hverandre, bruk små offset-verdier (±0.01) for å unngå renderingsproblemer.
  • For høy oppløsning: Store $fn-verdier gjør OpenSCAD treg. Start med $fn=20-50 under utvikling.
  • Non-manifold geometri: Sørg for at alle objekter har lukket, konsistent geometri. Bruk F12 (render) for å sjekke om modellen er gyldig for 3D-printing.
  • Manglende parenteser i moduler: Selv moduler uten parametere trenger parenteser: min_modul(); ikke min_modul;

Fra kode til fysisk objekt

Når modellen er klar, eksporter til STL-format (F6 for render, deretter File > Export > STL). Denne filen kan importeres direkte i slicer-software for 3D-printing. OpenSCADs parametriske tilnærming gjør det enkelt å justere dimensjoner basert på testutskrifter og toleransekrav.

OpenSCAD åpner en helt ny verden av presis, kodestyrt 3D-modellering. Med disse grunnleggende ferdighetene kan du skape alt fra enkle tekniske deler til komplekse, parametriske systemer som tilpasser seg automatisk til ulike krav.

Koden på GitHub
All kode fra denne guiden – kompilert og klar til bruk – ligger i det åpne repoet vårt: robonordic-prosjekter/cad/openscad

Mer om 3d-print og cnc

Se alle →