Мебель с применением 3д печати: фантазии vs реальность

Стандартная мебель часто разочаровывает, а заказы частникам дороги. Мои поиски привели к находке: проекту модульной гексагональной полки с 3D-печатными соединителями. Это был шанс не только решить нетривиальную задачу, но и попробовать геометрический компилятор OpenSCAD – ведь тогда умных чат-ботов еще не было, и разбираться пришлось самому. Если заинтересовало — добро пожаловать под кат!
Мебель прошла долгий путь исторического развития, от камней в пещере до современных дизайнерских изысков в комфортабельных пентхаусах. И все же, в утилитарном смысле современная мебель не блещет. Трудно найти подходящий дизайн и организовать пространство на готовых изделиях, а заказывать проект у специализированных фирм достаточно затратно (особенно для моих запросов). А я ведь и сам в каком-то смысле проектировщик…

С такими мыслями я вышел в интернет и случайно наткнулся там на проект модульной гексагональной полки с 3д печатными соединителями.

Тут стоит упомянуть, что я не столяр, а вот с 3D печатью дружу довольно давно, потому и решил взяться. В то время мне нужна была небольшая полка для книг, так что исходный проект я доработал под свои нужды, поскольку прочность исходных соединителей мне доверия не внушала, да и не хотел я штробить стену для ее крепления.
Задача стояла достаточно интересная, потому что 3D модель поставлялась в формате… OpenScad. Кто не знает, это фактически компилятор 3D модели на основе геометрического кода. То есть модель задается программно геометрическими примитивами. Дело осложнялось тем, что это было ДО бума LLM (умных чат-ботов), а значит разбираться пришлось самому. Потому я этот проект и выбрал, интересно было на это посмотреть.

Открываем проект и видим… А что мы видим?
Достаточно занятный скрипт, в котором полно комментариев на функции, да и некоторые функции сами закомментированы. Его ключевые параметры:
Основные функции:
В основании используется равносторонний треугольник, высота которого вычисляется через sqrt() и tan(30) — это важно для точного шестигранного позиционирования.
Мне необходимо было немного подправить код, чтобы подогнать размер пазов под мои дощечки. Кстати о них:

Обычная сантиметровая фанера. Автор скрипта использовал потоньше. Да и сама полка у него хлипенькая, под фигурки. Не годится! Кроме того, я задумал специфическое крепление, для которого требовалось убрать с модели «ушки». Пришлось немного повозиться с углами и добавить колпачки (для красоты). Параметры стенок и длина меняются в параметрах. Колпачки легко добавляются функцией.
Эту функцию надо вставить вместо bracket(), и она будет закрывать соответствующие лепестки крепления. После печати наступил процесс сборки.

Собирается достаточно быстро. После сборки нужно завинтить саморезы в боковые отверстия и просто поставить…

А можно, используя круговую обвязку тросов и 3 крепления зафиксировать полку в подвешенном состоянии!

Как видите, я еще немного повыжигал по дереву, чтобы получить красивые задники. Кроме того прилепил на стену в середину зеркало (иногда полезно в него смотреть). Да, кстати, крепления делаются из дешевого троса и затяжек для него. Но для чего тут шишка? Оставим эту загадку потомкам…

Три крепления обеспечивают надежную фиксацию. Достаточно надежную, чтобы удерживать примерно такую нагрузку на всех полках (в течение пары лет). За счет кругового обхвата троса конструкция стягивает себя вовнутрь тем больше, чем больше веса на нее положить. Спасибо советским энциклопедиям за предоставленный гранит науки!

