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

Пишу как про околоайти, так и просто что придёт в голову

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

Некоторое время назад я по глупости запорол свои бокорезы, так, что для откусывания ножек радио деталей они больше не годятся. К счастью, стоят они совершенно не дорого, и тем же днём были заказанные новые в небезызвестном сервисе, который в девичестве содержал в себе название моего родного города. При получении я немного огорчился тем, что в комплекте к ним не шёл колпачок, который был у предыдущих, хотя выглядят они идентично. Штош. Я решил восполнить этот недостаток с интересом для себя и решил этот колпачок самостоятельно спроектировать и напечатать на 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, как моим самым любимым.

Ссылки