// диаметр первого вала
one_wall = 5;
// диаметр второго вала
two_wall = 8;
// диаметр болтов стяжки
bolt = 3;
// Диамтр описанной окружности шестигранника, для гайки стажки
screw_nut_out_circle = 6;
// диаметр закругления цилиндра(фаска)
chamfer = 3;
// Определение внешнего диаметра муфты
ext_diam = max(one_wall, two_wall) + bolt * 3;
// высота обжимного цилиндра под каждый вал соответственно
height_one_wall = 15;
height_two_wall = 15;
// разрешение поверхностей
fn = 100;
// фикс высоты для устранения искажений поверхностей при вырезании
// при выставленном 0 разница ощутима
// фикс смещения рассчитан на то что первый вал всегда меньше или равен второму
qwe = 0.1;
module coupling()
{
difference()
{
// создаем основную конструкцию
difference()
{
// создаем основной цилиндр
// если в $fn задать значение 6, то в сечением цилиндра будет не круг а шестигранник
// грубо говоря $fn задает количество граней из которых формируется поверхность
// в этом и смысл этого параметра
cylinder(height_one_wall + height_two_wall, r=ext_diam/2, $fn=fn);
// вырезаем из него первый вал (с фиксированными смещением и высотой)
translate([0,0,-qwe])
cylinder(height_one_wall + qwe * 2, r=one_wall/2, $fn=fn);
// создаем второй вал со смещением по оси Z на высоту первого (также учитываем фикс)
translate([0,0, height_one_wall])
cylinder(height_two_wall + qwe, r=two_wall/2, $fn=fn);
}
// создаем скос (закругленную фаску в основании)
// затем этот скос исключается из основного цилиндра
difference()
{
// создаем кольцо прямоугольной формы на поверх грани для которой будет сформирован скос
rotate_extrude(convexity=10, $fn=fn)
translate([ext_diam/2 - chamfer + qwe, -qwe, 0])
square([chamfer, chamfer]);
// исключаем из него кольцо круглой формы со смещением
rotate_extrude(convexity=10, $fn=fn)
translate([ext_diam/2 - chamfer + qwe, chamfer - qwe*2, 0])
circle(chamfer);
}
// точно такую же операцию проделываем с другой стороны цилиндра
difference()
{
rotate_extrude(convexity=10, $fn=fn)
translate([ext_diam/2 - chamfer + qwe, height_one_wall + height_two_wall +qwe - chamfer, 0])
square([chamfer, chamfer]);
rotate_extrude(convexity=10, $fn=fn)
translate([ext_diam/2 - chamfer + qwe, height_one_wall + height_two_wall +qwe*2 - chamfer, 0])
circle(chamfer);
}
// вырезаем зажимной прорез, предварительно повернув его на 30 градусов
// на случай если у основного цилиндра задать разрешение $fn=6
// чтобы прорез оказался в в угле шестигранника
rotate(30, [0,0,1])
translate([-0.5, -1-max(one_wall, two_wall)/2,-qwe])
cube([1,ext_diam, height_one_wall + height_two_wall + qwe * 2]);
// вырезаем выемку под стяжной болт первого вала
bolt(height_one_wall/2, false);
// вырезаем вырезку под болт второго вала
bolt(height_one_wall + height_two_wall/2, true);
}
}
// создаем выемки под винт и гайку для сжатия валов
module bolt(height, rate=false)
{
// задаем нужный наклон
rotate(90, [1,0,0])
rotate(120, [0,1,0])
union ()
{
// отверстике сквозное
translate([ext_diam/2 - bolt, height, -ext_diam/2])
cylinder(ext_diam, r=bolt/2, $fn=fn);
// выемка для посадки головки винта
translate([ext_diam/2 - bolt, height, rate ? -ext_diam/2 : ext_diam/4])
cylinder(ext_diam/4, r=bolt*2/2, $fn=fn);
// выемка для посадки шестигранной гайки
translate([ext_diam/2 - bolt, height, rate ? ext_diam/4: -ext_diam/2])
// разворачиваем на 30 радусов чтобы грань шестигранника
// не была отвесной на 90градусов, при 3Д печати
rotate(30, [0,0,1])
cylinder(ext_diam/4, r=screw_nut_out_circle/2, $fn=6);
}
}
coupling();