This project is submitted for

Description

As a matter of fact, people nowadays can easily spend >10 hours a day in front of a computer; wiggling the mouse, click and clacking the keyboard, those things are just inseparable part of our modern life. HID such as keyboard has simply become an integral part of the society and also our primary window to the digital world. Only little we realize that the device that we rigorously use daily hasn't changed much, remains 'dumb' as it was first invented. With more and more freaking-tasks often need to be handled simultaneously, we still rely heavily on our lazy-brain telling our hand to type here & there. We often end up inputting the same damn-password so many times because most of those safe-secure password keeper are just too complicated to startup. No matter what we are doing, what's happening in the surrounding, how late you are staying up the night, our keyboard remains the way it always is, doesn't help a thing and I'M GETTING SICK OF IT!

Details

This Project...

is not just about making another DIY-keyboard, but it's all about creating a smart-connected device. A device which 'talks' to your surrounding, able to make its own decision and aim primarily to assist you in interacting with digital world by introducing some sort-of an automation and flexibility. Of course, while retaining its functionality as your casual keyboard in most cases.

is not just about helping or assisting, but shaping the way you interact with the digital domain in a long term. Self-deactivation after hours in front of computer or automatically kill your browser in case you've been in social media for too long are just an example of how it can help shaping the better you. Not to mention about several other neat feature such as securely embedding your passwords within the keyboard itself.

is not just about another keyboard that does Macro, but instead, it's all about a keyboard that generates its own macro depending on your surrounding and just the way you want it.

is not just about a bunch of switches where it does the exact same thing every single time, but it's all about dynamic community driven features.

is not just about a device that waits for your command, but it's all about having a two-way typing companion.

And lastly, it is not just about a keyboard.

"What I'm about to tell you is top secret. A conspiracy bigger than all of us. There's a powerful group of people out there that are secretly running the world. I'm talking about the guys no one knows about, the ones that are invisible. The top 1% of the top 1%, the guys that play God without permission." -Elliot, Mr.Robot.

Specs:

True wireless keyboard

No wires allowed. Communication and charging everything is done wirelessly.

Fully Portable

Due to the wire-free policy, making it portable is as easy as it sounds.

62 X Cherry MX mechanical switches

Yes, no discussion about this. Cherry MX or no keyboard at all. Did I say it has to be Cherry MX Blue as well?

68 X RGB LED backlight

An array of WS2812b black version embedded on the board. Who could've thought maker's favorite RGB led is underneath a keyboard.

2 X Thumb Analog Joystick

On the left side simulates the mouse movement while the right side trigger the arrow keys.

Security (RFID/NFC)

In complement with things like NFC Ring, or smartphones NFC, having a secure on-board password activator doesn't sound impossible.

Version0.10. Any PCB manufacturer should be able to handle it in a breeze. No difficult design requirement. I've done my homework, www.pcbway.com seems to be the cheapest and fastest. Give it a try. (Hold on. check my Log about this Gerber update before ordering)

Project Logs

What a weekend it was. I've been to several Maker-Faire in three different continents, but yesterday was my first time attending Maker Faire in the Netherlands (Yeah, the country where I've been residing in the last 5 years). The atmosphere was amazing and the enthusiasm was all over the place. Didn't realize there are so many makers just around the corner. I strapped myself with the F/society Keyboard, RGB glasses and riding Electric unicycle all along the event, had to say even as a visitor I attracted quite some attention. :)

But but but.... the highlights of the event was meeting the one and only; Anouk Wipprecht. Yes, one of The Hackaday Prize Judge for this year event. She gave a talk as well as leading a Make-athon during the event. I actually joined the Make-athon on the second day and it was such a pleasure to be guided, helped and mentored by her. Thanks Anouk!!

Firmware

On top of that, a small follow-up update. The pre-release firmware of this project is available on Dropbox. There are still quite some clean-up will be done. Hardware pre-configuration also will follow.

Well, been around 5 days since the last update. It has been pretty busy week for me as typically; leave home 7.30 in the morning and arrive home at 23.45 midnight. Between work-stuff I've been trying to make some progress for this project. For this week I think I can summarize in bullet points below:

Software Update:

