I've been thinking about making a new keyboard that's somewhere in between my first split ergo keyboard and my grid60. So a split (but not separated) ergonomic keyboard with staggered columns.

Basically like an Atreus, but with a few more thumb-specific buttons and 60 keys total.

In terms of the construction I'm thinking of doing more fancy stuff with the sound - so actually have a plate for this one. Foam between plate and PCB, and silicone below. Maybe a gasket-mounted plate?

· · Web · 1 · 0 · 1

This is roughly what I'm thinking for (half of) the layout. It's a little weird-looking but I quite like it.

I think I can manage to make it so that you flip the left side PCB over to make the right half. If I can get my head around it, that is.

I'm gradually getting there with my split keyboard layout. I can tell that getting everything to the connector is going to be tricky! Tonight I'm dealing with the battery/power stuff in the top left.

It's starting to be less of a mess... or at least, a more compressed mess. Power stuff is mostly done, just got to connect everything to the microcontroller module and the keyboard half connector.

Getting there with the keyboard routing, but it's getting pretty messy. I think I'll need to redraw most of the tracks to tidy it up and rearrange stuff.

Mostly done with the keyboard PCB - it's still a bit messy around the microcontroller, but I can live with that.

Oh, just realised I need to remove the ground fill under the antenna!

Aaand I think that's the layout done! I need to review it (particularly how the connector between the two halves works) but I think that's pretty good!

Good thing I checked the connector - it doesn't work out quite how I thought in my head! I thought flipping one PCB over and putting the header on the bottom instead of the top would connect pin 1 to pin 2 and vice versa.

But this paper mockup shows that pin 1 is gonna connect to pin 1, because both the PCB and the connector have been flipped so they cancel out.

It's not quite back to the drawing board - I'm pretty sure I can do my original plan which was to have the connector straddling the edge of the board. That way the connector orientation *does* flip with the board, so the pins do get swapped!

I think it's ready! I changed the connector over to an edge mounted one (which may or may not be very resilient to stress). Also took the chance to move the mounting hole close to the USB port, to hopefully strengthen that corner of the PCB.

Started designing the plate for the Schism keyboard. It's probably not necessary but I'm planning to gasket mount this, and generally do stuff to make the keyboard sound nice!

I'm getting somewhat used to the way of doing things, switching between workbenches as appropriate (e.g. designing features in PartDesign, making arrays in Draft and doing boolean operations in Part.

I think it could be nice to have some of these features duplicated in other workbenches (e.g. PartDesign could do with having Draft's array tools). I'm sure there's some reason they're not, though.

I think I've settled on how to mount the Schism plate. I've added nubs around the perimeter of the plate with a notch on either side, and then you hook O-rings into those notches. That lets me tweak material and thickness of the gasket by getting different O-rings.

My Schism keyboard PCBs have arrived! Unfortunately I have a busy weekend so probably won't be able to assemble one for a few days :(

I put the power/battery stuff on one Schism PCB and the voltage regulator was getting hot. I wonder why...

... oh that'd do it (schematic symbol has different pin order to actual part because I copied without checking)

Managed to compile Adafruit's bootloader ( and the keyboard actually shows up in dmesg, as a USB drive and the LED pulses!

Next I need to add the board to Zephyr.

Haven't posted any progress on my Schism here recently, so here we go:

I've populated both sides of the keyboard now (right side still has no microcontroller yet, just using it as an extension of the left side's matrix).

The OLED worked immediately once I copied some config stuff from another ZMK keyboard. Generally after a minimal bit of figuring stuff out, ZMK has just worked.

The case design is still in progress, but the plate is relatively complete so I printed a couple and installed them. This is where I found that my printer was scaling things up by 0.75%.

It's actually usable now - I used it all day today!

Show newer

If you're working in PartDesign, you shouldn't have to make use of the Part workbench's Booleans. Besides, there's a Boolean feature in PartDesign as well.

Is there any reason why you can't use PartDesign's transformation features rather than Draft Array? Besides the performance hit when dealing with high numbers of instances.

Could you explain a use case?

@normandc Does PartDesign have a way to create an array of holes based on point locations? The example is the key holes in this keyboard plate.

They're not positioned in any kind of grid, so I made a sketch with the relationships and manually positioned Draft Points on the locations in the sketch. Then made a new Body in PartDesign with the shape of the hole to cut and boolean subtracted it in Part.

Is there a nicer way to do that in PartDesign? In Solidworks I'd cut one hole and do a table driven pattern

@normandc Forgot to mention, I used Draft PointArray to create the array of bodies to cut out.

Ah sorry, I should have inferred from your keyboard screenshot. Yeah, for your use case, that's the only way to do it. It will take someone to improve the PartDesign transformation tools to the same level. I wonder if realthunder did in his FreeCAD fork. He made a lot of improvements, like multi-bodies in the PartDesign Body container. It will trickle down to FreeCAD's main source code eventually.

Also, when missing tools in one workbench or the other, it's mainly because it hasn't been implemented yet. Most of the time it's because there's no developer to work on it.

At work up until last year, we were using Solid Edge 19, which came out back when Windows Vista was current!!! The pattern tool didn't have the table option from SolidWorks you're mentioning here. I believe the current 2021 version has it, but I haven't needed it yet.

@normandc I actually found a use for the table driven patterns at work! We had a PCB I was designing a "bed of nails" test fixture for, and the PCB designers exported a CSV of the test point locations. That meant I could use that to define the hole positions for the probes (there were about 200 so I wasn't about to do it by hand!)

@gbrnt indeed! Once you get a decent workflow going in FreeCAD, it's actually really pretty nice!

@gbrnt Why don't you use the Spreadsheet to define the dimension of your cuts and although the positions? You wouldn't have to leave PartDesign in this case.

The lattice2 workbench could be interesting for you too.


@M4x I've driven sketch dimensions with a spreadsheet before - but with this many it would be kind of a mess, wouldn't it? Is there a way to define points in the spreadsheet and use that to drive the feature instead of having to draw out all the squares to cut? Also in PartDesign it'd need to be two features because the cut is stepped. That seems like more work than using the Draft PointArray method.

Thanks for linking the lattice2 workbench, I'll take a look!

@gbrnt I wouldn't define every point. Instead define the startingpoint(s) and the horizontal / vertical distance between a key. You can use this information to calculate the position of your pockets. Honestly I'm not sure if draft array isn't the better way already.

Could you show me what you're meaning with the stepped cut? Stepped in which directions?
#freecad #keyboard

@M4x On my phone right now, but there's an image in this thread that I sent to @normandc. The hole is a 14x14 square at the top, then 1.5mm down becomes a 16x16mm square.

Draft array seems easier to correct if I change the position of keys in a new version of the PCB, as they'd all be individually adjustable.

Sign in to participate in the conversation
Mastodon for Tech Folks

This Mastodon instance is for people interested in technology. Discussions aren't limited to technology, because tech folks shouldn't be limited to technology either!