Моделирование в OpenSCAD для 3D печати. Регулировочная ручка

В данной статье мы создадим ручку, которую можно использовать не только в принтере SibRap, но и всюду, где нужно заворачивать или регулировать какую-нибудь гайку среднего размера. Также, при определенной адаптации, эта ручка может быть насажена на вал двигателя или переменного резистора.

Ручка

 

На этот раз мы создадим параметрический дизайн, т.е. обозначим переменными несколько базовых размеров, на основе которых сделаем расчет всех остальных размеров. Создадим новый файл knob.scad и запишем в него следующий код:

    // параметр для создания зазора между деталями
    // избегание совпадения граней
    DELTA=0.1;
    // качество цилиндров
    fn=16;

    // радиус скругления внизу
    r1=1.5;
    // габаритный радиус
    r2=9.5;
    // радиус вверху
    r3=6.9;
    // радиус мелких сфер
    r4=r2-r3-0.1;
    // высота гладкой части внизу
    h1=9;
    // габаритная высота
    h2=20;

Немного о параметре DELTA. При печати точно в размер нескольких деталей, которые надо соединить между собой (например, выступ одной детали вставить в паз другой), из-за шероховатости поверхностей это может оказаться очень трудным или вообще невозможным. В этом случае нужно оставить некоторый допуск в плоскости соединения. Другое применение этого параметра – перекрытие граней объектов. Поскольку Опенскад в режиме предпросмотра (F5) рендерит объекты с совпадающими гранями с “мутью”, нужно делать вырезы с “перехлестом”. Например, вырезая из одного цилиндра другой, основание внутреннего цилиндра нужно поместить чуть-чуть ниже внешего, а высоту увеличить на 2*”чуть-чуть” – тогда по F5 мы увидим красивую картинку без всякой мути.

Качество цилиндров также можно настраивать параметрически. Ведь в одном месте гладкость поверхности может быть важно, а в другом – нет. В Опенскаде каждый цилиндр можно создавать с его собственным качеством, а глобально задавать общее качество модели. Для этого мы завели параметр fn, и ниже будем его использовать.

Начнем моделирование. Для базового объекта мы используем следующий приём:

        // боковая поверхность и скругление внизу
        rotate_extrude($fn=fn*5)translate([r1,r1,0])
          offset(r=r1,$fn=fn)square([r2-2*r1,h2-2*r1-DELTA]);

Разберем его по порядку (для команд также см. Шпаргалку).

1. // создаем плоский прямоугольник

      square([r2-2*r1,h2-2*r1-DELTA]);

 

2. // создаем закругленный прямоугольник с размерами r2 * h2-DELTA

       offset(r=r1,$fn=fn)square([r2-2*r1,h2-2*r1-DELTA]);

 

3. // переносим его целиком в первый квадрант

       translate([r1,r1,0])offset(r=r1,$fn=fn)square([r2-2*r1,h2-2*r1-DELTA]);

 

4. // создаем тело вращения с помощью

// 1) поворота закругленного прямоугольника из плоскости XY в XZ
// 2) вращения его вокруг оси Z

       rotate_extrude($fn=fn*5)translate([r1,r1,0])
         offset(r=r1,$fn=fn)square([r2-2*r1,h2-2*r1-DELTA]);

Базовый объект

При этом габаритные размеры объекта будут такими: радиус = r2, высота = h2-DELTA.

Вырезаем из базового объекта гайку:

    difference() {
      // боковая поверхность и скругление внизу
      rotate_extrude($fn=fn*5)translate([r1,r1,0])
        offset(r=r1,$fn=fn)square([r2-2*r1,h2-2*r1-DELTA]);
      // гайка внутри
      translate([0,0,-DELTA])rotate([0,0,90])cylinder(r=7.9,h=7+DELTA,$fn=6);
    }

Базовый объект с вырезом

В данном случае параметр $fn используется для создания 6-гранной призмы.

