Zhejia’s Status Report 3/25

This week, I first worked on modifying the evaluation boards that arrived from amazon with Korene, desoldering the inductors from a pair of them and measuring the inductance by scraping off the inductive coating and using an LCR meter. Additionally, we also characterized the oscillation frequency the transmitter board was at (around 64kHz). We also tried to follow the traces and figure out which capacitors and resistors were contributing to what, which we mostly figured out, and then we tried to measure the relevant onboard capacitors with the LCR meter to find the ideal resonance frequency, but the calculations ended up way off from the actual operating frequency of 64kHz, so more investigation next week is necessary.

Next, I worked on updating the keyboard driver code on the main microcontroller to accommodate features including:

  • modifier keys (keys that are not visible letters like Ctrl and Shift)
  • multiple key presses at the same time
  • long key presses typing multiple letters (like aaaaaaaa for holding down ‘a’)
  • preliminary different layer support (different ‘layers’ have different keybinds)

Lastly, I started work on a basic GUI for the keyboard configuration software using pyqt6. I ran into some problems with my python installation location and had to spend some time finding where different versions of python were installed in my windows system and editing my path until the installed pyqt6 could be used (I was missing a python3.dll file). After that I created this preliminary GUI:

It functions as you would expect: Configurate configures the keyboard shortcuts typed into the keys (by generating an arduino code file), and to differentiate between the keys, when you click a physical key, the corresponding digital key changes color/lights up. Additionally, I plan to have the keys be draggable to different locations in the UI for users to mimic their current layout if they would like.
However, most of these functionalities are not yet implemented.

I am on schedule.

Next week, I hope to work with Korene to get a pair of evaluation boards to work with our small inductors. This will likely take a long time. If I have more time, I will finish implementing essential features for the configuration GUI.

Team Status Report 3/25

Currently the largest risk is still the wireless charging not working correctly. We received the wireless charging kit this week, but since everyone was busy with their own weekly tasks, the wireless charging was not tested beyond basic verification that it worked.  Additionally, we are worried about the functionality of the wireless charging through the 3D printed housing. We can mitigate the risk of the wireless charging not delivering enough power somewhat by lowering the idle power consumption of the key device, thus allowing the battery to trickle charge with an extremely low current input. As for the housing, it would be possible to make the bottom wall of the housing extra thin to allow for minimal interference with the wireless charging coils. Another risk is that the configurator software may not be able to precisely identify which of the keys is being programmed at any given time. We plan to mitigate this using numbered keycaps on top of each key, such that it would be possible to select a key to be programmed. Alternatively, we could have a system where the user needs to press a key, which would highlight it on the interface and allow the user to set a command.

The spec has not changed in the last week, and no additional costs have been incurred.

Attached below are photos of the key programming interface prototype and the key housing prototype.

Ben’s Status Report 3/25

This week I soldered another 2 BLE boards together and worked more on the software side of things. First, I added debouncing to the peripheral code to ensure that the interrupt would no longer cause a race condition when it was called multiple times in rapid succession due to switch bounce. This caused issues with key reading so I switched the key reading system such that it would toggle the value upon detecting a state change instead, which would save power from reading the keypin all the time. I also played around with the delay in the main loop such that it would connect to the central device quickly without using up too much power. Next, I set up event handlers for the BLE events of connection and disconnection, having them stop and restart the advertising respectively. This would further save on power as the device would no longer need to advertise constantly even though it was already connected to a central. On the central side of things, I fixed up the reconnection such that instead of taking upwards of 30 seconds to reconnect, reconnection could happen within a second or so. Additionally, other keys can still be used while a key or multiple keys are reconnecting since the reconnection does not spin anymore while waiting for a connection like before. However, to facilitate this, I had to also add BLE event handlers for connection and disconnection that would start and stop the scan for the particular device UUID so as to reduce function call overhead for the reconnection of a device. I also helped fit the key stack onto the first prototype of the 3D printed housing. It ended up being too large and without a cutout for the USB, so adjustments will be made in the future.

I believe my progress is on schedule this week.

Next week I plan on working on the central code such that it will be capable of connecting to new key devices beyond just the scan phase. This will mean that if a user brings in new keys, they can be connected right away without a reset of the central receiver. Additionally, this means that if a key was not detected immediately, it can be connected later still.

