
Mie1001 daq simple
Chaospossum/mie1001-daq
MIE1001 Team 5: DAQ firmware and Arduino shield designs (preamp, ADS1115, MCP4725)

Replacement interface and CGI protocol analysis for the Kohler DTV+ shower system controller (K-99695-NA / K-99693-P-NA), plus an open investigation into mid-shower shutoffs.
Carrier is an open-source printed circuit board by ntotten, from the ntotten/Kohler-DTV-Plus repository on GitHub. It is a 2-layer board of 160 × 60 mm with 52 parts on 59 nets, routed with 526 tracks and 21 vias.
It is built around the THVD1410DGK, WIZ850IO and K104K15X7RF5TL2, with the CFR-25JB-52-120R, CFR-25JB-52-4K7 and M2.5 among its other parts. Its parts include 16 resistors, 8 connectors, 5 capacitors and 5 ICs. It belongs with the RP2040 boards of this library.
Revision B's carrier: a two-layer PCB that holds the Pico 2, the WIZ850io and the five THVD1410 ports, and the cables between it, the K-99695, the valves and the panel. What they draw is specified in HARDWARE.md; where the two disagree, HARDWARE.md is right and the drawings are regenerated.
Every file here is generated. The scripts in tools/ are the source of the
schematic and of the board, and nobody edits either in KiCad: change a table at
the top of a script and run tools/render.sh, which regenerates everything and
checks it.
| File | What it is |
|---|---|
| carrier.svg | The schematic, rendered by KiCad |
| fab/ | What to order and how to build it: Gerber and drill zip, BOM, pick-and-place, drawings |
| cabling.svg | Every cable between the carrier, the K-99695, the valves and the panel |
| cabling-wires.csv | The same, one row per conductor, with the pin and signal at each end |
carrier.kicad_sch, carrier.kicad_sym | The schematic and the project's own symbols: Pico 2, the WIZ850io's two rows, THVD1410 |
carrier.kicad_pcb | The board |
carrier.kicad_pro, carrier.kicad_dru | The project: design rules, net classes and one custom DRC rule |
carrier.pretty/ | The project's own footprints: the Pico 2 and the WIZ850io in their sockets, and the Würth valve jack |
carrier.ses | Freerouting's routing, kept so the board rebuilds without routing again |
sym-lib-table | Points KiCad at carrier.kicad_sym |
| cabling.wireviz.yml | The cabling's source, for WireViz 0.4 |
tools/carrier_schematic.py | Writes the schematic from its tables: GPIO map, jack pins, ports, parts and part numbers |
tools/check_netlist.py | Checks the netlist KiCad reads back against those tables |
tools/carrier_footprints.py | Writes carrier.pretty from the Pico 2 datasheet, WIZnet's dimension drawing and Würth's jack data sheet |
tools/carrier_board.py | Places, routes (replaying carrier.ses), pours ground and runs DRC, which must find nothing |
tools/carrier_fab.py | Writes fab/ |
tools/wire_list.py | Writes cabling-wires.csv and checks the cabling against the board's nets |
tools/render.sh | Runs all of it in order, and checks every Mermaid diagram in the repository |
pip install wireviz==0.4.1 # needs Graphviz: brew install graphviz
controller/hardware/tools/render.sh # KiCad 7; --check fails if anything committed is stalerender.sh needs kicad-cli and a Python that can import KiCad's pcbnew
(KICAD_CLI and KICAD_PYTHON override where it looks; on a Mac it finds
both inside KiCad.app). The committed files were made with KiCad 7.0.11, and
rerunning it with that version reproduces every one byte for byte; another
version makes the same board in different bytes.
Routing is the one step that isn't repeatable: Freerouting finds a different
route each run. So carrier.ses holds its result and every run replays it.
After a change to the placement or the netlist, route again with
render.sh --reroute, which needs Freerouting 2.4.1 (FREEROUTING_JAR) and
Java 25 (JAVA), and commit the new carrier.ses with the board.
docs/diagrams.md is the convention for every drawing in this repository.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 6 | TBD | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R5, R6, R11, R12, R15, R16 |
| 5 | 100n | Capacitor_THT:C_Rect_L4.0mm_W2.5mm_P2.50mm | C1, C2, C3, C4, C5 |
| 5 | 120 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R2, R4, R8, R10, R14 |
| 5 | 4k7 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1, R3, R7, R9, R13 |
| 5 | THVD1410 | Package_SO:VSSOP-8_3.0x3.0mm_P0.65mm | U1, U2, U3, U4, U5 |
| 4 | 6P6C | carrier:RJ12_Wurth_615006138421_Horizontal | J1, J2, J3, J4 |
| 4 | M2.5 | MountingHole:MountingHole_2.7mm_M2.5 | H1, H2, H3, H4 |
| 1 | 8P8C | Connector_RJ:RJ45_Amphenol_54602-x08_Horizontal | J5 |
| 1 | DC- to GND, here only | NetTie:NetTie-2_SMD_Pad0.5mm | NT1 |
| 1 | K1-2 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | TP1 |
| 1 | K1-3 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | TP2 |
| 1 | K1-4 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | TP3 |
| 1 | K2-2 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | TP7 |
| 1 | K2-3 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | TP8 |
| 1 | K2-4 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | TP9 |
| 1 | Panel DC in, 2.1 mm | Connector_Wire:SolderWire-0.5sqmm_1x02_P4.8mm_D0.9mm_OD2.3mm | J6 |
| 1 | Raspberry Pi Pico 2 | carrier:Pico2_Socketed | A1 |
| 1 | V1-2 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | TP4 |
| 1 | V1-3 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | TP5 |
| 1 | V1-4 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | TP6 |
| 1 | V2-2 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | TP10 |
| 1 | V2-3 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | TP11 |
| 1 | V2-4 | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | TP12 |
| 1 | WIZ850io J1 (SPI) | carrier:WIZ850io_J1 | J10 |
| 1 | WIZ850io J2 (power, reset) | carrier:WIZ850io_J2 | J11 |

Chaospossum/mie1001-daq
MIE1001 Team 5: DAQ firmware and Arduino shield designs (preamp, ADS1115, MCP4725)

markrvmurray/pico-thing
An 8-bit MC6809E / HD6309E single-board computer with a pair of Raspberry Pi Pico 2 (RP2350 / Pimoroni PGA2350) modules acting as intelligent bus peripherals, a 1–2 MB banked-RAM DAT/MMU, a 40-pin PATA hard-disk…


ZeusyBoy98/HexiLux
A custom open-source smart lighting solution, using tiling hexagonal panels. Featuring music sync and home assistant compatibility.

nicolas5000/diagral-esp32
This project permits to connect Home Assitant to your Diagral alarm system DIAG91AGFK (using the 20 pins connector on the back)


kellerkindt/bluepill_sensor
Bluepill stm31f103 ethernet sensor extension board with SW written in Rust

It measures 160 × 60 mm and has 2 copper layers, 1.6 mm thick.
52 parts, built around the THVD1410DGK, WIZ850IO, K104K15X7RF5TL2 and CFR-25JB-52-120R. 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 ntotten/Kohler-DTV-Plus repository on GitHub, at the commit this page was made from: the board is controller/hardware/carrier.kicad_pcb and its schematic controller/hardware/carrier.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask ntotten before reusing the design.