Some restructuring was done in the software. Which pretty much almost ends up like rewriting the whole thing. Though at this point I am a bit more satisfy with the progress. Does the job pretty well as my casual keyboard with additional personal flavors on top of it. Of course I am open to improvements from the community. In short I've been trying to really simplify the syntax and way the code works etc. So I hope people with little programming background can understand and adjust the software as they want it.

Github's on the way. I just need to allocate some time to properly set it up. Hopefully this week.

Hardware Update:

As covered in my previous log. I am currently busy with making the second version of this keyboard. There are plenty of feedback from the community and I am trying to accommodate those feedback as much as I can. I hope having more features on the will attract more and more people to try recreating this project and eventually become the keyboard that they'll use daily for the rest of their life :) In general the proposed changes are:

Wired Variant. In my previous log I mentioned that i will implement teensy as the alternative component on the board for wired version. However, after some considerations, I am now changing the plan. Having 2 variants in which both uses different type of uC, it might in fact introduce some 'confusions' in the firmware part. Because of the difference, one will be more developed than the other etc etc. So the rplan is now for the wired version, I am now replacing the ATMEGA328p as the co controller on the board to ATMEGA32u4. As you might haver known, ATMEGA32u4 has built in USB peripherals embedded for HID stuffs. So I am sure this won't hurt much. So in conclusion, for both variants, ATMEGA2560 will remain as its primary controller.

Bluetooth HID. As it is now, I am currently using bluefruit HID with embedded HID firmware ready out of the box. However, I do understand that this part is actually getting more and more scarce; or in other words harder and harder to get. Also the price for some people might be a bit much. As I menationed earlier, the options are either going to WIRED version of use alternative bluetooth Module. So in the next version of the PCB design I will provide 2 footprints either Bluefruit EZ key or alternative. At this point in time, my eyes are on to the famous Bluetooth HC-05. There has been many firmware hack flying over community about this bluetooth module, so I think it is a wise option.

Additional RF Module. In the current design, I implemented LORA module for local wireless communication. But apparently there aren't much of application with it yet. So in the next PCB version I will include the footprint of nrf24l01 module. Yes you are right, the 1 dollar or so wireless module. By doing this I hope you can pick and choose either to populate the board with LORA module or the nrf24l01 module.

Additional External RAM. Though atmega2569 considerably has pretty big flash memory. The RAM in this is not that much, 8K. I will add possibility to add this IC on the board as well. Just in case you are making hardcore application that requires temporary/dynamic memory outside the uC.

Additional Atmel CryptoAuthentication Device. For those who are really concern about security, I have decided to add the possibility to implement Atmel CryptoAuthentication Device on board. This kind of chip has been widely used fin many security sensitive device as it uses some sophisticated magic inside to encrypt and decrypt keys. Will be very handy as a complementary feature with the NFC/RFID reader.

Better mounting profile. In the current design the mounting place was not...

In case you are the ones who have enough guts to try replicate this keyboard, there is one basic thing you should get yourself covered; that is the key input matrix and how it is being mapped. In your previous projects, chances are you only used a couple of buttons or more and each is connected to single IO pin of your microcontroller. Now if you are talking about making a keyboard with more than 50 or even 100 input keys, a more efficient way needs to be implemented. (Except if you have FPGA scattered around with >100 GPIOs and you happen to have an alien friend from another planet that can type millions key stroke per second, then it is different story)

Quite frankly, there are tons of techniques and method to tackle this situation. If you think there is only one type of input Matrix scanning, then you probably have had a miserable life. This one extremely useful site explains in great details about all those key matrix methods (un)commonly used. They even compiled this huge impressive list comparing the number of input and free pins required for all different techniques. It also color coded the classification of additional hardware required. MY GOD.

After some quick consideration, I decided to opt for Single Multiplexed option. There are several reasons why I picked this:

No additional hardware required.

Though technically you need a diode to prevent a click being 'backfired' during the scanning. But setting inactive pins as input and high impedance in every single loops actually solve the problem. In my previous log, I mentioned I put diode in the schematic, but improvised with resistor instead during the build time.

I have enough hardware pins.

I decided to go with ATMEGA2560 with plenty of available input pins. So this shouldn't be a hurdle at all. Because technically you can add extra fancy hardware that does the scanning for you to save pin-count etc but meh, extra stuff in the BOM.

Pretty fast.

Even if you run on basic ATMEGA2560 running at 16mhz, you still can achieve pretty swift scanning loop. For human input device that is far more than enough. The only thing is that you might need to compensate loosing other clock count if you have other thing running the loop in your application. (Remember this is primitive 8-bit uC, no fancy features).

Keypad Library.

I came across with this impressively built keypad library. Works really well. Will save my time and does the job.

So as you probably have seen in earlier log, the schematic for the key switches is provided below:

There are 5 Rows and 14 Columns. So in total we require 19 GPIOs from the uC. I've mentioned earlier about the Keypad library. But I haven't mentioned to you why I picked this one instead of scratching to develop a new scanning techniques. Here's why:

This library supports multi press keys out of the box. Multiple keys can be press at the same time, of course in human time scale.

It implements state machine for every single key. From IDLE, to PRESSED, HOLD and RELEASED. it is all embedded in there.

No Additional hardware required. As I mentioned earlier, all the unused pins are internally set to input high impedance during each scanning iteration.

FREE. OPEN SOURCE. and more importantly it WORKS REALLY WELL. In this setup, without any loop routine interruption, just scanning. I can get more than 55.000 scanning loops per seconds. As a human trying to type 5 times per seconds is already near impossible I must say.

I owe big time to the people that have developed this library.

Alright, once you understand the hardware configuration and the hardware selection, we can go a bit deeper to the real source code itself. Well, first and foremost as you might expect, we need to define the ROW and COLUMN count in the software as shown below.

constbyte ROWS = 5;
constbyte COLS = 14;

Easy right. And then assign the pins accordingly to the GPIOs of the uC.

It's been pretty ecstatic looking at the comments and feedback from the community about this project. Just under 24h since it was being post in the Hackaday Blog I've discovered a lot of people trying to make one for themselves as well. Couldn't be happier. :)

However, I've also heard some comments about having a wired version of it. Also somehow version that is easier to Solder. Well I guess, I will get you covered.

I've been busy in the past couple of hours trying to reshape the current PCB design and make it "Flexible". So with the same PCB board you can either populate it as it is described so far and make it wireless, or populate it with some other parts and make it wired.

So,, Here's the plan:

Current Version (Wireless Variant)

We use AVR (Atmega2560) with the help of Bluefruit HID. Battery on the back required. SMD Solering skills required.

Proposed Wired Version (Wired Variant)

You can use the one-and-only, Teensy 3.2/3.1 board as a controller for every thing. This will cost you less Bill of Materials, and lot less complexity in the Soldering; No SMD soldering technique and tools required. But, yes, then you need to live with cable flying over your desk. See below for preview.

So, if you want to make the Wired version without worrying too much about the nitty-gritty of SMD soldering. Please hold on. I will try to post the updated Gerber by the end of this week. I will possibly order as well and giveaway some for the eager ones :)

One of the main reason behind the creation of the fsociety keyboard is that I was planning to build a workstation as well. Reason is simple, I spend around 15 hours a day in the office almost everyday. I guess then my desk deserves some funky adjustment and some sort of master terminal control.

Below are some pictures after quite heavy works during my "vacation days" couple weeks back:

As you probably have spotted, There are:

3D printer on the left hand side

6-DOF robotic arm on the right hand side

Bunch of LED matrix in the front side

And of course, >1000 Ws2812b attached in and on the desk.

Ohh also the Infinity mirror as well :)

More to come!!!!

And guess what??

Because of fsociety Keyboard, I have full direct control of things that are around me; beneath a palm of my hands, in a single click, effective immediately.

I think I need to make another project page for the building process of the workstation as well (?) ^.^

As I probably have said on earlier log, I started this project 3-Weeks ago with no intention in mind at all to post the documentation online and let alone submitting to Hackaday Prize contest. I started posting this project from nothing just two days before the due dates of the Automation contest. 4-build logs in less than 24 hours ;) I consider myself to be a pretty good last-minuter.

