Ramka do blokowania wydrukowana w 3D
5 stycznia 2024
Przez jaki艣 czas szyde艂kowa艂em ma艂e kwadraty, kt贸re potem zamierzam po艂膮czy膰 w sweter lub peleryn臋. U偶ywa艂em r贸偶nych rodzaj贸w w艂贸czki oraz r贸偶nych wzor贸w kwadrat贸w. Dodatkowo wi臋kszo艣膰 kwadrat贸w by艂a dosy膰 skurczona po uko艅czeniu. W takich sytuacjach stosuje si臋 blokowanie, czyli moczy si臋 gotowy kwadrat w wodzie, przypina si臋 tak, 偶eby by艂 odpowiednio rozci膮gni臋ty, oraz pozostawia do wyschni臋cia. Chcia艂em, 偶eby ka偶dy kwadrat mia艂 tak膮 sam膮 wielko艣膰, przez co chcia艂em zrobi膰 ramk臋 do blokowania takich kwadrat贸w, zamiast przypina膰 je np. szpilkami do gumowej maty.
Szuka艂em w jakim programie mog臋 zaprojektowa膰 ramk臋 i moj膮 uwag臋 przyci膮gn膮艂 OpenSCAD. Jest to program typu CAD, w kt贸rym model projektuje si臋 za pomoc膮 kodu.
Projekt 1
Screen z openscada
Za pierwszym razem wydrukowa艂em ramk臋 z ABSu, poniewa偶 chcia艂em 偶eby by艂a mocniejsza.
Niestety bardzo szybko jeden z bolc贸w na rogu ramki urwa艂 si臋. Dodatkowo ilo艣膰 bolc贸w by艂a zbyt ma艂a, przez co kwadrat nie by艂 wystarczaj膮co r贸wny.
Projekt 2
Doda艂em jeszcze po 2 bolce na ka偶dy bok w celu lepszego wyr贸wnania kwadrat贸w oraz lepszego roz艂o偶enia si艂. Dodatkowo bolce s膮 grubsze oraz o kszta艂cie 艣ci臋tego sto偶ka.
Teraz kwadraty wychodz膮 tak r贸wne, jak tego chcia艂em. NIestety ramka przegra艂a z najbardziej skurczonymi kwadratami i bolce dalej si臋 urywaj膮.
Projekt 3, ko艅cowy
Poblemem przez kt贸ry bolce si臋 艂ama艂y by艂o to, 偶e w tej samej p艂aszczy藕nie, przez kt贸r膮 przebiegaj膮 warstwy, modele s膮 najbardziej 艂amliwe. Rozwi膮zaniem by艂o wydrukowanie bolc贸w oddzielnie, tak, by 艂膮czenia przebiega艂y wzd艂u偶 bolc贸w.
Musia艂em w tym celu troch臋 zmodyfikowa膰 model, poniewa偶 teraz powinny si臋 w nim znajdowa膰 otwory, w kt贸re potem w艂o偶y si臋 bolce. Ustawi艂em w OpenSCADzie, 偶eby otwory mia艂y 艣rednic臋 o 0,25 mm wi臋ksz膮 ni偶 bolce (by艂a to rada jednego z hakier贸w).
Tym razem u偶y艂em filamentu PLA, poniewa偶 tylko taki by艂 za艂o偶ony w dzia艂aj膮cych wtedy drukarach. Ostatecznie model wyszed艂 wystarczaj膮co mocny, nawet z tym rodzajem filamentu. Po wydrukowaniu okaza艂o si臋, 偶e bolce s膮 za du偶e na otwory. Jednak spr贸bowa艂em wbi膰 je m艂otkiem, co uda艂o si臋 i w zasadzie wysz艂o lepiej ni偶 my艣la艂em. Pierwszy raz u偶y艂em m艂otka przy druku 3D (oczywi艣cie po zdj臋ciu modelu z drukarki) i zdziwi艂em si臋, 偶e wszystkie cz臋艣ci wytrzyma艂y uderzenia.
W ko艅cu uda艂o si臋 zaprojektowa膰 tak膮 ramk臋, jak膮 chcia艂em i kt贸ra rzeczywi艣cie dzia艂a. Poni偶ej jest kod 藕r贸d艂owy modelu, mo偶ecie go u偶y膰 i modyfikowa膰 (by zmieni膰 rozmiar wystarczy ustawi膰 warto艣膰 zmiennych).
size = 100;
frame_width = 10;
model_height = 10;
bolts_diameter = 3;
//bolt bases
for(x = [-size : size : size]) {
for(y = [-size : size : size]) {
difference() {
translate([x, y, 0]) cylinder(h=model_height + 4, d=frame_width + 10);
translate([x, y, -1]) cylinder(h=model_height + 8, d=bolts_diameter * 2 * 1.05);
//translate([x, y, -10]) cylinder(h = 50, r1=bolts_diameter, r2=bolts_diameter);
}
}
}
for(x = [-size: 2 * size : size]) {
for(y = [-size/2 : size : size/2]) {
difference() {
translate([x, y, 0]) cylinder(h=model_height + 4, d=frame_width + 10
);
translate([x, y, -1]) cylinder(h=model_height + 8, d=bolts_diameter * 2 * 1.05);
}
}
}
for(x = [-size/2 : size : size/2]) {
for(y = [-size: 2 * size : size]) {
difference() {
translate([x, y, 0]) cylinder(h=model_height + 4, d=frame_width + 10);
translate([x, y, -1]) cylinder(h=model_height + 8, d=bolts_diameter * 2 * 1.05);
}
}
}
//frame
difference() {
rotate([0, 0, 45]) translate([-size * sqrt(2), -(frame_width/2), 0]) cube([2 * size * sqrt(2), frame_width, model_height]);
for(x = [-size : size : size]) {
for(y = [-size : size : size]) {
translate([x, y, -1]) cylinder(h=model_height + 8, d=bolts_diameter * 2 * 1.05);
}
}
}
difference() {
rotate([0, 0, -45]) translate([-size * sqrt(2), -(frame_width/2), 0]) cube([2 * size * sqrt(2), frame_width, model_height]);
for(x = [-size : size : size]) {
for(y = [-size : size : size]) {
translate([x, y, -1]) cylinder(h=model_height + 8, d=bolts_diameter * 2 * 1.05);
}
}
}
difference() {
translate([-size, -size-(frame_width/2), 0]) cube([2 * size, frame_width, model_height]);
for(x = [-size : size / 2 : size])
{
translate([x, -size, -1]) cylinder(h=model_height + 8, d=bolts_diameter * 2 * 1.05);
}
}
difference() {
translate([-size, size-(frame_width/2), 0]) cube([2 * size, frame_width, model_height]);
for(x = [-size : size / 2 : size])
{
translate([x, size, -1]) cylinder(h=model_height + 8, d=bolts_diameter * 2 * 1.05);
}
}
difference() {
translate([size - (frame_width/2), -size, 0]) cube([frame_width, 2 * size, model_height]);
for(y = [-size : size / 2 : size])
{
translate([size, y, -1]) cylinder(h=model_height + 8, d=bolts_diameter * 2 * 1.05);
}
}
difference() {
translate([-size - (frame_width/2), -size, 0]) cube([frame_width, 2 * size, model_height]);
for(y = [-size : size / 2 : size])
{
translate([-size, y, -1]) cylinder(h=model_height + 8, d=bolts_diameter * 2 * 1.05);
}
}
//bolts
for (y = [0 : 40 : 40]) {
for(x = [0 : bolts_diameter + 10 : 8 * (bolts_diameter + 10)]) {
translate([x, y + 150, bolts_diameter]) rotate([90, 0, 0]) cylinder(h = 30, r1=bolts_diameter, r2=bolts_diameter);
}
}
Autor: @kotlovecrafta