Compare commits

...

22 Commits

Author SHA1 Message Date
8ac85fb99f Simplified cover for centered logo 2023-08-26 23:19:59 +02:00
cf1be92010 Redesign for lid and mounting of charging board 2023-08-26 23:18:33 +02:00
Deon Spengler
84049b04bd Hinge support 2023-08-10 15:40:14 +02:00
Deon Spengler
e555591ca0 Further simplify 2023-08-10 15:39:22 +02:00
fcdd1b5b66 simplify to one frame and cover 2023-08-10 11:48:27 +02:00
85894347e0 Battery cover rail 2023-06-24 19:45:33 +02:00
2cd05f0a67 Hinge updated 2023-06-23 01:08:11 +02:00
Deon Spengler
d2a15b8387 Improve sloped walls 2023-06-22 15:41:36 +02:00
17c5e8ed78 Start of hinge designe 2023-06-21 00:56:58 +02:00
e043705df8 Remove magic numbers for usb and battery compartments 2023-06-20 23:04:46 +02:00
Deon Spengler
a58d172b9b WIP: Remove magic numbers 2023-06-20 15:28:58 +02:00
Deon Spengler
36e3cc53ec Replace stl logo with svg logo 2023-06-19 14:44:13 +02:00
ea93aaa38d Initial usb cover 2023-06-19 00:56:13 +02:00
2842c3e517 Initial battery cover 2023-06-19 00:56:02 +02:00
defb485e03 Initial rpi4 cover 2023-06-19 00:55:06 +02:00
a134fb6cb0 Remove mount support module. Create usb and battery module 2023-06-17 16:35:36 +02:00
e4648ecb6f Build out more frame supports 2023-06-17 12:13:58 +02:00
20d361b4b5 Change border to thinkness and remove redundent module 2023-06-16 12:09:56 +02:00
e8619a890d Add cross support and increase size 2023-06-16 11:29:50 +02:00
492d9d0ee0 Initial display 2023-06-15 23:57:56 +02:00
0980f7a092 Add display touch support 2023-06-15 21:46:09 +02:00
cad86e5f31 Add gnuk security token 2023-06-15 21:42:33 +02:00
4 changed files with 398 additions and 2 deletions

View File

@@ -6,8 +6,9 @@ This cyberdeck is mostly 3D printed and includes the following stand out feature
* Air quality sensor
* GPS used to create a stratum level 1 time server
* Integrated split keyboard powered by a Raspberry Pi Pico
* Ultrawide main display
* Ultrawide main display with touch support
* Addtional oled display for sensor information and notifications
* gnuk hardware security token
Software
@@ -20,4 +21,3 @@ Ach linux is used as the base operating systems.
* foot (terminal emulator with sixel support and includes a server / client architechure)
* ranger (terminal based file manager)
* gomuks (matrix terminal client)

53
cad/display-cover.scad Normal file
View File

@@ -0,0 +1,53 @@
$fn=32*2;
thickness=1.6;
width=208.2;
depth=70.2;
height=10;
// cover
difference(){
translate([0, 0, 0])
chamferCube(width+(thickness*2), depth+(thickness*2), height+thickness, 8, [0, 0, 1, 1], [0, 1, 1, 0], [0, 0, 0, 0]);
translate([thickness, thickness, 0])
chamferCube(width, depth, height, 8, [0, 0, 1, 1], [0, 1, 1, 0], [0, 0, 0, 0]);
translate([(width+(thickness*2))/2, (depth+(thickness*2))/2, height])
cylinder(h=thickness, d=41.5);
}
// logo
translate([(width+(thickness*2))/2, (depth+(thickness*2))/2, height])
linear_extrude(height=1.6)
resize([42, 42, 0])
import(file="mk-logo.svg", center=true);
module chamferCube(sizeX, sizeY, sizeZ, chamferHeight, chamferX, chamferY, chamferZ) {
chamferX = (chamferX == undef) ? [1, 1, 1, 1] : chamferX;
chamferY = (chamferY == undef) ? [1, 1, 1, 1] : chamferY;
chamferZ = (chamferZ == undef) ? [1, 1, 1, 1] : chamferZ;
chamferCLength = sqrt(chamferHeight * chamferHeight * 2);
difference() {
cube([sizeX, sizeY, sizeZ]);
for(x = [0 : 3]) {
chamferSide1 = min(x, 1) - floor(x / 3); // 0 1 1 0
chamferSide2 = floor(x / 2); // 0 0 1 1
if(chamferX[x]) {
translate([-0.1, chamferSide1 * sizeY, -chamferHeight + chamferSide2 * sizeZ])
rotate([45, 0, 0])
cube([sizeX + 0.2, chamferCLength, chamferCLength]);
}
if(chamferY[x]) {
translate([-chamferHeight + chamferSide2 * sizeX, -0.1, chamferSide1 * sizeZ])
rotate([0, 45, 0])
cube([chamferCLength, sizeY + 0.2, chamferCLength]);
}
if(chamferZ[x]) {
translate([chamferSide1 * sizeX, -chamferHeight + chamferSide2 * sizeY, -0.1])
rotate([0, 0, 45])
cube([chamferCLength, chamferCLength, sizeZ + 0.2]);
}
}
}
}

