Build guide for v1

This commit is contained in:
Thomas Haukland
2023-04-29 23:13:14 +02:00
parent 9bb4e52de9
commit 0e43b74783
13 changed files with 190 additions and 13 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 666 KiB

After

Width:  |  Height:  |  Size: 409 KiB

125
doc/buildguide_v1.md Normal file
View File

@@ -0,0 +1,125 @@
# Cheapino v1 build guide
## Introduction
Welcome to the Cheapino Keyboard Build Guide! In this guide, we will walk you through the steps to build your own custom keyboard using the Cheapino kit. The Cheapino is a budget-friendly DIY split mechanical keyboard that is perfect for beginners who are looking to try their hand at building their own keyboard.
## Tools
Before we start, here are the tools you will need:
- Soldering iron
- Solder
- Diagonal cutters
## Parts
Since the PCBs are the most expensive items, and you cant order less than 5 from most sites, Im assuming you will build 2 Cheapinos. Most of the other components will also come in quantities allowing for 2 sets.
Im not including switches and keycaps, since these are a matter of personal taste.
You will need 36 switches and 1u(the regular letter sized) keycaps per set.
This can easily be the most expensive
| Part | Quantity | Where to get it | Estimated price (including shipping) |
| ------------ | -------- | --------------- | --------------- |
| Cheapino PCB | 4 | Upload the [PCB v1 gerber](https://github.com/tompi/cheapino/releases/download/v1.0/gerber.zip) to [JLCPCB](https://www.jlcpcb.com) (or other pcb house). | 20.00 (for 5 pcs) |
| Waveshare RP2040-Zero | 2 | [AliExpress](https://www.aliexpress.com/item/3256804781611696.html) | 8.50 |
| RJ45 Socket | 4 | [AliExpress](https://www.aliexpress.com/item/32902228456.html) | 5.00 (for 10 pcs)|
| EC11 Rotary encoder | 2 | [AliExpress](https://www.aliexpress.com/item/10000000931574.html) | 5.00 (for 2 pcs) |
| Encoder knob | 2 | [AliExpress](https://www.aliexpress.com/item/32749281108.html) | 5.00 (for 2 pcs)|
| Diodes 1N4148 | 72 | [AliExpress](https://www.aliexpress.com/item/32660088529.html) | 2.00 (for 100 pcs) |
![Components](images/parts.jpeg)
These parts are optional, but nice to have:
| Part | Quantity | Where to get it | Estimated price (including shipping) |
| ------------ | -------- | --------------- | --------------- |
| Sockets for MCU(optional) | 2 | [AliExpress](https://www.aliexpress.com/item/32892386779.html) | 5.00 (for 10 pcs) |
| Flexible RJ45 cable 0.5m | 2 | [AliExpress](https://www.aliexpress.com/item/1005002518783703.html) | 3.00 (for 2 pcs) |
| Magnetic USB cable | 2 | [AliExpress](https://www.aliexpress.com/item/1005003776565766.html) | 3.00 (for 2 pcs) |
| Rubber bumpers | ~16 | [AliExpress](https://www.aliexpress.com/item/1005003044229837.html) | 2.00 (for 50 pcs) |
## Steps
In my experience it is easiest to solder the lowest components first, and the highest last, since you need to turn the PCB around with the components on the other side when soldering(and then you want the loose ones to rest directly at the desk). Thats why I suggest starting with the diodes, then the MCU, the switches, the RJ45 socket and lastly the encoder.
### Step 1: Diodes
You need to be careful to solder the diodes the correct way. The line on the diode should always be closest to the square pad of the footprint, NOT the round one. The PCB supports SMD and throug hole diodes, but since K16 is missing smd pads, I recommend using through hole(if you only have smd, you need to hack K16, not very hard, use a small piece of wire).
If you use through hole diodes and have sockets for the MCU, keep the legs you cut off and use them for socketing the MCU.
### Step 2: MCU
Only the pins on the 2 long sides are actually used, but if you have the RP2040-Zero with pre-soldered pin headers, there is room for that also. Choose one of the following steps:
#### Socket the MCU
Socketing makes it easier to reuse the MCU(the RP2040-Zero) for another build later, or swap it if its broken or malfunctions.
If you have sockets for the MCU, mount them on a breadboard, or stick them in some cardboard to get them straight when mounting.
![Socketing 1](images/socket1.jpeg)
Stick the clipped diode feet through the MCU, and down into the socket. Use a tool, or you will stick it into your fingers(been there, done that...).
![Socketing 2](images/socket2.jpeg)
Solder all the feet in place, and remove all 3 parts from the breadboard, and put them into the PCB, use some tape to hold it in place when you turn it around and solder it.
![Socketing 3](images/socket3.jpeg)
#### Use pinheader to mount MCU
Use the two longest yellow pin headers that come with the MCU: solder them to the board first, and then solder the MCU to them.
![MCU pin header](images/mcu_pinheader.jpeg)
### Step 3: Install the Switches
Next, it's time to install the switches.
This can be a bit tricky to get straight, since there is only 3 pin holes.
Try to solder one column at a time, use something to align the switches, and tape them down before soldering.
One trick from [TentacleSenpai69](https://www.reddit.com/user/TentacleSenpai69/) is to put on keycaps on a column and use a space bar on top of that again, to keep the column aligned, and then tape it.
![Switches](images/switches.jpeg)
### Step 4: Install the RJ45 sockets
Just align them to the white outline. They should stay in place by themselves when you flip the PCB.
### Step 5: Install the encoder
Put the encoder in the footprint on the right side, make sure its flush to the PCB when you solder it.
### Step 6: Trim below and install bumpers
Use the cutters to trim any extruding wires on the underside of the PCBs. Maybe clip them inside a plastic bag to prevent the metal from flying around. Install rubber bumpers to protect your desk and keep the keyboard from moving.
![Underside](images/underside.jpeg)
## Firmware
Congratulations, you have successfully built your own custom keyboard.
Now you only need to install the firmware and tweak your keymap.
Clone this qmk branch: https://github.com/tompi/qmk_firmware/tree/cheapino
Open a shell in the folder and get git submodules with
make git-submodules
Then flash the cheapino with
make cheapino:default:flash
To tweak the keymap, copy one of the keymaps from keyboards/cheapino/keymaps,
edit it in the [qmk online configurator](https://config.qmk.fm/), and flash it with
make cheapino:yourkeymap:flash
Tweaking the encoder actions needs to be done in the keyboards/cheapino/encoder.c file.
Send me a mail or issue if something doesnt work as expected!

BIN
doc/images/diodes.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
doc/images/otherbuild.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

BIN
doc/images/parts.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 KiB

BIN
doc/images/socket1.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

BIN
doc/images/socket2.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
doc/images/socket3.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

BIN
doc/images/switches.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

BIN
doc/images/underside.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

View File

@@ -0,0 +1,57 @@
(module SW_MX_reversible (layer F.Cu) (tedit 5DD4F81F)
(descr "MX-style keyswitch, reversible")
(tags MX,cherry,gateron,kailh)
(fp_text reference REF** (at 0 -8.255) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SW_MX_reversible (at 0 8.255) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -7 -6) (end -7 -7) (layer B.SilkS) (width 0.15))
(fp_line (start -7 -7) (end -6 -7) (layer F.SilkS) (width 0.15))
(fp_line (start -6 7) (end -7 7) (layer F.SilkS) (width 0.15))
(fp_line (start -7 7) (end -7 6) (layer B.SilkS) (width 0.15))
(fp_line (start 7 6) (end 7 7) (layer F.SilkS) (width 0.15))
(fp_line (start 7 7) (end 6 7) (layer F.SilkS) (width 0.15))
(fp_line (start 6 -7) (end 7 -7) (layer F.SilkS) (width 0.15))
(fp_line (start 7 -7) (end 7 -6) (layer F.SilkS) (width 0.15))
(fp_line (start -6.9 6.9) (end 6.9 6.9) (layer Eco2.User) (width 0.15))
(fp_line (start 6.9 -6.9) (end -6.9 -6.9) (layer Eco2.User) (width 0.15))
(fp_line (start 6.9 -6.9) (end 6.9 6.9) (layer Eco2.User) (width 0.15))
(fp_line (start -6.9 6.9) (end -6.9 -6.9) (layer Eco2.User) (width 0.15))
(fp_line (start -7.5 -7.5) (end 7.5 -7.5) (layer F.Fab) (width 0.15))
(fp_line (start 7.5 -7.5) (end 7.5 7.5) (layer F.Fab) (width 0.15))
(fp_line (start 7.5 7.5) (end -7.5 7.5) (layer F.Fab) (width 0.15))
(fp_line (start -7.5 7.5) (end -7.5 -7.5) (layer F.Fab) (width 0.15))
(fp_line (start -6 7) (end -7 7) (layer B.SilkS) (width 0.15))
(fp_line (start -7 7) (end -7 6) (layer F.SilkS) (width 0.15))
(fp_line (start 7 6) (end 7 7) (layer B.SilkS) (width 0.15))
(fp_line (start 7 7) (end 6 7) (layer B.SilkS) (width 0.15))
(fp_line (start 7 -7) (end 7 -6) (layer B.SilkS) (width 0.15))
(fp_line (start 6 -7) (end 7 -7) (layer B.SilkS) (width 0.15))
(fp_line (start -7 -6) (end -7 -7) (layer F.SilkS) (width 0.15))
(fp_line (start -7 -7) (end -6 -7) (layer B.SilkS) (width 0.15))
(fp_text user %R (at 0 -8.255) (layer B.SilkS)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
(fp_line (start 7.5 -7.5) (end 7.5 7.5) (layer B.Fab) (width 0.15))
(fp_line (start 7.5 7.5) (end -7.5 7.5) (layer B.Fab) (width 0.15))
(fp_line (start -7.5 7.5) (end -7.5 -7.5) (layer B.Fab) (width 0.15))
(fp_line (start -7.5 -7.5) (end 7.5 -7.5) (layer B.Fab) (width 0.15))
(fp_text user %V (at 0 8.255) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 0 0) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
(pad 2 thru_hole circle (at 3.81 -2.54) (size 2.286 2.286) (drill 1.4986) (layers *.Cu *.Mask))
(pad 1 thru_hole circle (at -2.54 -5.08) (size 2.286 2.286) (drill 1.4986) (layers *.Cu *.Mask))
(pad 2 thru_hole circle (at 2.54 -5.08) (size 2.286 2.286) (drill 1.4986) (layers *.Cu *.Mask))
(pad "" np_thru_hole circle (at 0 0) (size 3.9878 3.9878) (drill 3.9878) (layers *.Cu *.Mask))
(pad 1 thru_hole circle (at -3.81 -2.54) (size 2.286 2.286) (drill 1.4986) (layers *.Cu *.Mask))
(pad "" np_thru_hole circle (at 5.08 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
(pad "" np_thru_hole circle (at -5.08 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
)

View File

@@ -12,23 +12,18 @@ and utilizes a japanese duplex matrix, so only one
mcu is needed(in fact it only uses 7 of the rj45 wires to
support 18 switches and an encoder on the right side).
Checkout the [build guide](doc/buildguide_v1.md) for more details and pictures.
A qmk branch with support is located here:
https://github.com/tompi/qmk_firmware/tree/cheapino
To build it, you need:
* PCBs (ca 20$ for 5 at JLCPCB)
* RP2040-Zero (ca 4$ at AliExpress)
* 38 diodes(both smb and throug hole are supported, ca 2$ for 100 at Ali)
* 2 rj45 connector (ca 3.5$ for 10 at Ali)
* 1 ec11 rotary encoder(optional, 2$ for 2 at Ali)
All prices are including shipping to Norway.
Pick up a used mechanical board for ~10$ and harvest switches and keycaps, and you have enough for more than 2 sets.
You also need an rj45 cable and an usb c, but come on, these should be laying around anyway, right?
So total for 2 sets should be less than 50$, meaning 25$ for one. Pretty sweet deal?
If you are wondering if this is actually usable, Im writing this on it, and Im pretty happy with it.
My son is also using his at his work and claims its very usable.
I know at least one other person that built it:
https://www.reddit.com/r/ErgoMechKeyboards/comments/12xg4u7/built_the_cheapino/
![Cheapino by TentacleSenpai69](otherbuild.jpeg)
Drawbacks: