Haris Usmani

23 Jan 2014

Goals: Interesting, Useful

A customizable OpenSCAD “Universal Rack-Clamp” by @uzmani90- let’s you make a variety of structures, cost-effectively.

This summer while designing a DIY Electronic Drum-kit, I noticed that there existed no open 3-D CAD model of a Universal Rack-Clamp. So what is a Universal Rack-Clamp? It’s the clamp used to put together pipe structures such as a working Rig (the ones used on construction sites) as well as Drum Rigs (the ones used to customize and hold Toms, Cow Bells etc.). I made one using Autodesk Inventor for my project, but I think now is the time I make one using OpenSCAD which can be customized to different pipe and wing-nut/screw specifications.

This clamp can be used to make anything that requires joining pipes (PVC, Metal, PPRC) with the constraint that the two pipes remain perpendicular to each other. It allows a variety of structures to be constructed, which are adjustable in dimensions due to the wing-nut/screws.

G-clamp
Image from http://www.musiciansfriend.com/drums-percussion

roland_td30k
A Roland TD 30-K constructed using these Rack-Clamps.

Here’s a version I made on Inventor in Summer 2013- we customized it for 3-D printing with ABS, modifying it for strength. With replacements rack-clamps running at ~$25 each, printing it is actually cheaper! (you can get a whole ABS spool for that and print at least 3 of these for 1-1/2 inch Schedule 40 PVC pipe)- plus you can customize it to your exact specifications.

rig_clamp
This clamp is practical enough to print and use. I kept one side flat as a 3-D printing base. All pipe and nut dimensions are accurate and were taken from the following documents:

Metric Hex-Nut Dimensions: http://www.fairburyfastener.com/xdims_metric_nuts.htm
PVC Pipe Dimensions: http://www.harvel.com/piping-systems/harvel-pvc-pipe/schedule-40-80/dimensions

AutoSCAD Version:
Customize it at: http://www.thingiverse.com/thing:232920


1 2 3 4

Variables you can customize:

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
//M. Haris Usmani
//http://harisusmani.com
 
//All Units are in mm, Import as STL with Unit=mm
 
/* [Main Settings] */
//Radius of Pipe in Inches (Schedule 40)
R=1.9; //[2.375:2"PVC,1.9:1-1/2"PVC,1.660:1-1/4"PVC,1.315:1"PVC]
 
//Space for Tightening
T=3; //[0:5]
 
//Nut Size
M=5; //[4,5,6]
 
/////////////////////////////////////////////////////////////////////////////
R_mm=R*25.4; //Converted to mm!
//Strength of Clamp (Fixed)
S=1.2; // [1.2] Determines Strength of Clamp in Percentage-FIXED!
 
/////////////////////////////////////////////////////////////////////////////
//Hexagonal Module from shapes.scad, http://svn.clifford.at/openscad/trunk/libraries/shapes.scad by Catarina Mota
module hexagon(size, height) {
  boxWidth = size/1.75;
  for (r = [-60, 0, 60]) rotate([0,0,r]) cube([boxWidth, size, height], true);
}
/////////////////////////////////////////////////////////////////////////////
 
//Pipe Model for Visualization
//translate([R_mm*S/2,R_mm*S/2,-R_mm*6]) cylinder(R_mm*10,R_mm/2,R_mm/2);
 
union()//Main Duplication
{
 
difference() //Pipe Hole
{
union()
{
minkowski() //Fillet
{
	union()
	{
		cube([R_mm*S,R_mm/2*S, R_mm*S]); //Main Body
		translate([R_mm*S/2,R_mm*S/2,0]) cylinder(R_mm*S,R_mm*S/2,R_mm*S/2); //Curved Edge
	}
	sphere([R_mm/2,R_mm,R_mm*5/12]); //Fillet Object
}
 
minkowski() //Fillet
{
	difference() //Hard Chamfer
	{
		translate([-R_mm/4,R_mm/5,(R_mm/2)-(R_mm*5/48)]) cube([R_mm/2,R_mm/1.4,R_mm*5/12]);
		translate([-R_mm,-R_mm*7/17,(R_mm/2)-(R_mm*5/24)]) rotate([0,0,-33]) cube([R_mm/2,R_mm,2*R_mm*5/12]);
	}
	sphere([R_mm/2,R_mm,R_mm*5/12]); //Fillet Object
}
}
	union()
	{
		translate([R_mm*S/2,R_mm*S/2,-R_mm*6]) cylinder(R_mm*10,R_mm/2,R_mm/2);//Pipe
		translate([-R_mm,R_mm*S*5/12,-R_mm]) cube([R_mm*2,R_mm/(15-T),R_mm*4]);//Tightning Space
		translate([-R_mm/7,R_mm*2,(R_mm*S/2)]) rotate([90,0,0]) cylinder((R_mm*4),M/2,M/2); //Screw Space
		if (M==4) translate([-R_mm/7,-R_mm*0.2,(R_mm*S/2)]) rotate([90,0,0]) hexagon(7.66,50); //NUTS
		if (M==5) translate([-R_mm/7,-R_mm*0.2,(R_mm*S/2)]) rotate([90,0,0]) hexagon(8.79,50);
		if (M==6) translate([-R_mm/7,-R_mm*0.2,(R_mm*S/2)]) rotate([90,0,0]) hexagon(11.05,50);
	}
} //Single Side ENDS
 
}
 
{
 
translate([R_mm*S,1,R_mm*S]) rotate([180,90,0]) //Main Translation
 
//COPY SIDE HERE
difference() //Pipe Hole
{
union()
{
minkowski() //Fillet
{
	union()
	{
		cube([R_mm*S,R_mm/2*S, R_mm*S]); //Main Body
		translate([R_mm*S/2,R_mm*S/2,0]) cylinder(R_mm*S,R_mm*S/2,R_mm*S/2); //Curved Edge
	}
	sphere([R_mm/2,R_mm,R_mm*5/12]); //Fillet Object
}
 
minkowski() //Fillet
{
	difference() //Hard Chamfer
	{
		translate([-R_mm/4,R_mm/5,(R_mm/2)-(R_mm*5/48)]) cube([R_mm/2,R_mm/1.4,R_mm*5/12]);
		translate([-R_mm,-R_mm*7/17,(R_mm/2)-(R_mm*5/24)]) rotate([0,0,-33]) cube([R_mm/2,R_mm,2*R_mm*5/12]);
	}
	sphere([R_mm/2,R_mm,R_mm*5/12]); //Fillet Object
}
}
	union()
	{
		translate([R_mm*S/2,R_mm*S/2,-R_mm*6]) cylinder(R_mm*10,R_mm/2,R_mm/2);//Pipe
		translate([-R_mm,R_mm*S*5/12,-R_mm]) cube([R_mm*2,R_mm/(15-T),R_mm*4]);//Tightning Space
		translate([-R_mm/7,R_mm*2,(R_mm*S/2)]) rotate([90,0,0]) cylinder((R_mm*4),M/2,M/2); //Screw Space
		if (M==4) translate([-R_mm/7,-R_mm*0.2,(R_mm*S/2)]) rotate([90,0,0]) hexagon(7.66,50); //NUTS
		if (M==5) translate([-R_mm/7,-R_mm*0.2,(R_mm*S/2)]) rotate([90,0,0]) hexagon(8.79,50);
		if (M==6) translate([-R_mm/7,-R_mm*0.2,(R_mm*S/2)]) rotate([90,0,0]) hexagon(11.05,50);
	}
}
///////////////
}
 
//preview[view: north, tilt: top];