Forager with diode-free Partial Heawood wiring ("Acid")#20
Forager with diode-free Partial Heawood wiring ("Acid")#20peterjc wants to merge 23 commits intocarrefinho:mainfrom
Conversation
This will be the Forager Partial Heawood or "Acid" PCB, still using the Seeed XIAO nRF52840 Plus controller but also the two NFC pads for 11+2 GPIOs for a diode-free reversible Graph Theory wiring.
Set all the right hand switch diode nets to RGND
Used sed to search and replace, and then opened and resaved in
KiCad which renumbered the now much smaller list of nets:
sed -i.bak 's/net .. "Net-(RD.*-A)/net 33 "RGND/g' forager-plus-pcb.kicad_pcb
Set all left hand switch diode nets to LGND. Again, used sed
and then opened & saved in KiCad to renumber:
sed -i.bak 's/net . "Net-(LD.*-A)/net 1 "LGND/g' forager-plus-pcb.kicad_pcb
sed -i.bak 's/net .. "Net-(LD.*-A)/net 1 "LGND/g' forager-plus-pcb.kicad_pcb
Swap switch column nets to zmk-helpers style, did rest manually:
sed -i.bak -e 's#"/RCOL0"#"RM4"#g' -e 's#"/RCOL1"#"RM3"#g' \
-e 's#"/RCOL2"#"RM2"#g' -e 's#"/RCOL3"#"RM1"#g' \
-e 's#"/RCOL4"#"RM0"#g' forager-plus-pcb.kicad_pcb
sed -i.bak -e 's#"/LCOL0"#"LM4"#g' -e 's#"/LCOL1"#"LM3"#g' \
-e 's#"/LCOL2"#"LM2"#g' -e 's#"/LCOL3"#"LM1"#g' \
-e 's#"/LCOL4"#"LM0"#g' forager-plus-pcb.kicad_pcb
Done manually in KiCad v9.0.2
Double sided using original Xiao BLE (11+2 GPIOs), wiring to follow. Using ceoloide's ergogen-footprints/switch_choc_v1_v2.js footprint in v1 only mode (not enough space near controller for v2). Use 2-pin horizontal SMD PicoBlade MX 1.25mm battery connector. The inaccurate term JST 1.25mm, or 'Micro JST 1.25mm' is often used for these. The connector socket is under 4mm so should fit, and this is commonly offered as the connector with LiPo batteries. Battery cutout by changing the PCB outline Move battery connector forward to avoid bottom case rib
These are in the wireless keepout (sigh), and P0.10 is so tight in the corner it will be tricky.
Beware the bottom case ribs...
This will need a tiny case mode, and perhaps a longer than usual button if this isn't close enough to the edge? Vertical position limited by bottom case rib. Wiring required a few more vias for the ground plane.
These should both be up off (towards controller corner), and down on (away from controller). Ought to be able to solder bridge the pads if not using the switch? Hat tip https://github.com/letmegobacktosleep/forager/tree/power-switch/forager-pcb
This is more symetric and more closely matches the original Forager hotswap footprint. Unclear why the Ceoloide Ergogen hotswaps are that small on one side - although they work fined fine for me as is on another board. A few are still on the small side due to constaints like the battery cut out, or wiring.
|
Rebased to main with a simpler git history (no longer a branch off the early work on #19). Order submitted to JLCPLC with the modified bottom case STL files with the power switch cutout. I have also tested my ZMK firmware for the Forager Acid with two naked Xiao controllers connected on USB (so no battery use, and not a full bluetooth test) and shorting individual pins (so no combo testing). |
|
Looks great, nice work, @peterjc! Please keep us posted after you’ve tried it out. I’m really curious to see how it performs, and I have to admit, I’m tempted to order one myself just for the bigger battery space |
|
I blogged about this - the PCBs and case have been shipped, and I think I have all the parts now 🤞 |
The link you shared does not work! |
|
Whoops - blog link fixed now: https://astrobeano.blogspot.com/2025/10/partial-heawood-forager-keyboard.html (I'd accidentally copied the editor view URL), thanks for letting me know. |
|
Looks like my batteries came with the plug plus/minus reversed compared to the socket design. Sigh. I can direct solder them instead, there is enough cable slack. |
This may help if the copper is damaged while soldering, or when the board is drilled during fabrication.
|
Mixed news, mostly my inexperience with soldering to blame. My left "Acid" board (with only with the controller soldered on) seems to work but after a few minutes drops off the USB and stops responding. Some sort of power issue is my guess, and macOS cuts it off? Probably bad soldering somewhere. I will need a spare controller and another PCB... My right board was looking good (battery not tested yet) aside something odd with the middle index keys that feels like a typo in my firmware matrix. However, after I reflowed a couple of not so pretty pads, soldered on the nuts, and assembled it all, some keys had stopped working (flashed it as the primary right half for solo testing). Time to take it apart again... update: third time lucky, all keys working now. The silkscreen art could be better placed for a transparent bottom case (especially the little Heawood Graph, name and version). They probably would look fine on the top which was my priority, but I order the top case printed in white in error. The power switch seems not to stick out enough. The bonus thumb key using a reset button isn't going to be practical unless perhaps pushed via the case itself (shown placed but not soldered in this photo). I think I'll drop that on any revision to the PCB: The outer diameter of my nuts seems to be a fraction small - workable, but harder to get them perfectly vertical and centered. They still worked to assemble it. Both the left and right bottom cases show a slight warped in the middle of the flat panel above the battery. P.S. Getting the metal dowels into the tenting legs in a pain - just too tight on this print. And my superglue for the magnets inside the case had dried up, so I have not tried them properly yet. |
|
Half way there - one half working including a brief test with my phone over Bluetooth! 🥳 I solved the battery porarity issue with brute force by plugging it in upside down 🙃 Flipping the battery connection polarity is an option for any revision to the PCB - but apparently there is no standard orientation 🤷 |
|
Good news: Spare controller arrived, and the left half now also done. I am using the "Forager Acid" to type this now, with MagSafe tenting (stick on metal rings and UGreen stands) and 3D printed Chicago Stenographer keycaps! The surface mounted battery connector and power switch were much easier to solder this time (second attempt), and I am comfortable doing hotswaps now (having done about 100 in total at this point). Mixed news: I still found surface mounting the main Xioa pins rather tricky (repeat rounds of soldering, circuit testing, and resoldering). I actually found the through cut-out soldering for the NFC pins and B+ easier, so this is still probably easier that the original Forager PCB with the diodes. Bad news: The power switch is on straight this time, but still doesn't stick out enough to use without a tool. I can only assume that some versions of this switch have a longer handle. Also the reset switch on my right half seems to have stopped working, so I am dependent on ZMK working and putting -- @carrefinho What do you think? Is this something you'd consider merging? If yes, what changes would you request or suggest? I am thinking to remove the 5V and 3v3 pads to reduce the chances of getting a short-circuit through amateur soldering (like on my failed PCB), and flip the battery connection polarity (to match my EHAO branded LP501535 batteries). Where should I add any Acid specific build guide? If no, I will make the Acid branch the default on my fork of the repository and add some notes to the main README about the differences. -- Edit: Typos |
|
Looking at https://docs.beekeeb.com/toucan-keyboard/battery-specs the Forager Acid v1.0.0 PCB seems to use the same orientation as the Toucan (Molex PicoBlade 51021-0200, 1.25 mm pitch), and my battery matched their "No Go" photo: Their guide also touches on the possibility of changing battery connection polarity which they do not recommend. Perhaps putting two Molex PicoBlade footprints on the PCB to cover both polarities isn't a completely crazy idea? |
…with bad soldering)
…cancelled out?) This should give access to the RESET pad for emergency use (eg reset button broken off).
Also return to original's pads for the fall back battery soldering option. The through holes seemed very small to me. And update the version on the silksceen.









Yes, yet another alternative PCB draft pull request. I'm hoping for comments/feedback (even if to say you its too different so you won't merge it and I should give it a different name). Or, you are of course welcome to merge (or squash and merge) now or later - I'll turn it into a non-draft pull request once I've built it.
This is based on my work in #19 designing a diode-free direct wiring reversible PCB using the Xiao NRF52840 plus which has 19 usable GPIO pins. That is nice and simple, but the tiny castellation soldering will be tricky. It will be quicker with no diodes, but argubly harder? I'm not sure I'm ready to try that without help 😉
This PR is an alternative diode-free graph-theory reversible PCB using the original Xiao NRF52840, and the extra pair of NFC pins on the back making 11+2=13 GPIOs. See ZMK setting
CONFIG_NFCT_PINS_AS_GPIOS=yfor using these. That means it probably won't work with Xiao clones, as they often have alternative extra pads on the back.Compared to the original Forager PCB, the castellation soldering is the same, but now rather than just one rear pad to solder there are three (battery and the two NFC pads). That's a little more work with through board soldering, but with no diodes I think this will be much easier and quicker overall. The cornermost NFC pad P0.10 is very awkwardly placed (almost below D7/D14). The almost triangular cutout I used is to allow a trace to reach this pad without crossing the radio keepout.
The wiring is essentially a cut down version of https://github.com/triliu/Heawood42 which uses the full Heawood Graph (14 nodes in a 7x7 sparse scanning matrix for 21 edges or keys on each half keyboard). I wrote about using the Heawood Graph for Keyboard wiring in a blog post. Here it is a Partial Heawood Graph (13 nodes in a 6x7 sparse scanning matrix for 18 edges or keys - one spare).
Space is less constrained than with direct wiring, so to try to keep the firmware and wiring simple, I could link like pins on both sides. For example Qwerty
QandPare both on scanning column zero (netCO, NFC padP0.10) and scanning row zero (netR0, padD5).The weakness of this graph wiring is it is only 4-key roll-over per half (you can do better with more GPIOs per switch, eg the Tutte Coxeter Graph for keyboard wiring).
The name "Acid" is from Partial Heawood v1.0.0 --> pH 1.0 --> Acid.
This PR includes the power switch (#14 ), large battery cutout (#18), and Molex PicoBlade battery connector as on #19.
I have started ordering parts including a pair of the original Xiao controllers, batteries, and battery connectors to confirm how they fit together and help me verify the planned placements.