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.
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


0