Publisert Legg igjen en kommentar

OpenSCAD: Programmatisk 3D-modellering for ingeniorer

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.