Tunable spoke count

This commit is contained in:
Neale Pickett 2022-08-30 10:14:50 -06:00
parent fdd57cc133
commit 0fdc8b779e
8 changed files with 424 additions and 27 deletions

View File

@ -37,7 +37,7 @@ so random website's color scheme works fine for me.
A "standard" poker chip is 39mm wide, and 3.5mm thick. A "standard" poker chip is 39mm wide, and 3.5mm thick.
A "miniature" poker chip is 22m wide, and 3.5mm thick. A "miniature" poker chip is 22m wide, and I don't know how thick.
There are boxes you can print that work will with these dimensions. There are boxes you can print that work will with these dimensions.

View File

@ -1,6 +1,26 @@
#! /bin/sh #! /bin/sh
cat parameters.json | jq -r ".parameterSets | keys | .[]" \ if [ ! -f "$1" ]; then
cat <<EOD
Usage: $0 PARAMETERS
Builds everything listed in parameter file PARAMETERS.
Example:
$0 mini-hex.json
EOD
return
fi
run () {
echo "=== $*"
"$@"
}
basedir=$(dirname $0)
mkdir -p build
cat $1 | jq -r ".parameterSets | keys | .[]" \
| while read param; do | while read param; do
openscad -o "${param}.stl" -p parameters.json -P "${param}" chip.scad run openscad -o "build/chip-${param}.stl" -p "$basedir/$1" -P "${param}" chip.scad
done done

View File

@ -10,8 +10,14 @@ depth = 0.5;
// Number of sides on your coin // Number of sides on your coin
sides = 6; // [3:360] sides = 6; // [3:360]
// How many holes (spokes) do you want?
holes = 24; // [0:12]
// Text to display // Text to display
TEXT = "100"; text = "100";
// The font must be installed locally on your system
font = "Droid Sans:style=Bold";
fontScale = ( fontScale = (
sides == 3 ? 0.50 sides == 3 ? 0.50
@ -34,12 +40,20 @@ module chip() {
difference() { difference() {
cube([diameter, diameter, height], center=true); cube([diameter, diameter, height], center=true);
difference() { difference() {
cylinder(h=height, d=diameter*0.8-0.0, center=true, $fn=sides); cylinder(h=height, d=diameter*0.8, center=true, $fn=sides);
cylinder(h=height, d=diameter*0.8-2, center=true, $fn=sides); cylinder(h=height, d=diameter*0.7, center=true, $fn=sides);
} }
} }
for (i = [0 : 30 : 360]) {
rotate(i) cube([diameter*0.8, diameter/8, height*0.7], center=true); if (holes == 0) {
cube([diameter, diameter, height*0.7], center=true);
} else {
spokeWidth = (diameter/holes) * 0.8;
rotate((sides+holes)%2?90:0) {
for (i = [0 : 360/holes : 360]) {
rotate(i) translate([diameter/2, 0, 0]) cube([diameter, spokeWidth, height*0.7], center=true);
}
}
} }
} }
} }
@ -49,5 +63,5 @@ difference() {
rotate(rotation) chip(); rotate(rotation) chip();
translate([0, 0, height/2-depth]) translate([0, 0, height/2-depth])
linear_extrude(height=depth+0.1, convexity = 10, twist = 0) linear_extrude(height=depth+0.1, convexity = 10, twist = 0)
text(text=TEXT, font="Droid Sans:style=Bold", size=fontSize, halign="center", valign="center"); text(text=text, font=font, size=fontSize, halign="center", valign="center");
} }

95
full-circle.json Normal file
View File

@ -0,0 +1,95 @@
{
"parameterSets": {
"full-circle-1": {
"diameter": 39,
"height": 3.5,
"sides": 360,
"holes": 6,
"text": "1"
},
"full-circle-2": {
"diameter": 39,
"height": 3.5,
"sides": 360,
"holes": 6,
"text": "2"
},
"full-circle-5": {
"diameter": 39,
"height": 3.5,
"sides": 360,
"holes": 6,
"text": "5"
},
"full-circle-10": {
"diameter": 39,
"height": 3.5,
"sides": 360,
"holes": 6,
"text": "10"
},
"full-circle-20": {
"diameter": 39,
"height": 3.5,
"sides": 360,
"holes": 6,
"text": "20"
},
"full-circle-25": {
"diameter": 39,
"height": 3.5,
"sides": 360,
"holes": 6,
"text": "25"
},
"full-circle-50": {
"diameter": 39,
"height": 3.5,
"sides": 360,
"holes": 6,
"text": "50"
},
"full-circle-100": {
"diameter": 39,
"height": 3.5,
"sides": 360,
"holes": 6,
"text": "100"
},
"full-circle-250": {
"diameter": 39,
"height": 3.5,
"sides": 360,
"holes": 6,
"text": "250"
},
"full-circle-500": {
"diameter": 39,
"height": 3.5,
"sides": 360,
"holes": 6,
"text": "500"
},
"full-circle-1000": {
"diameter": 39,
"height": 3.5,
"sides": 360,
"holes": 6,
"text": "1000"
},
"full-circle-2000": {
"diameter": 39,
"height": 3.5,
"sides": 360,
"holes": 6,
"text": "2000"
},
"full-circle-5000": {
"diameter": 39,
"height": 3.5,
"sides": 360,
"holes": 6,
"text": "5000"
}
}
}

95
full-hex.json Normal file
View File

