I posted an update to this story to the fediverse in October and failed to update this thread with a status update. Apologies for that. Here is the post: josch: "@mntmn@mastodon.social Well, it "works". It's jus…" - FLOSS.social
minute routed the traces of the Reform Keyboard V4 specifically to make it possible to drill a hole at the right spot without damaging the traces when I asked them for it. It is also thanks to MNT that I have this keyboard without switches for performing this experiment. Both keyboard as well as the trackpoint module are recognized via USB and work as expected.
The prototype can be seen in the photos. There is a 3D printed stem which you stick through a hole in the keyboard PCB. The trackpoint sensor can be found in different varieties online. Some of the keycaps needed to be modified of course. Remaining problem is the fragility of the stem which is made of PLA. A thinner stem would be better and would avoid having to file some material away at the corner of the switches as well.
Why am I posting this now? Because there is a new status update. gordon has now created a new PCB design with holes for the stem and mounting screws at appropriate positions:
I created a mock-up of the physical parts of this design in openscad and will print it to continue testing the mechanical design and to get keycaps with appropriate circular cutouts manufactured:
$fn=32;
width=33.6;
height=32.6;
padw=15;
module pad() {
translate([2, padw-7.5, 0]) cylinder(h=4, r=0.851);
translate([7.5,padw-7.5, 0]) cylinder(h=4, r=1.715);
translate([13, padw-7.5, 0]) cylinder(h=4, r=0.851);
translate([7.5,padw-13.4, 0]) cylinder(h=4, r=1.016);
translate([2.5,padw-11.23,0]) cylinder(h=4, r=1.016);
}
module keycap(x, y) {
difference() {
translate([x+padw/2, y+height-padw/2, 6]) import("/home/josch/Downloads/mbk_keycap_1u.stl");
translate([width/2, (height-15.61), 0]) cylinder(h=20, r=4.5);
}
}
difference() {
cube([width,height,2]);
translate([0,0,-1]) {
translate([18.6, height-15, 0]) pad();
translate([9.275, height-15-17.6, 0]) pad();
translate([0, height-15, 0]) pad();
translate([width/2, height-5.61, 0]) cylinder(h=4, r=1.1);
translate([width/2, height-15.61, 0]) cylinder(h=4, r=2);
translate([7.475, height-19.26, 0]) cylinder(h=4, r=1.1);
translate([26.125, height-19.26, 0]) cylinder(h=4, r=1.1);
}
}
#keycap(18.6, 0);
#keycap(9.275, 0-17.6);
#keycap(0, 0);