agent

FCC success and development news

Hi there, and welcome to our monthly status update!

TL;DR: We’ve passed FCC certification, and CE is in progress. We’re progressing with assembly, loads of UHK boxes arrived from the printing factory, and the UHK accessory boxes are already packed. The firmware and Agent have matured substantially. We’re waiting for final answers from TÜV to proceed further.

We’re aiming to send out the pilot run UHKs in October, and start the delivery of the rest of the first batch of 2,000 UHKs in November. If you backed us after 2017-07-13 then you’re in the second batch, which is expected to ship in March 2018.

FFC and CE certification

A week ago, we got great news from TÜV:

“All FCC 15 ready and just PASS for Radiated Emission. Producing the report now.”

Then I asked about CE, and to my surprise they told me that they didn’t know that we also needed CE measurements. I searched my emails to see whether I miscommunicated something, but I didn’t. Not only did I mention both FCC and CE, it was part of the subject line. It’d have been hard to make this any clearer.

I told TÜV that we would really appreciate if they wrapped up CE as fast as possible, especially considering the recent delays that they added to our project. They promised me that we’ll have the official CE report by the 18th. They did not promise an ETA regarding the FCC report, but told me that it’ll be ready “soon”.

To be perfectly honest, given the recent complications, we’d like to switch to an alternative certification body, but it’s way too late, and we don’t have any other options in Hungary. Going forward, I’ll be pinging them regularly to try to keep this under control. I believe this will get sorted out soon, and we’ll receive the certification papers shortly.

Our contract manufacturer is eager to start production, and as soon as we receive the reports from TÜV, we’ll start the PCBA of the pilot run units.

Manufacturing progress

Even though the PCBs are not assembled yet, we’re working on assembling and packaging everything else.

There are two small boxes inside of the main UHK box, one containing the USB cable, the other containing the bridge cable, the flip-out feet and their screws, and a lock strip that securely locks together the halves if you choose to use it. We’ve packed 500 of these boxes.

We’ve tested 500 USB cables and 500 bridge cables, and they all worked flawlessly. This is a good sign. Our cable suppliers definitely seem to be on par.

Right now, the case buttons are being pad printed. These are the first samples:

We’ve chosen the top, brighter color sample, even though the difference is hardly noticeable in this picture. Unlike our first pad printing supplier candidate, this supplier seems to perform just as expected. The prints are razor sharp, spotless, precisely positioned, and the correct font is used.

The cases are semi-assembled and we’re waiting for the back stickers to proceed further. We already received 3,000 stickers from the printing factory, but they were shiny instead of matte. Then we received a supposedly corrected batch of 3,000 that were matte, but lacked anti-scratch coating.

Now the printing factory will print yet another 3,000, and we’re hopeful that they’ll get it right this time. This journey is as expensive for them as it is time consuming for us. Once we get the correct back stickers, we’ll apply them to the case, and then glue small rubber feet to the cases,concluding their assembly.

We’re also making progress with the colored cases. This is the first colored case sample of a random test color:

Last but not least, 3,000 UHK boxes have arrived from the printing factory:

Being pre-assembled boxes, they take up quite a lot of floor space. 15 pallets to be exact. Maybe we shouldn't go with preassembled boxes next time.

Firmware progress

I’ve been heavily focusing on the firmware during the last couple of weeks and managed to make quite a lot of progress.

More than anything else, I wanted to make the I2C communication between the keyboard halves rock stable. Placing the bypass capacitors as closely to the IS31FL3731 LED driver ICs as possible made the communication much more robust, but from time to time it halted. The capacitors couldn’t totally negate the parasitic capacitance of the I2C bus, and these LED drivers being as picky as they are, the problem persisted.

Eventually, I managed to find a solution that is described in the AN-686 application note. The core problem is that when I2C communication halts in the midst of the communication, it makes the state machine of the slave that is being addressed wait for further data. Just as suggested by the application note, I clocked through the slave by toggling SCL until SCA went high.

This helped tremendously, and it made communication always recover when disconnecting and reconnecting the keyboard halves, but when using the keyboard over an extended period, the left half eventually became non-responsive.

I could reproduce this issue fairly reliably by making the right keyboard half reenumerate as the bootloader. This interrupted the communication with the left keyboard half, but didn’t unpower it, which always happens when disconnecting it. I also figured that the left KL03 MCU is the culprit because when I rebooted it, the communication always resumed. I needed to fix this issue.

First try: I2C watchdog

I thought that the issue could be solved by implementing an I2C watchdog not only for the right keyboard half but also for the left keyboard half. This proved to be a lot more difficult than anticipated thanks to a bug that I made earlier.

I created a timer interrupt, and put the I2C recovery code into it to reinitialize the I2C driver. Among other things, it called the Init_I2C() function. I realized that when commenting out Init_I2C() within the timer interrupt, the firmware worked, but when uncommenting it, it hit a hard fault. This was seemingly impossible because the hard fault also got hit when I deactivated the timer interrupt, so Init_I2C() wasn’t ever called within it.

I couldn’t figure this out, so I managed to summon Santiago who delved very deep into the issue. It also turned out that the debug version didn’t work at all, so he had to figure this out by looking the disassembled, gcc-optimized ARM assembly code of the firmware.

Santiago finally concluded that the issue was that I defined the I2C_Handler struct within a function so the struct got allocated in the stack, but after returning from the function this variable got deallocated. The problem is, the KSDK still tried to use the struct even after being deallocated, which triggered a hard fault.

The issue didn’t surface when referencing Init_I2C() once across the codebase because the function that contained the definition of the I2C_Handler struct got inlined so it was like being defined in main(), and never got deallocated. But when referring Init_I2C() twice, it wasn’t inlined anymore and the issue surfaced.

After this incident, I’ll surely think twice about making KSDK variables global. For even more details, Santiago created a slide which you’re welcome to study.

Unfortunately, even though my left-side I2C watchdog was running, it still didn’t do the trick. Somehow, communication didn’t recover. Which brings me to my second try.

Second try: hacking the KSDK

At this point, it was down to debugging. I needed to see not only what went over the wire between the MCUs of the left and right halves, but also what was happening inside of the KL03, especially regarding the state of its I2C driver. Using the debug feature of Kinetis Design Studio didn’t work for me as it pauses execution and given the realtime nature of the communication, it doesn’t behave as expected.

Then I tried to make semihosting work which basically allows the microcontroller to dump strings via the debug probe to the console using printf(). Unfortunately, I couldn’t make semihosting work because it crashed the microcontroller for some reason that I couldn’t figure out. Semihosting would also have posed a significant runtime overhead anyways, and it might have made the firmware behave differently, so maybe it’s not a big loss. In any case, I had to find an alternative solution.

Finally, I figured that I’d just use a spare peripheral of the microcontroller to dump relevant data, and I ended up using the SPI peripheral of the KL03. For this, I needed to temporarily repurpose two GPIO pins that were used to scan a row and column of the keyboard matrix. This made the prototype practically useless for touch typing temporarily, but that’s a small price to pay.

At this point, my prototype looked like this:

The halves are interconnected by two spiral cables via an adapter board. The adapter board features a 4P2T switch which allows me to disconnect and reconnect the halves easily for testing purposes. The adapter board also breaks out the wires of the cables. The wires I’m interested in are the SDA and SCL - the clock and data lines of the main I2C bus of the UHK.

Apart from I2C, I also soldered two wires to the MOSI and SCK pins of the SPI peripheral. And finally, I connected the two I2C wires and two SPI wires to my Logic 4 analyzer.

What you can see above is the result of the fixed code. Channels 0 and 1 are the SDA and SCL of the I2C. Channels 2 and 3 are the MOSI and SCK of the SPI. For every byte sent by the master over I2C, the status byte and the received byte get dumped over SPI on the slave. The received byte correctly gets dumped over SPI right after receiving it, which is the way it should be.

The core issue was that the KSDK I2C driver is designed for fixed-size messages, but the UHK messages are variable-sized. They contain a header of a byte length, and a 2 byte CRC16-CCITT checksum. I ended up hacking the KSDK of both the left and right keyboard half to make it deal with our variable-length messages.

The effort that went into making the keyboard halves and the modules communicate reliably is quite incredible. It makes me appreciate already established and widely implemented protocols like TCP/IP that just work. I’m so happy that this critical foundation is in place.

Apart from the above long journey, I implemented loads of fixes. Now we have a pretty changelog, and versioning conventions.