Having said that, during the build time, I was just too excited in getting it done instead of taking pictures in every single build step. Well, I kinda regret it now. Even then, luckily there were still some pictures I made along the way.

Check the incoming PCB

First thing as always, start with the bare PCB. Not all the PCB you receive have the same production quality. Check things like Sharpness of the silkscreen, scratch, the bending ratio etc. If you order 10-pcs, typically you'll notice that one or two boards just slightly better than the other.

Start with a 'remote' components

Assembling manually something like this need quite a bit of attention, even before grabbing your soldering iron. You have to understand whether in the finished board, this & that particular components are reachable and fixable. If you're onlu dealing with SMT part, normally that's not a big deal, but if you start using Though hole components like the one I use here (Cherry MX), you might need to step back a little bit and decide which one to go first.

And In this case, it is pretty obvious that you need to solder the WS2812b RGB Leds first. Because once you soldered all the Cherry mx switches, it is simply impossible to solder the LED. Even repairing it is already hard enough without de-soldering the neighboring switches. Well, but wait, while you solder, you can simply just power it up to check if the Cherry mx is working. It needs uC to light up the LED. And as I mentioned on other log, there is a dedicated uC that handles the LED and it located on the bottom side of the PCB.

So the plan was simply to solder the circuitry for the uC, test and flash it with WS2812B demo software, then you can just begin to solder the LED Array.

(Excuse the flying wire on the picture above. I didn't add 6-icsp pin on board.) Well then once you manage to program the ATMEGA328p, next step was to solder the LED on the top side.

Solder it one by one, until the whole PCB is surrounded by WS1812b RGB led and Voilaa!

Make sure you are gaining some 'blessing' from the colorful LED before proceeding. But before proceeding, some more stress or bend test might need to be done. Because well, if you happen to solder the WS2812b not well enough, there is a chance that it stops working after you use and type with the keyboard many times. And remember, because of the placement, it is going to be a hard job to fix.

Moving on from the LED, it is time to proceed to more challenging stuff. Yes, soldering the fine pitch components. Primarily in the beginning you only need to solder the ATMEGA2560, the crystal + caps, micro usb for power and wire for programming, that's it. Once you manage to program it through SPI and put bootloader in it, you can then proceed to solder the FTDI FT232RL for programming it through serial.

Once that's done, it is then the time to handle the most exciting part. well yes, the soldering of the Cherry MX. Technically speaking, this is the easier part of all. Cherry MX is a through hole components and I happen to make well enough footprint library. Inserting and soldering the switches was very convenient. See photo below.

Piece by piece, then an hour later it started to appear like a keyboard.

And from this point one, you can already try placing the keycaps for the keyboard if you want. Or finish soldering all the modules on both ends. For me I did put all the keycaps first to see how the RGB color diffuses on the keycaps.

Once you finish putting the keycaps and solder the Bluefruit module. you are pretty much ready to tweak around the software just as a basic keyboard.

You've probably have enough with the schematic layout in the previous log. It is now the time for the more interesting stuff; The board layout. I've spent the whole weekend to finish this design from making the library, schematic and then lastly layout. Of course, didn't have time to do grocery or even shower during that weekend ;) Even with the rush, I've noticed that I made only one mistake. I swap the VCC and GND in the OLED library. oops. Apart from that is hunky-dory. Below just a preview of the final board design before I explain in more detail about the design choice etc.

Board Dimension

This was very important in the beginning. I started in the beginning by placing all the cherry mx switch in place with 2mm distance between its widest part. I figured that 300 mm in length should fit all the cherry mx keycaps, but that still excluding other components. all the modules can be placed on the bottom side, but the Joysticks are not possible. it just has to be on the top. like it or not, adding around 33 mm on each side should suffice the space requirements. Initially I was planning to round the length to 400 mm just to make it easy and have some room space for some improvisation later on, but the cost for the PCB compare to 368 mm is significantly quite high. Therefore I stick with 368 mm.

Next thing is about the width, 100 mm sounds like a good round numbers right? Well not really it is only later you realize that you will need some extra width for the array of traces on the bottom side of the board. I decided to add 10 mm to the board width. And needless to say, aesthetically, with 100 mm width, and the tall keycaps, the board looks a bit clumsy. Having some spare width tremendously help the visual side of it. trust me.

Placement & Routing Concept

As I mentioned in earlier Log. I just don't like asymmetry. So since the beginning, I always stay conscious to spread the components evenly. It concludes to several points listed below:

The main Microcontroller unit is located in the center of the board. not on either side. It is very importat for the sake of the routing. And if you want to stick with 2-layer board as well. I just simply cannot think that it is possible to route the board with 2-layer if you locate the primary Atmega on either side. The routing of the matrix of the switches will easily become a nightmare.

The primary keyboard is centralized. It has to be the center and the main attention of the board. Unlike most keyboard, the keypad on the right ruins the potential symmetry of a keyboard as a whole.

One joystick on each side. Instead of having two on the right side for Arrow as well as the mouse. One has to be on the left side and another one on the right side.

NFC/RFID Reader has to be on the right side. Well yes, because I wear the right on my right hand ;)

