How do you envision the mechanical assembling of the whole keyboard? Custom backplates with all the blox the user want, or some generic assembly system for self-contained blox?
I have been pondering on how I can have it so it would be completely generic, so each blok would be self-contained. That is what I would like, now, the ideas I've had thus far, have all been very wild, trying to learn from the most modular thing most of us have been playing with from a very young age, legos and puzzles.
Since the blox go laterally, it isn't as easy, however we can have notches on the blox on the edges on them and they can slide into each other. They would be constructed so that there would be a bottom plate and mounting plate, both of them will have the notches so different blox can be combined, we can also have edge bezel and inter-blok space blox as well.
Another idea is to have different size base plates, and the blox can then be PCB or plate mounted on it. We can also again have spacer and bezels that can be mounted directly on the base plate.
The third option which is possible, however not modular, is to generate case files using a GUI. This can be done for both layered cases or 3D printable cases. SVG for 2D vector graphics allows easy editing as it is a markup language, so a GUI can be made, where the end-user chooses/builds there config by selecting the blox used and their position. Based on this the program can generate an SVG using the preknown footprints for the different cutouts, screw holes, etc. Similarly OpenSCAD allows generation of 3d models using scripting language, again, once the configuration is setup by the user, and STL can be generated. This program can be tied in with the application to setup the keymapping and LEDs.
Also to connect your different blox, maybe you should make them smarted, ie. instead of using I²C I/O expanders, you can put a small micro-controller in each blok and only send actual key changes to the main micro-controller over I²C, which should eliminate any bandwidth issue.
I do like the idea of a smaller MCU on each board specially if in a similar price range to the expanders, however since I am not an electronics engineer, and have no experience in the field thus far, I can't compare their pros/cons.
I would request any electronics gurus, to please chime in and help in the project if possible.Another alternative would be to put a USB MCU in each blok, and a USB hub chip on the main keyboard. This would make it very flexible (a user could use a 2x6 blok on its own, or just the numpad, without the central unit. It doesn't use more pins than I²C (2 for data, Vcc and GND).
This is an idea regack and I have discussed earlier as well; one reason I am not in favour of this is, redundancy, as a separate controller on each blok, means many more components besides just the MCU, higher costs aswell. I'm not sure, but with numerous blox, we might even need a powered source due to the multiple MCU, this might be the case with the non-USB MCU system as well, need someone with more know-how on this.
The only blok which I think anyone would use besides the base unit is numpad/6x4 blok, one one around this is to have a MCU blok, which will have a USB MCU, and I2C line, so you can connect any blok and run-it standalone.
I know some would suggest to do this anyway and have the base unit connect in a similar manner, however the argument I have against that is, most people would _USE_ the central unit, and it would be another added extra I/O expander (That too the mighty PCA9698 with 40 I/O pins) on the I2C bus and the added cost of separate PCB, extra expander. This would be good and give some breathing room on the base unit PCB though.
Also wanted to get this out, I am not an electronics person, and have never had any experience like this before, but I do like tryign new things, and I do love keyboards, I am a software engineering student and a very bad one at that.
However I do learn fast, about a few months back, I didn't even know how to make simple diagrams in Corel, and now I can easily make so many keyboard cases and other stuff, and this community is a great encourager, one the best, so bare with me, and we will make this one-of-a-kind project come true. Oh and unless it wasn't clear, this is going to be a completely open source project, I just created a github account and setup a repository for it. Oh and at end of all this, if we do not succeed, I can assure you, I would have learnt enough to churn out some fixed non-modular (Well maybe a little bit) keyboard PCBs, open-source for anyone to make.