Korene’s Status Report 3/25

3D housing test fitting was completed and started looking over the inductive charging pcb kits.

The fit was well and had suitable tightness for joints and solid feeling. There’s no tilt whatsoever so it’ll be good to continue the design for it. Perhaps it’ll be beneficial to have a wrist rest so users can type at a more comfortable height, however this is nothing new to the keyboard world as many users have wrist rests in order to use their keyboards that may have a slightly higher profile.

Rough changes were made to the 3D housing and we have adjusted measurements for what to change in the next print out of the housing. We shall make 3D housing changes such as a hole for the USB-C port, adjust the height, and account for the receiver charging pcb. We’ll be on track to complete fulfill the requirements for size.

Inductive charging wise, Zhejia and I have identified what is necessary to change in order to adjust the boards for our usage. We were successful removing the current coils on the boards and now going through calculations to get through the correct capacitor values to replace them. We use the reference circuits from before and are able to identify each piece well.

Next week we’ll continue the process. Perhaps a bit slow this week, but we have a plan for next week.

Team Status Report 3/18

Currently the risks are the same from last week, but much more mitigated now. We have a 3D design of the housing and can confirm the dimensions in the following week when we have fully assembled keys to see how much room we can have and shave down. Currently the dimensions are 25x25x23 mm^3 (w x l x h), and this is with most likely more leeway than is needed. Since it appears we can have 3D housing finished soon, that worry is one less. The programming software unfortunately cannot be started until we have working prototype of the whole system set up, however with the progress of the receiver and BLE boards, we should be reaching that goal soon.

The wireless charging kits came this week so that we may begin working on the proof of concept next week as well. This will be helpful in determining on how fast the charging will be once we have made our adjustments.

No significant changes have been made since last update.

Our schedule is on track as we were able to do 3D housing this week.

New tools: Using Solid Works instead of Autodesk due to more familiarity and no need to import the BLE footprint. Solder iron to solder the keys together with the hot swap boards.

Currently with 4 keys connecting to one another, the receiver acting as a keyboard, 2 key modules assembled, and solid works file of the 3D housing(forgot to take screenshot), we have made good progress.

Korene’s Status Report 3/18

This week completed ethics assignment and the 3D housing design in solid works. Unfortunately, this proof does not have screenshots because I had forgotten to take them, but the files are in Box.

It was necessary to spend a while on refreshing solid works knowledge and relearning some shortcuts. I used these tutorials for guidance on snap fit joints and splitting parts

Completing the 3D housing base was relatively simple overall, however, I followed the tutorials above to ensure it would be a smoother process. Still in the progress of making the joints as there are some issues with the joint sketch and extrusion of it. Printing out the joints will also be a different thing as we will have to edit the spacing a few times to ensure a smooth fit.

We also received the inductive charging kit so next week I plan to get a prototype of inductive charging with Zhejia next week as well.

Currently this is good progress made, not stuck on thinking about what parts to buy and we can continue working towards the goal.

Zhejia’s Status Report 3/18

This week I worked on creating a prototype for the keyboard firmware that acts as an interface between the key receiver and the computer. I prototyped this on the Arduino Nano 33 IoT, since the Arduino Keyboard library was not compatible with the Seeed Xiao boards. However, this caused a few issues since to get the keyboard working, a new driver was needed for the Nano 33 IoT. Additionally, I had to make sure the right version of the Keyboard and USB libraries were installed, as there were some issues posted online with the keyboard device not being recognized in certain versions. Finally, I modified the KeyReceiver code to be able to distinguish between the individual key presses and send a different character as a keyboard depending on which key was pressed.

I am on schedule this week since I was scheduled to work on the keyboard programming software, and having the Arduino being able to act as a keyboard was an important first step to this.

Next week, I hope to finish the code template that the keyboard customization software will edit and flash to the main board.

Ben’s Status Report 3/18