The rest of the modules evenly scattered on the right and left side of the board. And only on the top side. And of course, watch out the cross-talk or some black magic voodoo happening between the antennas. (Need RF guy here to comment)

WS2812b placed between the Cherry MX switch and the co processor has to be placed on the bottom side. it was simply because there was no room on the top side anymore.

Now that We have the concepts nicely described on a bullet points above. I give you a tour through the design in 3-Dimension concept. Needless to say, this is one of the perks in using Altium.

Main Microcontroller ATMEGA2560

The microcontroller as you see above is located in the bottom center of the PCB. hiding safely in underneath the space button. (FYI I didn't have a step file of any other keycaps except the standard one). It was quite a fortunate thing to have such a empty space just on the spot where I needed. If you lok at the picture below, all the Row and columns from the key matrix can be routed easily. Making it more like a star topology. Don't forget it is not just for the sake of routing the switch matrix, but also all other peripherals on either side of...

It is going to be in Altium, yes Altium Designer. I repeat Altium, not Eagle sorry.

I've had enough amazing time using Eagle for more than 6 years since 2009. only until the beginning of 2016 I started to use Altium Designer as my current job mandates. And you know what? I felt like my whole life in designing PCB prior to using Altium Designer seems more like a lie. The easy way to put this is just like when you always use Paint to adjust and modify some image and in all the sudden someone introduce you about Photoshop. But well, I do agree that the learning curve is a bit steep with Altium, but I had to say it was worth the time.

I do also understand that Eagle is nowadays a common tools within Maker Community, so using tools other than Eagle might give some disadvantage for many. Either way, I was simply just cannot move away from using Altium at this stage, especially considering the limited time that I had etc. Also in the future I will try to see if I can properly export the Altium design files to CircuitMaker. which is a strip-down version of Altium Designer that is free and online/community based.

Schematic Section

During the design process I separated the design into three different schematic schematic sheet. Not just for readability, but also one of the sheet was a import from my previous project. So well, there is no reason not to do it.

Cherry MX Matrix switches

First and foremost is the Matrix of Cherry MX switches. It is fairly straight-forward, just an array of 14x5 switches connected directly to the pin of the Microcontroller. Though you see a diode on the schematic below, in the end I decided to replace it with just a resistor. Because the potential crosstalk between switches can be handled inside the software by setting the irrelevant pin to high impedance in every scanning iteration. So no diode is really necessary.

Another thing to note also you might find the last row (R14) to be unnecessary. The two switches can be hooked up to Column five (C5) and that way you can save one pin from the Microcontroller. But well, I didn't do it. simply i was trying to avoid un-uniform-ity in the routing. If you take a closer look, the number of switches per column in the schematic is identical with the number of switches per column on the board layout that we'll discuss in the next Project logs. I thought it could ease the mapping process in the software in latter stage.

WS2812b LED Array

Next thing to discuss is the array of the WS2812b RGB Led, the one and only favorite. Exactly 68 pieces of those were used to nicely fill the gap between the switches. As you might have known, the beauty of this LED is that you only need one microcontroller pin to sequentially control hundreds or even thousands of this LED. So schematic wise, it was not that difficult. But as I briefly mentioned in previous project log, I might actually need a co-processor to control the LED smoothly without being interrupted to much with other primary routine. Hence, in the schematic below you see an Atmega328p microcontroller as well.

Primary peripherals

Well, following the above, it is now time to get into more serious stuff. The primary controller and the peripherals itself. The schematic provided below depicts in great detail the complete wiring diagram of the system. All the standard communication bus are occupied although there are still some free pins for additional features in the next design iteration.

In summary, started on the left side is the standard FTDI IC both for debugging and programming. Taking the most space in the center, that is the main processor itself ATMEGA2560. The Bluefruit EZ key, ESP8266, FT232RL and HM-11 occupy all the Hardware serial port. While DRF1278, MRC522 and the MicroSD card shared the same SPI bus. On top of that, the OLED is the only one connected to the I2C bus. Joysticks on the other hand connect to 4 analog pins available on the microcontroller.

And that was it. It was quite straight forward overall. The time was a...

This Project log shall bring you towards my personal reasoning behind why I pick this part and not that. Even before starting this project I already knew that this gonna cost me quite some bucks, where technically I can just spend it on high-end mechanical gaming keyboard. but meeh, what's the exciting part about that? I'm personally quite a believer in the saying:

"People who are really serious about software should make their own hardware." - Alan Kay

And even if you buy the best programmable keyboard exist, there will just always be a short in hardware feature that you desperately need. Therefore below I'll give you overview behind my personal taste in what keyboard should be like.

What's a good keyboard without a switch that you really enjoy typing?

Well yes, first thing first that I did was trying to find which mechanical switch I am going to use. First obvious choice is of course the family range of Cherry MX switches. But the more I dig, there are actually plenty more Cherry MX clones that claims to do the same with cheaper price; though quality wise just don't ask me. Eventually i just decided to go for Cherry MX original one.

Technically that only solve one question though, the next question is which Cherry MX I was gonna pick. There's several options that can be a personal preferences. I found this blog extremely useful in understanding the technical differences and help me in making the choice. The more I watch video like the one below, I decided to pick Cherry MX Blue. the tactile feedback and clicky sound just feel so addictive. I felt like my whole life has been a lie typing on standard membrane keyboard. Ohh did I mention the Cherry MX Blue is Linus Favorite as well? ;)

Worth mentioning too that getting a Cherry MX keyboard in small quantity is often very difficult. They run out of stock extremely fast and even are simply not available in stock as well. I was planning just to get it from Sparkfun until I discovered slightly cheaper price Cherry MX Blue from Mouser. Just make sure you pick the right one that just suit you in case you are planning to build one as well.

What about the keycap? Aren't they come in pair with the switches?

Hell no! That's kinda the beauty of Mechanical Switches, it is so customize-able up to the point where you can put different keycaps; either buy it or 3D print it. This was actually one of the difficult choice I had to make because there's simply too many choices either on Ebay or (my favorite) Aliexpress. Though first main thing that I kept in mind was that I will put underneath the switches some nice LEDs. So pretty much my choice are limited to those transparent keycaps. I discover one quite impressive Aliexpress store where it sells transparant keycaps on different colors. Price-wise they are also one of the cheapest on the internet (trust me) and I received it from China to Netherlands in less than 10 days in very nice and safe packaging.

Having said that, the actual and primary reason I decided to purchase the keycaps from them is because they provide exactly the size of the keycaps relative to the standard keycap size. So it was extremely useful in getting the PCB layout first time right. Who would've known that the Enter-keycap is 2.25x the size of a standard keycaps, right?

And at the end I decided to order the white transparent color keycap. The reason is simple, I just don't want a color shift between the RGB Color I set and the color i see through the Keycap. And it doesn't look bad at all after all.

Which keyboard layout you need?

That is quite dilemma-tic question to be honest. The more the keys on the keyboard doesn't necessary better in my opinion. The more key you have, the bigger the size of PCB it requires, the more complicated your hardware is going to be, the more pins you need for scanning, and well of course the more expensive it get (PCB and Keycaps). So I decided to go for quite simplistic layout; no keypad no F-Keys, no other keys except the ones inside the red rectangle...

Build Instructions

In case you want to reproduce this project. There are several points you have to think beforehand:

Making this keyboard doesn't come cheap. Doesn't mean to scare you, but spending the money on purchasing high-end mechanical keyboard might possibly be better for you. Depending on the PCB cost and the Switches, the cost can easily go above $150 or even $200.

If the point above didn't scare you, then the next thing is bit more of a technical requirements. You need or have somebody around you that knows and have experience in soldering SMD components. And of course, you need access to good tools as well.

The time. Building and assembling it actually didn't cost me much. only the waiting/lead time perhaps is going to annoy you. Most of the parts I suggested in this project come from China. Depending on your origin, it can take more than 2 weeks or even more than a month.

And lastly, you just have to be extremely curious.

If you consider yourself that you'll manage to handle the 4 points above, then you can proceed reading this instruction.

First thing first, you obviously need a PCB. By the time I wrote this, I have several spare of the PCBs that I can send you for free. Yes, free, though depending on where you live. Just hit me up on a comment or message, I can send you right away.

In the other case, you obviously need to order the PCB. At this point, I don't have any sort of tindie shop or things like that. So you have to order it by yourself. Download the gerber from this project files section, and go to your favorites manufacturers website. I've done my research, and it appears that the cheapest one you can get from china for PCB with this dimension is from PCBWay. Their service is quite exceptional, responsive and fast. I received my PCB in 5 working days. Quality-wise, I cannot judge just yet. OSHPark might be more convenient for you and they should be able to handle it as well, though not sure the price range there.

So, while I'm trying to find more motivation in finishing this instruction, you can go and order the PCB meanwhile ;)

In the next instruction I will explain you where you can get the cheapest part possible for building this project. Stay tune!

2

Step 2

Next step, in case you've managed to get the PCB the next step is for you to get the all the parts you need to start building it. I've listed the complete list of components you need for this, but I guess it is going to be a lot easier if I also tell you where to get them.

First of all, I used to be a huge fan of EBAY, but nowadays I tried as much as I can not to use them. not necessarily because they are bad, in fact they are still doing OK if you are dealing with seller from the same country. The main reason is simply I found a better alternative if i want to buy stuff directly from China. Guess what the name is? yes, Aliexpress. why?

If you are in the Netherlands, it accept national's favorite payment system, called IDEAL which is very ideal. I put an order in less then 10 seconds through the app. Yes, literally, from adding a thing to cart to paying from my Bank account.

Tracking system is embedded into your order, so no need to go to complicated Chinese mail tracking post. Also you can get notification from the App if there is any chance in shipment status and progress Last time I check EBAY doesn't have this kind of feature yet.

Buyer protection. If you don't receive your product, and the shipment status is stuck somewhere after certain period of time, you should be able to get refund easily.

Let me tell you, I often find the price is more competitive than ebay. no joke. I am not sure, but i think because the charge as a seller is not as high as EBAY. well as a matter of fact Aliexpress is a Chinese company by definition.

So in the next step you will see most of my preferable source are from Aliexpress. But before proceeding please make sure you have an Aliexpress account :)

