Six independent channels that charge, discharge and log six coupon cells at 28 mA. Each channel has a constant-current charger with a voltage limit, a constant-current discharge load, and a 1 Ω shunt read by a 16-bit ADC. An Arduino switches the relays and streams readings to a PC.
K1 open = rest. K1 closed with K2 off = discharge through the sink. K1 closed with K2 on = charge. Because K2 is a changeover contact, the charger and the sink can never be connected at the same time.
| Channel | Coupon | K1 pin | K2 pin | ADS1115 | P input | B input | CV limit |
|---|---|---|---|---|---|---|---|
| CH1 | C1 | D2 | D3 | 0x48 | A0 | A1 | 1.50 V |
| CH2 | C2 | D4 | D5 | 0x48 | A2 | A3 | 1.80 V |
| CH3 | C3 | D6 | D7 | 0x49 | A0 | A1 | 1.50 V |
| CH4 | C4 | D8 | D9 | 0x49 | A2 | A3 | 1.80 V |
| CH5 | C5 | D10 | D11 | 0x4A | A0 | A1 | 1.80 V |
| CH6 | C6 | D12 | D13 | 0x4A | A2 | A3 | 1.80 V |
| Part | Qty | Note |
|---|---|---|
| Arduino Uno (or Nano) + USB cable | 1 | Controller and serial logging |
| ADS1115 16-bit ADC breakout | 3 | Addresses 0x48, 0x49, 0x4A |
| LM317 (TO-220) | 12 | 2 per channel: CC + CV |
| Rcc 32.4 Ω 1% ¼ W | 6 | Sets 38.4 mA |
| R1 120 Ω 1% | 6 | CV divider top |
| R2 100 Ω multi-turn trimmer | 6 | Sets CV 1.50 / 1.80 V |
| C1 10 µF 25 V | 6 | LM317 output stability |
| F1 100 mA resettable PTC fuse | 6 | Per-channel protection |
| K1 5 V SPST-NO reed relay (e.g. SIP reed) | 6 | Low-current dry switching |
| K2 5 V SPDT signal relay, gold contacts | 6 | Charge / discharge select |
| ULN2803 Darlington driver | 2 | Drives 12 relay coils (has flyback diodes) |
| Q1 2N7000 N-MOSFET | 6 | Discharge sink pass device |
| U3 MCP6002 dual rail-to-rail op-amp | 3 | One half per channel |
| Rs 10 Ω 0.1% ¼ W | 6 | Sink current sense |
| Rg 100 Ω | 6 | Gate resistor |
| Rsh 1 Ω 0.1% ¼ W | 6 | Cell current shunt |
| LM4040-2.5 + 2.2 kΩ, 7.87 kΩ 0.1%, 1.00 kΩ 0.1% | 1 set | Shared Vref |
| 12 V 1 A DC adapter | 1 | Charger supply |
| Small alligator / tab clips + silicone wire | 18 | 3 per coupon (2 Zn joined, 1 Ti) |
| Perfboard or 2 × half-size breadboards, terminal blocks | — |
STATUS after the first hour: it should be under 0.1 mA.Implemented in coupon_rig/coupon_rig.ino; log it with coupon_rig/coupon_logger.py.
D,time_s,ch,state,cycle,V,mA,mAh,mWh. One S summary row per cycle (capacity, CE, average voltage) and E rows for events.