241
cad/display-frame.scad Normal file
View File

@@ -0,0 +1,241 @@
$fn=32*2;
thickness=1.6;
width=208.2;
depth=70.2;
height=8;
display_frame();
module display_frame(){
difference(){
// main frame
translate([0, 0, 0])
cube([width+(thickness*2), depth+(thickness*2), height+20]);
translate([thickness, thickness, 0])
cube([width, depth, height+20]);
// hdmi gap
translate([thickness+95, depth+thickness, height])
cube([25, 0.8, 17]);
// usb cutouts
translate([0, 47.5, height+thickness+8.5])
cube([thickness, 14, 6.5]);
translate([0.8, 46.5, height+thickness])
cube([thickness, 16, 8]);
// usb-c
translate([0, 35, height+thickness+8])
hull(){
translate([0, 0, 2])
rotate([0, 90, 0])
cylinder(h=thickness, d=4);
cube([thickness, 7, 4]);
translate([0, 7, 2])
rotate([0, 90, 0])
cylinder(h=thickness, d=4);
}
// micro usb
translate([0, 22.5, height+thickness+8])
cube([thickness, 8, 3.5]);
// data cables
translate([(width+(thickness*2))/2-25, 0, 19])
rotate([-90, 0, 0])
cylinder(h=thickness, d=3.5);
translate([(width+(thickness*2))/2+25, 0, 19])
rotate([-90, 0, 0])
cylinder(h=thickness, d=3.5);
// lid mounting holes
translate([thickness+30, 0, 23])
rotate([-90, 0, 0])
cylinder(h=depth+(thickness*2), d=2);
translate([width+thickness-30, 0, 23])
rotate([-90, 0, 0])
cylinder(h=depth+(thickness*2), d=2);
}
// inner display catch
translate([thickness, thickness, 1.5]){
padding=5;
ledge=0.8;
difference(){
translate([padding, 0, 0])
cube([width-(padding*2), depth, thickness]);
translate([0, ledge, 0])
cube([width, depth-(ledge*2), thickness]);
}
// hinge support
translate([5, -0.6, 0])
cube([width-10, thickness, 15]);
}
// usb compartment
translate([0, 0, 0])
usb_compartment();
// battery compartment
translate([146.6, 0, 0])
battery_compartment();
// display hinge
translate([(width+thickness*2)/2, -9, 6.57])
rotate([90, 270, 0])
male_hinge();
}
module usb_compartment(){
usb_width=41;
usb_height=4;
hole=6;
hole_x=36+thickness;
hole_y=5.6+thickness;
difference(){
translate([0, 0, height])
cube([usb_width+thickness, depth+(thickness*2), usb_height+thickness]);
translate([0, thickness, height+thickness])
cube([30, depth, usb_height]);
translate([30+thickness, thickness, height])
cube([11, depth, usb_height]);
translate([hole_x, hole_y-0.5, height+usb_height])
cylinder(h=thickness, d=hole);
translate([hole_x-0.5, depth+(thickness*2)-hole_y, height+usb_height])
cylinder(h=thickness, d=hole);
}
// pcb mount
translate([thickness+12, 12, height+thickness])
difference(){
cylinder(h=7, d=4);
cylinder(h=7, d=1.6);
}
translate([thickness+7, 30.8, height+thickness])
difference(){
cylinder(h=7, d=4);
cylinder(h=7, d=1.6);
}
translate([thickness+11.8, 42.8, height+thickness])
difference(){
cylinder(h=7, d=4);
cylinder(h=7, d=1.6);
}
translate([thickness+10.5, 7.1, height+thickness])
cube([3, thickness, 10]);
translate([thickness+11.25, 5.1, height+thickness])
cube([thickness, 3, 10]);
translate([thickness+10.5, 62.1, height+thickness])
cube([3, thickness, 10]);
translate([thickness+11.25, 62.6, height+thickness])
cube([thickness, 3, 10]);
// screw mount
translate([hole_x, hole_y-0.5, height+4+thickness]){
difference(){
cylinder(h=1.6, d=10);
cylinder(h=1.6, d=2.5);
}
}
translate([hole_x-0.5, depth+(thickness*2)-hole_y, height+4+thickness]){
difference(){
cylinder(h=1.6, d=10);
cylinder(h=1.6, d=2.5);
}
}
}
module battery_compartment(){
battery_width=63.2;
battery_height=4;
hole=6;
hole_x=5;
hole_y=5.6+thickness;
difference(){
translate([0, 0, height])
cube([battery_width+thickness, depth+(thickness*2), battery_height+thickness]);
translate([0, thickness, height])
cube([battery_width, depth, battery_height]);
translate([hole_x, hole_y-0.5, height+4])
cylinder(h=thickness, d=hole);
translate([hole_x, depth+(thickness*2)-hole_y, height+battery_height])
cylinder(h=thickness, d=hole);
}
// battery stop
translate([-1.2, (depth+(thickness*2))/2-5, height+battery_height])
cube([thickness, 10, 16]);
// screw mount
translate([hole_x, hole_y-0.5, height+4+thickness]){
difference(){
cylinder(h=1.6, d=10);
cylinder(h=1.6, d=2.5);
}
}
translate([hole_x, depth+(thickness*2)-hole_y, height+4+thickness]){
difference(){
cylinder(h=1.6, d=10);
cylinder(h=1.6, d=2.5);
}
}
}
module tab(length, thickness){
difference(){
union(){
translate([0,0,-5])
cube([length, thickness, 10], center=true);
rotate([90,0,0])
cylinder(h=thickness, d=length, center=true);
}
rotate([90,0,0])
cylinder(h=20, d=5, center=true);
}
}
module male_hinge(){
th=2.90; //Thickness of solid tabs
sp=3.10; //Width of seperation gap
w=20.94; //Width of base
l=13.14; //length of base
translate([0, 0, -10+th/2]){
hull(){
cube([l, w, th], center=true);
translate([-l/2, -w/2-4, -2])
cube([l+4, w+8, 0.1]);
}
}
//generating 3 tabs with sp spacing
translate([0, -sp*2, 0])
tab(l, th);
translate([0, sp*2, 0])
tab(l, th);
translate([0, 0, 0])
tab(l, th);
}

