Robotica - Problema con motores DC en brazo robótico móvil controlado por Bluetooth.

 
Vista:

Problema con motores DC en brazo robótico móvil controlado por Bluetooth.

Publicado por Gebrat Porta (2 intervenciones) el 14/09/2019 19:00:10
Hola,
Estoy haciendo un proyecto que se basa en la construcción de un brazo robótico móbil controlado mediante una aplicación creada con App Inventor i programado con Arduino. Las articulaciones estan hechas con servomotores, y en la base del robot hay dos motores DC para que el robot pueda desplazarse. Los motores estan conectados a un puente H L298N.
Los servos funcionan bien, pero los motores DC no responden a la aplicación. Al pulsar los botones correspondientes a estos, los motores pitan y a los servos les dan una especie de espasmos.
Agradecería que alguien me dijera a qué puede deberse este error. Si se necesitan más detalles hacédmelo saber. Os dejo por aquí el código.
Muchas gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <SoftwareSerial.h>               //Biblioteca connexions serials
#include <Servo.h>                        //Biblioteca servos
 
Servo servo1;                             //Servo base
Servo servo2;                             //Servo articulació 1
Servo servo3;                             //Servo articulació 2
Servo servo4;                             //Servo pinça
int IN1 = 5;                             //Pol A motor esquerre connectat a pin 5
int IN2 = 6;                             //Pol B motor esquerre connectat a pin 6
int IN3 = 9;                             //Pol A motor dret connectat a pin 9
int IN4 = 12;                            //Pol B motor dret connectat a pin 10
char dada;                                //Caràcter que s'envia des de l'aplicació
String readString;                        //Objecte que crea una cadena
 
void setup(){
  servo1.attach(2);                       //Servo 1 connectat al pin 2
  servo2.attach(4);                       //Servo 2 connectat al pin 4
  servo3.attach(7);                       //Servo 3 connectat al pin 7
  servo4.attach(8);                       //Servo 4 connectat al pin 8
  pinMode(IN1, OUTPUT);                  //Estableix el pin 5 com a sortida
  pinMode(IN2, OUTPUT);                  //Estableix el pin 6 com a sortida
  pinMode(IN3, OUTPUT);                  //Estableix el pin 9 com a sortida
  pinMode(IN4, OUTPUT);                  //Estableix el pin 10 com a sortida
  Serial.begin(9600);                     //Inicia connexió serial amb el mòdul Bluetooth
}
 
void loop(){
  if (Serial.available()>0) {               //Quan hi ha connexió serial
    dada = Serial.read();                 //Cada cop que es rep la variable dada, s'ha d'interpretar
 
    if(dada=='A'){                        //Si dada correspon a 'A', moure servo 1
      motor1();
    }
 
    if(dada=='B'){                        //Si dada correspon a 'B', moure servo 2
      motor2();
    }
 
    if(dada=='C'){                        //Si dada correspon a 'C', moure servo 3
      motor3();
    }
 
    if(dada=='D'){                        //Si dada correspon a 'D', moure servo 4
      motor4();
    }
 
    if(dada=='E'){                        //Si dada correspon a 'E', avança
      analogWrite(IN4, LOW);
      analogWrite(IN2, LOW);
      analogWrite(IN3, HIGH);
      analogWrite(IN1, HIGH);
 
    }
 
    if(dada=='F'){                        //Si dada correspon a 'F', gira a l'esquerra
      analogWrite(IN4, LOW);
      analogWrite(IN2, LOW);
      analogWrite(IN3, LOW);
      analogWrite(IN1, HIGH);
 
    }
 
    if(dada=='G'){                        //Si dada correspon a 'G', para
      analogWrite(IN4, LOW);
      analogWrite(IN2, LOW);
      analogWrite(IN3, LOW);
      analogWrite(IN1, LOW);
 
    }
 
    if(dada=='H'){                        //Si dada correspon a 'H', gira a la dreta
      analogWrite(IN4, LOW);
      analogWrite(IN2, LOW);
      analogWrite(IN3, HIGH);
      analogWrite(IN1, LOW);
 
    }
 
    if(dada=='I'){                        //Si dada correspon a 'I', marxa enrere
      analogWrite(IN4, HIGH);
      analogWrite(IN2, HIGH);
      analogWrite(IN3, LOW);
      analogWrite(IN1, LOW);
 
    }
  }
}
 
void motor1(){                            //Acció motor1
  delay(10);                              //Retràs de 10 ms
  while (Serial.available()) {            //Mentre hi hagi connexió serial
    char dada2 = Serial.read();           //Emmagatzema la informació rebuda en el caràcter dada2
    readString += dada2;
  }
  if (readString.length() >0) {           //Si la cadena és més gran que 0
    Serial.println(readString.toInt());   //Converteix les dades en nombres
    servo1.write(readString.toInt());     //Assigna un valor al servo
    readString="";                        //Borra la cadena
  }
}
 
void motor2(){
  delay(10);
  while (Serial.available()) {
    char dada2 = Serial.read();
    readString += dada2;
  }
  if (readString.length() >0) {
    Serial.println(readString.toInt());
    servo2.write(readString.toInt());
    readString="";
  }
}
 
void motor3(){
  delay(10);
  while (Serial.available()) {
    char dada2 = Serial.read();
    readString += dada2;
  }
  if (readString.length() >0) {
    Serial.println(readString.toInt());
    servo3.write(readString.toInt());
    readString="";
  }
}
 
void motor4(){
  delay(10);
  while (Serial.available()) {
    char dada2 = Serial.read();
    readString += dada2;
  }
  if (readString.length() >0) {
    Serial.println(readString.toInt());
    servo4.write(readString.toInt());
    readString="";
  }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Scriptshow
Val: 2
Ha mantenido su posición en Robotica (en relación al último mes)
Gráfica de Robotica

Problema con motores DC en brazo robótico móvil controlado por Bluetooth.

Publicado por Scriptshow (1 intervención) el 14/09/2019 19:58:34
Saludos,

verifica el cableado y la alimentación de los motores y el sistema, utiliza un multímetro. Asegúrate que la tensión no baja por consumo, retorno, masas, cortos, etc. Cualquier fallo eléctrico y/o de cableado, puede ocasionar lo que indicas. Si puedes, comprueba el sistema físico (hardware) antes de nada. Luego, programa y realiza test simples para comprobar uno por uno los elementos del sistema.

P.D.: Estos son pasos que yo seguiría como técnico. No he experimentado con Arduino, aunque, conozco de su existencia hace años.

Espero sea útil.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con motores DC en brazo robótico móvil controlado por Bluetooth.

Publicado por Gebrat Porta (2 intervenciones) el 14/09/2019 20:05:03
Hola,
Gracias por la respuesta. La parte de hardware creo que es correcta, ya que he probado el funcionamiento de cada una de las partes, incluso con códigos diferentes y si que funcionan, así que el error debe de ser algo de la programación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Richard
Val: 4
Ha mantenido su posición en Robotica (en relación al último mes)
Gráfica de Robotica

Problema con motores DC en brazo robótico móvil controlado por Bluetooth.

Publicado por Richard (2 intervenciones) el 18/09/2019 06:31:13
Gebrat
Recuerdo que esto me sucedía cuando alimentaba a los motores DC y a los servos desde la misma fuente.
Solucione esto añadiendo otra fuente distinta solo y exclusivamente para los DC.
Si añades otra fuente, solo debes de unir las masas de la fuente 1 con la fuente 2.
Este error suele suceder por consumo de amperaje por parte de los motores DC y servos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar