Arduino Nano - Motor paso a paso
Este tutorial te enseña cómo usar Arduino Nano para controlar un motor paso a paso con el controlador L298N. En detalle, aprenderemos:
- Cómo usar Arduino Nano y el controlador L298N para controlar un motor paso a paso bipolar
- Cómo programar Arduino Nano para controlar la posición del motor paso a paso
- Cómo programar Arduino Nano para controlar la velocidad del motor paso a paso
- Cómo programar Arduino Nano para controlar la dirección del motor paso a paso
El tutorial es aplicable a todo tipo de motores paso a paso bipolares con cuatro hilos. Se utilizará un motor paso a paso NEMA 17 como ejemplo.

Si quieres controlar otro tipo de motor paso a paso, consulta este tutorial Arduino Nano - 28BYJ-48 Stepper Motor.
Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Acerca del motor paso a paso
Existen dos tipos comunes de motores paso a paso:
- bipolar: este motor tiene 4 cables
- unipolar: este motor tiene entre 5 y 6 cables
Para un motor paso a paso unipolar de 6 hilos, podemos utilizar cuatro de los seis cables y controlarlo como si fuera un motor paso a paso bipolar.
Para un motor paso a paso unipolar de 5 hilos, consulte el tutorial Arduino Nano - controlar el motor paso a paso 28BYJ-48 usando el controlador ULN2003 para obtener más información.
El énfasis de este tutorial es exclusivamente en el motor paso a paso bipolar.
Pinout del motor paso a paso bipolar
El motor paso a paso bipolar tiene cuatro pines, y los nombres de estos pines varían según el fabricante. La tabla siguiente proporciona algunos de los nombres más utilizados:
| PIN NO | Naming 1 | Naming 2 | Naming 3 |
|---|---|---|---|
| 1 | A+ | A | A |
| 2 | A- | A | C |
| 3 | B+ | B | B |
| 4 | B- | B | D |

La disposición de los pines, las etiquetas asignadas a los cables y los colores de los cables pueden variar entre fabricantes. Debes consultar la ficha técnica o el manual para saber cómo el color del cable se corresponde con el nombre del pin. La imagen de arriba también muestra las especificaciones de dos motores distintos con etiquetado de cables y colores diferentes.
Pasos por revolución
La especificación del motor especifica el valor DEG_PER_STEP. Dependiendo de la técnica de control, STEP_PER_REVOLUTION se puede determinar a partir de la siguiente tabla:
| Control method | Steps per Revolution | Real degree per step |
|---|---|---|
| Full-step | STEP_PER_REVOLUTION = 360 / DEG_PER_STEP | DEG_PER_STEP |
| Half-step | STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * 2 | DEG_PER_STEP / 2 |
| Micro-step (1/n) | STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * n | DEG_PER_STEP / n |
Por ejemplo, si la hoja de datos del motor indica una medición de 1.8 grados por paso:
| Control method | Steps per Revolution | Real degree per step |
|---|---|---|
| Full-step | 200 steps/revolution | 1.8° |
| Half-step | 400 steps/revolution | 0.9° |
| Micro-step (1/n) | (200 * n) steps/revolution | (1.8 / n)° |
Cómo controlar un motor paso a paso con Arduino Nano
Arduino Nano puede generar señales para controlar el motor paso a paso; sin embargo, estas señales no tienen el voltaje y/o la corriente suficientes que requiere el motor paso a paso. Por lo tanto, se necesita un controlador de hardware entre Arduino Nano y el motor paso a paso. Este controlador tiene dos funciones:
- Para amplificar las señales de control procedentes del Arduino Nano en términos de corriente y voltaje.
- Para proteger al Arduino Nano de la alta corriente y el voltaje utilizados para alimentar el motor paso a paso.
Existen numerosos tipos de controladores de hardware que pueden usarse para gestionar motores paso a paso. Uno de los controladores de hardware más populares para controlar motores paso a paso es el controlador L298N.
Acerca del controlador L298N
Un controlador L298N se puede usar para controlar dos motores de corriente continua o un motor paso a paso. Este tutorial explica cómo usarlo para controlar el motor paso a paso.
Disposición de pines del controlador L298N

