- Portada
- Descripción del curso
- Fundamentos de Arduino y electrónica
- Fundamentos de programación Arduino
-
Electrónica del Escornabot I
-
Introducción
-
Lista de materiales
-
Pulsadores de secuencia I
-
Pulsadores Secuencia II
-
Pulsadores Secuencia III
-
LEDs de indicación de secuencia
-
Actividad 9
-
Actividad 10
-
Actividad 11
-
Zumbador I
-
Zumbador II
-
Zumbador III
-
Actividad 12
-
Actividad 13
-
Funciones
-
Actividad 14
-
Clases
-
Actividad 15
-
Arrays en Arduino
-
Actividad 16
-
- Montaje del robot
- Electrónica del Escornabot II
Actividad 18
Actividad 18

Control de dos motores paso a paso
En esta actividad realizaremos el control de los dos motores paso a paso, el derecho conectado a D2, D3, D4, D5 y el izquierdo conectado a D9, D8, D7 y D6. Debemos programar el movimiento de ambos motores hacia delante, luego hacia atrás, luego izquierda y finalmente derecha.
Solución
/*
Ejemplo [ DosMotoresPasoAPaso.ino ] para comprobar el funcionamiento de los
Motores paso a paso en el Escornabot
*/
// Pines de control del motor derecho
#define IN1_drcha 2
#define IN2_drcha 3
#define IN3_drcha 4
#define IN4_drcha 5
// Pines de control del motor izquierdo
#define IN1_izda 9
#define IN2_izda 8
#define IN3_izda 7
#define IN4_izda 6
/*
Debemos calcular los pasos que tiene que dar el motor para desplazarse
10 cm. Hay que mencionar dos datos importantes:
--> Para dar una vuelta son necesarios 512 pasos
--> El perímetro de la rueda son 23.56 cm
Por lo que para allar los pasos necesarios debemos hacer la siguiente
conversión:
1 vuelta 512 pasos
10 cm x ---------- x ------------ = 217 pasos para recorrer 10 cm.
23.56 cm 1 vuelta
Por otro lado, para hacer un giro de 90º se ha estimado que los pasos
óptimos son 125.
*/
int numero_pasos_para_avance = round((10 * 512) / 23.56);
int numero_pasos_para_giro = 125;
// Rutina de Setup
void setup() {
// Inicializamos la comunicación Serial
Serial.begin(9600);
// Se indican los pines de los motores como salidas
// Motor derecho
pinMode(IN1_drcha, OUTPUT);
pinMode(IN2_drcha, OUTPUT);
pinMode(IN3_drcha, OUTPUT);
pinMode(IN4_drcha, OUTPUT);
// Motor Izquierdo
pinMode(IN1_izda, OUTPUT);
pinMode(IN2_izda, OUTPUT);
pinMode(IN3_izda, OUTPUT);
pinMode(IN4_izda, OUTPUT);
}
void loop() {
// Matriz con la secuencia de excitacion de las bobinas
int paso[8][4] = {
{1, 0, 0, 0},
{1, 1, 0, 0},
{0, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 0},
{0, 0, 1, 1},
{0, 0, 0, 1},
{1, 0, 0, 1}
};
// Hacemos que avance recorriendo la secuencia hacia delante
for (int j = 0; j < numero_pasos_para_avance; j++) {
for (int i = 0; i < 8; i++) {
digitalWrite(IN1_drcha, paso[i][0]);
digitalWrite(IN2_drcha, paso[i][1]);
digitalWrite(IN3_drcha, paso[i][2]);
digitalWrite(IN4_drcha, paso[i][3]);
digitalWrite(IN1_izda, paso[i][0]);
digitalWrite(IN2_izda, paso[i][1]);
digitalWrite(IN3_izda, paso[i][2]);
digitalWrite(IN4_izda, paso[i][3]);
delay(1);
}
}
// Hacemos que retroceda recorriendo la secuencia hacia atrás
for (int j = 0; j < numero_pasos_para_avance; j++) {
for (int i = 0; i < 8; i++) {
digitalWrite(IN1_drcha, paso[i][3]);
digitalWrite(IN2_drcha, paso[i][2]);
digitalWrite(IN3_drcha, paso[i][1]);
digitalWrite(IN4_drcha, paso[i][0]);
digitalWrite(IN1_izda, paso[i][3]);
digitalWrite(IN2_izda, paso[i][2]);
digitalWrite(IN3_izda, paso[i][1]);
digitalWrite(IN4_izda, paso[i][0]);
delay(1);
}
}
// Hacemos que gire a la derecha
for (int j = 0; j < numero_pasos_para_giro; j++) {
for (int i = 0; i < 8; i++) {
digitalWrite(IN1_drcha, paso[i][0]);
digitalWrite(IN2_drcha, paso[i][1]);
digitalWrite(IN3_drcha, paso[i][2]);
digitalWrite(IN4_drcha, paso[i][3]);
digitalWrite(IN1_izda, paso[i][3]);
digitalWrite(IN2_izda, paso[i][2]);
digitalWrite(IN3_izda, paso[i][1]);
digitalWrite(IN4_izda, paso[i][0]);
delay(1);
}
}
// Hacemos que gire a la izquierda
for (int j = 0; j < numero_pasos_para_giro; j++) {
for (int i = 0; i < 8; i++) {
digitalWrite(IN1_drcha, paso[i][3]);
digitalWrite(IN2_drcha, paso[i][2]);
digitalWrite(IN3_drcha, paso[i][1]);
digitalWrite(IN4_drcha, paso[i][0]);
digitalWrite(IN1_izda, paso[i][0]);
digitalWrite(IN2_izda, paso[i][1]);
digitalWrite(IN3_izda, paso[i][2]);
digitalWrite(IN4_izda, paso[i][3]);
delay(1);
}
}
delay(1000);
}
| Vistas | |
|---|---|
| 23 | Número de vistas |
| 23 | Vistas de miembros |
| 0 | Vistas públicas |
| Acciones | |
|---|---|
| 0 | Gustos |
| 0 | No me gusta |
| 0 | Comentarios |
Compartir por correo
Por favor iniciar sesión para compartir esto webpage por correo.