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
R12
Resistance
1000000 Ω
R3
Resistance
1000000 Ω
R11
Resistance
4700 Ω
C1
Capacitance
100 nF
C8
Capacitance
100 nF
R6
Resistance
1000 Ω
C17
Capacitance
10µF
R5
Resistance
1000 Ω
R10
Resistance
1000 Ω
C2
Capacitance
100 nF
C18
Capacitance
100nF
C10
Capacitance
100 nF
R9
Resistance
1000 Ω
C6
Capacitance
100 nF
R8
Resistance
10000 Ω
C11
Capacitance
100 nF
R14
Resistance
10000 Ω
C7
Capacitance
100 pF
C13
Capacitance
100 pF
R4
Resistance
1000 Ω
R13
Resistance
1000 Ω
R2
Resistance
100000 Ω
C16
Capacitance
100 nF
C14
Capacitance
100 nF
C12
Capacitance
100 nF
C9
Capacitance
100 nF
R1
Resistance
100000 Ω
C3
Capacitance
10 µF
C5
Capacitance
10 µF
R15
Resistance
10Ω
C15
Capacitance
100 nF
R7
Resistance
10000 Ω
J1
J3
J2
U2
U3
J5
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