pH ORP DS18B20 Circuit


Yes — a few sensors fit this board architecture well because you already have 3.3V, GND, I2C, 1-Wire, ADS1115 differential analog inputs, and high-impedance probe conditioning.
Good matching additions:

Table


SensorBest InterfaceWhy it matches
EC / TDS / conductivity probeExtra analog front-end + ADS1115 or separate ICCommon companion to pH/ORP for water quality. Needs AC excitation, so it is more complex than pH/ORP.
Dissolved Oxygen (DO) probeAnalog front-end + ADCUseful for water quality. Probe type matters: galvanic/polarographic/optical. Analog DO needs careful conditioning.
Turbidity sensorAnalog or digital moduleEasier add-on; can feed ESP32 ADC or ADS1115 if a channel is free.
Water temperature sensor, second DS18B20Same 1-Wire DQ busVery easy. Multiple DS18B20 sensors can share the same DQ line.
Water level / float switchDigital GPIOSimple safety/status input. Needs an extra J2 pin or separate connector.
Leak detector / wet contact sensorDigital/analog GPIOUseful for enclosure or tank monitoring.
Pressure sensorI2C or analogUseful if measuring pipe/tank pressure. Prefer I2C 3.3V sensors.
Flow sensorDigital pulse GPIOUseful for dosing/flow monitoring. Needs one ESP32 GPIO input.
Best recommendation for your current project:
  1. EC/TDS sensor — most useful companion to pH + ORP, but requires new analog circuitry.
  2. Second DS18B20 — easiest; no schematic change needed except maybe documenting multiple sensors on the same DQ bus.
  3. Turbidity sensor header — practical and beginner-friendly if you use a module.
  4. Flow sensor or float switch header — useful, but J2 would need extra GPIO pins or a second connector.
I would not add all of them to this same board unless you expand the connector/header plan. For your current clean 5-pin ESP32 interface, the easiest “no major redesign” upgrade is multiple DS18B20 sensors on the same DQ line.
Compare sensor options
Add EC/TDS planning
Add turbidity header
Multiple DS18B20 guide
Update docs options

U1
C4
Capacitance
1 µF
C1
Capacitance
100 nF
C8
Capacitance
100 nF
C17
Capacitance
10µF
C2
Capacitance
100 nF
C18
Capacitance
100nF
C10
Capacitance
100 nF
C6
Capacitance
100 nF
C11
Capacitance
100 nF
C7
Capacitance
100 pF
C13
Capacitance
100 pF
C16
Capacitance
100 nF
C14
Capacitance
100 nF
C12
Capacitance
100 nF
C9
Capacitance
100 nF
C3
Capacitance
10 µF
C5
Capacitance
10 µF
C15
Capacitance
100 nF
R12
Resistance
1000000 Ω
R3
Resistance
1000000 Ω
R11
Resistance
4700 Ω
J1
R6
Resistance
1000 Ω
R5
Resistance
1000 Ω
R10
Resistance
1000 Ω
R9
Resistance
1000 Ω
R8
Resistance
10000 Ω
J3
R14
Resistance
10000 Ω
R4
Resistance
1000 Ω
R13
Resistance
1000 Ω
R2
Resistance
100000 Ω
J5
R1
Resistance
100000 Ω
R15
Resistance
10Ω
R7
Resistance
10000 Ω
J2
U2
U3
Firmware Starter: ESP32 Interface
Hardware Interface
The current board connects to the ESP32 through J2 only.

Table


J2 PinSignalESP32 Firmware Function
13.3VPower supplied by ESP32 board/regulator
2GNDCommon ground
3ADS1115 SDAI2C SDA GPIO
4ADS1115 SCLI2C SCL GPIO
5DS18B20 DQ1-Wire GPIO
Libraries
Typical Arduino/ESP32 libraries:
  • Adafruit ADS1X15 or equivalent ADS1115 driver
  • OneWire
  • DallasTemperature
ADS1115 Settings
  • I2C address: 0x48
  • pH channel: differential A0-A1
  • ORP channel: differential A2-A3
  • SDA/SCL pull-ups: R7/R8 are optional 10kΩ DNP footprints. Leave them unpopulated if the ADS1115 module already has onboard I2C pull-ups; do not use jumpers.
  • Data rate: low/medium for stable readings
  • Gain: choose a range that supports the expected signal
    • pH expected differential: about ±414mV
    • ORP expected differential: about ±1000mV
Example Arduino-Style Skeleton

Cpp


#include <Wire.h>
#include <Adafruit_ADS1X15.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Set these to the actual ESP32 pins used with J2.
static const int PIN_I2C_SDA = 8;
static const int PIN_I2C_SCL = 9;
static const int PIN_ONEWIRE_DQ = 10;

Adafruit_ADS1115 ads;
OneWire oneWire(PIN_ONEWIRE_DQ);
DallasTemperature ds18b20(&oneWire);

float readAdsDiffMv(uint8_t mux) {
  int16_t raw = 0;
  if (mux == 0) raw = ads.readADC_Differential_0_1(); // pH
  else raw = ads.readADC_Differential_2_3();           // ORP

  // Adjust multiplier to match selected ADS1115 gain.
  // For GAIN_ONE on Adafruit ADS1X15, scale is commonly 0.125 mV/bit.
  return raw * 0.125f;
}

float filteredAdsMv(uint8_t mux) {
  const int N = 15;
  float sum = 0;
  for (int i = 0; i < N; i++) {
    sum += readAdsDiffMv(mux);
    delay(20);
  }
  return sum / N;
}

void setup() {
  Serial.begin(115200);
  Wire.begin(PIN_I2C_SDA, PIN_I2C_SCL);
  ds18b20.begin();

  if (!ads.begin(0x48)) {
    Serial.println("ADS1115 not found at 0x48");
    while (true) delay(1000);
  }

  ads.setGain(GAIN_ONE); // confirm range/noise tradeoff for ORP
  ads.setDataRate(RATE_ADS1115_128SPS);
}

void loop() {
  ds18b20.requestTemperatures();
  float tempC = ds18b20.getTempCByIndex(0);

  float phMv = filteredAdsMv(0);
  float orpMv = filteredAdsMv(1);

  // TODO: replace with calibrated conversion.
  float ph = phMv;   // placeholder
  float orp = orpMv; // mV before calibration offset

  Serial.printf("T=%.2f C, pH_raw=%.3f mV, ORP_raw=%.3f mV\n", tempC, phMv, orpMv);
  delay(1000);
}
Calibration Notes
  • pH requires calibration with known buffer solutions.
  • Store pH zero/offset and slope.
  • Apply temperature compensation using DS18B20.
  • ORP can be stored directly as differential mV plus calibration offset.
Simulation-Based Limits
  • pH range ±414mV remains within ADC input rails.
  • ORP range ±1000mV remains within ADC input rails.
  • Analog bandwidth is ~481.8Hz, so firmware should prioritize stable low-rate measurement rather than high-speed sampling.
  • The filtered 3.3V rail attenuates high-frequency ESP32 noise; differential reads reject most common-mode rail movement.
  • Hardware Interface

  • Libraries

  • ADS1115 Settings

  • Example Arduino-Style Skeleton

  • Calibration Notes

  • Simulation-Based Limits