]> git.armaanb.net Git - atreides.git/blob - README.org
Link to Orestes, add Inspiration section.
[atreides.git] / README.org
1 * Atreus Keyboard
2
3 The [[http://ergodox.org][Ergodox]] keyboard is an absolutely fantastic design; I use it every
4 day at my office. However, I like to work away from the office
5 frequently, and I thought I might try my hand at designing something a
6 little more portable. The great thing about assembling my Ergodox is
7 that it taught me there's really nothing magical about it; it's just a
8 piece of circuitry with a bunch of switches read by a microcontroller
9 that speaks the USB HID interface.
10
11 The Atreus is meant to be complementary to the Ergodox as something
12 smaller, cheaper, and more travel-friendly. The case measures 25x11cm
13 and lacks even a number row, relying heavily upon the fn key. There is
14 no PCB in this design, requiring [[http://wiki.geekhack.org/index.php?title=Hard-Wiring_How-To.html][a manual matrix wiring approach]].
15 However, given that there are only 4 rows and 11 columns, this isn't
16 as daunting as it could be.
17
18 I've seen a number of existing DIY 40% keyboard designs, but most of
19 them stagger the rows, which I find very annoying now that I've gotten
20 used to the columnar layout of the Ergodox. In addition, many of the
21 designs I've seen waste a lot of room on the space bar, failing to
22 take into account the fact that the thumb is the strongest and most
23 versatile of the fingers. This design avoids both these problems while
24 taking a more couch-friendly single-piece approach.
25
26 [[atreus.jpg]]
27
28 ** Layout
29
30 Only a handful of punctuation marks (and no digits) are available
31 unshifted, and all the modifiers are on the bottom row.
32
33  :    q     w     e     r     t       ||       y     u     i     o    p
34  :    a     s     d     f     g       ||       h     j     k     l    ;
35  :    z     x     c     v     b       ||       n     m     ,     .    /
36  :   esc   tab  super shift bksp ctrl || alt space  fn   pgup  pgdn enter
37
38 The numbers and most punctuation are on the fn layer:
39
40  :    1     2     3     4    5        ||       6     7     8     9    0
41  :    -     +     (     )    =        ||       /     [     ]     {    }
42  :    !     @     #     $    %        ||       ^     &     *     ~    ?
43  :  reset  ins               `        ||     hwdv          _     |    \
44
45 I type in Dvorak but prefer to do the remapping in software rather
46 than hardware so I don't have to change layouts when I switch to my
47 laptop's internal keyboard. The =hwdv= key does provide a hardware
48 dvorak layer for using other peoples' computers though. This is all a
49 matter of firmware though; the layout is easy to change after the
50 fact.
51
52 ** Parts
53
54 *** Switches
55
56 This layout has five modifiers and 37 non-modifiers.
57
58 I strongly prefer the feel and sound of tactile [[http://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=651][Cherry MX blue]]
59 switches for typing. However, I like having linear switches on the
60 modifier keys (ctrl, alt, super, shift, and fn). [[http://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=102][Cherry MX red
61 switches]] are nice and light but are expensive and difficult to
62 find. [[http://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=103][Cherry MX black switches]] are cheaper and easier to source, but
63 may be too heavy, especially for keys under pinky fingers.
64
65 One trick is take the springs from some of your blue switches and
66 trade them with the springs from your black switches. The blacks then
67 become the equivalent of reds, and the blues become MX green switches,
68 which are a heavier variant of blues. These are typically used for
69 space bars on boards that otherwise use blues. They could be suitable
70 for non-modifier thumb keys like backspace, space, and enter.
71
72 *** Diodes
73
74 In order to avoid ghosting, each switch needs a [[https://www.radioshack.com/product/index.jsp?productId=2062587][1N4148 diode]].
75
76 *** Microcontroller
77
78 An [[http://www.digikey.com/product-search/en/programmers-development-systems/evaluation-boards-embedded-mcu-dsp/2621773?k=arduino%20micro][Arduino Micro]] or [[http://www.pjrc.com/teensy/index.html][Teensy 2]] is recommended. Be sure to get one
79 without headers so it will fit in between the bottom layer and the plate.
80
81 *** Keycaps
82
83 This [[http://keyshop.pimpmykeyboard.com/product/dsa-pbt-blank-sets][DSA-shaped base set]] (spherical indentations on the key, same
84 profile for each row) from Signature Plastics has 52 1x keys plus a
85 few extras we won't use. It claims on that page to contain only one
86 deep key, but my shipment contained two, which I put under the index
87 finger keys to help guide your hands without looking. However, it only
88 contained a single 1.5x keycap, and the middle two thumb keys both use
89 them, so you might want to pick up an extra.
90
91 ** Case
92
93 Layered laser-cut acrylic; see [[file:case.svg][case.svg]].
94
95 [[layers.jpg][layers.jpg]]
96
97 The first two shapes in the case file are the top and bottom covers;
98 these should be cut on 3mm acrylic (black in the photo). The third is
99 the spacer that goes under the fourth, which is the plate on which the
100 switches are mounted. These should be cut in 6mm, especially the
101 spacer, which needs to be at least as thick as the micro USB cable you
102 connect to the microcontroller. The switch plate could be thinner,
103 but not under 3mm.
104
105 On a 100W Epilog laser, the 3mm layers cut in about a minute and a
106 half. I did a run with 6mm acrylic of the other layers which took
107 nearly 6 minutes.
108
109 ** Firmware
110
111 My [[https://github.com/technomancy/tmk_keyboard/tree/atreus][fork of the tmk firmware]] has support for the Atreus layout.  You
112 should be able to cd into the =keyboard/atreus= directory and run
113 =make KEYMAP\=atreus= (or whichever variant you want) to produce a
114 qwerty =atreus.hex= file. You will probably want to create your own
115 layout once you've gotten a chance to try it and see what works for
116 you. Use the =.hex= file with the [[http://www.pjrc.com/teensy/loader.html][teensy loader]] or Arduino tools to
117 upload to the microcontroller.
118
119 Once the firmware is loaded and the keyboard is assembled, pressing
120 the onboard reset button to update new versions of the firmware is
121 pretty cumbersome; instead use the "reset" button on the lower left
122 of the layout which has the same effect.
123
124 I'm working on an experimental Forth-based firmware in the [[https://github.com/technomancy/orestes][Orestes]]
125 project, but that project is still in its infancy at the time of this
126 writing.
127
128 ** Bill of Materials
129
130 - 50 MX Blue switches: $29.00 (mechanicalkeyboards.com)
131 - 50 diodes: $3.45 (radio shack, should be able to buy in-person)
132 - Base DSA keycap set: $18.00 (signatureplastics.com)
133 - Teensy 2: $16 (pjrc.com or mechanicalkeyboards.com)
134 - Acrylic materials: $11
135 - Acrylic laser cutting: 7.5 at $3/min (varies by thickness of acrylic)
136
137 - 5 MX Black switches: $8.50 (optional)
138 - 5 MX Red switches: $10.00 (optional)
139 - additional 1.5x DSA keycap: $1 (optional)
140
141 =(+ 29 3.45 18 16 11 (* 3 7.5))= $99.95 plus tax/shipping
142
143 - mechanicalkeyboards.com: free shipping in the US
144 - Signature Plastics (keycaps) US shipping: $8.00
145 - PJRC (teensy) shipping: $3.03
146
147 *** Cost-saving Options
148
149 There are a few ways to lower the cost further.  Using [[http://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=482][Matias]] key
150 switches could save you a fair bit if you go in on a 90-pack with
151 someone else, but they're a little harder to find keycaps for; the MX
152 caps won't work on them. Using wood for the case will reduce both the
153 materials cost as well as the amount of time needed to cut the case.
154
155 Replacing the colored acrylic with transparent might also save a few
156 dollars. You could also use thinner acrylic for the switch plate too;
157 I cut mine in 4.5mm. A thinner spacer is inadvisable; even with 6mm
158 it's pretty tight.
159
160 Another common trick is scavenging keycaps and switches from used
161 keyboards; something with Cherry or Alps switches should work. This
162 can be time-consuming though.
163
164 *** Other Tools
165
166 You'll need a soldering iron, solder, a glue gun, a multimeter, wire,
167 wire strippers, and a USB mini cable. You'll also need seven M3
168 machine screws with nuts; the length of the screws depends on the
169 thickness of the acrylic you use. You can add rubber feet to thet
170 bottom to prevent the board from sliding around when placed on a desk.
171
172 ** Assembly
173
174 Once you have all the parts, the first thing to do is glue the
175 switches to the switch plate since there's no PCB to hold them in
176 place. Be aware that the screw holes unfortunately are not
177 symmetrical, so before inserting the switches it's important to ensure
178 that the plate is right-side-up. Use a drop of hot glue on the top and
179 bottom of each switch to affix it in place.
180
181 [[wires.jpg]]
182
183 Once the switches are in place, the matrix must be created. I
184 recommend getting red wire for the (postitive) rows and black for the
185 (negative) columns. The rows need eight wires with the insulation
186 exposed at intervals matching the spacing of the switches; see the
187 above photo for details. You could also just use many short stripped
188 segments of wire instead of a contiguous piece.
189
190 [[thumb-diagram.jpg]]
191
192 Most of the row wires will need four segments of insulation, but
193 you'll need two with five for the rows with the inner thumb
194 keys. Physically the inner thumb keys look like two additional
195 columns, but logically they are treated as if they're in the same
196 column with the left one in row 3 and the right one in row 4.
197
198 [[matrix.jpg]]
199
200 The exposed sections of row wire should be connected to the higher of
201 the pins on the switch using a diode. Be aware that diodes are
202 directional! The band around the diode should point to the top of the
203 board. Take care with the upper row that you don't let the wire go too
204 close to the top edge of the board; avoid getting in the way of the
205 spacer layer. Once the rows are wired, the remaining (negative) pin of
206 each switch should be wired into the negative pin of the switch above
207 and below it with black wire. This should be slightly easier since no
208 diode is necessary. The photo above shows the completed matrix for one
209 side. Test each row and column as you go with a multimeter. You should
210 be able to get continuity from row to column when the corresponding
211 switch is activated.
212
213 After the matrix has been wired on both sides, the next step is to
214 connect the microcontroller. The TMK firmware has the rows in pins D0,
215 D1, D2, and D3 of the microcontroller. You'll need to connect the rows
216 from both the left and right sides into the proper pin. There are more
217 columns than rows, so I used ribbon cable to bring the column
218 connections back to the microcontroller from the outside in. The
219 columns go to pins F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, and
220 B4. It's important to realize that when you flip over the board
221 in order to solder it, you have to flip over the schematic in your
222 mind too. If you count your columns from the left, you'll get them
223 backwards. (Which I actually did for the first half.)
224
225 [[controller.jpg]]
226
227 Once you've wired one side of the microcontroller in, it would be a
228 good time to test it. You'll need to compile and upload as per the
229 "Firmware" section above. At this point you should be reading real
230 keycodes from the half of the keyboard that you've wired. Once you've
231 confirmed that's working, continue with the other half. Then screw the
232 other layers in place and you're all set!
233
234 ** Inspiration
235
236 These fine projects all provided inspiration for various aspects of
237 the Atreus, as well as the folks on the =#geekhack= freenode channel.
238
239 - [[http://ergodox.org][Ergodox]]
240 - [[http://deskthority.net/workshop-f7/onehand-20-keyboard-t6617.html][OneHand]]
241 - [[http://blog.fsck.com/2013/12/better-and-better-keyboards.html][keyboard.io]]
242 - [[http://geekhack.org/index.php?topic=48718][ErgoT]]
243
244 ** License
245
246 Copyright © 2014 Phil Hagelberg
247
248 Released under the [[https://www.gnu.org/licenses/gpl.html][GNU GPL version 3]]