This week I worked on implementing multiple connections with the central receiver. I managed to get 4 keys working since we only had 4 batteries in total. I also figured out the layout of the battery, switch, and board. Originally, we planned to have the battery sandwiched between the two boards (the Seeed and the single switch PCB). However, after some consideration, I determined it would be too difficult to solder consistently while keeping everything in place. Thus, I modified the design to have the Seeed flipped with the single switch PCB stacked on the back of the board and the battery on the front. This allowed easier access to the reset switch and protected the battery connection. Using this design, I soldered together 2 boards. I also soldered the Mill Max sockets onto the PCBs, which allowed hot-swapping of the switches. On the software side, I managed to get interrupt based signaling working. This means that the peripherals will only attempt to send data over if a key is pressed, and sleep otherwise, thus saving power. Additionally, I set the rest of the pins on the board to be input pullup to reduce power draw further. Finally, on the receiver side, I managed to get reconnection working. However, this reconnection is very slow, taking up to 30 seconds in some cases. To test sizing and consistency. Overall, this design ended up with a thickness of 15mm, which gives us 7mm of space for the wireless charging module.

I believe my progress is on schedule, since this week I was slated to work on the connection of multiple switches and the housing. I have the rough dimensions of the housing finalized thanks to finally having the height of entire assembly set, and I have also managed to connect 4 separate boards to the central receiver. Next week I hope to assemble more boards and reduce the latency of reconnection and optimize the interrupts more. Currently the interrupts occasionally lock up the board, requiring a reset. I hope to figure out how to resolve this issue next week as well.

Korene Tu’s Status Report 3/11

We’ve decided to buy some new products for wireless charging and in terms of the project we’ll be figuring out the protocols of connecting the keys to the MCU to the computer, in which case more embedded programming is necessary to learn how to clarify and how that works in practice.

 

Majority of the week was spent on the design review reports and organizing the plan of what we had up until now. Through writing the design review, I figured out where we were in our budget which may be a concern but can now be warier of how to spend our budget. In addition, writing out the whole plan thus far helps to figure out where any more vague plans were vs. what we can easily explain was well thought out.

Afterward, I drafted a drawn plan of the 3D housing for the keys and saw what interlocking method we would use(snap-to-fit cantilever joints), and estimated the size. Overall, in order to have a snug fit we’ll probably have about 5% more room than needed from a tight fit to be looser.

I made a quick table of what capacitors would be needed to have what frequency for the inductor coils which are.

 

Overall some difficulties are figuring out the microcontroller next and waiting for some parts. Maybe some time crunch but now that we’re over the first half of buying items we can continue onwards.

Team Status Report 3/11

Currently, we believe the most significant risks are that the wireless charging may not be able to deliver enough current to charge the battery sufficiently quickly and that the timeline may not allow for sufficient time to iterate both the programming software and the design of the 3D printed housing by the time the project is due. In terms of wireless charging, we are managing the risk by focusing development on getting a single switch to wireless charge correctly as a proof of concept, and having the remaining switches charge from USB as a backup. In terms of the software, we plan to focus on functionality first and then add any aesthetic improvements only if we have time. The same goes for the 3D printed housing. We may have to end up sacrificing some of the dimension design requirements to get the housing working at first, but then we plan to see what we can shave down after the fact.

We added a single switch PCB as an interface between the Cherry MX switch and the Seeed board. This was necessary as we found that our original plan of soldering wires between the switches and Seeed board would not meet the requirement of having hotswap capabilities. Additionally, it would make assembly nearly impossible as the switch would have to somehow be soldered inside the housing. This incurs an additional $1.50 cost per switch, but since the PCBs are so simple, it would cost a lot less if we ordered custom PCBs (~$5 on JLPCB). However, since we want to begin putting everything together more quickly, Amazon seemed to be the better choice. With this change, we may need to increase the dimensions of the housing to occupy a footprint of 25mmx22mm as current measurements of the battery + seeed setup already are pushing 22mm in the length dimension. We believe that this will not present that large of a usability issue however, since that is about the difference in spacing between a laptop keyboard and a Cherry MX style keyboard, and thus we do not expect users to be able to notice a difference.

There are no updates to the schedule currently. We have attached images of our charging testing and a video of the two switch connection working.

New tools:

To design the software, we would need to learn some sort of GUI creation library like PyGUI or GTK. To design the 3D printed housing, we plan on learning how to design using Autodesk, since it allows us to import Eagle footprints in order to give us an idea of the dimensions of the Seeed board and other components.

Video link: https://youtu.be/-SggOrEHb1I