C-Gleis-Rampe mit OpenSCAD

#1 von Bodo , 02.07.2023 15:09

Hallo zusammen,

heute mal wieder ein kleiner Beitrag zu OpenSCAD, der zeigt, wie leicht und flexibel sich 3D-Modelle auf diese Art parametrisieren lassen.

Sicher gibt es viele andere Möglichkeiten, Pfeiler zu erstellen - aber mir war es wichtig, jederzeit halbwegs hübsche Pfeiler (ein Teil meiner aktuellen Anlage wird eher Tischbahn-mäßig "ausgestaltet") in beliebiger Höhe nachproduzieren und bei Bedarf erweitern zu können (z.B. in der Breite, wenn Weichen oder Signale auf der Rampe liegen). Außerdem sollten sich die Pfeiler auf die Platte schrauben lassen (allerdings scheint ein Klebepunkt mit Ponal auch zu reichen) und Kabel sollten sich bei Bedarf auch runterführen lassen (war aber noch nicht nötig). Die Erweiterung mit Oberleitungs-Mastsockeln oder Signal-Sockeln steht noch aus.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 
// ********************************************************************************************************************
// ** Rampen-Pfeiler für C-Gleis **
// ** Drucken: PLA mit Schichtdicke 0.2 mm, Infill 20% ZigZag **
// ** Bodo Noethlich, Version 28.06.2023 **
// ********************************************************************************************************************
// ** Anordnung der einzelnen Module zum Modell **
// ********************************************************************************************************************
PF_ANZ = 6; // Anzahl der Pfeiler
Z_START = 0.0; // Start-Höhe
Z_STEP = 5.0; // Schritthöhe
Y_KORR = 0.0; // Verbreiterung für Weichen u.ä.
C_CLIP = true; // mit oder ohne C-Gleis-Clip
 
HM_ABS = true; // Hilfmittel Pfeilerabstand
X_STEP = 94.0; // Pfeilerabstand
 
for (i=[1:1:PF_ANZ]) {
translate([0.0,(i-1)*20.0,0.0]) rotate([0,0,0]) pfeiler (Z_START+i*Z_STEP,C_CLIP);
}
if (HM_ABS) {
translate([75.0,45.0,0.0]) rotate([0,0,-90]) abstandslehre (X_STEP);
}
// ********************************************************************************************************************
module pfeiler (PFH=25.0,CLIP=true) {
difference() {
hull() {
translate([0,0, 1.0]) cube([50.0+Y_KORR,15.0,2.0],center=true);
if(CLIP) {
translate([0,0,PFH+1.5]) cube([45.0+Y_KORR,10.0,3.0],center=true);
}
else {
translate([0,0,PFH-0.5]) cube([45.0+Y_KORR,10.0,1.0],center=true);
}
}
// Auschnitt Gleisaufnahme
hull() {
translate([0,0,PFH+0.1]) cube([40.5+Y_KORR,15.0,0.2],center=true);
translate([0,0,PFH+2.9]) cube([38.5+Y_KORR,15.0,0.21],center=true);
}
// Höhenangabe (Schriftgröße bei ganzen Zahlen <100 größer als Rest ...)
if (PFH==round(PFH) && PFH < 100){
translate([5.0,0.0,PFH-0.6]) rotate([0,0,-90]) linear_extrude(height=1) text(text=str(PFH),halign="center",font = "Arial:style=Bold",size=5,$fn=96);
}
else {
translate([6.0,0.0,PFH-0.6]) rotate([0,0,-90]) linear_extrude(height=1) text(text=str(PFH),halign="center",font = "Arial:style=Bold",size=3,$fn=96);
}
// Bohrlöcher senkrecht
for (x=[-15.0:15.0:15.0]) {
translate([x,0.0,0.5*PFH+4.0]) rotate([0,0,0]) cylinder(h=PFH,r=4.0,center=true,$fn=96);
translate([x,0.0,3.0 ]) rotate([0,0,0]) cylinder(h=2.01,r1=1.75,r2=4.0,center=true,$fn=96);
translate([x,0.0,1.0 ]) rotate([0,0,0]) cylinder(h=2.01,r=1.75,center=true,$fn=96);
}
// Ausschnitte im Pfeiler waagerecht
for (z=[10.0:20.0:PFH-10.0]) {
for (x=[-10.0:20.0:10.0]) {
translate([x,0.0,z]) rotate([90,0,0]) cylinder(h=20.0,r=8.0,center=true,$fn=4);
}
}
}
}
// ********************************************************************************************************************
module abstandslehre (X=50.0) {
difference() {
translate([ 0.0 ,0.0,1.0]) cube([X,80.0,2.0],center=true);
// Ausschnitte Pfeiler
translate([-0.5*X,0.0,1.0]) cube([15.2,50.2,2.2],center=true);
translate([ 0.5*X,0.0,1.0]) cube([15.2,50.2,2.2],center=true);
// Ausschnitte Materialersparnis
translate([0.0,-20.0,1.0]) cube([X-25.0,30.2,2.2],center=true);
translate([0.0, 20.0,1.0]) cube([X-25.0,30.2,2.2],center=true);
// Schraubloch
translate([0.0,0.0,2.0]) cylinder(h=2.01,r1=1.5,r2=3.0,center=true,$fn=96);
translate([0.0,0.0,1.0]) cylinder(h=2.01,r=1.5,center=true,$fn=96);
// Beschriftung
translate([9.0,-2.5,1.4]) rotate([0,0,0]) linear_extrude(height=1) text(text=str(X),halign="center",font = "Arial:style=Bold",size=5,$fn=96);
// asymetrischer Abschnitt
translate([0.0,25.0,1.0]) cube([X+25.0,40.0,2.2],center=true);
}
}
// ********************************************************************************************************************
 



Das Ergebnis obenstehender Parametrisierung in OpenSCAD:


Durch Änderung der Parameter lässt sich ganz gezielt jede Pfeilerhöhe erzeugen - ich bin wegen der Druckzeiten bei den höheren Pfeilern jetzt zu STL-Dateien für jeden Pfeiler übergegangen .

Und ein Beispielfoto vom Anlagenbau:


Viele Grüße, Bodo

PS: Den Beitrag werde ich gerne fortsetzen ... vor den Erweiterungen ist allerdings erstmal der Drucker mit den noch benötigten Teilen beschäftigt


Die Freiheit des Menschen liegt nicht darin, dass er tun kann, was er will, sondern dass er nicht tun muss, was er nicht will. (Jean-Jacques Rousseau)

Meine Anlage - Meine Dauerbaustelle
Platinen für Modellbahn- und Arduino-Anwendungen


Abzugsleine, MTB-Ontour und MYKer haben sich bedankt!
 
Bodo
InterCityExpress (ICE)
Beiträge: 2.473
Registriert am: 28.04.2005
Homepage: Link
Gleise C-Gleis, Lenz 0
Spurweite H0, 0
Steuerung MS2 & CS2
Stromart Digital

zuletzt bearbeitet 02.07.2023 | Top

   

3D-Druck - Innofreight Drytainer mit Drehstaplersystem
Neues Futter für den Resindrucker in H0

  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz