Compare commits

..

20 Commits

Author SHA1 Message Date
d9a90190f7 Generated models for left and right hand 2025-09-12 22:12:02 +02:00
0c68eedebe Create frame 2025-09-12 21:20:15 +02:00
0ff12f7b27 Updated case with space for rubber feet 2025-09-10 18:37:04 +02:00
d43b6f746a adjusting aux clearance 2025-08-31 22:50:17 +02:00
e5f475f01d Updated stl 2025-08-31 18:55:32 +02:00
a2f4acde16 Added missing clearance on length from top to aux 2025-08-31 18:55:11 +02:00
5d9b910e2f Fixed clearance for aux 2025-08-31 18:51:13 +02:00
bdc12079d2 case-right model update 2025-08-31 16:50:06 +02:00
8943ce30af fixed aux body clearance 2025-08-31 16:48:10 +02:00
5debc685dd Fixed pico clearance 2025-08-31 16:31:10 +02:00
69f7dbaea7 Adjusted pico usb hole and shell height 2025-08-31 16:26:43 +02:00
e2f74cb0a4 fix pico pcb clearance 2025-08-31 16:07:51 +02:00
d5a13970dd wip aligning pico clearance 2025-08-24 09:16:46 +02:00
2cb2fee571 added pico board 2025-08-23 22:13:13 +02:00
870351239b added clearance on bottom shim 2025-08-23 21:40:40 +02:00
dabde65968 Added pcb 2025-08-23 19:34:35 +02:00
29ed5e8e9a Added dampener on top of case 2025-08-23 18:44:25 +02:00
4780ff2e4f Wip case 2025-08-23 17:22:59 +02:00
a125d0f1a5 Fixed offsets on pico 2025-08-23 15:23:23 +02:00
924586b3f7 Fixed offsets on aux 2025-08-23 15:20:16 +02:00
10 changed files with 206 additions and 59 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -9,10 +9,11 @@ $cut = $holes/2*-1;
$clearance = 0.2;
$switchDistance = $width+ $space;
$shellWidth = 6;
// shell width is set to double of actual shell width and results in haft of the actual value due to division by 2.
// this needs to be fixed
$shellWidth = 12;
$shellHeight = 3.5 + $clearance;
$magnetWidth = 4;
$magnetHeight = 2;
$columns = 6;
@@ -23,7 +24,36 @@ $fingerStep = 5;
$xBase = (($width + $space) * $columns) + $space;
$yBase = (($length + $space) * $rows) + $space;
$pcbHeight = 1.6;
$dampenerHeight = 1;
$pcbDampenerOffset = $pcbHeight + $dampenerHeight;
points = [
[0,0],
[0, $switchDistance * $rows],
[$switchDistance * 2, $switchDistance * $rows],
[$switchDistance * 2, $switchDistance * $rows + $fingerStep],
[$switchDistance * 3, $switchDistance * $rows + $fingerStep],
[$switchDistance * 3, $switchDistance * $rows],
[$switchDistance * 4, $switchDistance * $rows],
[$switchDistance * 4, $switchDistance * $rows - $fingerStep],
[$switchDistance * 6, $switchDistance * $rows - $fingerStep],
[$switchDistance * 6, 0 - $fingerStep],
[$switchDistance * 4, 0 - $fingerStep],
[$switchDistance * 4, 0],
[$switchDistance * 3, 0],
[$switchDistance * 3, 0 + $fingerStep],
[$switchDistance * 2, 0 + $fingerStep],
[$switchDistance * 2, 0],
];
picoUsbBody = [8, 5.66, 2.65];
jackBody = [15,6.15,5.3];
$footRadius = (6.4 + $clearance) /2;
$footHeight = 1.8;
module pin(){
cylinder(h=$holes, r=1, center=false);
}
@@ -91,61 +121,102 @@ module leftTopDampener(){
module topDampeners(){
translate([10,0,0]){
translate([1.5,1.5,0]){
rightTopDampener();
}
translate([-10,0,0]){
leftTopDampener();
//translate([-10,0,0]){
//leftTopDampener();
//}
}
}
module case(){
// Then adjust the shim, aux and pico.
// Last add magnets, don't forget the clearance.
$baseHeight = 6;
$magnetWidth = 4;
$magnetRadius = ($magnetWidth / 2) + $clearance/2;
$magnetHeight = 2 + $clearance;
module magnets(){
cylinder(h=$magnetHeight + $clearance, r=$magnetWidth + $clearance / 2);
$offset = ($shellWidth / 2 / 2) -0.8 ;
// Set Z-origin to align with shell top
translate([0, 0, $shellHeight -$magnetHeight]){
translate(points[0] + [-$offset, -$offset])
cylinder(h=$magnetHeight, r=$magnetRadius);
translate(points[1] + [-$offset, $offset])
cylinder(h=$magnetHeight, r=$magnetRadius);
translate(points[8] + [$offset, $offset])
cylinder(h=$magnetHeight, r=$magnetRadius);
translate(points[9] + [$offset, -$offset])
cylinder(h=$magnetHeight, r=$magnetRadius);
}
}
$baseHeight = 7.6;
module aux(){
$topToCenterOfAux = 15.4;
$auxHoleRadius = 4;
$topLeftOfPcbToCenterOfAux = 15.4;
$measurementPcbPlaneToCenterOfAux = 2.8;
$auxClearanceFromBase = $measurementPcbPlaneToCenterOfAux - $dampenerHeight;
$auxHoleRadius = 3.15 + $clearance *2;
$auxHoleLength = 17 + $shellWidth/2;
$auxCableRadius = 4.15 + $clearance *2;
// Move to the position along the wall the aux will be
translate([-($shellWidth/2 + $clearance),$switchDistance * $rows - $topToCenterOfAux,0])
translate([-($shellWidth/2 + $clearance),$switchDistance * $rows - $topLeftOfPcbToCenterOfAux + $clearance,-$auxClearanceFromBase])
// Make cylinder perpendicular with the wall
rotate([0,90,0])
cylinder(h=$auxHoleLength,r=$auxHoleRadius);
// TODO: move magnets to somewhere else.
translate([0,0,5])
magnets();
rotate([0,90,0]){
// Aux component clearance
//cylinder(h=$auxHoleLength,r=$auxHoleRadius);
rotate([0,270,0])
translate([$shellWidth + $clearance*2,0,0])
cube([jackBody.x + $clearance*20, jackBody.y + $clearance*2, jackBody.z + $clearance*2], center=true);
// Aux cable housing clearance
translate([0,0, -$clearance*2])
cylinder(h=($shellWidth/2) + ($clearance * 2),r=$auxCableRadius );
}
}
//TODO: Continue aligning pico clearance
module pico(){
$edgeToCenterOfUsb = 23;
$usbHoleWidth = 12;
$usbHoleHeight = 9;
$usbOffsetFromPcb = 2.4;
$picoPcbClearanceFromBase = 3.8;
$topLeftEdgeOfPcbToCenterOfUsb = 27.7;
$usbHoleWidth = 11.15+($clearance*2);
$usbHoleHeight = 7 + ($clearance *2);
$usbOffsetFromPcb = 4.1 - $pcbHeight;
$picoPcbClearanceFromBase = 5.4 - $pcbHeight;
$picoWidth = 25;
$picoLength = 53;
// Move to position along the wall the usb will be
translate([$edgeToCenterOfUsb - ($usbHoleWidth/2), $switchDistance * $rows, -$usbOffsetFromPcb]){
union() {
// Create a hole for the usb cable to go through
cube([$usbHoleWidth,$shellWidth,$usbHoleHeight]);
// Move inside the shell
translate([-(($picoWidth - $usbHoleWidth)/2),$clearance - $picoLength, +$usbOffsetFromPcb - $picoPcbClearanceFromBase])
// Make clearance downwards for the pico board
cube([$picoWidth,$picoLength, $picoLength]);
}
// Hole should be centered on the pico usb
holeOffset = -$usbOffsetFromPcb - (($usbHoleHeight - picoUsbBody.z )/2);
translate([
$topLeftEdgeOfPcbToCenterOfUsb - ($usbHoleWidth/2),
$switchDistance * $rows,
holeOffset
]){
// Create a hole for the usb cable to go through
cube([
$usbHoleWidth,
$shellWidth,
$usbHoleHeight
]);
// Move inside the shell, nullify the usb clearance from pcb and move down according to pico clearance
translate([
-(($picoWidth - $usbHoleWidth)/2),
$clearance - $picoLength,
-holeOffset - $picoPcbClearanceFromBase
])
// Make clearance downwards for the pico board
cube([
$picoWidth,
$picoLength,
$picoPcbClearanceFromBase + $clearance
]);
}
}
module case(){
// Then adjust the shim, aux and pico.
// Last add magnets, don't forget the clearance.
module shim(){
$shimPoints = [
[0 - $shellWidth / 2, - $baseHeight],
[$switchDistance * $columns + $shellWidth/2 + $clearance, 0],
[$switchDistance * $columns + $shellWidth/2 + $clearance, - $baseHeight]
[$switchDistance * $columns + $shellWidth/2 + $clearance, -$clearance],
[$switchDistance * $columns + $shellWidth/2 + $clearance, - ($baseHeight + $clearance)]
];
// Face z/x-plane
rotate([90,0,0])
@@ -156,24 +227,6 @@ module case(){
polygon($shimPoints);
}
module body(){
points = [
[0,0],
[0, $switchDistance * $rows],
[$switchDistance * 2, $switchDistance * $rows],
[$switchDistance * 2, $switchDistance * $rows + $fingerStep],
[$switchDistance * 3, $switchDistance * $rows + $fingerStep],
[$switchDistance * 3, $switchDistance * $rows],
[$switchDistance * 4, $switchDistance * $rows],
[$switchDistance * 4, $switchDistance * $rows - $fingerStep],
[$switchDistance * 6, $switchDistance * $rows - $fingerStep],
[$switchDistance * 6, 0 - $fingerStep],
[$switchDistance * 4, 0 - $fingerStep],
[$switchDistance * 4, 0],
[$switchDistance * 3, 0],
[$switchDistance * 3, 0 + $fingerStep],
[$switchDistance * 2, 0 + $fingerStep],
[$switchDistance * 2, 0],
];
union() {
linear_extrude($shellHeight){
difference(){
@@ -187,14 +240,108 @@ module case(){
}
}
}
module feet(){
module foot() {
cylinder(h = $footHeight, r = $footRadius, center = true);
}
// Inner side
translate([0,0,$footHeight/2-$baseHeight]){
translate([points[0].x, points[0].y, 0])
foot();
translate([points[1].x, points[1].y, 0])
foot();
}
// Outer side
translate([0, 0, -1]){
translate([points[9].x, points[9].y, 0])
foot();
translate([points[8].x, points[8].y, 0])
foot();
}
}
difference(){
body();
shim();
pico();
aux();
magnets();
feet();
}
}
module pcb() {
picoBody = [21, 51.5, 1];
module jack() {
translate([0,jackBody.y/2, jackBody.z/2])
rotate([0,90])
cylinder(r=2, h=2.2);
translate([2.2,0,0])
color("#333")
cube(jackBody);
}
module pcbPico(){
translate([0,-1.6,0])
color("#00aa00")
cube(picoBody);
translate([(picoBody.x - picoUsbBody.x)/2, picoBody.y - picoUsbBody.y, -picoUsbBody.z])
color("#666")
cube(picoUsbBody);
}
translate([0,0,$dampenerHeight]) {
color("#008800")
linear_extrude($pcbHeight)
polygon(points);
translate(points[1] + [0, -12.3 - jackBody.y])
translate([0,0,-jackBody.z])
color("#333")
jack();
translate(points[1] + [27.7 - picoBody.x/2, -picoBody.y])
translate([0,0,-picoBody.z])
pcbPico();
}
}
module lid(){
difference(){
//topDampeners();
case();
translate([0,0,$shellHeight]){
union(){
linear_extrude($magnetHeight+0.2){
difference(){
offset(r=$shellWidth/2 + $clearance, chamfer=true) polygon(points);
offset(r=$clearance) polygon(points);
}
}
linear_extrude(1){
difference(){
offset(r=$clearance) polygon(points);
offset(r=-1.5, chamfer=true) polygon(points);
}
}
}
}
translate([0,0,$magnetHeight-0.1])
magnets();
}
}
module botDampener(){
difference(){
topDampeners();
aux();
translate([0,0,2])
pico();
}
}
mirror([1,0,0]){
*%pcb();
*topDampeners();
*botDampener();
*case();
lid();
}