I’ll replace the ESP32-C3 module interface with a simple pin header while preserving the existing signals for an external controller connection, then verify the schematic connectivity.
Arduino-compatible, through-hole-friendly pH probe interface using a high-impedance analog front end and ADS1115 16-bit I2C ADC breakout/module. The pH channel is designed for improved sensitivity, while ADS1115 AIN2 and AIN3 remain available for additional analog sensors.
Through-Hole Revision Summary
Replaced the SMD ADS1115 VSSOP IC with U1: ADS1115 Module, a 10-pin 2.54 mm breakout/module-style part.
Replaced the SMD LMC6482 op amp with U2: MCP6002-I/P, a through-hole 8-PDIP dual CMOS rail-to-rail op amp.
Changed all generic resistors to axial through-hole packages.
Changed small capacitors to ceramic disc through-hole packages and bulk capacitors to radial through-hole packages.
Kept BNC probe connector and Arduino/sensor header as through-hole parts.
Selected Architecture
pH probe connector: BNC jack J1.
pH probe center: routed through 1 MΩ series protection resistor R3 into MCP6002 op amp U2A configured as a unity-gain buffer.
Probe reference/shield: biased to VBIAS, not GND, so the pH electrode can swing around mid-supply while all circuit nodes stay within the ADS1115 input range.
Mid-supply bias: R1/R2 create VREF_DIV, buffered by U2B, then isolated by R4 to create VBIAS.
ADS1115 silicon operates from 2 V to 5.5 V, so a 5 V Arduino rail is valid for the ADS1115 module when the module supports 5 V operation.
ADS1115 analog inputs must stay between GND and VDD. Biasing the pH probe shield to VBIAS keeps the pH signal safely inside that range.
MCP6002-I/P operates from 1.8 V to 6.0 V, supports rail-to-rail input/output, and is available in 8-PDIP.
MCP6002 input bias current is low for a DIP/prototyping op amp, but it is not as ultra-low as LMC6482. For highest pH accuracy, keep the input clean and dry and avoid breadboards at the pH probe input.
MCP6002 VDD needs a local bypass capacitor; C2 provides 100 nF decoupling and C3 provides rail bulk capacitance.
pH Front-End Leakage and Bias-Current Audit
The through-hole revision uses U2: MCP6002-I/P. From the MCP6002 datasheet, input bias current is typically +/-1.0 pA at +25 deg C, 19 pA at +85 deg C, and 1100 pA at +125 deg C. The common-mode input impedance is listed as 10^13 ohms || 6 pF, and the differential input impedance is listed as 10^13 ohms || 3 pF.
This is suitable for an Arduino/student prototype if the input area is kept very clean and dry, but it is not a true electrometer-grade pH front end. Glass pH probes can have very high source impedance, so the bias-current error depends strongly on probe impedance and temperature. At +25 deg C, 1 pA through 100 Mohm is about 0.1 mV, roughly 0.0017 pH at 25 deg C. At +85 deg C, 19 pA through 100 Mohm is about 1.9 mV, roughly 0.032 pH. With a 1 Gohm probe, the same +85 deg C bias current could become about 19 mV, roughly 0.32 pH. PCB leakage, flux residue, fingerprints, humidity, and breadboard leakage can easily become worse than the op-amp bias current.
Design actions already included for leakage control:
J1 BNC center enters U2A through R3 = 1 Mohm series protection.
The pH input is buffered before the ADS1115, so the ADC input impedance does not load the probe directly.
The BNC shield/reference is biased to VBIAS rather than hard-grounded, keeping the signal centered in the ADC range.
Layout/build requirements for best pH accuracy:
Do not build the pH input node on a solderless breadboard.
Keep J1 center, R3, U2 pin 3, and PH_IN short, guarded where possible, and physically away from digital/I2C traces.
Clean the PCB thoroughly after soldering; no flux residue around J1/R3/U2A input.
Add a driven guard ring tied to VBIAS/PH_IN-adjacent low-impedance guard during PCB layout if very high stability is needed.
For laboratory-grade accuracy or hot/humid operation, consider replacing MCP6002 with an ultra-low-input-bias electrometer/CMOS op amp if a suitable through-hole or module option is available.
DS18B20 Temperature Compensation Addition
Added a waterproof DS18B20 probe interface for pH temperature compensation:
J3: 3-pin through-hole DS18B20 probe connector.
J3 pin 1 = VCC_5V, probe red wire.
J3 pin 2 = DS18B20_DATA, probe yellow or white data wire.
J3 pin 3 = GND, probe black wire.
R11 = 4.7 kohm pull-up from DS18B20_DATA to VCC_5V, required for the 1-Wire data bus.
J4: 2-pin Arduino digital GPIO breakout. J4 pin 1 is DS18B20_DATA and should connect to an Arduino digital input such as D2 or D3. J4 pin 2 is GND reference.
DS18B20 firmware use:
Power the sensor in normal 3-wire mode, not parasite-power mode.
Read temperature in deg C and compensate the pH slope using the Nernst relationship: ideal slope = 59.16 mV/pH at 25 deg C and scales by absolute temperature, approximately slope(T) = 59.16 * (T + 273.15) / 298.15 mV/pH.
Calibrate with buffer solutions at the same temperature as the sample when possible.
Header J2 Pin Map
Table
Pin
Net
Function
1
VCC_5V
Arduino 5 V supply input
2
GND
Ground
3
I2C_SDA
Arduino SDA
4
I2C_SCL
Arduino SCL
5
ADS_ALERT
Optional ADS1115 ALERT/RDY output
6
ADS_ADDR
ADS1115 address-select pin; wire externally to GND/VCC/SDA/SCL as desired
7
AUX_SENSOR_AIN2_IN
Auxiliary sensor input to ADS1115 A2 via R9/C9
8
AUX_SENSOR_AIN3_IN
Auxiliary sensor input to ADS1115 A3 via R10/C10
ADS1115 Module U1 Pin Mapping
Table
Module Pin
Net
Function
VCC
VCC_5V
Module supply
GND
GND
Ground
SDA
I2C_SDA
I2C data
SCL
I2C_SCL
I2C clock
ADDR
ADS_ADDR
I2C address select
ALRT
ADS_ALERT
Optional alert/ready output
A0
ADC_PH_PLUS
Buffered pH signal
A1
ADC_PH_MINUS
VBIAS reference for pH differential measurement
A2
ADS_AIN2
Auxiliary sensor channel
A3
ADS_AIN3
Auxiliary sensor channel
Suggested ADS1115 Firmware Settings
Read pH using differential mode: A0 - A1.
Recommended PGA: ±1.024 V for pH measurement.
Expected pH probe signal at 25 °C is about 59.16 mV/pH, roughly ±414 mV over pH 0 to 14.
ADS1115 ±1.024 V range gives 31.25 µV/count, about 0.00053 pH/count ideal resolution before real-world probe noise, calibration error, and temperature effects.
Use low data rate, such as 8 SPS or 16 SPS, and average readings because pH probes respond slowly.
Calibration
Use at least 2-point calibration:
Measure pH 7 buffer and record voltage V7.
Measure pH 4 or pH 10 buffer and record voltage V4 or V10.
Calculate slope in pH/V and apply: pH = 7.00 + slope * (Vmeas - V7).
For better results, use 3-point calibration with pH 4, pH 7, and pH 10 buffers.
Important Usage Notes
Do not connect BNC shield/VBIAS to Arduino GND externally.
Keep the BNC center input trace short and clean; flux residue can cause leakage and measurement drift.
Use the spare A2/A3 pins only for sensors whose output stays between 0 V and VCC_5V.
If the ADS1115 breakout/module already includes I2C pull-ups, do not populate R7/R8 to avoid overly strong parallel pull-ups.
If external sensor boards already include filters or strong output drivers, C9/C10 may be reduced or omitted.
Review Status
The schematic has been revised for a through-hole/module build and revalidated after replacing U1/U2 and changing passive packages. Full PCB layout/manufacturing review can only be completed after board placement and routing.
ESP32-C3 battery-powered pH and ORP probe interface using ADS1115 differential ADC, MCP6002 through-hole buffers, DS18B20 temperature compensation, and short net labels for firmware handoff.
Properties
Sensor
3.3
V
Arduino
I2C
Battery
Pricing & Availability
Distributor
Qty 1
Arrow
$8.74–$11.13
Digi-Key
$3.68
LCSC
$16.69–$17.39
Mouser
$11.45
TME
$6.21
Verical
$7.55–$15.85
Controls
Welcome 👋
Flux helps you build PCBs faster with an AI teammate!
Create your account to collaborate, stay updated, fork your own version, and get instant answers from our AI agent.