Что касается надежности, висит уже пару лет. Особенно ничего с ней не сталось. Такую полку можно поставить и на пол (для обуви), прикрепить к стене (фигурки, вещи), сделав сложную форму, налепить сзади адресную ленту для подсветки… Очень много всего можно интересного придумать! А в эпоху языковых моделей даже морочиться не надо с разработкой подобных деталей — нейросеть сама составит любую форму, толщину и концигурацию. Не нравится шестиугольные — можно четырех, пяти, семи, восьмиугольные. В общем — простор для творчества. Думаю, в ближайшее время как-нибудь прокачаю свою с помощью умного дома. Ну а пока — всем пока!
Мебель прошла долгий путь исторического развития, от камней в пещере до современных дизайнерских изысков в комфортабельных пентхаусах. И все же, в утилитарном смысле современная мебель не блещет. Трудно найти подходящий дизайн и организовать пространство на готовых изделиях, а заказывать проект у специализированных фирм достаточно затратно (особенно для моих запросов). А я ведь и сам в каком-то смысле проектировщик…

С такими мыслями я вышел в интернет и случайно наткнулся там на проект модульной гексагональной полки с 3д печатными соединителями.

Тут стоит упомянуть, что я не столяр, а вот с 3D печатью дружу довольно давно, потому и решил взяться. В то время мне нужна была небольшая полка для книг, так что исходный проект я доработал под свои нужды, поскольку прочность исходных соединителей мне доверия не внушала, да и не хотел я штробить стену для ее крепления.
Задача стояла достаточно интересная, потому что 3D модель поставлялась в формате… OpenScad. Кто не знает, это фактически компилятор 3D модели на основе геометрического кода. То есть модель задается программно геометрическими примитивами. Дело осложнялось тем, что это было ДО бума LLM (умных чат-ботов), а значит разбираться пришлось самому. Потому я этот проект и выбрал, интересно было на это посмотреть.

