Qué tal, estoy controlando un robot de 2 ruedas con 2 motores DC con un ESP32 y un L298N. Su funcionamiento es que detecte 3 fotorresistencias y al momento de detectar alguna de ellas los motores se muevan. Al momento de cargarle el programa solo me hace la función 1 motor. El otro no responde. Lo curiosos sucede con los puertos ENA1, ENA2 y ENB1 y ENB2. Si conecto ENA1 y ENB2 solo hace la función el motor A pero si conecto ENA2 y ENB1 solo lo hace el B. Si conecto ENA1 y ENB1 o ENA2 y ENB2 no hace nada. A como he investigado esos puertos solo tienen la función de habilitar o deshabilitar los motores y controlarlo por PWM pero sea cual sea no debería de haber problema. Tengo la sospecha de que el programa es el problema, alguien sabría cual puede ser el problema.
Como dato, no sé si sea relevante, el ESP32 y el LN298N tienen alimentación separadas. El ESP32 con pilas (+12V) y el ESP32 con una power bank.
Este es el programa en Arduino IDE:
// Librería para el ESP32
#include <WiFi.h>
// Pines de las fotorresistencias
const int leftSensorPin = 34;
const int middleSensorPin = 35;
const int rightSensorPin = 36;
// Pines del puente H L298N
const int motor1Pin1 = 2;
const int motor1Pin2 = 4;
const int motor2Pin1 = 32;
const int motor2Pin2 = 33;
// Pines de habilitación de los motores (ENA y ENB)
const int enableAPin = 25; // Puedes asignar cualquier pin disponible
const int enableBPin = 26; // Puedes asignar cualquier pin disponible
void setup() {
// Configurar los pines de los motores como salida
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
// Configurar los pines de habilitación como salida
pinMode(enableAPin, OUTPUT);
pinMode(enableBPin, OUTPUT);
// Iniciar la comunicación serial
Serial.begin(9600);
// Habilitar PWM en los pines de habilitación de los motores
ledcSetup(0, 5000, 8); // Canal 0, frecuencia 5000Hz, resolución de 8 bits
ledcSetup(1, 5000, 8); // Canal 1, frecuencia 5000Hz, resolución de 8 bits
ledcAttachPin(enableAPin, 0); // Habilitar PWM en el pin de habilitación del motor A
ledcAttachPin(enableBPin, 1); // Habilitar PWM en el pin de habilitación del motor B
}
void loop() {
// Leer los valores de las fotorresistencias
int leftSensorValue = analogRead(leftSensorPin);
int middleSensorValue = analogRead(middleSensorPin);
int rightSensorValue = analogRead(rightSensorPin);
// Mostrar los valores en el monitor serial
Serial.print("Left Sensor: ");
Serial.print(leftSensorValue);
Serial.print(" | Middle Sensor: ");
Serial.print(middleSensorValue);
Serial.print(" | Right Sensor: ");
Serial.println(rightSensorValue);
// Determinar cuál sensor tiene el valor más alto
int maxValue = max(leftSensorValue, max(middleSensorValue, rightSensorValue));
// Control de los motores según las lecturas de las fotorresistencias
if (maxValue > 300) { // Activar movimiento solo si algún sensor detecta más de 300
if (leftSensorValue == maxValue) {
// Alumbrar fotorresistencia izquierda: gira a la izquierda
digitalWrite(motor1Pin1, HIGH); // Avance
digitalWrite(motor1Pin2, LOW); // Reversa
digitalWrite(motor2Pin1, LOW); // Avance
digitalWrite(motor2Pin2, HIGH); // Reversa
// Ajustar la velocidad de los motores
ledcWrite(0, 255); // Velocidad máxima para motor 1
ledcWrite(1, 255); // Velocidad máxima para motor 2
} else if (middleSensorValue == maxValue) {
// Alumbrar fotorresistencia del medio: avanza hacia adelante
digitalWrite(motor1Pin1, HIGH); // Avance
digitalWrite(motor1Pin2, LOW); // Reversa
digitalWrite(motor2Pin1, HIGH); // Avance
digitalWrite(motor2Pin2, LOW); // Reversa
// Ajustar la velocidad de los motores
ledcWrite(0, 255); // Velocidad máxima para motor 1
ledcWrite(1, 255); // Velocidad máxima para motor 2
} else if (rightSensorValue == maxValue) {
// Alumbrar fotorresistencia derecha: gira a la derecha
digitalWrite(motor1Pin1, LOW); // Avance
digitalWrite(motor1Pin2, HIGH); // Reversa
digitalWrite(motor2Pin1, HIGH); // Avance
digitalWrite(motor2Pin2, LOW); // Reversa
// Ajustar la velocidad de los motores
ledcWrite(0, 255); // Velocidad máxima para motor 1
ledcWrite(1, 255); // Velocidad máxima para motor 2
}
} else {
// Si ninguno de los sensores detecta más de 300, detener el robot
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, LOW);
}
}