Agent progress

Robi has been really pushing hard recently. I’m impressed by his work, and his efforts came to fruition as Agent is now able to read and write the configuration of the UHK. It’s a wonderful feeling to plug in the UHK, see the configuration appear on the screen, reconfigure it, and merely click a button to save the new configuration to the keyboard.

The smoothness of the user experience resembles the configuration applications of the largest keyboard manufacturers, but all things considered, Agent offers much more sophisticated configuration options than those keyboards.

It’s been a long journey to get there. And wouldn’t it be cool to visualize the development of Agent over its lifetime? As a matter of fact, it’s very much possible with Gource, so let’s take a look at it:

While we’re at it, let’s also take a look at the firmware repo:

There’s still a lot to do, but given the current state of the firmware and Agent, even the pilot run recipients should experience a smooth ride.

Thanks so much for your support!

In our previous update, I elaborated in detail on the manufacturing challenges which have been causing us delays. After publishing our update, it felt awesome that so many of you got in touch with us and expressed your fullest support. We’re glad that you share our pursuit for quality, understand the nature of the delays, and agree that the UHK is worth the wait.

What has been said about the challenges of manufacturing clearly reverberate in this update. After all, who would think that it’s possible to mess up mere stickers (twice), or misunderstand clearly written, basic instructions about the certification process. But it’s the real world, and human errors do happen.

PCB assembly should happen shortly, just after we get the FCC and CE reports from TÜV. Then we’ll quickly assemble the pilot run units and send them out, and the rest of the first batch will follow. We can’t see any major challenges ahead us, we just have to wait longer than anticipated which is something none of us like, but it’s seems that it’s the nature of the hardware business.

Thanks again for your support and understanding! Let’s keep in touch, and we’re excited to talk to you on 2017-11-16.

Just before the pilot run

Hi there, and welcome to our monthly status update!

TL;DR: We’re making rapid progress with the assembly process. The firmware and Agent have matured significantly and become truly cross-platform. We have to make a minor design change on the PCB that will set us back by 2 weeks. Batch 1 has sold out and batch 2 will ship starting December.

You can always check out the expected delivery date and update your shipping address on your Crowd Supply account page.

Batch 1 has sold out

Given the uninterrupted pre-sales period since the end of our campaign, the first batch of 2,000 UHKs has just sold out. That means that going forward, new orders will fall into batch 2 which can be expected to ship in December.

Your orders will still be served on a first-come, first-served basis, but this delay between batch 1 and batch 2 is inevitable as we ramp up production.

Starting from batch 3 we expect to have a decent stock, so we’ll be able to provide you UHKs without any delay.

The inner assemblies are coming together

The inner assembly is comprised of a number of parts that reside inside the UHK case.

16,000 metal guides are already made. We'll have to press-fit the pins into half of them. Speaking of the pins, we’ve further optimized them. We’ve switched to using pins with spherical ends and a hardened surface, resulting in a heavenly smooth, yet solid merge-split experience. Perfecting these guides was an art unto itself.

Guides with spherical pins

600 pairs of plates have been manufactured and zinc-plated.

Zinced plates

We’ve learned that seemingly mundane parts like keycap stabilizers can take surprisingly long time to assemble. There are two identical left and two right parts that slip together, then a metal wire is inserted into them. Thankfully, we’ve already finished assembling 5,500 of these.

Assembled stabilizers

The above results in assembled plates like these.

Assembled plates, front side

Assembled plates, front side

Assembled plates, back side

Assembled plates, back side

So far, we’ve assembled 150 pairs of plates, and 50 pairs of those will be used for the pilot run. These plates will travel to our PCBA contract manufacturer who will solder them together with the PCBs. Afterwards, the guides will be screwed to the plates, completing the inner assemblies.

Outer assemblies and miscellaneous parts

As you can imagine, one of the most complicated parts are the plastic cases. So far, we’ve manufactured 150 pairs of bottom cases, and 2,000 pairs of case buttons.

Left bottom cases

Left bottom cases

Right bottom cases

Right bottom cases

Case buttons

Case buttons

The molds for the upper cases are being tweaked and we expect them to be perfected within 1-2 weeks, at which point we’ll put them to good use and manufacture 150 pairs of top cases.

Apart from the above, there are still a fair number of parts that go with the outer assemblies including the magnets, magnet-counter parts, rubber feet, inserts, back stickers, and a couple of screws.

Since our last update, we’ve also ordered 2,000 USB cables and bridge cables. Fun fact: the total length of these USB cables is 3.6 kilometers, or 2.23 miles.

Firmware progress

The firmware already works pretty well, but the configuration parser was very basic a month ago, only capable of parsing layers. It was clearly incomplete because it should parse not only a single layer, and not even a single keymap, but the fully-fledged binary configuration containing a set of layers, macros, and various items.

To my surprise, I received an email about a month ago from Eric Tang. Given his passion for keycaps, we’ve already exchanged numerous emails with Eric, but this email was different.

Eric asked me whether we have an internship program. He caught me by surprise and even though we’ve never had an internship program, I asked him what was on his mind exactly. As it turned out, Eric has written his own keyboard firmware based on AVRs and LUFA, making him the perfect candidate to develop the configuration parser of the UHK.

Since then, Eric has made tons of progress and now the firmware is able to parse almost the whole UHK configuration except macros. He’s now working on making the LED display show the abbreviation of the actual keymap, and then he’ll finish off macros, and develop the macro engine.

I feel very fortunate to have been contacted by Eric, and am having a great time working with him. The configuration parser shall be implemented soon!

Agent progress

Quite a few things have happened with Agent.

Right after Eric started working on the configuration parser, he couldn’t make Agent work on his Mac. I originally believed that it’s a privilege escalation issue, but Robi investigated further and realized that it’s a much deeper problem.

As it turned out, libusb, the library we used to make Agent talk to the UHK via USB isn’t supported on the Mac anymore. Apparently, recent OSX versions implement a new version of the USB subsystem which broke libusb.

Luckily, Robi found hidapi, the perfect alternative for libusb. In his true fashion, he didn’t waste his time, and ported Agent to use from libusb to hidapi. As a result Agent now runs perfectly on all the three major OSes.

Now, there’s only portability problem to be solved. blhost, the command line utility that updates the firmware of the UHK also utilizes libusb and it segfaults on OSX now that libusb is broken on Mac. Unfortunately, NXP doesn’t seem to care but fortunately, Santiago made me aware of pyKBoot, a python command line application that speaks the kboot protocol just like blhost, but which uses hidapi instead of libusb. I’ve toyed with pyKBoot a bit, and looks like it’s a viable alternative to blhost.

I think we can use pyKBoot but I’m not fond of it because we’ll have to package it as a standalone, self-contained executable, possibly using PyInstaller which will likely make the bundle size of Agent considerably larger than optimal. I’d really like to replace pyKBoot eventually with something more native to Agent. I think the best way forward is to port pyKBoot from Python to TypeScript later down the line.

Speaking of other parts of Agent, Robi has also implemented an auto-update mechanism. We have yet to refine it, but it seems to be already working.

Józsi also implemented a more general rendering mechanism for Agent, enabling it to render both ANSI and ISO keymaps according to your UHK version.

Electronics issues

Few days ago, I started to heavily test my backlit UHK prototype and found a serious issue. For some reason, the communication between the keyboard halves interrupted from time to time and eventually died.

Frustrated but determined, I delved into the issue and figured that it was caused by the LED drivers. When I disabled the LEDs, the prototype was rock stable. I further narrowed the cause, and found that the issue only surfaced when I enabled one of two LEDs, the LED of the right Alt key or the LED of the comma key.

I couldn’t make sense of this, so I got in touch with Integrated Silicon Solution Inc., the manufacturer of the LED driver ICs that we use. As it turned out, we didn’t place the bypass capacitor of the LED driver close enough to the IC. I soldered a through-hole capacitor as close as I could to the LED driver on my prototype and it solved the issue in no time.

Even though we don’t provide a backlit UHK version yet, many of you have expressed your desire to solder LEDs to your UHKs, so this is a big deal. Even more importantly, we already utilize the left side LED driver to drive the LED display and even though it didn’t produce such issues in itself, I fear that such issues could surface on a quite a few UHKs out of 2,000 UHKs, so this issue must be resolved.

Admittedly, this sucks, but thankfully, it’s a very minor PCB redesign which I’ll implement in about a day. We will, however, have to get new prototype PCBs made, assembled, and tested, so it will translate to a 2 week delay.

If there’s someone to blame, I surely am. I should have tested this way earlier. I’m sorry about this, but I’m also thankful because TUV hasn’t started testing our prototypes for the certification process and our PCBA contractor hasn’t started to manufacture the PCBs for the pilot run yet. I sent them notice just at the last minute. If I didn’t, we would have lost a lot of money due to this issue.

All things considered, even despite the PCB redesign, we’re getting very close. Pilot run notification emails will be sent out soon, followed by 50 UHKs, and followed by the rest of the 1,950 UHKs of batch 1. We cannot wait to finally ship!

Thank you for reading this update! As always, we’ll be keeping you updated on a monthly basis via our blog and newsletter.

Talk to you on 2017-08-17!

Tweaking the molds and preparing for the pilot run

Hi there, and welcome to our monthly status update!

TL;DR: The BOM is fully finalized and ordered. The UHK prototypes have improved a ton in the EMC department. Agent and the firmware has evolved a lot. The key cluster and trackball modules have been mechanically prototyped and tested. New developers joined our forces. We've tested the molds and found some issues which will introduce some delay. We plan to ship a pilot run of 50 UHKs in July. The rest of the UHKs are planned to be shipped starting from August. Please read on!

You can always check out the expected delivery date and update your shipping address on your Crowd Supply account page.

EMC improvements

We've been visiting the EMC lab of TÜV since our first successful test. The reason is twofold. First, we wanted to improve on the results, and second, there were some further tests to be done.

The testing results that we shared with you the last time already passed, but the safety margin was only 2 dbμV/m, instead of the recommended 5 dbμV/m. Our worry was that the margin was so thin that it was possible for the final test to fail. We really wanted to avoid any potential failure, so we have been tweaking various resistor and capacitor values, and have been trying various bridge cables and USB cables to make the margin wider.

You know what made a drastic difference? The USB cable. As soon as we tried a USB cable with a ferrite choke on the keyboard end, the EMC graph changed very substantially. Don't worry, this ferrite choke is only 24 mm x 14 mm in size, and it's very light so it doesn't weigh down the cable.

The updated EMC graph

According to this graph, we went from a 2 dbμV/m safety margin to about 18 dbμV/m! (See the vertical distance between the blue mark around 100M and the red line.) Given these results, we'd be extremely surprised not to pass the final test.

We've also conducted some further tests that we haven't done before. First, we put the prototype into the test chamber and tried to disturb it with focused radiation. We were watching it with a camera to see whether the LEDs go out, and checked it after the test. The prototype didn't break a sweat and kept functioning perfectly.

In the second test, the USB cable was put into a metal cage, and got a healthy dose of radiation. The criteria for this test is that the device can go out of service, but ultimately, it must recover by the end of the test.

The first time this test was executed, the LEDs on the left keyboard half went out and it didn't recover. After that, I made the firmware much more robust, and as a result, the left keyboard half was able to recover like a champ.

Speaking of LEDs, we got so many inquiries about backlighting that it justified its own post, so here you are: Everything about UHK backlighting.

Things are looking so good in the EMC department that I fully finalized and ordered the BOM for the PCBs of 2,000 UHKs, and if everything goes well the UHK will be certified very soon, possibly in June.

Agent progress

A lot has been happening to Agent, our configuration application recently. Józsi is still involved in the development of Agent, but he told me that going forward, he cannot guarantee a fixed number of working hours per month because his life got a lot busier. This made me search for the right candidates, and I'm happy to report that I found two excellent developers.

Róbert Kiss is busy with some of the most pressing Agent issues. Agent has an initial OS-specific privilege escalation step that allows it to access the USB interface of the UHK. Robi implemented the missing Windows-specific part of the privilege escalation step. He's also set up a build process, so that now Travis generates releases for Linux and Macintosh, and AppVeyor generates releases for Windows, and these files get uploaded to the releases section of GitHub. He's also mostly finished the auto-update mechanism of Agent.

Attila Csányi will be busy with a number of important but less time consuming issues given his limited time. He's already made the macro layout more responsive and made the currently selected key highlight and animate very nicely. These seemingly small issues add up big time when it comes to user experience.

Luckily, Józsi is still involved with the development of Agent. Lately, among other things, he's implemented ISO/ANSI layouts. Agent used to display only the ANSI layout but this change will allow it to show the correct layout, be it ISO or ANSI as soon as you plug in your UHK.

Firmware progress

Substantial progress has been made with the firmware recently. The easier part was making the communication between the halves more robust. First up, I added a CRC16-CCITT checksum to the messages between the keyboard halves to improve message integrity. Next up, I implemented a recovery mechanism for LED drivers so that the LEDs also recover when disconnecting/reconnecting the halves. I also made the communication packets between the halves more efficient and smaller.

The harder part is upgrading the firmware of the left keyboard half and modules via USB. You see, it's fairly easy to upgrade the firmware of the right keyboard half because it's directly connected to the host computer. The modules and left keyboard half however are not directly connected via USB. They're connected via an I2C bus to the right keyboard half.

The plan is to implement a proxy mode for the right keyboard half, so that it can route the firmware from the USB host to the left keyboard half and to the modules via I2C. Luckily, such a protocol translator is already implemented so we can use it. It's called BusPal, and it's part of the KBOOT (Kinetis bootloader) package. Unfortunately, it's not nearly as mature as KBOOT, and it was obvious that integrating it to the UHK firmware won't be a walk in the park. I was searching for a proficient developer to make this happen but despite my best shot, I couldn't find a right candidate, so I had to try to integrate BusPal myself.

There were three variants of BusPal within the KBOOT package but I noticed that only one supported USB, so I picked it. In the beginning, I couldn't even build it because it was developed using the the proprietary IAR embedded workbench, not with the free Kinetis Development Studio that is based on Eclipse and GCC. I simply started by putting BusPal into a subdirectory of our firmware repo and trying to make it work. It was an uphill battle at first because BusPal has a huge codebase of which we need very little functionality. Just making the compiler happy has taken days, and after that it was even more work to make it functional. Luckily, over the course of about two weeks, BusPal enumerated over USB and could talk to the left keyboard half. Well, mostly.

Now, I can send protocol commands to the left keyboard half via BusPal but they don't work every time. As it turns out, the ROM bootloader of the KL03, the processor of the left keyboard half is buggy as documented by errata ID 8060, and these bugs have to be worked around. I can erase the processor and query properties, but the firmware upgrade command breaks. Given my myriad of responsibilities, I'd much rather delegate this last step, and it seems that I might have just found the ultimate developer. More about him later.

The state of modules

Up until this point, not too much has been said about the progress of the modules. That's because our primary focus is getting the UHK to market, so András only works on the modules when he has some free time.

At last, I'm happy to show you the first version of the 3D printed modules:

These prototypes were printed using a white, powder-like material, but the final modules will be offered in black color.

Originally, we created two versions of the modules, one of them being totally flat, the other one being angled.

Flat key cluster module on the left, angled key cluster module on the right

We've been experimenting with a front and a top mini trackball on the key cluster module, but concluded that the top one is much more usable, so we'll ditch the front-sided mini trackball.

Angled trackball module on the left, flat trackball module on the right

The trackball module from the inside without the PCB

The reason we've made two versions is to test them and see which version is more ergonomic. The flat modules made our thumbs stretch significantly less, so we're confident that they're a better choice. This is also very fortunate from a manufacturing standpoint as the space inside of the modules is very limited, and even more so in their angled versions, so the flat versions will be easier to design and manufacture.

We also found that it's not a good idea to use two buttons per module because the inner button which is closer to the UHK usually gets pressed when pressing the case button of the UHK. Our plan is to only feature a single button per module, the outer button that is farther from the case button of the UHK.

This is a big step forward, but there's still a lot to do in the future. These plastic cases don't contain PCBs yet, so they will have to be designed. Luckily, the left keyboard half is an module from an electrical, firmware, and protocol standpoint, so we will be able to reuse its schematic and firmware. These plastic cases of the modules are only made for mechanical testing purposes and need to be redesigned here and there because they are not manufacturable, and lack structural support.

Molding plastic parts

I'm a software developer by trade, so I have little knowledge about injection molding. A couple days earlier however, I was fortunate enough to observe the process up close in an injection molding facility where we tested our molds.

The mold of the top right case

