Давай запрограммируем деталь?

Давай запрограммируем деталь?

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

Штош. Я решил восполнить этот недостаток с интересом для себя и решил этот колпачок самостоятельно спроектировать и напечатать на 3D принтере, который есть у меня на хозяйстве.

Бокорез и родной колпачок

Бокорезы и колпачок

Проектирование

Обычно, детали для печати проектируются в CAD программах твердотельного моделирования. Но я в них совершенно не умею, хотя и сын инженеров-конструкторов. Но зато, к счастью, я программист. И вроде, не самый худший! Посему, я решил воспользоваться свободной программой для твердотельного моделирования OpenSCAD. К счастью, в репозитории любимого дистрибутива (как, в прочем, и в большинстве других репозиториев) он присутствовал. Что же в нём необычного? А необычное в нём то, что деталь в нём не рисуется, а именно что программируется. Для понимания, приведу простой пример:

1cube([25,35,55]); // Нарисовать куб размерами 25мм х 25мм х 55мм

Просто? Очень! А учитывая что язык полноценный, с циклами и условиями «напрограммировать» в нём можно многое.

Первая версия

Вот и я не стал долго думать, открыл мануал с оффсайта, обмерил штангенциркулем оригинальный колпачок и пошёл проектировать программировать. На всё про всё у меня ушло где-то с полчаса. И у меня получилась первая версия колпачка. Максимально простая и дубовая. Первая куцая версия: Колпачок v1

Вторая версия

В принципе, на этом можно было и остановиться, ведь свою функцию он выполняет. Но у меня сработал мой перфекционист и я подумал, что было бы неплохо вырезы в корпусе сделать один под другим, а не на одной линии, чтобы бокорез сидел ровно, а не под углом. Потом пришла мысль, что было бы неплохо ещё и параметризировать модель, чтобы было легко менять её размеры, а не хардкодить их. И вот получилась вторая, и на текущий момент окончательная версия: Колпачок v2 код И результат «в железе», то есть в пластике :) Колпачок v2 результат А сам код, думаю, он достаточно понятен (исходники и STL модель я прикладываю к этому посту):

 1// Толщина стенки
 2wall = 2;
 3
 4// Высота внешняя
 5height = 12;
 6
 7// Длина основной части (внутренняя)
 8l1 = 15;
 9
10// Длина носика (внутренняя)
11l2 = 20;
12
13// Ширина у основания (внутренняя)
14w = 15;
15
16// Толщина метала бокорезов
17toolWidth = 2.1;
18
19// Нижняя крышка
20cover(0);
21
22// Верхняя крышка
23cover(height - wall);
24
25// Корпус
26difference() {
27    linear_extrude(height)
28    polygon(
29        [ // Полигон идёт против часовой стрелки
30            [0, 0],
31            [wall, 0],
32            [wall, l1],
33            [w / 2 + wall, l1 + l2], // Внутренний кончик носика
34            [w + wall, l1],
35            [w + wall, 0],
36            [w + wall * 2, 0],
37            [w + wall * 2, l1],
38            [w / 2 + wall / 2 + wall, l1 + l2 + wall], // Внешний кончик носика
39            [w / 2 - wall / 2 + wall, l1 + l2 + wall],
40            [0, l1],
41        ]
42    );
43
44    // Вырезы
45    translate([w + wall, 0, height / 2 - toolWidth]) // Правый вырез чуть ниже середины
46    cube([wall, l1 / 2, toolWidth]);
47    translate([0, 0, height / 2]) // Левый вырез чуть выше середины
48    cube([wall, l1 / 2, toolWidth]);
49}
50
51
52// Крышка
53module cover(z) {
54    translate([0, 0, z])
55    linear_extrude(wall)
56    polygon(
57        [ // Полигон идёт против часовой стрелки
58            [0, 0],
59            [w + wall * 2, 0],
60            [w + wall * 2, l1],
61            [w / 2 + wall / 2 + wall, l1 + l2 + wall],
62            [w / 2 - wall / 2 + wall, l1 + l2 + wall],
63            [0, l1],
64        ]
65    );
66}

Надеюсь, я кому-то показал что даже без специального конструкторского образования, но умея программировать - можно получать не только эфимерные программки, но и вполне себе физические предметы, которые пригождаются в быту. И если интересно, подбиваю экономику: напечатано 2 колпачка (1 и 2 версия), каждый весом по 4 грамма, то есть примерно по 4₽ за штуку. Печатал пластиком PLA, как моим самым любимым.

Ссылки