Все таки хорошо, когда есть доступ к станочку лазерной резки и немного акрилика. Некоторое время назад я запилил себе вот такую вот подставку под пробирки.
Ну… На самом деле не пробирки, а банки от ‘бифидума бактерина’, коим я выправляю периодически убитый антибиотиками желудок. (А в случае жесткой ангины оные кушать приходится) В общем баночек осталось у меня до черта, и использую я их вместо химпосуды. Дешево и сердито. Подставка вышла примерно такая:
А вот исходничек в OpenSCADе под ‘пивной’ лицензией.
rows=2; cols=5; spacing=2; borderspace_w = 4; borderspace_l = 20; radius=8.5; drill_via=1.6; delta=0.1; TARGET=2; ////////////////////////// length = borderspace_l*2 + spacing + (radius*2+spacing) * cols; width = borderspace_w*2 + spacing + (radius*2+spacing) * rows; module vials(rows,cols,spacing,radius, borderspace_l, borderspace_w, shift) { length = borderspace_l*2 + spacing + (radius*2+spacing) * cols; width = borderspace_w*2 + spacing + (radius*2+spacing) * rows; echo("Vial holder: length: ",length, "width:", width); difference(){ for (j=[0:rows-1]) { for (i=[0:cols-1+ ( j % 2)]) { #translate( [ borderspace_w +radius+spacing + (radius*2+spacing)*j, -shift * (j %2 ) + borderspace_l +radius+spacing + (radius*2+spacing)*i ] ) circle(radius); } } } } difference() { square([width,length]); # translate ([width/4,borderspace_l/3])circle(drill_via); # translate ([3*width/4,borderspace_l/3])circle(drill_via); # translate ([width/4,length-borderspace_l/3])circle(drill_via); # translate ([3*width/4,length-borderspace_l/3])circle(drill_via); # translate ([2*width/20,length/2-radius-spacing/2])circle(drill_via); # translate ([2*width/20,length/2+radius+spacing/2])circle(drill_via); # translate ([18*width/20,length/2])circle(drill_via); } if ( TARGET==1 ) { translate([width+delta,0]) difference(){ square([width,length]); # vials(rows,cols,spacing,radius, borderspace_l, borderspace_w, radius); # translate ([width/4,borderspace_l/3])circle(drill_via); # translate ([3*width/4,borderspace_l/3])circle(drill_via); # translate ([width/4,length-borderspace_l/3])circle(drill_via); # translate ([3*width/4,length-borderspace_l/3])circle(drill_via); # translate ([2*width/20,length/2-radius-spacing/2])circle(drill_via); # translate ([2*width/20,length/2+radius+spacing/2])circle(drill_via); # translate ([18*width/20,length/2])circle(drill_via); } } else { translate([0,0,15]) difference(){ square([width,length]); # vials(rows,cols,spacing,radius, borderspace_l, borderspace_w, radius); # translate ([width/4,borderspace_l/3])circle(drill_via); # translate ([3*width/4,borderspace_l/3])circle(drill_via); # translate ([width/4,length-borderspace_l/3])circle(drill_via); # translate ([2*width/20,length/2-radius-spacing/2])circle(drill_via); # translate ([2*width/20,length/2+radius+spacing/2])circle(drill_via); # translate ([18*width/20,length/2])circle(drill_via); } }