As so many things, injection molding looks deceptively simple. Plastic flows into a mold, and the perfect plastic part falls out of the machine. Just like on this video:

In practice, lot of things can make a plastic part less than perfect, such as warping, which is the major issue we have mostly fixed.

You see, warping is a very common phenomenon, and it's usually so slight it doesn't matter. In our case however, it does. As it turns out, of all the keyboards ever created, the UHK is probably the most sensitive to warping. This is because when the plastic cases of the two keyboard halves are merged, it becomes extremely pronounced.

When the UHK is merged and the halves warp even slightly, a very slight V shape can be noticed. This shape raises the four outer legs while the four inner legs firmly touch the ground which is obviously unacceptable.

Surface finish issues, such as sink marks and surface defects are another category of injection molding issues we have to deal with which we have also mostly fixed.

One way to fix the above issues is to tweak various mold and injection parameters which we were actively pursuing quite successfully during our three-day stay at the factory. It's mind-boggling how many parameters can be tweaked, such as the injection speed, pressure, after-pressure, mold temperature, the duration of the molding process, and many more. To make things even more complicated, these parameters are not single numeric values but rather graphs, and multiple points of the graph can be set along the time axis!

The other way to fix these issues is to modify the molds themselves. This is usually more time consuming and involves machining the molds in various ways. Some of our issues can only be solved this way.

We have a rough schedule in place regarding the plastic parts:

  1. Within days, the injection-molded cases will be scanned with a 3D laser scanner to reveal the inaccuracies for the molds to be fixed.
  2. In the next week, the left and right bottom molds will be fixed according to the above results.
  3. Another week later, we'll mass-produce the bottom parts for the pilot run.
  4. Within a month, we'll get all the molds fixed, fine-tune technological parameters, and manufacture every plastic part for the pilot run.

As for the big picture schedule:

  1. In July, we’ll manufacture a pilot run of 50 UHKs and send them out to our pilot testers, which include the various developers, contributors, and backers who have helped us along the way and indicated a willingness to help us rigorously test the UHKs before the main production run and work out any final kinks should they arise. All 50 pilot run units have been assigned, but if any of our pilot testers drops out and we need to fill a spot, we'll solicit volunteers. We haven’t talked about the pilot run yet, but we think it’s critical for the first UHKs to be tested before we actually start the main production run.
  2. In August, we'll launch the mass production of the remaining 1,950 UHKs. The goods will flow out continuously and be shipped approximately in the order they were purchased. Since we are using fulfillment centers in both Hungary and the US, there will be some variation in when your order is shipped, depending on your shipping address, but, basically, the sooner you ordered your UHK, the sooner you'll receive it.

Thank you for reading this update! As you can see, we have to deal with the molding issues which do introduce some delay, but at the same time, we're also making rapid progress. We're asking for your patience and support during these last miles. We'll make sure the UHK will be worth the wait.

As always, we'll be keeping you updated on a weekly basis on social media, and on a monthly basis in this blog and our newsletter.

Talk to you on 2017-07-13!

The first sample batch and EMC test

Happy New Year, everybody! This is the most recent installment of UHKzine - your authentic, monthly news source on all things UHK. In this update, there’s good news (production is moving along nicely), bad news (we need to delay delivery by two months to April 2017 in order to fix electrical noise so the UHK can pass FCC and CE certification), and more good news (we’re already vetting some great candidates to fix our PCB design in order to reduce the electrical noise).

The first sample PCB batch

We visited our PCBA contract manufacturer to prepare for mass production. They wanted to assemble five boards, so that we can get a good grip on the process, create jigs, and optimize for manufacturing as much as possible.

First, we figured out how to solder the switches and plates to the board in the most productive manner.

After discussing the surface mount part, we talked about through hole assembly. The panels will go into the following jig.

And the jig will go into the selective wave soldering machine, soldering the leads of through-hole components, mostly the keyswitches.

Some time after the meeting, they sent us a couple of pictures of the assembly process.

UHK panel in the pick and place machine

SMT-assembled panel

Soldering the switches

After finishing with the first sample batch, our contractor has followed up with some suggestions to further improve the PCB design for manufacturing. These were very minor improvements. Things are looking good in this department.

New case and plate samples

We’ve got a couple of new case and plate samples from our contractor.

Bottom case parts and plates

Top and bottom case parts and plates

The new plates are extremely accurate and fully ready for production. The cases are close to perfect, but still have some sink marks.

Top sink marks

Side sink marks

We’re about to use the mold with a more capable injection molding machine, which may make these sink marks disappear. If not, we’ll modify the mold further.

Parts are flowing in

We’re in the process of ordering every part from all around the world. Some recent ones:

Threaded inserts

Dowel pins for the male guides

USB velcro ties

We’ll be keeping you posted on the new items as they arrive.

Measure the force, Luke

The splitting / merging of the keyboard halves is a central part of the UHK user experience. This experience is very much dependent on the force the magnets exert. Although we have an intuitive feeling regarding the optimal amount force, being engineers, we want to be able to measure it, and make sure that it’s consistent across the keyboard halves, and across a keyboard half and module. This has justified having a force gauge.

The measurements will give us a good idea about the strength of the magnets and how to choose the material of the magnets’ counterparts. We’re only a couple of days away from starting the production of the counterparts, and ordering the magnets.

EMC testing

EMC stands for electromagnetic compatibility, and such tests basically make sure that electronic devices do not interfere with each other. Because, believe it or not, people expect their phones to work when the microwave is on. You get the idea.

The UHK is no microwave, but in order to be allowed to be sold worldwide, we have to stick FCC and CE logos onto its back. And in order to be entitled to use these logos, the UHK must pass standard EMC tests.

This made us visit the EMC lab of T-Network to measure the electromagnetic emission of the latest UHK prototype. T-Network is a logical first step because their measurements are fairly affordable unlike the final measurements and certification at TÜV which is an order of magnitude more expensive. We better get this right because if not, we’ll have to pay big bucks to TÜV upon every subsequent try.

After walking into their building, making a few turns, and finding the right door of the long corridor, it wasn’t hard to notice that we arrived to the right place.

When opening the inner door of the lab, the SAR, or semianechoic room gets revealed. This is where the actual measurements take place.

In this setup, the UHK is plugged into a laptop and sits on a table, measured by the scary bigass antenna in the corner. Let’s take a closer look at it.

On this image, the antenna is oriented horizontally, and it stands in its lowest position, but it can rise way, way up.

During a measurement session, the antenna rises 4 meters upwards, then rotates its head vertically, and also does measurements that way. The result of the measurement is a graph.

This one has failed

The goal is to stay below the red line which we only achieved once out of 15 measurements: when the UHK was powered from a USB power bank, and hence it only received power and USB communication was inactive.

Success!

So according to the measurements, we have a good reason to believe that the USB circuitry of the PCB is not routed optimally. Even though I couldn’t foresee this, it’s not all that surprising because I routed the PCB using some external help, and I’m not an electrical engineer.

I’ve been told that failing the first test is pretty usual, and we shouldn’t be overly worried. In any case, it’s apparent that the time has come for me to resign as a self-taught PCB designer, and hand over the redesign of the PCB to a professional. As a matter of fact, I may have already found the right person. More on him in the next update.

As a last word of this section, I’d like to sincerely thank Robi for helping so much in the lab. His help was critical to figure out the exact problem.

Introducing our new contributor

Free and Open Source software is known for attracting numerous contributions, and we’ve been fortunate enough to receive our fair share. Which brings me to Gergely, who is the king of the hill when it comes to keyboard firmwares.