Добавляем отверстие внутри и обрезаем верх:

    difference() {
      // боковая поверхность и скругление внизу
      rotate_extrude($fn=fn*5)translate([r1,r1,0])
        offset(r=r1,$fn=fn)square([r2-2*r1,h2-2*r1-DELTA]);
      // гайка внутри
      translate([0,0,-DELTA])rotate([0,0,90])cylinder(r=7.9,h=7+DELTA,$fn=6);
      // глухое отверстие внутри
      cylinder(r=4+DELTA,h=18,$fn=fn*2);
      // обрезание гладкой части
      translate([0,0,h1])cylinder(r=r2+DELTA,h=h2-h1,$fn=fn*5);
    }

Базовый объект, обрезка

Обратите внимание, что гладкость $fn обрезающего цилиндра равна гладкости, задаваемой в rotate_extrude(). Это нужно, чтобы произошло точное совпадение плоскостей боковых граней (наш обрезающий цилиндр имеет на DELTA больший радиус, за счет этого никаких артефактов в модели не остаётся).

Моделируем верх. Создаем цилиндр и вырезаем внутри глухое отверстие (дописать после первого блока difference()):

    difference() {
      // верхний цилиндр
      translate([0,0,h1])cylinder(r=r3+DELTA,h=h2-h1,$fn=fn*5);
      // глухое отверстие внутри
      cylinder(r=4+DELTA,h=18,$fn=fn*2);
    }

Верх

В данном случае плохо видно, что происходит внутри детали. Сделаем ее сечение большим кубом, добавив команду cube(100) в конец первого и второго difference() перед закрывающей скобкой.

Сечение

Так видно гораздо лучше. Дописываем код:

    translate([0,r2-r4,h1])cylinder(r=r4,h=h2-h1-r4+0.5+DELTA,$fn=fn*2);
    translate([0,r2-r4,h2-r4+0.5])scale([1,1,0.8])sphere(r=r4,$fn=fn*2);

Ребро

  • sphere(r=r4,$fn=fn*2) – сфера с радиусом r4 и гладкостью fn*2
  • scale([1,1,0.8]) – масштабирование. Мы сжали сферу на 20% по оси Z.

 

Далее используем цикл:

    // мелкие сферы и боковые цилиндры
    for(i=[0:9])
    rotate([0,0,36*i]){
      translate([0,r2-r4,h1])cylinder(r=r4,h=h2-h1-r4+0.5+DELTA,$fn=fn*2);
      translate([0,r2-r4,h2-r4+0.5])scale([1,1,0.8])sphere(r=r4,$fn=fn*2);
    }
  • for(i=[0:9]) – использовать параметр i, принимающий целые значения от 0 до 9
  • rotate([0,0,36*i]) – поворачивать каждый раз объект на 36*i градусов вокруг оси Z

 

Таким образом, мы получаем 10 ребер вокруг центрального цилиндра:

Моделирование в OpenSCAD для 3D печати. Часть 2. Регулировочная ручка

Уберем отладочные кубы. Отрендерим деталь (F6).

Готовая деталь

Моделирование в OpenSCAD для 3D печати. Часть 2. Регулировочная ручка

Ура! Теперь мы можем напечатать ее на 3д-принтере, вставить гайку M8 и проверить работу.

 

А можем изменить какой-нибудь параметр и убедиться, что деталь перестраивается, сохраняя целостность дизайна. Например, сделаем габаритную высоту h2=30:

Моделирование в OpenSCAD для 3D печати. Часть 2. Регулировочная ручка

Увеличим и габаритный радиус на 5, а радиус вверху на 4 (r2=9.5+5; r3=6.9+4;):

Большая ручка

Моделирование в OpenSCAD для 3D печати. Часть 2. Регулировочная ручка

Конечно, при каких-то значениях параметров дизайн рассыпется. Но нельзя охватить необъятное. Диапазон допустимых значений для данной ручки довольно широк, дизайн универсален, и можно сделать модификацию кода, добавив, например, носик или риску для индикации угла поворота. Пользуйтесь.

Моделирование в OpenSCAD для 3D печати. Часть 2. Регулировочная ручка

Скачать файл барашка

В следующей статье я расскажу об использовании модулей и библиотек, мы сделаем шестеренку и поработаем с резьбой.

Нуждов Андрей, 16.02.2017

15

Метки:    2017-03-01      Раздел: Моделирование  
Автор: Просмотров: 552   Нет комментариев



Добавить комментарий




     
Авторизация
*
*
Генерация пароля
Яндекс.Метрика