102
cad/mk-logo.svg Normal file
View File

@@ -0,0 +1,102 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="2051.000000pt" height="2051.000000pt" viewBox="0 0 2051.000000 2051.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,2051.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M9705 20489 c-1420 -81 -2760 -436 -4013 -1063 -1991 -996 -3611
-2615 -4606 -4603 -845 -1689 -1199 -3544 -1041 -5448 106 -1266 462 -2530
1039 -3683 802 -1602 2008 -2968 3498 -3963 1334 -890 2818 -1443 4403 -1643
683 -86 1438 -100 2150 -41 3076 256 5913 1940 7646 4537 922 1382 1487 2939
1663 4578 66 611 74 1352 21 1980 -260 3075 -1943 5911 -4531 7637 -405 269
-734 459 -1164 672 -1252 620 -2572 963 -4004 1041 -212 12 -847 11 -1061 -1z
m1045 -920 c2156 -119 4169 -962 5772 -2418 174 -159 517 -502 665 -667 770
-859 1369 -1837 1783 -2913 546 -1419 731 -2979 534 -4511 -183 -1433 -703
-2803 -1522 -4015 -132 -196 -355 -497 -497 -670 -111 -136 -363 -425 -371
-425 -2 0 3 17 12 38 51 120 169 415 208 521 197 528 254 1090 165 1635 -81
499 -302 1046 -600 1481 -412 604 -1182 1305 -1837 1674 -538 302 -1315 462
-2247 461 -376 0 -545 -12 -1235 -85 -1244 -133 -1596 -159 -2165 -159 -585 1
-909 39 -1230 146 -588 196 -1098 626 -1340 1130 -100 209 -137 394 -138 678
0 198 22 357 74 534 37 122 113 286 173 371 80 111 74 141 -47 237 -131 102
-211 222 -264 395 -25 83 -27 100 -27 288 -1 210 13 340 56 515 31 128 46 162
72 158 25 -4 27 -33 7 -178 -26 -200 22 -492 134 -820 106 -307 219 -445 460
-561 287 -138 710 -168 1175 -83 290 53 453 116 1000 384 223 109 446 213 495
231 82 29 100 32 205 32 254 0 628 -126 1150 -387 669 -334 893 -508 1434
-1111 381 -424 572 -580 806 -659 103 -34 186 -46 337 -47 174 -2 242 -11 535
-68 413 -81 720 -118 911 -108 62 3 128 11 147 18 56 19 158 91 255 180 131
119 213 186 253 205 104 49 147 -71 257 -727 96 -570 152 -813 261 -1131 171
-499 423 -918 766 -1274 234 -243 456 -385 707 -452 83 -22 118 -25 261 -26
186 -1 227 8 364 75 146 73 278 182 405 335 74 89 151 207 151 230 0 39 -61
22 -250 -66 -232 -109 -388 -144 -640 -144 -186 0 -261 13 -370 66 -130 63
-288 254 -307 370 -13 83 36 87 282 23 206 -53 325 -64 490 -45 416 47 701
234 878 577 131 253 182 568 128 778 -73 279 -296 526 -540 599 -103 30 -180
17 -207 -36 -24 -46 -9 -71 79 -134 234 -167 281 -256 281 -529 -1 -165 -17
-281 -60 -416 -76 -243 -194 -354 -449 -420 -80 -21 -112 -24 -285 -24 -168 0
-207 4 -283 23 -203 51 -322 116 -452 246 -252 254 -431 628 -575 1201 -96
381 -196 667 -349 991 -189 402 -267 508 -548 746 -177 150 -197 172 -182 200
27 51 146 61 331 29 59 -10 129 -29 155 -42 119 -58 208 -201 228 -369 13
-104 42 -119 152 -79 69 26 121 76 157 152 34 72 46 129 56 265 11 140 26 185
95 292 l56 85 -3 155 -3 155 69 115 c84 139 110 202 101 247 -3 18 -40 83 -81
145 -41 61 -73 119 -72 127 3 13 25 17 118 22 146 8 136 6 154 25 52 51 -23
253 -162 439 -181 242 -320 360 -494 423 -59 21 -92 26 -168 26 -108 1 -126
-6 -272 -109 -99 -69 -135 -79 -273 -72 -183 8 -357 78 -565 228 -238 171
-334 227 -460 267 -96 31 -166 40 -350 47 -290 10 -435 58 -623 202 -87 67
-489 455 -531 512 -47 63 -66 111 -66 161 0 134 155 216 480 254 144 17 173
29 190 82 14 43 6 94 -32 204 -73 208 -158 344 -315 504 -223 226 -503 404
-719 458 -79 19 -110 21 -274 18 -310 -6 -344 -5 -387 17 -50 26 -93 91 -138
210 -65 175 -130 297 -180 341 -80 70 -217 111 -440 131 -55 5 -365 9 -690 9
-571 0 -686 4 -814 33 -66 15 -147 56 -176 90 -52 63 -46 111 31 240 88 145
92 179 18 179 -55 0 -136 -30 -213 -80 -86 -56 -223 -191 -279 -274 -90 -137
-187 -216 -265 -216 -24 0 -31 8 -65 83 -65 140 -111 165 -357 192 -534 61
-897 261 -986 545 -27 84 -29 238 -6 330 51 195 191 360 392 460 140 70 231
93 380 94 219 2 320 -47 526 -256 75 -76 141 -138 147 -138 57 0 35 216 -43
424 -20 54 -35 99 -33 101 9 9 491 50 678 58 161 7 761 4 910 -4z m-3667 -589
c-8 -61 16 -253 47 -375 101 -391 189 -500 589 -728 86 -49 166 -98 179 -110
31 -29 24 -58 -18 -80 -30 -15 -52 -18 -145 -14 -90 4 -131 12 -225 41 -256
81 -477 129 -785 171 -463 64 -700 138 -751 237 -36 69 -3 159 96 258 80 81
160 135 265 177 138 56 228 42 401 -62 100 -61 138 -69 155 -31 32 69 -102
297 -213 364 -16 9 -28 19 -28 23 0 3 24 15 53 27 305 119 364 142 374 142 7
0 9 -13 6 -40z m-1673 -857 c6 -49 20 -124 31 -168 56 -231 166 -316 603 -464
261 -89 367 -111 564 -118 83 -3 152 -9 152 -14 0 -4 -14 -19 -31 -34 -120
-100 -308 -130 -1179 -185 -324 -20 -360 -24 -501 -60 -344 -88 -728 -334
-1069 -686 -203 -210 -344 -391 -601 -776 -193 -289 -274 -396 -340 -448 -120
-95 -204 -57 -343 154 -90 137 -98 144 -130 123 -67 -45 -116 -243 -99 -407
17 -167 63 -241 239 -381 125 -100 144 -123 144 -174 0 -71 -39 -124 -266
-355 -206 -211 -277 -316 -368 -547 -63 -161 -124 -425 -155 -668 -34 -260
-36 -320 -36 -1210 -1 -932 -2 -972 -46 -1325 -78 -627 -249 -1070 -457 -1183
-55 -30 -142 -52 -247 -62 -84 -8 -122 -26 -131 -61 -15 -60 117 -244 224
-313 125 -80 303 -122 512 -123 315 0 441 66 652 346 112 149 137 176 160 176
26 0 41 -36 132 -314 46 -138 107 -307 136 -376 168 -401 452 -852 879 -1400
135 -172 177 -244 168 -289 -3 -16 -24 -56 -46 -90 -57 -89 -66 -137 -65 -336
2 -210 16 -399 51 -665 34 -271 36 -448 6 -545 -26 -81 -67 -136 -126 -168
-38 -20 -56 -22 -182 -22 -132 1 -150 4 -332 48 -204 51 -233 52 -260 11 -14
-21 -13 -28 1 -70 50 -147 284 -369 473 -448 138 -58 206 -71 373 -71 133 0
165 3 226 22 256 81 447 372 505 770 32 223 65 340 125 439 78 130 158 180
279 172 122 -9 225 -77 304 -202 96 -152 139 -309 166 -598 18 -194 29 -240
112 -448 51 -127 67 -180 71 -231 6 -87 -10 -120 -102 -202 -41 -37 -77 -78
-80 -92 -9 -37 18 -93 51 -106 93 -36 287 70 374 204 53 82 89 180 149 407 58
218 77 263 120 285 58 30 108 19 280 -59 124 -57 210 -78 525 -126 322 -50
442 -72 620 -115 540 -130 843 -347 926 -662 27 -101 29 -278 4 -378 -104
-431 -583 -671 -1465 -735 -900 -65 -2208 194 -3015 598 -212 106 -227 117
-466 359 -329 335 -540 579 -817 948 -761 1015 -1307 2168 -1601 3385 -135
559 -214 1091 -251 1690 -13 222 -5 992 14 1210 74 877 237 1646 511 2410 569
1589 1540 2972 2855 4070 170 142 522 406 705 530 116 78 366 240 371 240 1 0
7 -39 14 -87z m5379 -1973 c197 -40 322 -99 571 -267 69 -47 202 -130 295
-186 94 -55 196 -118 228 -139 61 -41 74 -71 35 -82 -66 -17 -323 5 -568 50
-171 31 -345 77 -585 154 -241 77 -333 90 -466 68 -52 -9 -130 -24 -174 -34
-97 -21 -146 -14 -187 26 -35 36 -37 76 -4 145 60 130 233 242 431 281 93 18
294 11 424 -16z m771 -1768 c464 -124 920 -417 1683 -1084 838 -731 1178 -933
1654 -983 93 -10 94 -11 105 -161 14 -187 7 -783 -10 -811 -11 -20 -21 -23
-76 -23 -115 0 -374 52 -579 116 -225 71 -559 222 -777 354 -130 77 -403 264
-885 605 -634 448 -859 599 -1116 753 -196 116 -315 173 -559 269 -118 46
-285 111 -370 145 -200 78 -369 159 -399 191 -30 33 -24 57 34 134 120 160
360 341 576 434 177 77 287 99 469 95 112 -3 154 -9 250 -34z m3286 -532 c214
-51 337 -126 320 -195 -8 -32 -56 -56 -181 -89 -60 -16 -158 -55 -247 -98
-209 -100 -269 -98 -327 15 -52 102 -37 198 43 284 94 99 216 126 392 83z
m796 -2071 c156 -52 268 -172 268 -286 0 -59 -32 -118 -80 -151 -30 -21 -44
-23 -101 -19 -86 5 -153 41 -240 127 -107 106 -143 211 -97 280 47 70 136 88
250 49z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.0 KiB