My name is Gergely Nagy (or algernon, for those who don't speak Hungarian), and I'm a jack-of-all-trades kind of free software zealot. I first came across the UHK in late 2014 when I was looking for a new keyboard. Since that time, I ended up contributing to QMK (the firmware that powers my current keyboard), KeyboardioFirmware (which will power my next keyboard), and I couldn't help but contribute to UHK's firmware too, which will power my mother's next keyboard. I may have developed a thing for keyboard firmware, much to my wife's regret. My current focus is parsing the config sent by Agent, and teaching the firmware to apply that at run-time. ...and whatever else I can find the time for.

To this day, Gergely has been working on three entirely different keyboard firmwares, which unquestionably makes him one of the most knowledgeable contributors we can ever wish for. He’s been hard at work with the UHK firmware, and ended up implementing loads of features, including mouse keys and, most importantly, a significant chunk of the configuration parser. And it looks like he still hasn’t had enough!

Our deepest gratitude, and a UHK with all the bells and whistles goes to Gergely!

At the same time, Jozsi was working on Agent, making it able to transfer the selected layer to the UHK via USB. Seeing the configuration getting effortlessly updated in a blink of an eye via USB is magical. It’s very nice that all of our hard work pays off.

Expected delivery schedule

We keep making rapid progress and most things proceed according to our schedule, but not everything. The EMC issue is something we couldn’t foresee, and the PCB redesign will affect our delivery schedule.

We’ll try to reduce the delay as much as possible. Recently, I’ve made contact with expert PCB designers to resolve these issues as quickly as possible. I’ll meet all of them within days, and wrap this up as quickly as we can.

According to the above, we are moving the release schedule of the UHK and palm rest to the end of April. We wish we could do it sooner, but as a startup, we are destined to go through these hoops, and learn things the hard way. After releasing the first UHK model, creating further products is going to be so much easier!

As always, we will be keeping you updated on a monthly basis in our newsletter/blog, and on a weekly basis on social media. Should you have any questions, you’re always welcome to reach us.

Thank you for your continued support, and we’re excited to talk to you on 2017-02-16.

Putting the (plastic) pieces together

Hi there, and welcome to our monthly status update! Let’s warm up, and see what’s been happening in UHK land these days.

Mold meetup

Our mold-making contractor let us know that they’re done with the molds of every plastic part, so we made a second trip to Serbia to check them out.

The best part of the meeting was snapping together the top and bottom parts of the case, and hearing the satisfying click sound, meaning that the parts fit together accurately. This is not something we’ve ever heard when trying our 3D printed prototypes.

Putting the LED display into the case was a similarly elevating experience. These parts are so precisely fabricated that they look like a single part from the outside.

The newly created top case parts

The assembled case without the switches and PCB

Having all of the plastic parts injection molded is a major milestone, but it’s not the end of the story. Aesthetics will improve by tweaking technological parameters of the molding process. This is fully expected in the world of manufacturing, and our contractor is working on them.

Inserts

Having the injection molded parts and the final inserts in his hands, András put the inserts into the case and tested them.

As it turns out, even 16 kg can't pull a single insert out. We're about to order 16K of these little guys.

Guides

What does one do with 80 kg of stainless steel rods? Turn them into 16,000 guides to hold the keyboard halves together!

As you can see, we have already ordered the raw material, and we’ve also found a local manufacturer who will get the job done.

Palm rests

In our previous update, we published a picture of the wooden inlays on the palm rest but weren’t sure about the final color. Now, we’re experimenting with a couple of options.

Let me introduce you my mother, Klára Monda, who just happens to be a furniture painter folk artist. That’s right folks, the UHK is becoming a family business! Having more than 40 years of experience behind her, she’s more than qualified to dye and lacquer the wooden parts of the palm rests.

So far, a dark brown “walnut” dye seems to be the best match for the UHK case, but we will also give a graphite color a try soon. We’ll keep you posted.

New PCB

10 of our 7th generation PCBs are being fabricated at Eurocircuits and will arrive at any moment.

These PCBs should fully resolve acoustic and electrical noise issues and contain lots of small improvements. They’re heavily optimized for manufacturing, boast 100% test point coverage, and also include little touches like the UHK and OSHW logos. As soon as they arrive, I will assemble a couple and meet Robi to test them thoroughly.

5 of the prototype PCBs will directly go to our PCBA contractor. They’re eager to do a first small prototype run so that they can create the tooling for efficient mass production.

Agent

Józsi and Nejc have been working very hard on Agent. As the fruits of their labor, Agent has become far more polished than ever before.

You’re welcome to check out Agent in your browser to see for yourself. Click on any key to see the key action popover appear. Then associate an action of your desire, and see the new action displayed on the key. Then rename a keymap, or its abbreviation, set it to default, duplicate it, or delete it. All these things should work smoothly now.

We still have a lot to do, but Agent already resembles the final application pretty well, and we’re making rapid progress.

All hail the Input Club

Jacob Alexander of the Input Club has been doing some mad science lately. He has created the The Comparative Guide to Mechanical Switches by doing one-of-a-kind mad science. Lucky for us, Kailh switches were rated among the top contenders, so it looks like we’ve made a great choice. We’re extremely impressed by Jacob’s work.

While speaking of the Input Club, let’s give credit where it belongs. When porting the UHK to ARM and searching for the best microcontroller and LED driver we could use, we checked out their open source keyboard designs, and picked the same ARM processor and LED driver that they used.

Later on, we upgraded to a more powerful processor of the same family, and created our own schematic, PCB, firmware, and configuration application, but still, they have definitely affected our design in positive ways, so mad props to them!

More frequent updates on social media

Lately, some of you asked for more frequent updates and we’re glad to comply! Since our last newsletter update, we published 3 updates on social media. The plan is to post updates on a weekly basis on social media. You’re welcome to subscribe to our Facebook, Twitter, and Google Plus channels to for even more UHK goodness.

And that was it, folks! We’ve arrived at the end of our December update.

Let me take the opportunity to wish every one of you Merry Christmas and a Happy New Year on behalf of the whole UHK team! We’re so happy that you guys are on board!

Talk to you on 2017-01-19.

Monthly progress

You know the drill: a new month always brings a new status update. Let’s delve into what’s happened lately!

Tooling status

Our mold making contractor has been working on the top molds of the UHK case and are on schedule. Here are the molds of the top case parts:

The mold of the top left case part

Molds of the top case parts

At this pace, the end is near. We should be able to test the final plastic parts within weeks!

LED display

In our previous update, we showed you the mold for the LED display. Since then, our supplier baked a complete unit featuring the PCB, the LEDs, and the epoxy inside. The result is a blindingly bright LED display!

LED display shining bright

The display is so bright that it’s rather overkill at night. Luckily, the LED driver ICs that we use allow us to precisely set the brightness level - which we will expose as a user option eventually.

And this is how it looks when scrolling the alphabet on it:

Actually, it looks better in real life, but not when recorded with a mobile phone under suboptimal lighting conditions.

Some problems still have to be resolved, though. The forward voltage of the white LEDs are considerably higher than of the red/yellow LEDs which results in an unbalanced charlieplexed LED matrix that has a tendency of ghosting which is noticeable, especially when only the white LEDs are on:

LED display ghosting

There are several ways of fixing this issue, so if everything goes well we’ll simply throw a couple of diodes at the LED matrix and make our supplier redesign the PCB of the display. We really try to keep the white LEDs, but in the worst case scenario, we’ll use LEDs of a different color instead, whose forward voltage matches that of the red/yellow LEDs.

Another issue to be resolved is acoustic noise. The LED driver ICs generate a high frequency noise that is slightly disturbing. This is due to the capacitors and inductors, which shrink and expand according to the PWM signal that drives the LEDs. There are about a half dozen ways to deal with this issue. Some of them increase costs, others increase complexity. We may end up combining multiple approaches to get the best result.

Firmware

Lots of things have been happening in firmware land lately. The FRDM dev boards that feature the processors we use have already been working for a while, but the firmware wasn’t tailored to our PCBs.

First up, I tried to set up the multipurpose clock generator of the K22 MCU which made me realize how much of a hideous beast it is. It would have likely taken me weeks to make it work, so instead, I summoned Santiago who set it up like it was a walk in a park.

Then I went on to implement the key matrix scanner, made the left keyboard half send key states to the right keyboard half, implemented a rudimentary USB communication protocol, exposed the EEPROM and LEDs via USB, and made all the peripherals work.

Not being a battle-hardened firmware developer, it’s always the low-level MCU programming that gives me the biggest headache. Now that these parts are in place, we can finally focus on implementing the high level architecture, protocols, features, and cleaning up the codebase.

The only major low level feature left is the bootloader, on which Santiago is working, and he should finish in November. In the meantime, we can simply use hardware USB programmers to program the firmware via the ARM SWD ports of the UHK.

Currently, the firmware is able to exercise the full breadth of hardware features, proving that our current generation PCBs work as expected. Next up, I’ll send a couple of assembled PCBs to our developers and contributors, so that they can make Agent communicate with the UHK via USB, and develop the firmware further.

Agent

Jozsi and Nejc have been working hard on Agent.

Nejc implemented a data layer that persists the state of Agent into local storage. That’s right folks, from this point on, all of your keymaps and macros will be automatically saved. Mad props to Nejc for his hard work!

Jozsi implemented the rendering of mouse actions, updated to the latest (and now stable) Angular and TypeScript, and removed loads of legacy code.

I’ve written a couple of scripts in the usb branch of the Agent repo to demonstrate USB communication by reading and writing the EEPROM and LED driver ICs of the UHK. My half-baked code will eventually be refactored and integrated into Agent.

Graz meetup

Usually, Santiago is located in Madrid, but nowadays he lives in Graz, helping a major customer of NXP. Living near us, he recommended that we should meet, and we have gladly taken the opportunity. I also asked Nejc whether he wants to join - to which he said yes. And so, the four of us could finally meet in person.

Graz meetup

There was no shortage of interesting conversation and fun times. Apart from a fair amount of geek talk, we ended up showing our apparent lack of pool skills.

And that wraps up this update! Looking forward to talking to you again on 2016-11-18.

Monthly progress and choosing a switch brand

Welcome to this installment of our monthly progress update! This series is composed of two parts: 1) the major happenings of the month, and 2) choosing a switch brand. Let’s get started!

Monthly progress

A lot has happened since our last update. Let’s see the nitty-gritty!

The first plastic case and metal plate samples

Our Serbian contractor has manufactured the first samples of the bottom parts of the case, the case buttons, and the metal plates.

This is the case freshly injection molded:

Right bottom UHK case in the mold

And then it’s ejected from the mold:

First test sample of the right bottom case

It’s easy to see the protruding pole-like plastic part where the case has been shot. This gets manually removed after molding.

Some more samples with the protruding part removed:

Don’t worry about the aesthetics. These are just test shots.

Don’t worry about the aesthetics. These are just test shots.

The first sample of the case buttons:

Case button samples

The first sample of the metal plates:

First samples of the metal plates

Let’s put the plate into the case:

Metal plate in plastic case - first sample

The plastic parts look pretty good for the first try, but they have some minor inaccuracies that will need to be corrected. This is nothing unexpected, and corrections like this are usual in the world of manufacturing.

Palm rest

András and I visited a nearby company who cuts foam of various types. We asked for a couple of samples:

Foam samples

Pretty quickly, the 3D printed base plates also arrived (which will be ultimately crafted of aluminium):

3D printed base plates for the palm rest

And then the time has come to cover the foams with drape and put everything together:

Palm rest prototype

This is how the palm rest looks like when fixed to the UHK:

Palm rest prototype on UHK

We’re not ready yet. The type of the foam, the technology, and the drape to be used are not final. This continues to be an active area of development, and in our true style we’ll be keeping you in the loop.

LED display

Our LED display manufacturer has finished the mold of the display and created a couple of samples. This is the front side:

UHK LED display plastic part - front side

And the back side:

UHK LED display plastic part - back side

Next step, the PCB of the display will be put into the plastic shell, then it will be filled with epoxy, and a sticker featuring the graphics will be put onto the front side. We should get a ready-made sample pretty soon.

Finding our PCBA manufacturer

We’ve already picked about a dozen of suppliers who will provide all the different parts of the UHK, but a major manufacturer had yet to be found for assembling the PCBs.

So I started to request quotes from foreign companies, but when I received them, I stopped for a moment. “Wouldn’t it be great if we could find a nearby company?” - I thought. And then I emailed all 20 of the PCBA companies of Hungary and waited for quotes.

Then the impossible happened. It turned out that one of them is located in Kalocsa, the same small city where we’ll assemble the UHK. Not only are they next to us but they’re very responsive and interested in the project. We toured their facility and concluded that they’re the kind of guys we want to work with.

We’ve exchanged many emails and made a number of phone calls since then. These conversations are supremely useful, as we can heavily optimize the design of the PCB for manufacturing. As an added bonus, it seems like they can assemble not only surface mount components, but all the through-hole parts, so we won’t have to take care of those separately. We couldn’t wish for more.

And this is how we managed to insource PCBA by finding a company who is not 8,000 but 2 km away from us.

All hail our awesome contributors

Agent has been developed at a rapid pace lately, which leads me to introduce our latest and greatest contributor - Give it up for Mr. Mikko Lakomaa!

Mikko

I'm Mikko Lakomaa, a web developer from Finland. I've worked as a full stack developer for about a decade now but have shifted my emphasis towards front-end JavaScript development in the last few years. I got interested in the UHK when I was looking for a more ergonomic keyboard and it just happens that their software uses technologies I wanted to learn so I decided to help them out.

Over the last few weeks, Mikko has managed to push the Macro UI of Agent to the next level, so mad props go to him along with a UHK with all the bells and whistles. Thank you so much for your contribution, Mikko!

Jozsef and Nejc are also pushing hard and have been making solid progress. Nejc has implemented the add keymap UI of Agent and now working on the data layer which manages the internal state of Agent. Jozsef has been implementing his fair share of refactorings and reviewing a fair number of pull request as the lead developer of Agent.

And now to the second part...

Choosing a switch brand

We have just decided which switch brand will be used for the UHK. Our campaign page mentions Gateron or Greetech as possible candidates, but in order to make the best choice we ended up considering other brands, too.

It’s important for us to share our thought process with you, so we’ll go over all the brands one by one and highlight some major points.

Cherry

Cherry MX switches

Cherry is hardly stranger to anyone, given that they’re the original designer and manufacturer of Cherry MX switches. Then their patents eventually expired, and other brands entered to the market and replicated their switches.

Cherry is the most trusted brand because they started the show, and they’re still in business after all these years, so it’d make logical sense to pick them over the others except for one thing: availability.

The supply chain issues of Cherry MX switches have been prevalent over the years. Cherry is known for striking exclusive deals with the top keyboard manufacturers of the world, much to the dismay of smaller manufacturers who weren’t able to source Cherry switches in a consistent-enough manner to manufacture their products.

Some manufacturers switched from Cherries to alternative brands, and were accused of cheaping out. We doubt that these guys were actually cheaping out. Some of them might have, but others simply wanted to get their products manufactured. We don’t want to be ever put into this situation.

Availability issues have been well known for long time, so back in the day I ended up phoning Cherry’s German sales office only to be informed that there’s nothing they can do about supply chain issues.

Given the above, we’ll only use clear and green Cherry switches because no other manufacturers create switches of such types, but for everything else we’ll use another brand.

Gateron

Gateron switches

Gateron switches are well known and loved by the keyboard enthusiast community. Gateron manufactures quality switches and trusted by many, so it’d make sense to pick them. We have two issues, though.

The first issue is the lack of direct contact with Gateron. Call us old school, but we like to get involved with manufacturers to be able to discuss any potential issues. We weren’t, however, able to reach Gateron neither across the Internet, nor via phone. We even asked a friend of ours in Hong Kong to try to get in touch with them, but he wasn’t able to.

We would much rather do business directly with a manufacturer than using a buying agent. Again, it’s not because of the slight added cost, but the ability to directly communicate with them.

The second issue is that Gaterons use milky white plastic for their housing. This shouldn’t be a problem for most keyboards because the switches underneath the keycaps are hardly visible, but it’s a different story for the UHK. When the halves are split the milky white color becomes visible, and it doesn’t gel well with the rest of the keyboard which is usually black.

Because of this, we don’t consider Gateron an ideal choice for us, and would rather pick an alternative brand.

Greetech

Greetech switches

Greetech switches resemble the look of Cherry switches the most closely. It’s very easy to miss the difference because the shape of the two seems identical. Only the text featured on the housing of the switch tells whether it’s a Cherry or a Greetech.

The Greetech switches we tested felt great. Being very similar to Cherries makes them a great choice for us, not only functionally but visually. They offer 4 MX switch types (each with or without stabilizer pins) and 2 low profile switch types.

Greetech is a great candidate, but our story doesn’t end here. We wanted to go all the way and consider every switch type.

Outemu

Photo is courtesy of Massdrop

Photo is courtesy of Massdrop

Truth to be told, we don’t know a whole lot about these switches. We can see them being used in various, mostly Chinese keyboards, but we couldn’t even find their website, and have no way of reaching them directly, so our main concern is the same as for Gateron switches.

Kailh

Initially, Kailh wasn’t on our radar because we assumed that they only strike deals with large companies and don’t serve small startups like us.

Eventually, our keycap and keyswitch supplier recommended Kail switches. He’s a guy who is also a keyboard designer, deeply passionate about keyboards, and very concerned about quality. In his opinion, Kailh switches are better than other MX compatible switch brands.