3

Step 3

At this point I assume you've already figured out how to get the PCB. So below are purely the component side:

Cherry MX switch.

Mouser. They have pretty decent stock available for Black, White and Blue color. apart from that you probably need to find somewhere else. I purchased mine from them simply because I need to make sure it is a genuine Cherry MX. Won't gamble on this.

Aliexpress. Aliexpress has plenty of seller that sells this. but don't ask me about the authenticity etc.

Sparkfun. They also sells one if you need specifically the blue one. Their price is a bit more expensive than average but not too much. especially if you are their fanboy.

Keycaps.

Aliexpress search list. There are just tons of this type of things. you can pick anyone you want. but be careful about the pin spacing etc. for single key that is a standard size it might not be a big issue, but for bigger keycaps for enter key, or tab or space, you might need to reconfirm before purchasing it.

My selection. if you purchase the keycaps from this link. I can assure you that the pitch will be OK with the PCB I've designed.

Be creative. Make your own 3D printed one or took from some random mechanical keyboard out there.

WS2812b RGB LED

Aliexpress. You've probably have your own place to purchase this. But the link on the left it seems to have the best price. or at least cheap enough. and they have the black version of WS2812b as well. which is nice.

Atmega2560

Aliexpress. If you purchase this from place like Farnel or similar, don't get surprise with the price. It can go up to 5 times more expensive if you outsource it from ebay/aliexpress or so. Unless you are buying in a reel then it might be a different story.

