Control de Servomotor con ESP32

A continuación se muestra el código corregido, incluyendo las bibliotecas y definiendo las etiquetas de pines (Dxx) para que el código compile correctamente en el entorno Arduino con un ESP32:

Cpp


#include <Arduino.h>
#include <Servo.h>

// Definición de etiquetas para pines si no vienen predefinidas
#ifndef D18
  #define D18 18
#endif
#ifndef D5
  #define D5 5
#endif
#ifndef D19
  #define D19 19
#endif
#ifndef D17
  #define D17 17
#endif
#ifndef D16
  #define D16 16
#endif
#ifndef D4
  #define D4 4
#endif
#ifndef D2
  #define D2 2
#endif

// Definición de pines utilizando las etiquetas de la placa
const int servoPin = D18;

// Sensor 1 (Izquierda)
const int trig1 = D5;
const int echo1 = D19;

// Sensor 2 (Centro)
const int trig2 = D17;
const int echo2 = D16;

// Sensor 3 (Derecha)
const int trig3 = D4;
const int echo3 = D2;

Servo myservo;

long readDistance(int trigPin, int echoPin) {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  // Timeout para evitar bloqueos en caso de no recibir señal
  long duration = pulseIn(echoPin, HIGH, 30000);
  // Conversión de duración (en µs) a distancia en cm:
  long distance = duration * 0.034 / 2;
  return distance;
}

void setup() {
  Serial.begin(9600);
  
  // Inicialización del servo en el pin asignado y se centra
  myservo.attach(servoPin);
  myservo.write(90); // Posición inicial central
  
  // Configuración de pines para los sensores
  pinMode(trig1, OUTPUT);
  pinMode(echo1, INPUT);
  
  pinMode(trig2, OUTPUT);
  pinMode(echo2, INPUT);
  
  pinMode(trig3, OUTPUT);
  pinMode(echo3, INPUT);
}

void loop() {
  // Obtención de lectura de cada sensor
  long dist1 = readDistance(trig1, echo1);
  long dist2 = readDistance(trig2, echo2);
  long dist3 = readDistance(trig3, echo3);
  
  Serial.print("Sensor 1 (Izquierda): ");
  Serial.print(dist1);
  Serial.println(" cm");
  
  Serial.print("Sensor 2 (Centro): ");
  Serial.print(dist2);
  Serial.println(" cm");
  
  Serial.print("Sensor 3 (Derecha): ");
  Serial.print(dist3);
  Serial.println(" cm");
  
  // Umbral de distancia para detección (en cm)
  const long threshold = 20;
 
  if (dist1 > 0 && dist1 < threshold) {
    // Si el Sensor 1 detecta un objeto cerca: Giro a la izquierda (0°)
    myservo.write(0);
    Serial.println("Giro a la izquierda");
  }
  else if (dist2 > 0 && dist2 < threshold) {
    // Si el Sensor 2 detecta la presencia: Giro al centro (90°)
    myservo.write(90);
    Serial.println("Giro al centro");
  }
  else if (dist3 > 0 && dist3 < threshold) {
    // Si el Sensor 3 detecta un objeto cerca: Giro a la derecha (180°)
    myservo.write(180);
    Serial.println("Giro a la derecha");
  }
  
  delay(100); // Pausa corta para estabilizar las lecturas
}

Descripción de los cambios:
  • Se incluyó la biblioteca `` para asegurar que las funciones y macros de Arduino estén disponibles.
  • Se incluyó la biblioteca ``.
  • Se definieron las etiquetas de pines (D18, D5, etc.) en caso de que no estén predefinidas en tu entorno.
Este código ahora debe compilar correctamente y funcionar conforme a lo solicitado. Recuerda ajustar las conexiones en tu placa basándote en estos pines y verificar la compatibilidad de niveles lógicos entre el ESP32 y los sensores HC-SR04.
Add project description and properties
No schematic yet

Talk to Flux to get started.

No files yet

Documents

    Documents are markdown text files which describe project goals, capture details, or even simulation outputs.

    Assets

    No assets added.

    Scared Tan Robot Maid

    Scared Tan Robot Maid thumbnail
    Welcome to your new project. Imagine what you can build here.

    Properties

    Properties describe core aspects of the project.

    Pricing & Availability

    Distributor

    Qty 1

    Controls