@ -0,0 +1,95 @@
{
"parameterSets": {
"full-hex-1": {
"diameter": 39,
"height": 3.5,
"sides": 6,
"holes": 6,
"text": "1"
},
"full-hex-2": {
"diameter": 39,
"height": 3.5,
"sides": 6,
"holes": 6,
"text": "2"
},
"full-hex-5": {
"diameter": 39,
"height": 3.5,
"sides": 6,
"holes": 6,
"text": "5"
},
"full-hex-10": {
"diameter": 39,
"height": 3.5,
"sides": 6,
"holes": 6,
"text": "10"
},
"full-hex-20": {
"diameter": 39,
"height": 3.5,
"sides": 6,
"holes": 6,
"text": "20"
},
"full-hex-25": {
"diameter": 39,
"height": 3.5,
"sides": 6,
"holes": 6,
"text": "25"
},
"full-hex-50": {
"diameter": 39,
"height": 3.5,
"sides": 6,
"holes": 6,
"text": "50"
},
"full-hex-100": {
"diameter": 39,
"height": 3.5,
"sides": 6,
"holes": 6,
"text": "100"
},
"full-hex-250": {
"diameter": 39,
"height": 3.5,
"sides": 6,
"holes": 6,
"text": "250"
},
"full-hex-500": {
"diameter": 39,
"height": 3.5,
"sides": 6,
"holes": 6,
"text": "500"
},
"full-hex-1000": {
"diameter": 39,
"height": 3.5,
"sides": 6,
"holes": 6,
"text": "1000"
},
"full-hex-2000": {
"diameter": 39,
"height": 3.5,
"sides": 6,
"holes": 6,
"text": "2000"
},
"full-hex-5000": {
"diameter": 39,
"height": 3.5,
"sides": 6,
"holes": 6,
"text": "5000"
}
}
}

95
mini-circle.json Normal file
View File

@ -0,0 +1,95 @@
{
"parameterSets": {
"mini-circle-1": {
"diameter": 22,
"height": 2,
"sides": 360,
"holes": 4,
"text": "1"
},
"mini-circle-2": {
"diameter": 22,
"height": 2,
"sides": 360,
"holes": 4,
"text": "2"
},
"mini-circle-5": {
"diameter": 22,
"height": 2,
"sides": 360,
"holes": 4,
"text": "5"
},
"mini-circle-10": {
"diameter": 22,
"height": 2,
"sides": 360,
"holes": 4,
"text": "10"
},
"mini-circle-20": {
"diameter": 22,
"height": 2,
"sides": 360,
"holes": 4,
"text": "20"
},
"mini-circle-25": {
"diameter": 22,
"height": 2,
"sides": 360,
"holes": 4,
"text": "25"
},
"mini-circle-50": {
"diameter": 22,
"height": 2,
"sides": 360,
"holes": 4,
"text": "50"
},
"mini-circle-100": {
"diameter": 22,
"height": 2,
"sides": 360,
"holes": 4,
"text": "100"
},
"mini-circle-250": {
"diameter": 22,
"height": 2,
"sides": 360,
"holes": 4,
"text": "250"
},
"mini-circle-500": {
"diameter": 22,
"height": 2,
"sides": 360,
"holes": 4,
"text": "500"
},
"mini-circle-1000": {
"diameter": 22,
"height": 2,
"sides": 360,
"holes": 4,
"text": "1000"
},
"mini-circle-2000": {
"diameter": 22,
"height": 2,
"sides": 360,
"holes": 4,
"text": "2000"
},
"mini-circle-5000": {
"diameter": 22,
"height": 2,
"sides": 360,
"holes": 4,
"text": "5000"
}
}
}

95
mini-hex.json Normal file
View File

@ -0,0 +1,95 @@
{
"parameterSets": {
"mini-hexagon-1": {
"diameter": 22,
"height": 2,
"sides": 6,
"holes": 3,
"text": "1"
},
"mini-hexagon-2": {
"diameter": 22,
"height": 2,
"sides": 6,
"holes": 3,
"text": "2"
},
"mini-hexagon-5": {
"diameter": 22,
"height": 2,
"sides": 6,
"holes": 3,
"text": "5"
},
"mini-hexagon-10": {
"diameter": 22,
"height": 2,
"sides": 6,
"holes": 3,
"text": "10"
},
"mini-hexagon-20": {
"diameter": 22,
"height": 2,
"sides": 6,
"holes": 3,
"text": "20"
},
"mini-hexagon-25": {
"diameter": 22,
"height": 2,
"sides": 6,
"holes": 3,
"text": "25"
},
"mini-hexagon-50": {
"diameter": 22,
"height": 2,
"sides": 6,
"holes": 3,
"text": "50"
},
"mini-hexagon-100": {
"diameter": 22,
"height": 2,
"sides": 6,
"holes": 3,
"text": "100"
},
"mini-hexagon-250": {
"diameter": 22,
"height": 2,
"sides": 6,
"holes": 3,
"text": "250"
},
"mini-hexagon-500": {
"diameter": 22,
"height": 2,
"sides": 6,
"holes": 3,
"text": "500"
},
"mini-hexagon-1000": {
"diameter": 22,
"height": 2,
"sides": 6,
"holes": 3,
"text": "1000"
},
"mini-hexagon-2000": {
"diameter": 22,
"height": 2,
"sides": 6,
"holes": 3,
"text": "2000"
},
"mini-hexagon-5000": {
"diameter": 22,
"height": 2,
"sides": 6,
"holes": 3,
"text": "5000"
}
}
}

View File

@ -1,17 +0,0 @@
{
"parameterSets": {
"1": {"TEXT": "1"},
"2": {"TEXT": "2"},
"5": {"TEXT": "5"},
"10": {"TEXT": "10"},
"20": {"TEXT": "20"},
"25": {"TEXT": "25"},
"50": {"TEXT": "50"},
"100": {"TEXT": "100"},
"250": {"TEXT": "250"},
"500": {"TEXT": "500"},
"1000": {"TEXT": "1000"},
"2000": {"TEXT": "2000"},
"5000": {"TEXT": "5000"}
}
}