Dynamixel XL330 pulley

Code for OpenSCAD: https://openscad.org
$fn=32;
w = 5.3; // pulley thickness
inner = 6; // fixed number (inner radius non-overlapping with the servo's screw)
outer = 10; // adjust this number to increase the outer radius
screw = 1;
module mounts(screw, inner, outer){
// module for screw mounts
union(){
union(){
union(){
translate([inner,0,-2]) cylinder(outer, screw, screw);
translate([-inner,0,-2]) cylinder(outer, screw, screw);
}
translate([0,inner,-2]) cylinder(outer, screw, screw);
}
translate([0,-inner,-2]) cylinder(outer, screw, screw);
}
}
module disc(inner, outer){
difference(){
cylinder(w, outer, outer);
cylinder(w, inner/2, inner/2);
}
}
module pully(inner, outer, r, w){
difference(){
difference(){
rotate_extrude(convexity = 10)
translate([outer + 2, w/2, 0])
circle(r);
rotate_extrude(convexity = 10)
translate([outer + (inner/2), w/2, 0])
circle(r);
}
// string hanging point
translate([outer+0.5, 0, 0]) cylinder(2*w, screw/2, screw/2);
}
}
difference(){
union(){
pully(inner, outer, w/2, w);
disc(inner, outer);
}
mounts(screw, inner, outer);
}
Pulley v2

$fn = 32;
r = 25; // disc radius - outer
w = 5.3; // disc thickness for XL330 -- adjust for different servo types
d = 3; // inner hole radius -- inner
t = 4;
h = 1.5; // boundary thickness
rr = 0.8; // d=1.6mm pins on the XL330 servo hornet (inlet)
ll = 2.5; // l=2.5mm, how deep the inlet travel in the hornet -- 2.5mm
tt = 2; // t=2mm, global thickness
inner = 6;
module pins(rr, ll, tt){
/* r: radius, l: length, t: thickness */
translate([inner,0,0]) cylinder(2*w, rr, rr);
translate([-inner,0,0]) cylinder(2*w, rr, rr);
translate([0,inner,0]) cylinder(2*w, rr, rr);
translate([0,-inner,0]) cylinder(2*w, rr, rr);
}
module mounts(screw, inner, outer){
// module for screw mounts
union(){
union(){
union(){
translate([3*inner,0,-2]) cylinder(outer, screw, screw);
translate([-3*inner,0,-2]) cylinder(outer, screw, screw);
}
translate([0,3*inner,-2]) cylinder(outer, screw, screw);
}
translate([0,-3*inner,-2]) cylinder(outer, screw, screw);
}
}
module disc(r, w, d, h){
difference(){
union(){
union(){
cylinder(w, r, r);
translate([0, 0, w-h]) cylinder(h, r + t, r + t);
}
translate([0, 0, 0]) cylinder(h, r + t, r + t);
}
cylinder(w, 3, 3);
}
}
//
//union(){
// disc(r, w, d);
// translate([0, 0, w - t]) cylinder(h, r + t, r + t);
//}
difference(){
difference(){
difference(){
disc(r, w, d, h);
// mounts(h, d, r);
pins(rr, ll, w);
}
translate([0,0,w/2]) rotate([90,0,0]) cylinder(2*r, 1, 1); // string attachment
}
translate([0,-1.5*w,w/2]) rotate([0,90,0]) cylinder(2*r, 1, 1); // string attachment
}
Other servo accessories
https://studio.cse.chalmers.se/mediawiki/index.php?title=Servo_accessories