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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
/* ------------------------------------------ open_scad_stuff/vt320_stand.scad
Build a vt320 vesa stand adapter that will house a raspberry pi and an rs232
adapter.
This design requires 2 threaded rods and at least 6 matching nuts.
(c) CopyLeft 2022 D Delmar Davis <don@suspectdevices.com> (2clausBSD)
----------------------------------------------------------------------------*/
use <screwey.scad>;
$fa = 1;
$fs = 0.4;
slotWidth=2.75;
slotDepth=3.75;
crossCenterRadius=58.95;
crossOffset=12;
mainHookRadius=136.5/2;
mainHookWidth=5.25;
standHeight=20;
standWidth=150;
armSlotWidth=44;
armSlotCenter=26;
armSlotThickness=2.5;
armSlotDepth=5.0;
F2Width=12.0;
cableBoxLength=40.0;
cableBoxWidth=118;
cableBoxWallThickness=2;
dW=cableBoxWallThickness*2.0;
etherNetHeight=17.0;
etherNetDepht=25.0;
etherNetLength=106.6;
piBoxDepth=80;
piBoxWidth=136;
module vt320_stand_rear_hook(){
difference(){
union(){
translate([standHeight/2,0,piBoxDepth/2]){cube([standHeight,standWidth,piBoxDepth],center=true);}
translate([0,0,slotDepth*2]){
rotate([180,0,0]){
translate([-slotDepth,mainHookRadius,slotWidth]){cube([slotDepth*2,slotWidth,slotWidth*2],center=true);}
translate([-slotDepth,-mainHookRadius,slotWidth]){cube([slotDepth*2,slotWidth,slotWidth*2],center=true);}
translate([-slotDepth*1.5,mainHookRadius+3,slotWidth/2.0]){cube([slotDepth,6,slotWidth],center=true);}
translate([-slotDepth*1.5,-(mainHookRadius+3),slotWidth/2.0]){cube([slotDepth,6,slotWidth],center=true);}
}
}
}
translate([(standHeight+dW)/2,0,piBoxDepth/2+dW]){cube([standHeight,piBoxWidth-dW,piBoxDepth],center=true);}
translate([standHeight,50.5,0]){
rotate([0,-45,0]){
cylinder(d=14,h=slotWidth*6,center=false);
}
}
translate([standHeight/2.0,70.5,-2.0]){cylinder(d=5.5,h=cableBoxWidth,center=false);}
translate([standHeight/2.0,-70.5,-2.0]){cylinder(d=5.5,h=cableBoxWidth,center=false);}
}
}
module vt320_stand_front_hook(){
difference(){
union(){
translate([standHeight/2,0,F2Width/2.0]){cube([standHeight,standWidth,F2Width],center=true);}
translate([-slotDepth,mainHookRadius,slotWidth]){cube([slotDepth*2,slotWidth,slotWidth*2],center=true);}
translate([-slotDepth,-mainHookRadius,slotWidth]){cube([slotDepth*2,slotWidth,slotWidth*2],center=true);}
translate([-slotDepth*1.5,mainHookRadius+3,slotWidth/2.0]){cube([slotDepth,6,slotWidth],center=true);}
translate([-slotDepth*1.5,-(mainHookRadius+3),slotWidth/2.0]){cube([slotDepth,6,slotWidth],center=true);}
}
// slot for arm
translate([standHeight-armSlotDepth,0,0]){cube([armSlotThickness,armSlotWidth,standHeight*8],center=true);}
translate([standHeight,0,0]){cube([armSlotThickness+armSlotDepth,armSlotCenter,standHeight*8],center=true);}
translate([standHeight/2.0,70.5,-2.0]){cylinder(d=5.5,h=F2Width*2,center=false);}
translate([standHeight/2.0,-70.5,-2.0]){cylinder(d=5.5,h=F2Width*2,center=false);}
captive_nut_hole(location=[standHeight/2.0,70.5,-0.5]);
captive_nut_hole(location=[standHeight/2.0,-70.5,-0.5]);
}
}
module vt320_arm_mount(){
difference(){
translate([standHeight/2,0,slotWidth*4]){cube([standHeight,standWidth,slotWidth*8],center=true);}
translate([standHeight-armSlotDepth,0,0]){cube([armSlotThickness,armSlotWidth,standHeight*8],center=true);}
translate([standHeight,0,0]){cube([armSlotThickness+armSlotDepth,armSlotCenter,standHeight*8],center=true);}
translate([standHeight/2.0,70.5,-2.0]){cylinder(d=5.5,h=slotWidth*16,center=false);}
translate([standHeight/2.0,-70.5,-2.0]){cylinder(d=5.5,h=slotWidth*16,center=false);}
}
}
module vt320_stand_end(){
rotate([0,180,0]){
difference(){
union(){
translate([0,0,0]) {rotate([0,90,0]){vt320_cable_box();}}
translate([0,0,-crossOffset]){
translate([standHeight/2,0,crossOffset-(slotWidth)]){cube([standHeight,standWidth,slotWidth*2],center=true);}
translate([-slotDepth,crossCenterRadius,slotWidth]){cube([slotDepth*2,slotWidth,slotWidth*2],center=true);}
translate([-slotDepth,-crossCenterRadius,slotWidth]){cube([slotDepth*2,slotWidth,slotWidth*2],center=true);}
translate([-slotDepth*1.5,crossCenterRadius,slotWidth/2.0]){cube([slotDepth,8,slotWidth],center=true);}
translate([-slotDepth*1.5,-crossCenterRadius,slotWidth/2.0]){cube([slotDepth,8,slotWidth],center=true);}
}
}
translate([standHeight,50.5,0]){
rotate([0,270-45,0]){
cylinder(d=14,h=slotWidth*6,center=false);
}
}
translate([standHeight/2.0,70.5,-12.0]){cylinder(d=5.5,h=standHeight,center=false);}
translate([standHeight/2.0,-70.5,-12.0]){cylinder(d=5.5,h=standHeight,center=false);}
}
}
}
module vt320_cable_box(){
difference(){
union(){
difference(){
translate([(cableBoxLength/2),0,standHeight/2]){
cube([cableBoxLength,cableBoxWidth+dW,standHeight],center=true);
}
//inner wall
translate([((cableBoxLength)/2)+(dW*2),0,(etherNetHeight+dW)/2]){
cube([cableBoxLength+dW,cableBoxWidth,etherNetHeight],center=true);
}
}
translate([(cableBoxLength/2),(etherNetLength/2)-18,standHeight/2]){
cube([cableBoxLength,dW,standHeight],center=true);
}
}
//hole for ethernet adapter
translate([cableBoxLength-((dW+etherNetDepht)/2),-dW*2,(etherNetHeight+dW)/2]){
cube([etherNetDepht,etherNetLength,etherNetHeight],center=true);
}
}
}
//translate([0,0,0]){ vt320_stand_end(); }
vt320_stand_rear_hook();
//vt320_cable_box();
//translate([0,0,0]){ vt320_pi_box(); }
//translate([standHeight+10,0,0]) {vt320_stand_rear_hook();}
//translate([(standHeight+10)*2.0,0,0]){vt320_stand_front_hook();}
//translate([(standHeight+10)*3,0,0]){vt320_arm_mount();}
//translate([(standHeight+10)*4,0]){vt320_arm_mount();}
|