Открываем проект и видим… А что мы видим?
/* hexagonal shelving clips
Gian Pablo Villamil
May 2015
Clips designed to hold wooden shelves in a hexagonal array
Default to work with 3/4 inch plywood
*/
shelf_thick = 5; // 3/4 inch in mm, thickness of wood
wall_thick = 3; //thickness of bracket sides
wall_length = 25; // length of the bracket
depth = 25 ; //epth of the bracket
bracket_thick = shelf_thick+wall_thick*2;
screw_dia = 4.75; // #8 size screw is 4.75
tri_height = sqrt(pow(bracket_thick,2)-pow(bracket_thick/2,2)); // calculate the height of an equilateral triangle
centroid = tan(30) * (bracket_thick/2);
closed = false;
corner_rad = 1;
floor_thick = 3;
$fn=16;
echo(centroid);
module wall() {
translate([shelf_thick/2,0,0])
translate([0,0,0])
difference() {
//cube([wall_thick,wall_length,depth]);
union() {
translate([wall_thick/2,wall_length/2,depth/2]) roundedBox([wall_thick,wall_length,depth],corner_rad,true);
cube([wall_thick,2,depth]);
};
translate([wall_thick/2,wall_length/2,depth/2])
rotate([0,90,0])
cylinder(h=wall_thick+1,d=screw_dia,center=true,$fn=16);
}
};
module bracket() {
translate([0,centroid-0.1,0]){
wall();
mirror([1,0,0])
wall();
if (closed ) {
translate([0,wall_length/2,floor_thick/2]) roundedBox([bracket_thick,wall_length,floor_thick],corner_rad,true); }
};
};
module bracketleg() {
translate([0,centroid-0.1,0]){
union() {
wall();
translate([-depth/5+0.1,wall_length/2,depth/2])
rotate([0,270,0])
cylinder(r1=depth/2.5,r2=depth/6,h=depth/2.5);
}
mirror([1,0,0])
wall();
if (closed ) {
translate([0,wall_length/2,floor_thick/2]) roundedBox([bracket_thick,wall_length,floor_thick],corner_rad,true); }
};
};
module hanger() {
translate([0,centroid-0.1+bracket_thick/2,floor_thick/2])
difference() {
union() {
roundedBox([bracket_thick,bracket_thick,floor_thick],bracket_thick/2,true,$fn=32);
translate([0,-bracket_thick/4,0]) cube([bracket_thick,bracket_thick/2,floor_thick],center=true);
}
cylinder(h=floor_thick+1,d=screw_dia,center=true);
}
}
module hub() {
difference() {
translate([0,centroid,0])
linear_extrude(height=depth) {
polygon(points=[[-bracket_thick/2,0],[0,-tri_height],[bracket_thick/2,0]]);}
translate([0,0,-0.5]) cylinder(r=shelf_thick/4,h=depth+1);
}
}
module threewaybracket() {
union() {
hub();
bracket();
rotate([0,0,120]) bracket();
rotate([0,0,240]) bracket();
}
};
module twowaybracket() {
union() {
hub();
bracket();
rotate([0,0,120]) bracket();
}
};
module twowaybracket_leg() {
union() {
hub();
bracket();
rotate([0,0,120]) bracketleg();
}
};
module twowaybracket_hanger() {
union() {
hub();
hanger();
rotate([0,0,120]) bracket();
rotate([0,0,240]) bracket();
}
};
module twowaybracket_tensioner() {
union() {
hub();
rotate([0,0,180]) translate([0,centroid,0])
hanger();
rotate([0,0,120]) bracket();
rotate([0,0,240]) bracket();
}
};
// Library: boxes.scad
// Version: 1.0
// Author: Marius Kintel
// Copyright: 2010
// License: BSD
// roundedBox([width, height, depth], float radius, bool sidesonly);
// EXAMPLE USAGE:
// roundedBox([20, 30, 40], 5, true);
// size is a vector [w, h, d]
module roundedBox(size, radius, sidesonly)
{
rot = [ [0,0,0], [90,0,90], [90,90,0] ];
if (sidesonly) {
cube(size - [2*radius,0,0], true);
cube(size - [0,2*radius,0], true);
for (x = [radius-size[0]/2, -radius+size[0]/2],
y = [radius-size[1]/2, -radius+size[1]/2]) {
translate([x,y,0]) cylinder(r=radius, h=size[2], center=true);
}
}
else {
cube([size[0], size[1]-radius*2, size[2]-radius*2], center=true);
cube([size[0]-radius*2, size[1], size[2]-radius*2], center=true);
cube([size[0]-radius*2, size[1]-radius*2, size[2]], center=true);
for (axis = [0:2]) {
for (x = [radius-size[axis]/2, -radius+size[axis]/2],
y = [radius-size[(axis+1)%3]/2, -radius+size[(axis+1)%3]/2]) {
rotate(rot[axis])
translate([x,y,0])
cylinder(h=size[(axis+2)%3]-2*radius, r=radius, center=true);
}
}
for (x = [radius-size[0]/2, -radius+size[0]/2],
y = [radius-size[1]/2, -radius+size[1]/2],
z = [radius-size[2]/2, -radius+size[2]/2]) {
translate([x,y,z]) sphere(radius);
}
}
}
//twowaybracket();
//twowaybracket_hanger();
//twowaybracket_leg();
//
twowaybracket_tensioner();
//threewaybracket();
// bracket();
// hub();
Достаточно занятный скрипт, в котором полно комментариев на функции, да и некоторые функции сами закомментированы. Его ключевые параметры:
shelf_thick = 3; // Толщина полки (в мм), по умолчанию фанера 3/4 дюйма ≈ 19 мм
wall_thick = 2; // Толщина стенки клипсы
wall_length = 25; // Длина стенки держателя
depth = 25; // Глубина (насколько «внутрь» заходит полка)
Основные функции:
wall()
Создаёт одну вертикальную стенку клипсы. Имеет:- скруглённый корпус (roundedBox);
- отверстие под винт (цилиндр вырезается через difference);
- дополнительную небольшую перемычку снизу (cube([wall_thick,2,depth])).
bracket()
Создаёт двойную клипсу: две симметричных стенки (wall) с промежутком под полку (shelf_thick). Опционально добавляется перекрытие снизу — «пол» (closed == true).bracketleg()
Модификация bracket(), но с одной из сторон добавлена конусная ножка, что делает её удобной как опору на стол или пол. Это увеличивает устойчивость нижнего ряда полок.hanger()
Создаёт подвесной крюк, соединённый с клипсой. Имеет форму квадрата с выемкой и отверстием под винт. Может использоваться для крепления системы полок к стене или потолку.hub()
Создаёт центральный «узел» — треугольную призму, к которой крепятся клипсы. Это геометрический центр шестигранной полки. Также содержит центральное отверстие под винт или шкант.В основании используется равносторонний треугольник, высота которого вычисляется через sqrt() и tan(30) — это важно для точного шестигранного позиционирования.
Мне необходимо было немного подправить код, чтобы подогнать размер пазов под мои дощечки. Кстати о них:

