Motores de coche ESP32 no funcionan

'

Resumen

Este texto estará oculto

Hola buenas, mi proyecto se trata de un coche que utiliza una esp32 con sensores (ultrasonico,servo), ademas de un boton, un l298n i una lcd en al que se proyecta la distancia. Necesito ayuda urgente ya que por separado los sensores funcionan i los motores tambien pero cuando subo a la placa el programa completo i lo acciono mediante el boton solo se mueve el servo, aunque el ultrasonico manda perfectamente la señal a la LCD, agradeceria ayuda.
Aqui adjunto mi código:

#include <ESP32Servo.h>
#include <Wire.h>
#include <NewPing.h>
#include <LiquidCrystal_I2C.h>
#include <Robojax_L298N_DC_motor.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
float distance, DURATION;

#define MAX_DISTANCE 200
#define IN1 18
#define IN2 5
#define IN3 17
#define IN4 16
#define ENA 19
#define ENB 4
int servoPin = 26;
int pushButton = 32;
#define echoPin 13
#define trigPin 23

Servo myServo;

bool isMoving = false;        // Estado del servo (movimiento o detenido)
bool lastButtonState = HIGH;  // Estado anterior del botón
bool currentButtonState = HIGH;
int pos = 0;

unsigned long startTime;          // Tiempo de inicio
const unsigned long duration = 10000; // Duración del proceso (10 segundos)
unsigned long lastTimeButtonPressed = 0; 
unsigned long debounceTime = 200; // Tiempo para evitar rebotes en el botón

const int freq = 30000;
const int pwmChannel = 0;
const int resolution = 8;
int dutyCycle = 225;

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

  // Configuración de pines del puente H
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);

  // Configuración de PWM
  ledcSetup(0, 30000, 8);
  ledcAttachPin(ENA, 0);
  ledcWrite(0, 255); // Velocidad máxima
  ledcSetup(1, 30000, 8); // Canal 1
  ledcAttachPin(ENB, 1);
  ledcWrite(1, 255); // Velocidad máxima

  // Configuración del servo
  myServo.attach(servoPin, 500, 2400);
  pinMode(pushButton, INPUT_PULLUP);
  myServo.write(pos); // Posición inicial

  // Configuración de LCD
  lcd.begin();
  lcd.backlight();

  // Configuración de sensor ultrasónico
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  // Leer estado del botón
  currentButtonState = digitalRead(pushButton);
  if (currentButtonState == LOW && lastButtonState == HIGH) {
    isMoving = !isMoving;  // Alterna el estado de movimiento
    startTime = millis(); // Reinicia el temporizador
    delay(50);            // Evita rebotes
  }
  lastButtonState = currentButtonState;

  // Lógica principal si está en movimiento
  if (isMoving) {
    // Genera un pulso para el sensor ultrasónico
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    DURATION = pulseIn(echoPin, HIGH);
    distance = 0.017 * DURATION; // Calcula la distancia en cm

    // Actualiza la pantalla LCD
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Distance:");
    lcd.print(distance);
    delay(500);

    // Movimiento del servo
    for (pos = 0; pos <= 165; pos += 5) {
      myServo.write(pos);
      delay(20);
    }

    // Movimiento de motores basado en distancia
    if (distance > 15) {
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
      ledcWrite( 0, dutyCycle);
      ledcWrite( 1, dutyCycle);
    } else {
      // Gira a la derecha si hay un obstáculo
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, HIGH);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
      delay(1000); // Tiempo de giro
    }

    // Detiene el proceso después de 10 segundos
    if (millis() - startTime >= duration) {
      isMoving = false; // Finaliza el movimiento
    }
  } else {
    // Detener motores y servo si no está activo
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    myServo.write(0); // Posición inicial
    ledcWrite(0, 0); // Detenemos PWM del motor izquierdo
    ledcWrite(1, 0); // Detenemos PWM del motor derecho
  }

'

Por favor, publique su código/programa formateado en <CODE> etiquetas. El problema con su proyecto es su fuente de alimentación y su cableado. Muestre y describa todos los dispositivos que está utilizando. Muestre su cableado en una fotografía y un dibujo.


tambien utilizo una bateria de 5v directa a la esp 32 a parte de un conjunto de pilas que suman 6v todo esto en una proto

Sus motores son de 3vdc - 6vdc. El L298N toma 1.5v de su batería. Si tiene una batería de 6 V CC, sus motores tendrán 4.5 V CC para usar. Un motor podría funcionar. Dos no lo harán. Consigue una fuente de alimentación más grande y del tamaño adecuado.

Tengo addicionalmente a las pilas que suman 6v una bateria de 5v. 11v en total.

En total? Suena peligroso. Su batería no es suficiente, pero si no quiere moverse, esa es su elección.

Que quiere decir ? Cuanto voltaje necesito?De cuanto han de ser las baterias? Los motores creo que son 5-10v DC

Consulte los documentos que llegaron con su kit o los dispositivos (busque los datos en el dispositivo).


Este circuito tiene 4 motores aunque no tiene LCD i utiliza tan solo 9v. En que se basa para decir que el voltaje es demasiado bajo?

AYUDA porfavor

Le expliqué que la fuente de alimentación era demasiado pequeña para DOS motores... y ahora dices que tiene CUATRO motores y preguntas ¿por qué? Lee lo que escribí. Lea la documentación.

Además... El dibujo en la publicación # 3 es inexacto. Las placas de controlador de motor y los servos no son alimentados por el microcontrolador, sino directamente desde la fuente de alimentación a la placa del controlador del motor o al servo.

Lo tomo como que crees que no estaba ayudando. Así que dejaré de hacer lo que estaba haciendo. Buen viaje.

como?Pedia tambien ayuda de otras personas. Pero gracias por responderme.

El de 4 motores es otro proyecto, nada más aclaro que ese proyecto que demanda mas energia esta hecho con 9v.

Además ya sé que se alimenta desde la fuente de alimentación era para simplificarlo. Ya he mirado la documentación i no encuentro solución por eso pedia ayuda.

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @mateo51 .

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Moderador:
@mateo51 debes ser paciente y escuchar y respetar a quien te responde, todos invertimos tiempo y te aseguro que por experiencia propia a veces uno dedica horas en corregir un programa y muchos ni siquiera le prestan atención, es muy frustante.
Ahora si alguien te dice, lee lo que ya te escribí, baja la cabeza y hazlo!!
No cuesta tanto.

Respondo como forero

El L298 alimenta con la tensión que le conectas a Vmotor a los motores, el esquema lo muestra. Tiene un regulador 7805 que baja esa tensión a 5V si es que puede.
Mi consejo es que no te pases de 6.5 o 7V,
Si usas esos motores baratos que todos usamos con los autos de RC recuerda que no toleran mas de 6V. No es problema alimentar con algo mas en tanto y en cuanto no le des toda la velocidad a tus motores algo que controlas con el pin ENABLE A o B si mal recuerdo. Si lo pones a 255 es full tensión de Vmotor entonces 7V puede ser demasiado.
Generalmente eso no pasa.
YO te recomiendo usar baterías 18650. 2 buenas baterías de 2200mAh en serie totalizan 7.4V y con eso todo funciona bien. Lo he usado muchas veces.
Lo único que debes hacer es cuidar que las baterías no caigan por debajo de 3.2V o 6.4 en serie. Es peligroso para su vida útil.
Las dos bateriás podran con los 4 motores o los 2 motores.