[SOLUCIONADO] No funciona un motor al usar mini servo

¡Buenas!

Tengo un problema, estoy realizando un proyecto de tecnología de un coche esquiva obstaculos con
1 servo motor, puente H y un ultrasonico. Obviamente con motores.

La cuestion es que la rueda derecha falla al introducir el servo en la programación y no se por qué. Les tengo pines distintos asignados.

Este es el puente en H.
((NO HACER CASO A LOS 5v y GND marcados, solo fijarse en el Puente H))

Muestro programación

#include <Servo.h>

int ENA=11, IN1=13, IN2=12;
int ENB=10, IN4=8, IN3=9;
int Rojo=6; 
int Verde=5; 
int Azul=3; 
long distancia;
long tiempo;    
int Distancia;
int echo = 4;
int trig = 2; 
Servo servo1;

int sonar() {
  digitalWrite(trig,LOW); 
  delayMicroseconds(5);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  tiempo = pulseIn(echo, HIGH); 
  distancia = int(0.017*tiempo); 
  Serial.println(distancia);
  return distancia;
}

  
void setup(){  
  Serial.begin(9600);
  servo1.attach(7);
  pinMode(ENA,OUTPUT);
  pinMode(IN1,OUTPUT);
  pinMode(IN2,OUTPUT);
  pinMode(ENB,OUTPUT);
  pinMode(IN3,OUTPUT);
  pinMode(IN4,OUTPUT);
pinMode(Rojo,OUTPUT); 
pinMode(Verde,OUTPUT);
pinMode(Azul,OUTPUT);
  pinMode(trig, OUTPUT); 
  pinMode(echo, INPUT);  
}  
  
void loop(){  
  
    if(sonar() <= 15 && sonar() >=2) {
    color(255,0,0);
    servo.write(180);
    digitalWrite(IN3,LOW);
    digitalWrite(IN4,LOW);
    digitalWrite(IN1,LOW);
    digitalWrite(IN2,LOW);
    analogWrite(ENA,0);
    analogWrite(ENB,0);
    }else{   
    color(0,255,0);
    servo.write(90);    
    digitalWrite(IN1,LOW);
    digitalWrite(IN2,HIGH);
    digitalWrite(IN3,LOW);   
    digitalWrite(IN4,HIGH);
    analogWrite(ENA, 125);
    analogWrite(ENB, 125); 
    }
    
  
    delay(500);  
} 

void color(int rojo, int verde, int azul){
analogWrite(Rojo, 255-rojo);
analogWrite(Verde, 255-verde);
analogWrite(Azul, 255-azul);
}

Sin la programación del servo, los dos motores giran en (else) pero con el servo solo 1 rueda gira.

Disculpa mi ignorancia, por favor.

El miniservo que función cumple?

Me imagino que debe de ser para mover el detector de obstáculos pero no lo entiendo, porque un servo cuesta mucho más caro (a no ser que se use un 9G de plastico) que uno o dos sensores de ultrasonidos.

Ese robotito yo lo hice hace unos 3 años y luego lo desarmé para que lo armara mi nieto.

En la parte de adelante tenía 5 sensores, 3 eran los clásicos ultrasónicos y 2 eran de presión. Para detectar una colisión inevitable como, por ejemplo, la pata de una mesa.

Saludos y disculpas por no entender la ubicación del servo.

Debes ser mas prolijo para programar o comentar mas tu código porque no queda claro que va conectado con que. El problema es simple. Servo usa pines que también estas usando con tu controlador de motor. Servo lo asignaste a pin 7. Como no dices que rueda es la que no gira o mejor dicho que pines están dedicados a esa rueda que no gira porque en tu código no se puede deducir nada.

El servo es de 9G y lo que pretendo es que compare distancias a los lados para observar que ruta es mejor escoger. La programación de eso no lo he puesto en el post ya que no me interesa preguntar de ello. El problema reside en que me es incompatible UNA rueda con el servo.

En el caso del código puesto el coche debería seguir recto si la distancia detectada es menor de 30 pero como dije una rueda falla. Por si acaso probé los dos motores repetidamente por si se quemó o fallaba la programación de los motores por lo que averigue después de varias pruebas que era el servo.

Cambie el pin del servo a A5 ( si no me equivoco) por si el pin 7 tenía conflicto pero no. Sigue sin funcionar el motor derecho.

Un compañero del proyecto se llevó el robot y trabajo en un código que hize yo (Modifico mi código) llegando a tener el mismo problema pero en su caso al parecer es la rueda izquierda y no derecha que es mi caso.

A lo de surbyte los pines salen al comienzo como

Motor izquierdo/derecho

int ENA=11, IN1=13, IN2=12;

Motor derecho/izquierdo

int ENB=10, IN4=8, IN3=9;

Led RGB

int Rojo=6; int Verde=5; int Azul=3;

ULTRASONico int echo = 4; int trig = 2;

Y finalmente servo 7.

Dicho todo esto no se cual podría ser el error. Creo que es la programación pero podría ser la conexión de pines.

Arms18: El servo es de 9G y lo que pretendo es que compare distancias a los lados para observar que ruta es mejor escoger. La programación de eso no lo he puesto en el post ya que no me interesa preguntar de ello. El problema reside en que me es incompatible UNA rueda con el servo.

En el caso del código puesto el coche debería seguir recto si la distancia detectada es menor de 30 pero como dije una rueda falla. Por si acaso probé los dos motores repetidamente por si se quemó o fallaba la programación de los motores por lo que averigue después de varias pruebas que era el servo.

Cambie el pin del servo a A5 ( si no me equivoco) por si el pin 7 tenía conflicto pero no. Sigue sin funcionar el motor derecho.

Un compañero del proyecto se llevó el robot y trabajo en un código que hize yo (Modifico mi código) llegando a tener el mismo problema pero en su caso al parecer es la rueda izquierda y no derecha que es mi caso.

A lo de surbyte los pines salen al comienzo como

Motor izquierdo/derecho

int ENA=11, IN1=13, IN2=12;

Motor derecho/izquierdo

int ENB=10, IN4=8, IN3=9;

Led RGB

int Rojo=6; int Verde=5; int Azul=3;

ULTRASONico int echo = 4; int trig = 2;

Y finalmente servo 7.

Dicho todo esto no se cual podría ser el error. Creo que es la programación pero podría ser la conexión de pines.

El uso de la libreria servo desabilita el pwm en los pines 9 y 10 ,y tu estas haciendo un analogWrite (o sea pwm) en el pin 10 ( ENB ).usa otro pin pwm que no sea el 9 o el 10:

The Servo library supports up to 12 motors on most Arduino boards and 48 on the Arduino Mega. On boards other than the Mega, use of the library disables analogWrite() (PWM) functionality on pins 9 and 10, whether or not there is a Servo on those pins. On the Mega, up to 12 servos can be used without interfering with PWM functionality; use of 12 to 23 motors will disable PWM on pins 11 and 12.

jose: El uso de la libreria servo desabilita el pwm en los pines 9 y 10 ,y tu estas haciendo un analogWrite (o sea pwm) en el pin 10 ( ENB ).usa otro pin pwm que no sea el 9 o el 10:

Muchas gracias !

Si el hilo está solucionado, por favor, edita el título agregándole [SOLUCIONADO] de esa manera podemos cerrarlo y evitar que dentro de quichicientos años, alguien lo reflote.