Go Down

Topic: Dificultades con Servomotor [Solucionado] (Read 1 time) previous topic - next topic

Rene26

May 23, 2016, 01:59 am Last Edit: May 24, 2016, 03:04 pm by Rene26
Buenas, soy un novato en el arduino y debo programar un shield L298N (con los dos motores), el módulo bluetooth HC-06, un servomotor y un módulo reproductor de MP3 (USB-SD Módulo Shield MP3).

He logrado programar el bluetooth , el L298N con el arduino uno, estoy intentando programar el servomotor, lo logro hacer funcionar pero cuando el servomotor funciona, un motor que va al L298N deja de funcionar, estoy con este problema varios días, se los agradecería mucho si me ayudan a solucionar el problema con el servomotor.
Este es el código:

Code: [Select]


 #include <SoftwareSerial.h>  //Cambiamos RX/TX del bluetooth a los pines 2 y 3
 SoftwareSerial BT(2,3);      //Para que no interfieran en la carga del sketch con el USB
#include <Servo.h>

 
int motor11 = 4; // IN4 (Salidas para el L298N)
int motor12 = 5; // IN3
int enable1 = 6; // ENB (Incluidos los 2 enables)
int motor21 = 7;// IN2
int motor22 = 8; // IN1
int enable2 = 9; // ENA

int estado;
int flag=0;       
int estadoStop=0;
Servo myservo;


void setup() {
 
    //Configuramos los pines de salida:
    pinMode(motor11, OUTPUT);
    pinMode(motor12, OUTPUT);
    pinMode(enable1, OUTPUT);
    pinMode(motor21, OUTPUT);
    pinMode(motor22, OUTPUT);
    pinMode(enable2, OUTPUT);

    pinMode(11,OUTPUT);
    // Velocidad de los motores al iniciar
    analogWrite(enable1, 80);
    analogWrite(enable2, 80);
    //Servomotor:
   myservo.attach(11);
    BT.begin(9600);      //Comunicacion serial para el bluetooth
    Serial.begin(9600);//Comunicacion serial para el monitor serial
}