Bluefruit HID

Adafruit. This is one of the most selling product adafruit. They go out of stock pretty fast. So you might need to buy from their distributor instead. And my favorite is:

Kiwi Electronics. They ship worldwide and guess what. they are just around the corner. Yes, I know, because Netherlands is a small city. Country i meant.

Atmega328p

Aliexpress. this is one of the cheapest you can get from China. It appears to work fine so far with me. If you are worried about the genuity then i suggest you start digging on the Digikey, Mouser, Farnell or whatever.

Bluetooth HM11

Aliexpress. There are so many placer you can buy ths Chinese popular Bluetooth 4.0. I discovered one in Aliexpress and the price is quite ok. but also they have some sort of distributor so you can select from where do you want it to ship from. So it arrived in less than a week shipped within Europe in my case. BUT BEWARE!! If used this type of bluetooth many times, and this is actually not the original firmware. some random people start putting their firmware and call it HM11 as well. though it is still functioning fine. I tested it with the other pair that I ordered.

ESP8266-03

Aliexpress. This is also everywhere technically. you must be able to get it from anywhere.

OLED 128x64

Aliexpress. This is quite common as well especially since Adafruit spend some energy making a nice library for it. More and more chinese stuff that is similar to this has came along. but for me this supplier was quite ok and Fast.

