Proyecto multi-sensor ESP32-CAM — Arduino Uno simulation

Un proyecto con múltiples sensores (ultrasonidos, DHT22) y actuadores (LEDs, buzzer) controlados por ESP32-CAM y Arduino Uno.

An interactive Arduino Uno circuit simulation you can run free in your browser on Velxio, by vignesh135791.

Components

Sketch code

#include <DHT.h>

// ---------------- PIN CONFIG ----------------
#define DHTPIN 2
#define DHTTYPE DHT22

#define TRIG_PIN 3
#define ECHO_PIN 4

#define REGISTER_BUTTON 5
#define REMOVE_BUTTON 6

#define GREEN_LED 7
#define RED_LED 8
#define BUZZER 9

#define ACCESS_DISTANCE 17
#define ACCESS_RESET_DISTANCE 22

DHT dht(DHTPIN, DHTTYPE);

// Button states
bool lastRegisterState = HIGH;
bool lastRemoveState = HIGH;

// Distance trigger
bool accessTriggered = false;

// Counter to cut serial prints by half
int printCounter = 0;

// Current operation mode
enum Mode
{
  IDLE,
  REGISTER_MODE,
  REMOVE_MODE
};

Mode currentMode = IDLE;

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

  dht.begin();

  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  pinMode(REGISTER_BUTTON, INPUT_PULLUP);
  pinMode(REMOVE_BUTTON, INPUT_PULLUP);

  pinMode(GREEN_LED, OUTPUT);
  pinMode(RED_LED, OUTPUT);
  pinMode(BUZZER, OUTPUT);

  digitalWrite(GREEN_LED, LOW);
  digitalWrite(RED_LED, LOW);
  digitalWrite(BUZZER, LOW);

  delay(1000);

  Serial.println();
  Serial.println("======================================");
  Serial.println(" SMART MEDICAL KIT - ARDUINO UNO");
  Serial.println("======================================");
  Serial.println("[SYSTEM] Initializing sensors...");
  Serial.println("[SYSTEM] Waiting for ESP32 Camera...");
  Serial.println("UNO_READY");
}

void loop()
{
  // ---------------- SENSOR READINGS ----------------

  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  if (isnan(temperature) || isnan(humidity))
  {
    temperature = 0;
    humidity = 0;
  }

  long distance = getDistance();

  // Print sensor readings only every 2 cycles (reduces output frequency by half)
  printCounter++;
  if (printCounter >= 2)
  {
    Serial.print("Temp: ");
    Serial.print(temperature);
    Serial.print(" C | Hum: ");
    Serial.print(humidity);
    Serial.print("% | Distance: ");
    Serial.print(distance);
    Serial.println(" cm");
    
    printCounter = 0; // Reset counter
  }

  // ---------------- REGISTER BUTTON ----------------

  bool registerState = digitalRead(REGISTER_BUTTON);

  if (registerState == LOW && lastRegisterState == HIGH)
  {
    currentMode = REGISTER_MODE;

    digitalWrite(GREEN_LED, HIGH);

    Serial.println();
    Serial.println("======================================");
    Serial.println("[BUTTON] REGISTER button pressed");
    Serial.println("[MODE] Register Medicine Mode");
    Serial.println("REGISTER");

    successBeep();
  }

  lastRegisterState = registerState;

  // ---------------- REMOVE BUTTON ----------------

  bool removeState = digitalRead(REMOVE_BUTTON);

  if (removeState == LOW && lastRemoveState == HIGH)
  {
    currentMode = REMOVE_MODE;

    digitalWrite(GREEN_LED, HIGH);

    Serial.println();
    Serial.println("======================================");
    Serial.println("[BUTTON] REMOVE button pressed");
    Serial.println("[MODE] Remove Medicine Mode");
    Serial.pr