Moved into fresh repository.
This commit is contained in:
commit
5a07b36702
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
*.gcode
|
||||
*.stl
|
5
README.md
Normal file
5
README.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
# A Parametrizeable pill dispenser
|
||||
|
||||
A printable object for storing pills that can be parametrized to fit most round tablets.
|
||||
|
||||
Originally designed between December 2019 and January 2020 to keep loose pills intact.
|
146
pill_dispenser.scad
Normal file
146
pill_dispenser.scad
Normal file
|
@ -0,0 +1,146 @@
|
|||
// short for "render hack"
|
||||
rhck=0.01;
|
||||
|
||||
// print quality/robustness/material params
|
||||
wall_t=1;
|
||||
bottom_t=0.6;
|
||||
clr=0.3;
|
||||
$fn=60;
|
||||
|
||||
// parameters regarding tablet size and amount
|
||||
diameter = 7.3; // diameter of compartment
|
||||
heigth = 3.4; // heigth of compartment
|
||||
amount = 8; // amount of compartments
|
||||
keyring=false; // adds a keyring
|
||||
splitting_aid=true; // splitting aid
|
||||
|
||||
|
||||
// implementation
|
||||
translate([0,15,0])color([0.6,0.7,0.8]){
|
||||
carrier(amount,diameter,heigth,with_splitter=splitting_aid);
|
||||
}
|
||||
translate([0,30,wall_t+clr])color([1,1,1,0.6]){
|
||||
shroud(amount,diameter,heigth,with_gap=1,with_keyring=keyring);
|
||||
}
|
||||
|
||||
// carrier: carries the actual contents
|
||||
module carrier(n=6,d_t=7,h_t=3.5,with_splitter=1){
|
||||
// derived params
|
||||
r_t=d_t/2;
|
||||
carrier_h=h_t+bottom_t;
|
||||
rad_end=r_t+wall_t;
|
||||
difference(){
|
||||
union(){
|
||||
cylinder(carrier_h+wall_t+0.5,rad_end,rad_end);
|
||||
translate([(n-1)*(d_t+wall_t),0,0]){
|
||||
cylinder(carrier_h,rad_end,rad_end);
|
||||
}
|
||||
cylinder(carrier_h+bottom_t,rad_end,rad_end);
|
||||
for(i=[1:n])translate([i*(d_t+wall_t),0,0]){
|
||||
cylinder(carrier_h,rad_end,rad_end);
|
||||
}
|
||||
translate([0,-r_t,0]){
|
||||
cube([(n)*(d_t+wall_t),d_t,carrier_h]);
|
||||
}
|
||||
}
|
||||
for(i=[0:n])translate([i*(d_t+wall_t),0,bottom_t]){
|
||||
if(i==0){
|
||||
// grip piece
|
||||
if(with_splitter){
|
||||
translate([0,0,h_t])cylinder(h_t+wall_t+1+rhck,r_t+clr/2,r_t+wall_t);
|
||||
}else{
|
||||
translate([0,0,h_t])cylinder(h_t+wall_t+1+rhck,r_t+clr/2,r_t+clr);
|
||||
}
|
||||
}else{
|
||||
// compartments
|
||||
cylinder(h_t+wall_t+1+rhck,r_t+clr/2,r_t+clr/2);
|
||||
}
|
||||
}
|
||||
}
|
||||
// edge of pill splitter
|
||||
if(with_splitter){
|
||||
translate([0,0,h_t])rotate([0,45,0]){
|
||||
cube([3*d_t/8,d_t+wall_t,3*d_t/8],center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// shroud: keeps the contents in the carrier
|
||||
module shroud(n=6,d_t=7,h_t=3.5,with_gap=1,with_keyring=0){
|
||||
// derived params
|
||||
r_t=d_t/2;
|
||||
carrier_h=h_t+bottom_t;
|
||||
rad_end=r_t+wall_t;
|
||||
inner_r=rad_end+clr;
|
||||
outer_r=inner_r+wall_t;
|
||||
inner_h=carrier_h+clr;
|
||||
shroud_h=wall_t+wall_t+carrier_h+clr;
|
||||
translate([0,0,-wall_t-clr]){
|
||||
difference(){
|
||||
union(){
|
||||
// positive of spring end
|
||||
cylinder(shroud_h,outer_r,outer_r);
|
||||
// rear end
|
||||
translate([((with_keyring)?(n+1.5):(n))*(d_t+wall_t),0,0]){
|
||||
cylinder(shroud_h,outer_r,outer_r);
|
||||
}
|
||||
// middle part
|
||||
translate([0,-outer_r,0]){
|
||||
cube([((with_keyring)?(n+1.5):(n))*(d_t+wall_t),outer_r*2,shroud_h]);
|
||||
}
|
||||
}
|
||||
|
||||
// cylindrical cutout on spring end
|
||||
translate([0,0,-rhck]){
|
||||
cylinder(shroud_h+2*rhck,inner_r,inner_r);
|
||||
}
|
||||
// rectanguar hollow
|
||||
translate([0,-inner_r,wall_t]){
|
||||
cube([n*(d_t+wall_t),inner_r*2,inner_h]);
|
||||
}
|
||||
// half-cylinder hollow
|
||||
translate([n*(d_t+wall_t),0,wall_t]){
|
||||
cylinder(inner_h,inner_r,inner_r);
|
||||
}
|
||||
|
||||
//cutout on spring end
|
||||
translate([0,-inner_r,-rhck])cube([inner_r/2,inner_r*2,shroud_h+rhck*2]);
|
||||
translate([0,-inner_r/2,-rhck])cube([inner_r,inner_r,shroud_h+rhck*2]);
|
||||
for(i=[0,1])mirror([0,i,0]){
|
||||
translate([inner_r/2,inner_r/2,-rhck]){
|
||||
cylinder(shroud_h+rhck*2,inner_r/2,inner_r/2);
|
||||
}
|
||||
}
|
||||
translate([-outer_r,0,-rhck])rotate([0,0,45]){
|
||||
translate([-inner_r,-inner_r,0]){
|
||||
cube([2*inner_r,2*inner_r,shroud_h+2*rhck]);
|
||||
}
|
||||
}
|
||||
|
||||
// optional keyring
|
||||
if(with_keyring)translate([(n+1.5)*(d_t+wall_t),0,-rhck]){
|
||||
cylinder(shroud_h+rhck*2,r_t,r_t);
|
||||
}
|
||||
|
||||
if(with_gap){
|
||||
// cutout for printability
|
||||
translate([0,0,shroud_h-wall_t-rhck]){
|
||||
translate([0,-inner_r+1.7,0]){
|
||||
cube([n*(d_t+wall_t),2*inner_r-(2*1.7),wall_t+2*rhck]);
|
||||
}
|
||||
translate([n*(d_t+wall_t),0,0]){
|
||||
cylinder(wall_t+2*rhck,inner_r-1.7,inner_r-1.7);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// cutaway to look inside (for modelling purposes)
|
||||
//translate([0,0,2])cube([100,100,100]);
|
||||
}
|
||||
|
||||
// spring ends
|
||||
for(i=[48,-48])rotate([0,0,i+180])translate([inner_r+wall_t/2,0,0]){
|
||||
cylinder(shroud_h,2*wall_t/3,2*wall_t/3);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue