From 3e1f9068994ed9c97142a99bc6e9c6fe20eac9cb Mon Sep 17 00:00:00 2001 From: Dominika Date: Fri, 28 Jan 2022 20:40:16 +0100 Subject: [PATCH] * Initial commit --- README.md | 12 ++++++++++++ keyboard_case.scad | 43 +++++++++++++++++++++++++++++++++++++++++++ keyboard_frame.scad | 10 ++++++++++ soft/boot.py | 9 +++++++++ soft/code.py | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 109 insertions(+) create mode 100644 README.md create mode 100644 keyboard_case.scad create mode 100644 keyboard_frame.scad create mode 100755 soft/boot.py create mode 100755 soft/code.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..970afc4 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# CuteBoard + +(pronounced "Qt Board") + +A custom 60% mechanical keyboard built around parts I've already had at home or that I could 3d print. +A writeup about making this keyboard is available [here](https://sdomi.pl/weblog/14-cuteboard-mechanical-keyboard-from-scratch/), go check it out :3 + +No STL files; get OpenSCAD and hack the source yourself! Also because I think that my math isn't 100% right and one of the walls may be thicker than the other. + + + +by sdomi diff --git a/keyboard_case.scad b/keyboard_case.scad new file mode 100644 index 0000000..5e1d0fa --- /dev/null +++ b/keyboard_case.scad @@ -0,0 +1,43 @@ +h=9; +btm_h=1.3; +a=13; + +difference() { + cube([93.75+6+4.5,254+6+4.5,btm_h+h+a]); + translate([1.5,1.5,btm_h]) { + cube([93.75+6.5,254+6.5,btm_h+h+a]); + } + tilty_boi(); + translate([93.75,240,btm_h+1]) cube([20,8.5,3]); +} + +difference() { + translate([2.7,1.5,btm_h]) { + translate([3,3,0]) { + for (j = [1:5]) { + for (i = [0:2:14]) { + translate([j*(15+4.5),i*(14+4.5),0]) translate([-(.75/2),-(.75/2),0]) translate([-3,-3,0]) cube([2,2,30]); + } + } + } + } + translate([0,0,-5]) tilty_boi(); +} + +module tilty_boi() { + translate([1.5,1.5,h]) rotate([0,-7,0]) translate([-1.5,-1.5,0]) { + cube([150,300,50]); + } +} + + +//translate([1.5,1.5,h-4.5]) rotate([0,-7,0]) difference() { +// cube([93.75+6,254+6,5]); +// translate([3,3,0]) { +// for (j = [0:4]) { +// for (i = [0:13]) { +// translate([j*(15+4.5),i*(14+4.5),0]) translate([-(.75/2),-(.75/2),0]) cube([15.75,14.75,10]); +// } +// } +// } +//} \ No newline at end of file diff --git a/keyboard_frame.scad b/keyboard_frame.scad new file mode 100644 index 0000000..82369b0 --- /dev/null +++ b/keyboard_frame.scad @@ -0,0 +1,10 @@ +difference() { + cube([93.75+6,254+6,5]); + translate([3,3,0]) { + for (j = [0:4]) { + for (i = [0:13]) { + translate([j*(15+4.5),i*(14+4.5),0]) translate([-(.75/2),-(.75/2),0]) cube([15.75,14.75,10]); + } + } + } +} \ No newline at end of file diff --git a/soft/boot.py b/soft/boot.py new file mode 100755 index 0000000..17c210b --- /dev/null +++ b/soft/boot.py @@ -0,0 +1,9 @@ +import supervisor +import usb_hid +import usb_midi + +usb_hid.enable( + (usb_hid.Device.KEYBOARD) +) +usb_midi.disable() +supervisor.set_next_stack_limit(4096 + 4096) diff --git a/soft/code.py b/soft/code.py new file mode 100755 index 0000000..88216e7 --- /dev/null +++ b/soft/code.py @@ -0,0 +1,35 @@ +import board + +from kmk.kmk_keyboard import KMKKeyboard +from kmk.keys import KC +from kmk.matrix import DiodeOrientation +from kmk.modules.layers import Layers + +keyboard = KMKKeyboard() +keyboard.modules.append(Layers()) + +keyboard.row_pins = (board.GP16,board.GP17,board.GP18,board.GP19,board.GP20,) +keyboard.col_pins = (board.GP13,board.GP12,board.GP11,board.GP10,board.GP9,board.GP8,board.GP7,board.GP6,board.GP5,board.GP4,board.GP3,board.GP2,board.GP1,board.GP0) +keyboard.diode_orientation = DiodeOrientation.ROW2COL + +keyboard.keymap = [ + [ + KC.ESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.MINUS, KC.EQUAL, KC.BSPC, + KC.TAB, KC.Q, KC.W, KC.E, KC.R, KC.T, KC.Y, KC.U, KC.I, KC.O, KC.P, KC.LBRC, KC.RBRC, KC.BSLS, + KC.MO(1), KC.A, KC.S, KC.D, KC.F, KC.G, KC.H, KC.J, KC.K, KC.L, KC.SCLN, KC.QUOT, KC.ENT, KC.ENT, + KC.LSFT, KC.Z, KC.X, KC.C, KC.V, KC.B, KC.N, KC.M, KC.COMM, KC.DOT, KC.SLSH, KC.INS, KC.UP, KC.DEL, + KC.LCTL, KC.F13, KC.LALT, KC.SPC, KC.SPC, KC.SPC, KC.SPC, KC.SPC, KC.RALT, KC.RALT, KC.MO(1), KC.LEFT, KC.DOWN, KC.RIGHT, + ], + [ + KC.GRAVE, KC.F1, KC.F2, KC.F3, KC.F4, KC.F5, KC.F6, KC.F7, KC.F8, KC.F9, KC.F10, KC.F11, KC.F12, KC.PSCR, + KC.NO, KC.F13, KC.F14, KC.F15, KC.F16, KC.F17, KC.F18, KC.F19, KC.F20, KC.F21, KC.F22, KC.F23, KC.F24, KC.NO, + KC.NO, KC.VOLD, KC.VOLU, KC.MUTE, KC.NO, KC.TRNS,KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.VOLD, KC.VOLU, KC.MUTE, + KC.TRNS, KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.PGUP, KC.NO, + KC.TRNS, KC.NO, KC.TRNS, KC.NO, KC.NO, KC.NO, KC.NO, KC.NO, KC.TRNS, KC.TRNS, KC.NO, KC.HOME, KC.PGDN, KC.END, + ] +] + +keyboard.debug_enabled = True + +if __name__ == '__main__': + keyboard.go()