Un excelente tutorial, estuve buscando y casi nadie lo explica como hacer funcionar uno de estos motores. Gracias a un tiktok me salió para ver este tutorial , altamente recomendado.
//Es el código implementado, yo lo probé en un arduino nano y funciona 10/10. // Definicion de pones de motor paso a paso (motor de DVD) const int motorPin1 = 8; // A+ const int motorPin2 = 9; // A- const int motorPin3 = 10; // B+ const int motorPin4 = 11; // B- // Variables para controlar el sentido de giro del motor boolean sentidoHorario = true; // Variable para controlar el sentido horario del motor unsigned long tiempoAnterior = 0; // Variable para almacenar el tiempo anterior const unsigned long intervalo = 2000; // Intervalo de tiempo en milisegundos (2 segundos) // Define el patrón de secuencia para el motor paso a paso de 4 fases int pasoSecuencia[][4] = { {1, 0, 0, 1}, // Paso 1 {0, 1, 0, 1}, // Paso 2 {0, 1, 1, 0}, // Paso 3 {1, 0, 1, 0}, // Paso 4 }; int pasoActual = 0; void setup() { pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); } void loop() { unsigned long tiempoActual = millis(); // Verificamos si paso el intervalo de tiempo if (tiempoActual - tiempoAnterior >= intervalo) { // Cambiar el sentido de giro del motor sentidoHorario = !sentidoHorario; // Actualizar el tiempo anterior tiempoAnterior = tiempoActual; } // Seleccionar la secuencia de pasos actual int paso = pasoActual; // Activar los pines según la secuencia de pasos actual y el sentido de giro if (sentidoHorario) { digitalWrite(motorPin1, pasoSecuencia[paso][0]); digitalWrite(motorPin2, pasoSecuencia[paso][1]); digitalWrite(motorPin3, pasoSecuencia[paso][2]); digitalWrite(motorPin4, pasoSecuencia[paso][3]); } else { // Invertir la secuencia para el sentido antiHorario digitalWrite(motorPin1, pasoSecuencia[paso][3]); digitalWrite(motorPin2, pasoSecuencia[paso][2]); digitalWrite(motorPin3, pasoSecuencia[paso][1]); digitalWrite(motorPin4, pasoSecuencia[paso][0]); } // Incrementar el paso actual para siguiente iteración pasoActual = (pasoActual + 1) %4; // Añadir un pequeño retraso para controlar la velocidad del motor delay(10); // Puedes ajustar este valor según la velocidad deseada }
Un excelente tutorial, estuve buscando y casi nadie lo explica como hacer funcionar uno de estos motores.
Gracias a un tiktok me salió para ver este tutorial , altamente recomendado.
Gracias, saludos
//Es el código implementado, yo lo probé en un arduino nano y funciona 10/10.
// Definicion de pones de motor paso a paso (motor de DVD)
const int motorPin1 = 8; // A+
const int motorPin2 = 9; // A-
const int motorPin3 = 10; // B+
const int motorPin4 = 11; // B-
// Variables para controlar el sentido de giro del motor
boolean sentidoHorario = true; // Variable para controlar el sentido horario del motor
unsigned long tiempoAnterior = 0; // Variable para almacenar el tiempo anterior
const unsigned long intervalo = 2000; // Intervalo de tiempo en milisegundos (2 segundos)
// Define el patrón de secuencia para el motor paso a paso de 4 fases
int pasoSecuencia[][4] = {
{1, 0, 0, 1}, // Paso 1
{0, 1, 0, 1}, // Paso 2
{0, 1, 1, 0}, // Paso 3
{1, 0, 1, 0}, // Paso 4
};
int pasoActual = 0;
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop() {
unsigned long tiempoActual = millis();
// Verificamos si paso el intervalo de tiempo
if (tiempoActual - tiempoAnterior >= intervalo) {
// Cambiar el sentido de giro del motor
sentidoHorario = !sentidoHorario;
// Actualizar el tiempo anterior
tiempoAnterior = tiempoActual;
}
// Seleccionar la secuencia de pasos actual
int paso = pasoActual;
// Activar los pines según la secuencia de pasos actual y el sentido de giro
if (sentidoHorario) {
digitalWrite(motorPin1, pasoSecuencia[paso][0]);
digitalWrite(motorPin2, pasoSecuencia[paso][1]);
digitalWrite(motorPin3, pasoSecuencia[paso][2]);
digitalWrite(motorPin4, pasoSecuencia[paso][3]);
} else {
// Invertir la secuencia para el sentido antiHorario
digitalWrite(motorPin1, pasoSecuencia[paso][3]);
digitalWrite(motorPin2, pasoSecuencia[paso][2]);
digitalWrite(motorPin3, pasoSecuencia[paso][1]);
digitalWrite(motorPin4, pasoSecuencia[paso][0]);
}
// Incrementar el paso actual para siguiente iteración
pasoActual = (pasoActual + 1) %4;
// Añadir un pequeño retraso para controlar la velocidad del motor
delay(10); // Puedes ajustar este valor según la velocidad deseada
}
Que bien..... éxitos