LORA DRF1278F

Aliexpress. I purchased mine from there. but unfortunately they are running out of stock already. I don't see any seller still selling this in Aliexpress to be honest. Alternatively see below.

Ebay. From this seller this module appears to be selling pretty well for some reason. I don't see a reason why it is not a good option.

Thumb Joystick

Sparkfun. You need a couple of this. Sparkfun sells without the breakout and unsoldered. So good to go.

Adafruit. On the other hand. Adafruit sells it more as a kit. With breakout. Luckily it comes unsoldered. So good to go as well.

I used to be a fan of laptop styled keyboard for more than a decade only until I laid my fingers on Mechanical Switches for few seconds. :) That's for additional wireless stuff. in case you happen/want to have any setup that is LORA compatible around, you can use the monitor and control stuff from the keyboard directly.

IMPRESSIVE FEEDBACK! Thanks for the enthusiasm. I'm not familar with Slack keyboard community and the Geekhack as well. But, I will surely check it out and see what people think. I've just posted log update in case you/others want to order the PCB as well. People like you that keeps me motivated! ;)

Yes, you are right. I'm still a bit "embarrassed" by the source code. Well it works, though need bit of a touch up for readability. I integrated commonly used library as well, so.. A lot of optimization can be done. Expect by the end of this week I presume. Not yet, for putting it on Massdrop etc. It is quite labor intensive to replicate this :)

The docs are awesome! I have parts ordered but haven't pulled the trigger on the PCBs yet as I would order 10 to make it cost effective. If you still have a PCB laying around, I am happy to pay shipping! Either way, I will be building this as soon as AliExpress can get parts here. Awesome project! :)

Wonderful! Good to hear that. :) All my spare PCBs have been given away and booked, except one. The guy hasn't responded in several days. I guess it is your lucky day then. You can let me know your address through the PM I guess.

I'm not sure what do you mean by guarantee minimum number of functioning samples? :) I hand assembled one unit and it works perfectly right away. But yes, it cost me close to $70 to get just the PCBs. Check the instruction tab, I still have one spare PCB to be given away btw :)

To me, having the joysticks at the bottom is weird, but that's because I'm used to holding one of these [0], where the sides of the keyboard are meant to be held when doing mouse actions. Figured I'd share :)

There are yes. Though not dedicated ones. The bottom-left three switches act as a mouse click only up to around 3-seconds from any mouse movement activity. After that it timeouts and those keys become part of the keyboard again.

But in general, the mouse joystick I only use when I'm heavily in typing mode. No intention of using it as a full time mouse. Thanks for the share! Will note it down, this project software-wise is still under development :)