Today, I tested about 500 Kailh switches by hand and although I’m not a perfect switch testing machine, every one of them felt great and consistent. András has made a couple of blind tests and he put Cherry and Kailh into the same group 3 times in a row and put Gateron and Greetech into another group. This doesn’t necessarily mean anything, but it might mean that the feeling of Kailh switches resemble Cherry more than other brands.

There are a couple of points to be noted about Kailh. They’re a major MX switch manufacturer with more than 2,000 employees. Their manufacturing process is highly automated which should translate to great and consistent quality across their products. Their supply chain is robust and they have plenty of stock, so they can serve their customers without significant delays. Their sales channel is responsive. Kailh also manufactures automotive parts which is encouraging, because automotive manufacturers have to comply very strict quality guidelines.

Kailh’s MX switch offering is unusually rich. They offer switches of different case colors (black and transparent), optimized for regular LEDs, RGB LEDS, and SMD LEDs, and are available with or without pins.

From the innovator’s point of view, an even more interesting fact is that Kailh is not just a copycat. They recycle a significant portion of their capital into R&D, resulting in new products like the following:

Special Kailh keyswitches

Most of these keyswitches are not MX compatible but they offer various advantages over standard MX switches, like lower form factor, improved backlighting, and such, allowing developers to create new keyboards that stand out in various areas. We consider this a good thing.

Making the decision

When googling for keyswitch comparisons, one can find tons of opinions and very few facts. Some people or communities pick a brand to glorify or berate for little or no reason. We always try to be as objective as possible, and make the best choice that will result in an exceptional keyboard.

Considering all the factors, we have decided to use Kailh switches for blue, brown, red, and black, and Cherries for clear and green.

It’s important to mention that our decisions are not primarily governed by the price. There’s little difference between the price of Cherry MX compatible switches, and if we really wanted to cheap out, the first thing we’d do is to replace the super high quality Omron SS-01D microswitches of the case buttons with a cheaper part. One SS-01D switch costs about as much as 10 MX switches but the alternatives of the SS-01D have inferior durability, so we’re not willing to use those.

2018-04-28: As it turns out, Omron microswitches are reasonably priced when purchased in bulk, but they're hard to purchase in large quantities. Our PCBA contractor suggested an alternative part, the Diptronics MS2-5PN-1D(Ag) microswitch. After examining this part, we found that it represents the same high quality as the Omron SS-01D. I wanted to clarify this before being accused of cheaping out. As a general rule of thumb, we never use alternative components unless we're sure that they're of the same high quality as the parts in our BOM.

As you can see, there are a lot of factors, such as quality, availability, and aesthetics that come into play when picking a part. We think that, given the above, Kailh is an excellent choice and we’re excited to use their keyswitches in the UHK.

Should you have any opinions, you’re always welcome to let us know.

It’s been a pleasure to talk to y’all! Let’s touch base on 2016-10-13.

The feet and palm rest design is nearly complete

Howdy all! It’s time for our regular monthly progress report. Let’s get right to it!

Feet and palm rest design

András has been busy designing the feet and palm rest of the UHK. The current design is close to final, so we’re excited to show it off.

But first, please fasten your seatbelts. The UHK is highly modular and configurable in nature and the feet and palm rest are no exceptions. There are a lot of combinations of feet configuration so let’s dive in!

The design

There are 4 feet mounting positions per keyboard half located in the corners of the halves:

feet mounting positions without palm rest

When using the palm rest, the number of feet mounting positions (4) is unchanged, but their location spreads across a larger area because the bottom 2 feet per keyboard half are mounted to the palm rest:

feet mounting positions with palm rest

A foot can be mounted with 3 screws and can be rotated in 90 degree increments:

foot-degree-animation-640

In any of the 8 positions, a feet can be unmounted (no elevation), mounted and closed (slight elevation), or mounted and opened (large elevation):

foot mounting animation

The bottom of the feet are rubberized, even sideways, and the UHK has its own small rubber feet so the keyboard won’t slide in any configuration:

Rubberized foot

The palm rest is fixed to the keyboard with 2 screws per keyboard half, screwed into the stainless steel inserts of the UHK:

palm rest screws

Given the number of combinations, we can’t go over every possibility, but we’d like to highlight the most popular ones.

Positive tilting

4 closed feet are used in the top positions of this configuration. The palm rest is not featured on these pictures but you can use it if you want to.

Side view

Side view

Isometric view

Isometric view

Bottom view

Bottom view

Negative tilting

In this configuration, 4 closed feet are used in the top positions and another 4 opened at the bottom positions mounted to the palm rest.

Side view

Side view

Isometric view

Isometric view

Bottom view

Bottom view

Tenting

4 opened feet are used in the inner positions and oriented towards the center of the keyboard.

Side view

Side view

Isometric view

Isometric view

Botttom view

Botttom view

There are so many possibilities that we’ll surely end up writing a manual just on this topic. Stay tuned!

Mold and cutting tool progress

It is apparent that our Serbian contractor is hard at work. This is the sheet metal contour cutting and bending tool. It’s already functional, but we have to wait for the assembly of the rest of the tooling so that the holes of the MX switches will be cut, too.

sheet-metal-contour-cutting-and-bending-tools

And this is the injection molding tool of the case buttons which is also functional:

injection molding tool of the case buttons

We’re happy about the progress of our Serbian contractor and can’t wait to see even more hunks of steel.

The 6th generation PCBs are being fabricated

Lately, I’ve been working on redesigning the schematic and PCBs of our latest prototype. These are the fruits of my labor:

The back side of the right PCB

The back side of the right PCB

The back side of the left PCB

The back side of the left PCB

The improvements are plentiful, featuring:

  • the super powerful MK22FN512VLH12 and MKL03Z8VFK4 MCUs
  • IS31FL3731-SALS2 LED driver ICs per keyboard half allowing for per LED backlighting (we can’t provide LEDs and translucent keycaps yet but the ICs will be on board)
  • 2x5 0.05” ARM programming header + Tag-Connect TC2030-NL header + TC2030 header per board for extra developer goodness
  • optionally solderable reed switch per board to reset the MCU without disassembling the case to make it easy to hack the firmware even if jump to bootloader feature gets screwed
  • optionally solderable I2C breakout header for developing modules in a breadboard friendly fashion
  • optionally solderable test LED per board for debugging purposes
  • pogo pins and I2C (versus the previous UART protocol) between the keyboard halves enabling the use of modules mechanically and electronically

A small batch of these boards are being fabricated right now at Eurocircuits and can arrive in any moment. I’m also about to order loads of components real soon which will be soldered onto the boards. These PCBs are supposed to resemble the final production boards very closely, so we’ll make sure to give them a fair amount of testing.

If you are one of those people who grok electronics please don’t hesitate to check out our electronics GitHub repo and give us feedback about the schematic and boards. We consider every single suggestion as we really want to get the design right.

Progress on Agent

Agent has been heavily refactored lately as we port the legacy jQuery codebase to Angular 2 step by step. This is one of those things that’s hard to notice by looking the application but it’s very significant regarding the long-term development of Agent.

This brings me to the star of the month. Give it up for Mr Nejc Zdovc from the beautiful town of Celje, Slovenia!

nejc

My name is Nejc Zdovc and I have been programming for the last seven years. I have a Master’s degree in Computer Science and Information Technologies. I was drawn to Angular 2 community last year and ever since, I’ve enjoyed pushing its boundaries. At the beginning of this year, I was having wrist problems and that’s why I was looking for a new ergonomic keyboard. I stumbled on the UHK and, with a little research, I found out that this is an awesome project, so I decided to start contributing. For the last few months I have been helping József with Agent.

Nejc has been helping out a ton with the Angular 2 port. Previously, only keymaps were managed by Angular 2, but he made the whole application governed by Angular 2 by componentizing it. He ported the side menu to Angular 2 and wrapped select2 into a component. This is serious progress and requires a lot of dedication. The work is not over yet but his help has been a quantum leap forward.

You know what’s crazy? Nejc and Sam don’t have a UHK at their hands yet and still, their contribution has been above and beyond expectations. I wouldn’t have expected developers contributing substantially before we deliver the hardware, but apparently it’s already happening. This is Free and Open Source at its best, folks! I can’t even imagine what will happen after delivery. I’d love to see our GitHub repos blown away by contributors!

