Blinking LED Circuit Design

Make a circuit that blinks a red LED once per second.
Power it with a 9V block battery through an on/off switch.
Use components that are easy to hand-solder.
I’ll build a hand-solderable 1 Hz red LED blinker using a 555 timer astable circuit, powered from a 9 V battery through a switch. I’ll pick through-hole parts, calculate the timing/LED resistor values, wire the schematic, then run checks and fix any issues.
Processing was stopped.
Use 555 timer
Add power switch
Calculate 1 Hz timing
Find LED parts
U1
C4
Capacitance
1 µF
R12
Resistance
1000000 Ω
R3
Resistance
1000000 Ω
R11
Resistance
4700 Ω
C1
Capacitance
100 nF
J1
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
J5
R1
Resistance
100000 Ω
C3
Capacitance
10 µF
C5
Capacitance
10 µF
R15
Resistance
10Ω
C15
Capacitance
100 nF
R7
Resistance
10000 Ω
J3
J2
U2
U3

Refine this doc
Ask about this doc
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

ESP32-C3 ADS1115 pH ORP Sensor Interface 4412 pVaz

ESP32-C3 ADS1115 pH ORP Sensor Interface 4412 pVaz thumbnail
3.3 V-powered pH and ORP probe interface using an ADS1115 module, MCP6002 through-hole buffers, and DS18B20 temperature sensing. External ESP32 connection is through one 5-pin header carrying 3V3, GND, SDA, SCL, and DQ; ADS1115 ADDR is fixed locally and ALERT is unused.

Properties

Sensor

3.3

V

Arduino

I2C

Battery

Pricing & Availability

Distributor

Qty 1

Arrow

$4.80–$5.32

Digi-Key

$0.00

LCSC

$11.18–$11.88

Mouser

$9.84

TME

$0.81

Verical

$4.23–$9.15

Controls