El controlador L298N tiene 11 pines y tres jumpers:
- Pin VCC: Este proporciona energía para el motor y puede estar entre 5 y 35V.
- Pin GND: Este es un pin de tierra común y debe conectarse a GND (0V).
- Pin 5V: Este proporciona energía para el módulo L298N y puede ser alimentado por 5V del Arduino Nano.
- Pines IN1, IN2, IN3, IN4: Estos se conectan a los pines de Arduino para recibir la señal de control que controla el motor paso a paso.
- Pines OUT1, OUT2, OUT3, OUT4: Estos se conectan al motor paso a paso.
- Jumpers ENA, ENB: Se usan para habilitar el motor paso a paso y ambos jumpers ENA y ENB deben estar en su lugar.
- Jumpers 5V-EN: Si se mantiene en su lugar, la alimentación para el módulo L298N proviene de VCC y no es necesario conectar nada al pin 5V. Si se retira, la alimentación debe suministrarse al módulo L298N mediante un pin de 5V.
El controlador L298N tiene dos fuentes de alimentación de entrada:
- Uno para el motor paso a paso (pines VCC y GND): que va de 5 a 35 V.
- Uno para el funcionamiento interno del módulo L298N (pines 5V y GND): que va de 5 a 7 V. Si se mantiene puesto el jumper 5V-EN, no es necesario realizar ninguna conexión a este pin.
Diagrama de Cableado

This image is created using Fritzing. Click to enlarge image
Ver La mejor forma de alimentar Arduino Nano y otros componentes.
※ Nota:
- Mantenga los tres jumpers en el módulo L298N en sus posiciones actuales si la fuente de alimentación del motor es de 12 V o menos.
- La disposición de pines en los motores paso a paso puede variar entre fabricantes. Por favor, consulte la tabla a continuación para el cableado correcto.
Tabla de cableado entre Arduino Nano y el controlador L298N
| Arduino Nano pins | L298N pins |
|---|---|
| 7 | IN1 |
| 6 | IN2 |
| 5 | IN3 |
| 4 | IN4 |
Tabla de cableado entre el controlador L298N y el motor paso a paso
¡Importante!: No preste atención al orden de los cables en el motor paso a paso en el diagrama de arriba. Solo es una ilustración. La disposición de los pines en los motores paso a paso puede diferir entre fabricantes. Asegúrese de que su cableado siga la tabla que se encuentra a continuación.
| L298N pins | Stepper motor pins | Or | Or |
|---|---|---|---|
| OUT1 | A+ | A | A |
| OUT2 | A- | A | C |
| OUT3 | B+ | B | B |
| OUT4 | B- | B | D |
Antes de comprar un motor paso a paso, se recomienda revisar la hoja de datos, las especificaciones o el manual del motor paso a paso. Asegúrese de que la información contenga la correspondencia entre el color de los pines y su nombre. Por ejemplo, este motor paso a paso proporciona la correspondencia tal como se ve en la siguiente imagen:

Usando el mapeo, la tabla de cableado es:
| L298N pins | stepper motor pins | wire color |
|---|---|---|
| OUT1 | A | black wire |
| OUT2 | C | green wire |
| OUT3 | B | red wire |
| OUT4 | D | blue wire |
※ Nota:
En todas las tablas de cableado presentadas arriba entre el motor paso a paso y el controlador L298N, es posible intercambiar OUT1 con OUT2 y OUT3 con OUT4. En consecuencia, hay más formas de realizar el cableado. Sin embargo, si se realiza el intercambio, la dirección de giro de los motores podría verse alterada (de horario a antihorario, y viceversa).
Cómo controlar un motor paso a paso usando un controlador L298N.
Controlar un motor paso a paso puede ser una tarea desafiante, especialmente cuando necesitamos hacerlo sin bloquear. Afortunadamente, la biblioteca AccelStepper lo facilita mucho.
El IDE de Arduino contiene una biblioteca integrada Stepper. No obstante, no recomendamos que utilice esta biblioteca debido a las siguientes razones:
- La biblioteca ofrece una característica bloqueante. Esto implica que el Arduino Nano queda impedido de ejecutar otras tareas mientras controla el motor paso a paso.
- No dispone de funciones adecuadas.
En cambio, sugerimos usar la biblioteca AccelStepper. Esta biblioteca ofrece:
- Aceleración
- Desaceleración
- Conducción en modo paso completo y medio paso
- La capacidad de controlar múltiples motores paso a paso simultáneamente, con avance concurrente individual para cada motor
- Desventaja: NO proporciona conducción de micro-pasos.
Cómo controlar la posición de un motor paso a paso mediante el controlador L298N
Podemos lograr nuestro objetivo de mover el motor paso a paso a la posición deseada utilizando:
※ Nota:
La función stepper.moveTo() no bloquea, lo cual es una gran ventaja de la biblioteca. Sin embargo, al usar esta función, hay algunos puntos a tener en cuenta:
- Asegúrate de llamar a 'stepper.run()' tan a menudo como sea posible, preferiblemente en la función void loop().
- Evita usar la función delay() mientras el motor está en movimiento.
- No uses las funciones Serial.print() y Serial.println() mientras el motor está funcionando, ya que esto ralentizará el motor paso a paso.
Cómo controlar la velocidad del motor paso a paso mediante el controlador L298N
Podemos regular no solo la velocidad, sino también la aceleración y la desaceleración, mediante el uso de algunas funciones básicas.
Cómo controlar la dirección del motor paso a paso mediante el controlador L298N
Si conectas el motor como se indica, girará en:
- Dirección en sentido horario: al controlar el motor desde una posición inferior a una posición superior (Incremento de posición)
- Dirección en sentido antihorario: al controlar el motor desde una posición superior a una posición inferior (Decremento de posición)
Para ejemplos:
- Cuando la posición actual es 100 y el motor está dirigido a 200, gira en sentido horario
- Si la posición actual es -200 y el motor está controlado a -100, gira en sentido horario
- Si la posición actual es 200 y el motor está regulado a 100, gira en sentido antihorario
- Si la posición actual es -100 y el motor está manejado a -200, gira en sentido antihorario
※ Nota:
Como se indicó anteriormente, si intercambias OUT1 con OUT2, o OUT3 con OUT4, el aumento de la posición podría ser en sentido antihorario y la disminución de la posición podría ser en sentido horario.
Cómo detener un motor paso a paso
- El motor paso a paso se detendrá cuando alcance la posición deseada.
- También es posible detenerlo de inmediato utilizando la función stepper.stop().
Código de Arduino Nano - Código de motor paso a paso
El siguiente código:
- Hace que el motor gire una revolución en sentido horario
- Pausa el motor durante 5 segundos
- Hace que el motor gire una revolución en sentido antihorario
- Detiene el motor durante 5 segundos
- Repite el proceso una y otra vez
Pasos R\u00e1pidos
- Haz clic en el icono de Bibliotecas en la barra izquierda del IDE de Arduino.
- Busca “AccelStepper” y localiza la biblioteca AccelStepper creada por Mike McCauley.
- Presiona el botón Instalar para completar la instalación de la biblioteca AccelStepper.

- Copia el código y ábrelo en el IDE de Arduino.
- Haz clic en el botón Subir para subir el código al Arduino Nano.
- El motor paso a paso realizará una revolución en sentido horario, se detendrá durante 5 segundos, girará de nuevo una revolución en sentido antihorario, se detendrá otros 5 segundos y repetirá este proceso.
- Consulta el resultado en el Monitor Serial.
Explicación del código
¡Consulta la explicación línea por línea contenida en los comentarios del código fuente!
Video Tutorial
Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.