ESP32-Based Capacitive Sensor Interface with OLED Display and Alert System — ESP32 simulation

by Maruthavel T and Suvetha.p

An interactive ESP32 circuit simulation you can run free in your browser on Velxio, by maruthavelssiet.

Components

Sketch code

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// Pin connections
#define SENSOR_PIN 34
#define SDA_PIN 21
#define SCL_PIN 22
#define LED_PIN 26
#define BUZZER_PIN 27

// OLED settings
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_ADDR 0x3C

// Adjust this threshold after testing
#define SENSOR_THRESHOLD 1000

Adafruit_SSD1306 display(
  SCREEN_WIDTH,
  SCREEN_HEIGHT,
  &Wire,
  -1
);

void setup() {
  Serial.begin(115200);
  delay(1000);

  // Start I2C
  Wire.begin(SDA_PIN, SCL_PIN);

  // Configure pins
  pinMode(SENSOR_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);

  // Keep alerts OFF at startup
  digitalWrite(LED_PIN, LOW);
  digitalWrite(BUZZER_PIN, LOW);

  // Initialize OLED
  if (display.begin(
        SSD1306_SWITCHCAPVCC,
        OLED_ADDR)) {

    display.clearDisplay();
    display.setTextColor(SSD1306_WHITE);
    display.setTextSize(1);
    display.setCursor(0, 0);
    display.println("CAPACITIVE SENSOR");
    display.println("ESP32 Initializing...");
    display.display();

  } else {
    Serial.println("OLED NOT FOUND!");
  }

  Serial.println("========================");
  Serial.println("ESP32 SENSOR INTERFACE");
  Serial.println("System Ready");
  Serial.println("========================");
}

void loop() {
  // Read potentiometer through GPIO34
  int sensorValue = analogRead(SENSOR_PIN);

  // Detect simulated object response
  bool objectDetected =
      (sensorValue > SENSOR_THRESHOLD);

  // Control LED and buzzer
  digitalWrite(
    LED_PIN,
    objectDetected ? HIGH : LOW
  );

  digitalWrite(
    BUZZER_PIN,
    objectDetected ? HIGH : LOW
  );

  // Serial Monitor output
  Serial.print("Sensor Value: ");
  Serial.print(sensorValue);
  Serial.print(" | Status: ");

  if (objectDetected) {
    Serial.println("DETECTED");
  } else {
    Serial.println("NORMAL");
  }

  // OLED display
  display.clearDisplay();
  display.setTextColor(SSD1306_WHITE);

  display.setTextSize(1);
  display.setCursor(0, 0);
  display.println("CAPACITIVE SENSOR");

  display.setCursor(0, 18);
  display.print("Value: ");
  display.println(sensorValue);

  display.setCursor(0, 34);
  if (objectDetected) {
    display.println("STATUS: DETECTED");
    display.setCursor(0, 48);
    display.println("ALARM: ON");
  } else {
    display.println("STATUS: NORMAL");
    display.setCursor(0, 48);
    display.println("ALARM: OFF");
  }

  display.display();

  delay(500);
}

More projects by maruthavelssiet