Moved into fresh repository.

This commit is contained in:
Felizitas 2022-11-07 19:53:36 +01:00
commit 5a07b36702
3 changed files with 153 additions and 0 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
*.gcode
*.stl

5
README.md Normal file
View 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
View 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);
}
}
}