Давай запрограммируем деталь?
Некоторое время назад я по глупости запорол свои бокорезы, так, что для откусывания ножек радио деталей они больше не годятся. К счастью, стоят они совершенно не дорого, и тем же днём были заказанные новые в небезызвестном сервисе, который в девичестве содержал в себе название моего родного города. При получении я немного огорчился тем, что в комплекте к ним не шёл колпачок, который был у предыдущих, хотя выглядят они идентично. Штош. Я решил восполнить этот недостаток с интересом для себя и решил этот колпачок самостоятельно спроектировать и напечатать на 3D принтере, который есть у меня на хозяйстве.
Проектирование ¶
Обычно, детали для печати проектируются в CAD программах твердотельного моделирования. Но я в них совершенно не умею, хотя и сын инженеров-конструкторов. Но зато, к счастью, я программист. И вроде, не самый худший! Посему, я решил воспользоваться свободной программой для твердотельного моделирования OpenSCAD. К счастью, в репозитории любимого дистрибутива (как, в прочем, и в большинстве других репозиториев) он присутствовал.
Что же в нём необычного? А необычное в нём то, что деталь в нём не рисуется, а именно что программируется. Для понимания, приведу простой пример:
1cube([25,35,55]); // Нарисовать куб размерами 25мм х 25мм х 55мм
Просто? Очень!
А учитывая что язык полноценный, с циклами и условиями «напрограммировать» в нём можно многое.
Первая версия ¶
Вот и я не стал долго думать, открыл мануал с оффсайта, обмерил
штангенциркулем оригинальный колпачок и пошёл проектировать программировать. На всё про всё у меня ушло
где-то с полчаса. И у меня получилась первая версия колпачка. Максимально простая и дубовая.
Первая куцая версия:
Вторая версия ¶
В принципе, на этом можно было и остановиться, ведь свою функцию он выполняет. Но у меня сработал мой перфекционист и я подумал, что было бы неплохо вырезы в корпусе сделать один под другим, а не на одной линии, чтобы бокорез сидел ровно, а не под углом. Потом пришла мысль, что было бы неплохо ещё и параметризировать модель, чтобы было легко менять её размеры, а не хардкодить их. И вот получилась вторая, и на текущий момент окончательная версия:
И результат «в железе», то есть в пластике :)
А сам код, думаю, он достаточно понятен (исходники и 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, как моим самым любимым.
Ссылки ¶
- Сайт OpenSCAD - https://openscad.org/
- Документация - https://openscad.org/documentation.html
- Шпаргала по функциям - https://openscad.org/cheatsheet/index.html
- Библиотеки - https://openscad.org/libraries.html