As a token of our appreciation, Nejc and Sam will get a well-deserved developer unit soon, then eventually a final UHK with all the bells and whistles. It’s really the least we can do for them.

We’ve just arrived to the end of this update. I hope you enjoyed it, and talk to you on 2016-08-18.

Tooling is progressing

Yet another month has passed by, and so it’s time for our regular monthly update. Let’s see what’s been going on!

The tools are in the works

On the 21st of May, we made a trip to Serbia to visit our contractor who is responsible for designing and machining the cutting tools for the steel plates and the molds for the plastic case.

As soon as they welcomed us to their facility, we were having a thorough conversation about the tools to be made. At this point, the cutting tools were already being manufactured and we had discussed all the small details about the molds so that they can start to manufacture them, too.

table-discussion

The participants of the conversation included the owner of the factory, his son, their chief mechanical engineer, our two consultants who have a vast amount of experience regarding plastic molds, András, and myself. Admittedly, I was the most clueless of the team given that I’m not a mechanical engineer. Still, what was said made sense to me even if I didn’t catch some details.

Then we hit their workshop to see the progress on the cutting tools for the metal plates in which the MX switches sit. I’m happy to report that they did not disappoint.

The parts of the cutting tools, take 1

The parts of the cutting tools, take 1

The parts of the cutting tools, take 2

The parts of the cutting tools, take 2

A part of the a cutting tool is being machined on an electrical discharge machine (EDM)

A part of the a cutting tool is being machined on an electrical discharge machine (EDM)

Our Serbian contractors have been making great progress. At this pace, they should finish with the cutting tools soon.

After touring their workshop and discussing everything there is to discuss, we hit the nearby pub and had a great conversation with the whole team. We discovered that they’re not only master craftsmen but great people. We are very pleased that everything’s on track, and it was very nice to get to know them personally.

Since our visit, they’ve also been making crazy progress with the molds. Check out the following picture. This was a block of steel when we visited them and now it’s rapidly taking shape.

The mold of a case button

The mold of a case button

Testing the mechanical prototype

We’ve assembled the 6th generation mechanical prototype with both MX switches and Matias switches. Here’s the Matias version.

Matias UHK prototype

Just to avoid any misunderstanding, we won’t be able to provide a Matias version anytime soon because we can’t source Matias keycaps yet, and additional tooling will have to be made. But we plan to provide Matias switches in the future so we want to future-proof the design.

Assembling the mechanical prototype was necessary to ensure that there is no mechanical interference at all. We’re happy to report that everything fits together very nicely, even despite the inaccuracies of 3D printing. This test ensures that the molds will have no issues when they’ll be made.

Kinetis PCB redesign

The PCBs are getting redesigned as we move from AVR microcontrollers to the insanely powerful NXP Kinetis platform. But as you may imagine it all starts with the schematic and here’s how the schematic of the left keyboard half looks like right now:

UHK PCB v6pre left schematic

Mad props go to the always awesome Mr. Jan Rychter for reviewing the schematic, catching a couple of issues, and providing valuable suggestions. According to Jan, schematics review is even more important in the hardware world than code review in the software world. I can certainly endorse his viewpoint, as you can always update software but you can’t magically rearrange the atoms of hardware once it’s made.

This is the semi-routed left PCB:

UHK PCB v6pre left semi-routed

This redesign is a major overhaul which is certainly quite disruptive, but the end is near, and the end result will be worth it. The schematic is almost finalized and then there’s some routing left to be done. I expect a couple of fully functional PCBs pretty soon.

Recent progress of Agent

We had a day long get together with Árpi and Józsi recently, to work on Agent. Data-binding is finally working for some key actions. If you select the factory keymap under the Keymaps-ng2 main menu item, then click on a key, and select a Layer action, a Keymap action, or a None action, and finally click on the Remap Key button, then the relevant key gets rendered accordingly.

So far so good! The UI will be a tad smoother than the current version, and every key action will be implemented soon.

Our site has been redesigned

We weren’t quite satisfied with our website, so we redesigned it. Now the UHK is presented the way it deserves. You’re welcome to head over to UltimateHackingKeyboard.com to check it out, and let us know what you think.

Thanks and congratulations for making it to the end of the post! Talk to you on 2016-07-14.

The mold design is almost finished

This is a beautiful day, as it marks our 5th post-campaign update, just as scheduled. Let's get right to it!

Our Serbian contractor is hard at work. So much so that they're almost ready with the design of the mold. We thought you'd appreciate a couple of CAD images, so here they are.

The mold for the top-left keyboard half

The mold for the top-left keyboard half

The mold for the bottom-left keyboard half

The mold for the bottom-left keyboard half

The mold for the case buttons

The mold for the case buttons

So far so good! They're pretty close to starting the actual manufacturing of the molds. We're visiting them in Serbia this weekend to discuss the last details of the molds before getting them manufactured.

Expect real life photos of hunks of steel in future updates.

Mechanically testing the 6th generation prototype

Due to the nature of mold making, it's critical to get everything from the beginning, because it's hard to go back. And what better way to test the design than to build an up-to-date prototype?

András has made some final changes to the case to make it accommodate Matias switches, not just Cherries. This 3D printed case has the same design as the mass-produced injection molded case will - apart from the vast difference in quality because 3D printing vs injection molded plastic are worlds apart in terms of quality and accuracy.

6th generation UHK case prototype, top view

6th generation UHK case prototype, top view

6th generation UHK case prototype, close view

6th generation UHK case prototype, close view

In the meantime, I've been busy updating our PCBs to correspondwith the new mechanical CAD files. The shape of the PCB should now be finalized, (including the positions of the mechanical components), but the electronics routing has yet to be fully redesigned. Let's see the fruits of my labor.

The panelized PCB

The panelized PCB

Once the PCBs are depanelized, and some components soldered in, it starts to resemble the UHK much closely.

The depanelized PCBs with all the mechanical components (but the switches) soldered in

The depanelized PCBs with all the mechanical components (but the switches) soldered in

I’m especially pleased with the way the pogo pin connector turned out. This connector has a crucial role in interconnecting the keyboard halves with the modules. The new solution features 2.5mm-thick PCBs perpendicularly soldered onto the main PCBs. Pogo pins are stuck through the male PCB, and flat pads are featured on its female counterpart. The new design is a lot more robust and pleasing to the eye than the previous battery spring connector.

The male and female pogo pin connectors

The male and female pogo pin connectors

This mechanical PCB is useful without the electronics because it allows for mechanical testing. The schematic is being updated from AVR to the Kinetis platform, and as soon as it gets done, the PCB will be rerouted, fabricated, and tested.

We have almost finished creating a Cherry and a Matias mechanical UHK prototype, but we're waiting for the new metal plates to arrive to finish them off.

Our GitHub repos are on fire

Since our previous status update, a whopping 222 commits have landed in our GitHub repos! Now that's what I call true teamwork! This leads me to some much deserved words on our newest contributor!

Let me introduce Mr. Samuel Rang!

SamHello everyone!

I'm Sam Rang, and I've been helping out with the serialization and deserialization of configuration files for Agent. I am a graduate of Duke Engineering with a degree in Computer Science and Electrical & Computer Engineering, and work for Red Hat Consulting. I am a big mech keyboard nut (much to my fiance's chagrin) and was really excited when I heard about this project and that excitement is still going strong! I'm so glad that the team has let me in and I'll keep contributing as long as they let me.

Sam got in touch with us about a month ago. He asked me what could he contribute. It was quite a challenging question because Agent is in heavy flux at this point, and isolating a discrete part that can be worked on is far from trivial. But I found something: the configuration serializer.

That's why I was working so heavily on the serializer a month before: to lay down its foundation and hand it off to Sam. And boy, did he deliver! He went berserk and ended up implementing all the 37 classes to be serialized.

Sam is still working on Agent a bit, then he'll put on his firmware hacker hat, and implement the configurator deserializer of the firmware. What a journey it will be!

In the meantime, Józsi is on a mission to put the Angular 2 application logic behind Agent, making it not only beautiful, but also functional. At this pace, you'll be able to get stuff done with Agent by the next month.

Árpi is continuing to refine the frontend of Agent until perfection is attained. He's pretty close to finishing the keymap editor, and then he'll transition to other parts of Agent. He's just pushed the latest and greatest version of Agent to GitHub Pages, so be sure to take a look at it!

And that's it, Ladies and Gents! Excited to talk to you again on 2016-06-16!

Title