
Flow tap
gjcourt/lab
A curated list of 140 multidisciplinary engineering and skill-building projects

A curated list of 140 multidisciplinary engineering and skill-building projects
Xiao c3-ir rf is an open-source printed circuit board by gjcourt, from the gjcourt/lab repository on GitHub. It is a 4-layer board of 23 × 54 mm with 15 parts on 15 nets, routed with 35 tracks and 11 vias.
It is built around the E07-M1101D-TH, AO3400A and XIAO ESP32C3. Its parts include 5 resistors, 4 capacitors, 3 diodes and 1 transistor. It belongs with the radio and wireless boards and the ESP32 and RISC-V boards of this library.
Buffers the stock GICAR flow-meter pulse into ito, in-line and reversible. Design rationale + install steps are in the project doc: 06-015. Topology picture: flow-interposer.svg.
Status (2026-07-13): routed + DRC-clean, fab-ready. The board is generated headlessly
(generate_pcb.py, kiutils) and validated with kicad-cli (DRC: 0 violations, 0 unconnected).
Gerbers/drill are exported in flow-tap-gerbers.zip; a top render is
flow-tap-top.png. Board size ≈ 23.1 × 19.8 mm, 2-layer.
Open
flow-tap.kicad_pcbin KiCad for a final eyeball before ordering (mains-adjacent signal). The placement is functional but roomy — you may want to compact it and/or swap the vertical XH headers for right-angle (S…-XH-A) so the cables exit the board edges.
All three ports are JST XH, 2.5 mm (the GICAR board connector measures 2.0 mm between pins → 2.5 mm pitch; ito's IMPULSE side is XH too).
| Ref | Footprint | Pinout |
|---|---|---|
J1 | JST_XH_B4B-XH-A_1x04_P2.50mm_Vertical | 1 key/blank · 2 +14.3 V (red) · 3 GND (black) · 4 signal (white) |
J2 | JST_XH_B4B-XH-A_1x04_P2.50mm_Vertical | mirrors J1 (to Vivaldi, pass-through) |
J3 | JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical | 1 GND · 2 OUT (buffered) · 3 +5 V — matches ito IMPULSE |
The +14.3 V (J1.2/J2.2) passes J1→J2 only and never reaches J3. J3 taps J1.4/J2.4
(signal) buffered through U1, referenced to the shared GND.
| Ref | Value / Part | Footprint | Notes |
|---|---|---|---|
| U1 | 74LVC1G17 (SN74LVC1G17DBVR, TI) | SOT-23-5 | single Schmitt buffer, non-inverting. JLC SMT. |
| C1 | 0.1 µF X7R 50 V | C_0603_1608Metric | decoupling at U1 VCC/GND. JLC SMT. |
| J1 | GICAR meter (in) | JST_XH_B4B-XH-A_1x04 vertical | hand-solder. |
| J2 | to Vivaldi | JST_XH_B4B-XH-A_1x04 vertical | hand-solder. |
| J3 | to ito | JST_XH_B3B-XH-A_1x03 vertical | hand-solder. |
U1 (SN74LVC1G17, DBV/SOT-23-5) pins: 1 NC · 2 A(in) · 3 GND · 4 Y(out) · 5 VCC (per the TI
datasheet).
N_PLUS (14.3 V) : J1.2 — J2.2 [pass-through ONLY]
GND : J1.3 — J2.3 — J3.1 — U1.3 — C1.2 [B.Cu network]
N_O (pulse) : J1.4 — J2.4 — U1.2 (A input)
V5 (ito 5V) : J3.3 — U1.5 (VCC) — C1.1
N_OUT (buffer) : U1.4 (Y) — J3.2Signals route on F.Cu; GND routes on B.Cu (own layer → never crosses a signal). No copper pour is used, so there is no zone-fill step.
# 1. generate the board (native, no KiCad needed)
python3 generate_pcb.py footprints flow-tap.kicad_pcb
# 2. validate + export with kicad-cli (KiCad 9; on Apple Silicon use the amd64 image)
docker run --rm --platform linux/amd64 -v "$PWD:/w" -w /w kicad/kicad:9.0 sh -c '
kicad-cli pcb drc flow-tap.kicad_pcb
kicad-cli pcb export gerbers -o gerbers/ flow-tap.kicad_pcb
kicad-cli pcb export drill -o gerbers/ flow-tap.kicad_pcb
kicad-cli pcb render --side top -o flow-tap-top.png flow-tap.kicad_pcb'footprints/ holds the four KiCad-9 footprints the generator places (so it runs without a local
KiCad install).
Note:
pcbnewPython scripting crashes under amd64 emulation on Apple Silicon (malloc(): unaligned tcache chunk), so this project generates with kiutils (pure Python, native) and only uses the compiledkicad-clifor DRC/export/render.
flow-tap-gerbers.zip. Select 2-layer.flow-tap-BOM.csvflow-tap-CPL.csvJ1/J2/J3) — they're not in the BOM/CPL.| Designator | Value | Package | LCSC | JLC library |
|---|---|---|---|---|
| U1 | 74LVC1G17 | SOT-23-5 | C7836 | Extended (~$3 one-time) |
| C1 | 100 nF | 0603 | C14663 | Basic |
U1 (TI SN74LVC1G17DBVR) is an Extended part — the ~$3 one-time loading fee is worth it over
hand-soldering a SOT-23-5. (If you'd rather avoid the fee, both parts are trivial to hand-solder;
the 0603 is easy, the SOT-23-5 wants hot air or a steady hand — leave SMT assembly off and populate
them yourself.)
⚠ Verify rotations in JLC's CPL preview before ordering. The CPL carries KiCad's rotations; the 0603 maps 1:1, but
U1(SOT-23-5) commonly needs a rotation offset to line pin 1 up with JLC's part orientation. JLC's online viewer overlays each part on its footprint — spin it there if it looks wrong.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 3 | 15R | R_0805_2012Metric | R1, R2, R3 |
| 3 | 940nm | LED_D5.0mm | D1, D2, D3 |
| 2 | 100nF | C_0603_1608Metric | C1, C3 |
| 1 | 100R | R_0603_1608Metric | R4 |
| 1 | 10k | R_0603_1608Metric | R5 |
| 1 | 10uF | C_0805_2012Metric | C4 |
| 1 | 22uF | C_0805_2012Metric | C2 |
| 1 | AO3400A | SOT-23 | Q1 |
| 1 | E07-M1101D | PinSocket_2x04_P2.54mm_Vertical | M1 |
| 1 | XIAO_ESP32C3 | XIAO-ESP32-C3-DIP | A1 |

gjcourt/lab
A curated list of 140 multidisciplinary engineering and skill-building projects

josevas72/rf-cc1101-esp32
Emisor/receptor RF 433 MHz con ESP32 + CC1101 para Home Assistant (PCB KiCad, ESPHome, caja 3D)

KHit6/RF-WiFi-Bridge
A simple hardware design to bridge between 433 MHz devices and WiFi


KingCountySAR/iot-beepers
Bringing back our favorite pager alarms for those late night callouts


0rax/esphome-xiao-base
XIAO base board PCB & configuration for ESPHome based sensors.


It measures 23 × 54 mm and has 4 copper layers, 1.6 mm thick.
15 parts, built around the E07-M1101D-TH, AO3400A and XIAO ESP32C3. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the gjcourt/lab repository on GitHub, at the commit this page was made from: the board is 03-homelab-automation/_reference/ir-rf-blaster-pcb/xiao-c3-ir-rf.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask gjcourt before reusing the design.