Обычная сантиметровая фанера. Автор скрипта использовал потоньше. Да и сама полка у него хлипенькая, под фигурки. Не годится! Кроме того, я задумал специфическое крепление, для которого требовалось убрать с модели «ушки». Пришлось немного повозиться с углами и добавить колпачки (для красоты). Параметры стенок и длина меняются в параметрах. Колпачки легко добавляются функцией.
module bracket_cap() {
translate([0,centroid-0.1,0]){
wall();
mirror([1,0,0])
wall();
// Добавляем крышку сверху вместо дна
translate([0,wall_length/2,depth - floor_thick/2])
roundedBox([bracket_thick, wall_length, floor_thick], corner_rad, true);
};
}
Эту функцию надо вставить вместо bracket(), и она будет закрывать соответствующие лепестки крепления. После печати наступил процесс сборки.

Собирается достаточно быстро. После сборки нужно завинтить саморезы в боковые отверстия и просто поставить…

А можно, используя круговую обвязку тросов и 3 крепления зафиксировать полку в подвешенном состоянии!

Как видите, я еще немного повыжигал по дереву, чтобы получить красивые задники. Кроме того прилепил на стену в середину зеркало (иногда полезно в него смотреть). Да, кстати, крепления делаются из дешевого троса и затяжек для него. Но для чего тут шишка? Оставим эту загадку потомкам…

Три крепления обеспечивают надежную фиксацию. Достаточно надежную, чтобы удерживать примерно такую нагрузку на всех полках (в течение пары лет). За счет кругового обхвата троса конструкция стягивает себя вовнутрь тем больше, чем больше веса на нее положить. Спасибо советским энциклопедиям за предоставленный гранит науки!

Что касается надежности, висит уже пару лет. Особенно ничего с ней не сталось. Такую полку можно поставить и на пол (для обуви), прикрепить к стене (фигурки, вещи), сделав сложную форму, налепить сзади адресную ленту для подсветки… Очень много всего можно интересного придумать! А в эпоху языковых моделей даже морочиться не надо с разработкой подобных деталей — нейросеть сама составит любую форму, толщину и концигурацию. Не нравится шестиугольные — можно четырех, пяти, семи, восьмиугольные. В общем — простор для творчества. Думаю, в ближайшее время как-нибудь прокачаю свою с помощью умного дома. Ну а пока — всем пока!

