Skip to content

Commit 0e65604

Browse files
Merge pull request #545 from isobel-p/main
Add Ankipad
2 parents 62ee02f + 4cddec1 commit 0e65604

File tree

12 files changed

+15980
-0
lines changed

12 files changed

+15980
-0
lines changed

hackpads/Ankipad/README.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Ankipad
2+
_10-key macropad designed for Anki revision._
3+
4+
### For reference...
5+
[Anki](https://apps.ankiweb.net/) is an active recall revision software, if you haven't heard of it how have you been revising until now? This macropad will bring you a ***STEP*** (cough cough) closer to acing your next Anki study session.
6+
7+
## Features
8+
![Overall view of hackpad](https://cdn.hackclubber.dev/slackcdn/96724c006044ab476172d34c9e80c9d5.png)
9+
10+
- Powered by a seeed XIAO RP2040
11+
- 10 mechanical MX-style keys
12+
- 3D printed case
13+
14+
![Breakdown of hackpad case](https://cdn.hackclubber.dev/slackcdn/a7c4783f74d1fa51aa624c3d8ec1fe54.png)
15+
16+
## Inspiration
17+
![PCB of hackpad A](https://cdn.hack.pet/slackcdn/46f52e5f468250cd2d4019a69cfc0848.png)
18+
19+
I picked this project because I didn't like my current Anki keyboard setup, which made revising SUPER hard. But then, with basically no experience in PCB design or CAD, I learned how to use KiCad, FreeCAD and met some cool people on ```#hackpad```. I wrangled with FreeCAD for sooo long, and watched so many YouTube tutorials, most of all ScottoKeebs, but in the end I'm happy with how it turned out.
20+
21+
![Schematic of hackpad](https://cdn.hackclubber.dev/slackcdn/db33b678bd7c74396faeacdd625412fb.png)
22+
23+
I put doing this off for a while, so I didn't get time to add some of the other features I wanted like rotary encoders and OLED screens. But maybe if Hackpad V3 comes...?
24+
25+
![PCB of hackpad B](https://cdn.hack.pet/slackcdn/9ac1312a16688a2119521cce77ff10f7.png)
26+
27+
## Bill of Materials
28+
|Quantity|Item|
29+
|--------|----|
30+
|1|Seeed XIAO RP2040|
31+
|10|Cherry MX switches|
32+
|10|DSA keycaps|
33+
|4|M3x16mm screws|
34+
|4|M3 hex nuts|
35+
|10|1N4148 Diodes|
36+
|1|3D-printed case|

hackpads/Ankipad/cad/case.step

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
ISO-10303-21;
2+
HEADER;
3+
FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
4+
FILE_NAME('Open CASCADE Shape Model','2025-02-19T20:26:01',(''),(''),
5+
'Open CASCADE STEP processor 7.8','FreeCAD','Unknown');
6+
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
7+
ENDSEC;
8+
DATA;
9+
#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',
10+
'automotive_design',2000,#2);
11+
#2 = APPLICATION_CONTEXT(
12+
'core data for automotive mechanical design processes');
13+
#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);
14+
#4 = PRODUCT_DEFINITION_SHAPE('','',#5);
15+
#5 = PRODUCT_DEFINITION('design','',#6,#9);
16+
#6 = PRODUCT_DEFINITION_FORMATION('','',#7);
17+
#7 = PRODUCT('Unnamed3','Unnamed3','',(#8));
18+
#8 = PRODUCT_CONTEXT('',#2,'mechanical');
19+
#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
20+
#10 = SHAPE_REPRESENTATION('',(#11),#15);
21+
#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
22+
#12 = CARTESIAN_POINT('',(0.,0.,0.));
23+
#13 = DIRECTION('',(0.,0.,1.));
24+
#14 = DIRECTION('',(1.,0.,-0.));
25+
#15 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
26+
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#19)) GLOBAL_UNIT_ASSIGNED_CONTEXT(
27+
(#16,#17,#18)) REPRESENTATION_CONTEXT('Context #1',
28+
'3D Context with UNIT and UNCERTAINTY') );
29+
#16 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
30+
#17 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
31+
#18 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
32+
#19 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#16,
33+
'distance_accuracy_value','confusion accuracy');
34+
#20 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));
35+
ENDSEC;
36+
END-ISO-10303-21;
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import board
2+
from kmk.kmk_keyboard import KMKKeyboard
3+
from kmk.scanners.keypad import MatrixScanner
4+
from kmk.keys import KC
5+
6+
keyboard = KMKKeyboard() # main instance of keeb
7+
8+
keyboard.matrix = MatrixScanner(
9+
column_pins=[board.AO, board.A1, board.A2, board.A3, board.MISO], # column
10+
row_pins=[board.SCK, board.RX], # row
11+
value_when_pressed=False,
12+
)
13+
14+
# keymap
15+
keyboard.keymap = [
16+
[
17+
KC.D, KC.A, KC.B, KC.T, KC.Y,
18+
KC.SPACE, KC.KP_1, KC.KP_2, KC.KP_3, KC.KP_4
19+
]
20+
]
21+
22+
if __name__ == '__main__':
23+
keyboard.go()

0 commit comments

Comments
 (0)