void loop() {
    //El dato recibido se almacena en la variable estado
    if(BT.available() > 0){     
      estado = BT.read();   
      flag=0;
    }   
    if (estado == '1') {          //Los estados del 1 al 9 es la velocidad
        analogWrite(enable1,80);  //Siendo 1 la mas lenta y 9 la mas rapida
        analogWrite(enable2,80);
    }
      if (estado == '2') {
        analogWrite(enable1,100);
        analogWrite(enable2,100);
      }
     if (estado == '3') {
      analogWrite(enable1,120);
        analogWrite(enable2,120);
     }
      if (estado == '4') {
      analogWrite(enable1,140);
        analogWrite(enable2,140);
      }
     if (estado == '5') {
      analogWrite(enable1,160);
        analogWrite(enable2,160);
     }
     if (estado == '6') {
      analogWrite(enable1,180);
      analogWrite(enable2,180);
     }
     if (estado == '7') {
      analogWrite(enable1,200);
      analogWrite(enable2,200);
     }
     if (estado == '8') {
        analogWrite(enable1,220);
        analogWrite(enable2,220);
     }
      if (estado == '9') {
        analogWrite(enable1,240);
        analogWrite(enable2,240);
      }
       
    // AVANZAR
    if (estado == 'F') {
        digitalWrite(motor11, HIGH);
        digitalWrite(motor12, LOW);
        digitalWrite(motor21, HIGH);
        digitalWrite(motor22, LOW);
        if(flag == 0){
          Serial.println("Avance!!!");
          flag=1;
        }
    }
   
    // IZQUIERDA
    else if (estado == 'L') {
        digitalWrite(motor11, LOW);
        digitalWrite(motor12, LOW);
        digitalWrite(motor21, HIGH);
        digitalWrite(motor22, LOW);
        if(flag == 0){
          Serial.println("Gira Izquierda");
          flag=1;
        }
     //estado=3;
     //estadoStop=1;
    }
    // PARAR
    else if (estado == 'S' || estadoStop == 1) {
        digitalWrite(motor11, LOW);
        digitalWrite(motor12, LOW);
        digitalWrite(motor21, LOW);
        digitalWrite(motor22, LOW);
        if(flag == 0){
          Serial.println("STOP!");
          flag=1;
        }
 estadoStop=0;
    }
    // DERECHA
    else if (estado == 'R') {
        digitalWrite(motor11, HIGH);
        digitalWrite(motor12, LOW);
        digitalWrite(motor21, LOW);
        digitalWrite(motor22, LOW);
        if(flag == 0){
        Serial.println("Gira Derecha");
          flag=1;
        }
    }
    // REVERSA
    else if (estado == 'B') {
        digitalWrite(motor11, LOW);
        digitalWrite(motor12, HIGH);
        digitalWrite(motor21, LOW);
        digitalWrite(motor22, HIGH);
        if(flag == 0){
          Serial.println("Reversa!");
          flag=1;
        }
    }
     //AVANCE DERECHA
    else if (estado == 'I') {
        digitalWrite(motor11, HIGH);
        digitalWrite(motor12, LOW);
        digitalWrite(motor21, LOW);
        digitalWrite(motor22, HIGH);
        if(flag == 0){
          Serial.println("Reversa!");
          flag=1;
        }
    } // AVANCE IZQUIERDA
    else if (estado == 'G') {
        digitalWrite(motor11, LOW);
        digitalWrite(motor12, HIGH);
        digitalWrite(motor21, HIGH);
        digitalWrite(motor22, LOW);
        if(flag == 0){
          Serial.println("Reversa!");
          flag=1;
        }
    } // REVERSA DERECHA
    else if (estado == 'J') {
        digitalWrite(motor11, LOW);
        digitalWrite(motor12, HIGH);
        digitalWrite(motor21, HIGH);
        digitalWrite(motor22, LOW);
        if(flag == 0){
          Serial.println("Reversa!");
          flag=1;
        }
    } // REVERSA IZQUIERDA
    else if (estado == 'H') {
        digitalWrite(motor11, HIGH);
        digitalWrite(motor12, LOW);
        digitalWrite(motor21, LOW);
        digitalWrite(motor22, HIGH);
        if(flag == 0){
          Serial.println("Reversa!");
          flag=1;
        }
    }
 else if(estado== 'W' ){      // Movimiento del SERVO           
  myservo.write(180);             
  delay(100);
 
      }
    else if(estado== 'w' ){ 
  myservo.write(0);             
  delay(100);
 
      }
    else if(estado== 'U' ){ 
  myservo.write(90);             
  delay(100);
 
      }
     else if(estado== 'u' ){     
  myservo.write(0);             
  delay(100);

      }
}



Esta es la aplicación que estoy utilizando para controlarlo: Bluetooth RC Controller:


Gracias de antemano...

Hector_A



Te recomiendo que edites el título de tu mensaje por algo más descriptivo.

Cuando alguien pide que le hagan la tarea y encima en el título dice "urgente" es cuando menos nos apuramos, porque acá nadie te cobra y nadie cobra por responder. Los amigos respondemos en nuestros tiempos libres y a veces robándole horas a nuestras vidas, familia, amigos, etc.

Así que, por favor, espera y has lo que te pedí, edita tu mensaje, sobretodo en el título.

Y mientras esperas, puedes ir preguntándole al Tío Google!

Saludos!


Rene26

Gracias por el consejo, lo tendré en cuenta para en otra, disculpe por el inconveniente, ya he cambiado el titulo espero que ahora este bien. :)
Saludos, igualmente.

Hector_A


No es un inconveniente, es un consejo para que tengas mejor recibimiento.

Abrazos!

_jose_

#4
May 23, 2016, 02:07 pm Last Edit: May 23, 2016, 02:08 pm by _jose_
si estas usando el UNO ,el uso de la libreria servo desabilita el pwm en los pines 9 y 10 y tu regulas el motor con el pin 9 .busca otro pin  
pwm que no sean esos dos.
https://www.arduino.cc/en/Reference/Servo

Rene26

Muchísimas Gracias _jose_ , ese era el error que tenia.
De verdad te estoy muy agradecido, ahora leeré con detenimiento las librerías que use :)
Gracias otra vez.

_jose_

Muchísimas Gracias _jose_ , ese era el error que tenia.
De verdad te estoy muy agradecido, ahora leeré con detenimiento las librerías que use :)
Gracias otra vez.
perfecto ,por favor edita el titulo del post y añade [SOLUCIONADO] al final .si no sabes como dale un vistazo a las normas del foro.

Go Up