Самые обсуждаемые обзоры
+97 |
5446
145
|
+64 |
5827
99
|
Или Ваша собственность перестаёт быть вашей, когда вы уезжаете?
хочется увидеть иные виды мебели от автора
А вообще, мне вполне понравилось ковыряться в openscad (делал недавно несколько моделек, руками, в copilot потом уже другой прототип пробовал). Такой подход дает много преимуществ по сравнению если работать только визуально с помощью мыши.
Мне кажется что эти два пункта не очень хорошо сочетаются в одном изделии. Ну «красивое» и визуально заметные тросы.
>проще
^^^
Вообще возражение верное. У OpenSCAD есть задачи, но рисование простых деталек в них не входит. От того непременно получаются нагромождения кубов, нарисованные без учёта особенностей 3Д-печати, а также без скруглений, утолщений, уклонов и декоративно-сопроматных вырезов.
и что любопытно, местные завсегдатаи владельцы 3д-принтеров, даже не пытались конструктивно комментировать эти недочеты.
с одной стороны понятно, человек просто переиспользовал чью-то поделку, вообще без особых раздумий или доделок. по итогу закономерный итог: владение 3д-принтером не повлияло на качественную составляющую достигнутого результата в лучшую сторону, а скорее наоборот.
Все недочёты тут сугубо в хипстерском исполнении. Когда недостаток знаний и понимания
компенсируютусугубляют неподходящими инструментами.а можно картинку защелок, посмотреть конструкцию чтоб понять может я что-то не так делаю?
вся поделка как минимум спорна, способ крепления трудно придумать более неудачный
из хорошего — автор провел время в творчестве и его устраивает результат,, за это респект
Х-надежность!
похоже что винты на срез работают или вообще на срез резьбовой частью, и скорее всего пластилин какой-нибудь.
если бы винты были получше/попрочнее и не работали на срез изначально, то начал бы закономерно унитожаться пластик вокруг них.
т.е. закономерный результат — улучшил пластиковую часть — портятся ее крепления. улучшил бы еще и крепления — началась бы снова портится пластиковая часть. и еще после пары таких итераций уже начали бы портится сами трубки. потому что вокруг них все стало прочнее, чем изначально было спроектировано.
и даже если считать, что оно изначально было идеально спроектировано, никто никому не мешал на каком-нибудь из этапов производства поменять нормальный качественный пластик на вторсырье с большим количеством мусора, которое самоутилизуется через несколько лет само по себе, даже без воздействия УФ и агрессивных сред. только лишь из-за одного этого может быть достаточно, твои пластиковые крепления жили годами, потому что они из относительно нормального пластика сделаны.
P.S. Что касается стула, то одна труба там уже ремонтированная. Так что прочность пластика на уровне.
Кстати печатная мебель сейчас реально вышла на новый уровень. Те же модульные системы например уже не выглядят как концепт, а реально просятся на реализацию. Ну и те же соты для настенных креплений, я и себе напечатал давно.
Гексагон, безусловно, на порядок красивее квадрата. Но расход материала на тот же объём полок — больше.
Тот самый случай, когда после этого следует возглас: «Зырьте ребза как я могу!»
но тросы… Что это за промышленный альпинизм :) Почему? видимо без тросов конструкция расползлась бы. Но автор стеснялся про это написать
Ну в общем, идея может быть хорошая, но получилось в итоге дичь и колхоз
Детали простые, такие хоть в традиционном каде, хоть в OpenSCAD делаются за 15 минут. Причем, если делать для себя, не обязательно иметь кучу настраиваемых параметров.
2. 3Д моделирование на много проще выглядит, без каких либо кодов — надо просто выбрать нормальные редакторы…
Не ну если устраивает, то ой конечно.
Тут есть еще один такой обзорщик, который делает из дерева подобное — из того города, где Мила Йовович воевала )
Ну мож реально кому-то и нравится, но с моей точки зрения это наилютейший колхоз, уж лучше просто не делать, но все ИМХО, конечно.
P.S. мне кажется отврезериовать углы на любом распиле и склеить их ПВА — и красивее и надежней будет.
Это уже промышленная задача с серьезным оборудованием.
Торцевая склейка, к слову, плохая идея.
P.S. делал полки у себя именно фрезеровокй + склейкой + шлифовка + покраc, метраил — березовая фанера.
зы у меня тоже был этот сборник Стругацких (черный который, с красно-золотым). Продал недавно
Ваша идея вполне перспективна для развития, но чисто как прототип. 3D печать — дороговато. На Али я бы такие штуки купил. Печатать не стал бы.
А генерация openscad с помощью ИИ вообще топ. Тоже пытался это сделать, но давно — пару поколений ИИ назад ) надо будет ещё попробовать, спасибо
Это простой ответ на вопрос, что курил автор.
youtu.be/w5P7E7muk9o?si=M3slcE57q6MaisD-
Ммммм… Тонко! Очень тонко!
6-ти угольники краёне неудобная штука, для полок особенно