Hoy vamos a hacer un montaje para el control de motor paso a paso con arduino. El motor que voy a usar es uno del tipo Nema 17 y para ello necesitaremos un driver pololu A4988. El pololu es un breakout board para control de motor paso a paso bipolares que nos ajustará la corriente que consume el motor para su funcionamiento en el punto correcto.
Para montar este proyecto, aparte del pololu, necesitarás un arduino y algunos componentes. Te aconsejo donde comprar un kit arduino aquí.
El pololu tiene también protección térmica, y sobrecarga. Consultar el datasheet del fabricante para saber exactamente cuanta corriente puede controlar ya que hay diversos modelos muy similares, pero ronda entre 1-2A.
Es recomendable colocarle un pequeño radiador pegado con pasta térmica cuando trabajemos con altas corrientes.
El uso de un driver pololu nos simplifica mucho el control de un motor paso a paso ya que el mismo se encarga de generar todas las señales necesarias para su funcionamiento y ademas nos añade las protecciones necesarias de temperatura y corriente.
Otra ventaja que tendremos es que solo necesitaremos un par de puertos del arduino para controlarlo todo, dejando libres mas puertos para otras funciones.
El pololu A4988 necesita dos tensiones de alimentación separadas, una para el motor (8-35V) y otra para la alimentación del pololu (3-5.5V), esta última la sacaremos del Arduino y para alimentar el motor utilizaremos una fuente independiente que conectaremos a los pines Vmot y Gnd. Tened en cuenta que tendremos que unir la masa Gnd del Arduino con la de la fuente del motor para equilibrar tensión a 0V.
También pondremos un condensador electrolítico de 100μF/63V entre los pines de alimentación de la fuente del motor para que sea mas estable. Tener cuidado de respetar la polaridad del condensador para evitar sustos 🙂
Vamos a ver en el siguiente esquema el montaje del control de motor paso a paso completo:
Como podemos observar, aparte del pololu A4988, hemos conectado al arduino un potenciómetro al pin A0 para controlar la velocidad de giro del motor paso a paso y un pulsador a la entrada P7 con el que podremos cambiar el sentido.
Para su montaje seguiremos el esquema, primero conectaremos los pines STEP y DIR como a los pines P3 y P9 de nuestro arduino.
Conectaremos los pines RESET y SLEEP del Pololu entre sí para que el motor este en funcionamiento continuamente.
Ahora conectaremos la alimentación del pololu en los pines Vdd y Gnd a 5V, esta tensión la sacaremos del arduino, no confundir con la alimentación del motor…
Para conectar el motor paso a paso al A4988, tenemos cuatro terminales correspondientes a las dos bobinas de motor. Tendremos que identificarlas primero con un polímetro por continuidad y una vez identificadas, conectarlas a 1A-1B la primera y 2A-2B la segunda.
Solo nos queda conectar el potenciómetro a la entrada A0 y un pulsador a la entrada A7, este tendrá una resistencia pull-down que nos pondrá la entrada a 0V si no pulsamos S2 para evitar falsas lecturas.
Ajuste de la corriente del motor paso a paso mediante Vref.
Antes de conectar y probar nuestro motor, tendremos que hacer un ajuste previo de la corriente que va a pasar por nuestro motor.
Previamente tendremos que saber que corriente necesita para funcionar en pleno rendimiento, esto lo tendremos que ver en el datasheet, buscarlo por su referencia que tendría que venir marcado en el motor.
Igualmente tendremos que saber la máxima corriente que nos puede entregar el A4988, los que tienen la placa de color verde pueden llegar a los 2A y los rojos a 1.5A pero mejor consultar el datasheet para estar mas seguros. Para hacer pruebas nos valdrá cualquiera pues tampoco vamos a llevar al límite al motor y no necesitaremos tanta corriente.
El método para ajustar la corriente se realizará de la siguiente manera:
Primero desconectamos los 4 terminales del motor del pololu.
Ahora localizaremos el pin Vref. Este no suele estar en un lugar muy común, en mi caso, que tengo el modelo de pololu rojo, el pin Vref es el tornillo de ajuste metálico que hay en la placa. En algunos modelos hay un pequeño taladro metalizado al lado del chip A4988 que es donde tendremos que medir Vref. Consultar el datasheet para ver cual es vuestro caso.
El ajuste consiste en que una vez conocida la corriente que vamos a dar al motor, ajustar el tornillo para que el pololu entregue esa corriente.
Para ello aplicaremos la siguiente fórmula Vref= I/2.5
Donde I = intensidad del motor.
Si por ejemplo queremos que por nuestro motor pase 1A, sustituiremos y resolvemos Vref=1/2.5= 0.4V
Entonces con un polimetro, mediremos la tensión entre Vref y masa y ajustaremos el tornillo hasta que nos de ese valor. Probar primero con 0.5A e ir aumentando para ver que cuanta mas intensidad pasa, mas fuerza tiene el motor. Los motores los regulamos en intensidad, la tensión de alimentación puede estar entre 8 y 35V, (hacer las pruebas con unos 12V).
Una vez que ya tenemos ajustado la Vref, ya podemos desconectar la alimentación y volver a conectar el motor para hacer la primera prueba.
Programa de prueba control de motor paso a paso.
Ahora vamos a ver un sencillo programa que ejecutar en el arduino para el control del motor:
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 |
/* Control velocidad y sentido giro de motor PaP con pololu A4988 * 2017 - yomaker.com */ int steps = 9; // pin step 9 int direccion = 3; // pin direccion 3 int potenciometro; // lectura del potenciometro int boton = 7; // pin pulsador void setup() { // inicializamos pin como salidas. pinMode(steps, OUTPUT); pinMode(direccion, OUTPUT); pinMode(boton, INPUT); } void loop() { int sentido = digitalRead(boton); // leemos el boton de direccion digitalWrite(direccion, sentido); // cambiamos de dirección segun pulsador potenciometro = analogRead(A0); // leemos el potenciometro potenciometro = map(potenciometro,0,1024,900,2500); // adaptamos el valor leido a un retardo digitalWrite(steps, HIGH); // Aqui generamos un flanco de bajada HIGH - LOW delayMicroseconds(5); // Pequeño retardo para formar el pulso en STEP digitalWrite(steps, LOW); // y el A4988 de avanzara un paso el motor delayMicroseconds(potenciometro); // generamos un retardo con el valor leido del potenciometro } |
Primero declaramos las variables donde conectaremos los distintos componentes del circuito e inicializamos los puertos como salida.
El programa comienza leyendo el pulsador de dirección, si lee un 0 gira en un sentido y si lee un 1 en el contrario.
Lee el valor del potenciómetro y adapta proporcionalmente la lectura a un retardo entre 900-2500 ms que haremos al final para que el motor gire mas o menos deprisa.
Seguidamente, se genera un pulso en la entrada STEP para avanzar el motor un paso.
Luego hacemos el retardo que hemos calculado previamente con la instrucción map.
Ahora ya solo nos queda conectar y cargar este programa para hacer la primera prueba.
Prueba final del motor
Aquí os dejo un vídeo del canal Yomaker, (que espero te suscribas), con mi motor funcionando.
¡Anímate a montarlo!, puedes ver el precio de los componentes necesarios en los enlaces siguientes:
Te espero en los comentarios…
Un saludo.

Recibe los artículos directamente en tu email el día de la publicación.
Garantía 100% libre de spam.
Hola estoy interesado en tu proyecto, me gustaría temporizador el giro del motor, con una pausa entre giros, la secuencia seria, giro Xº 10″ pausa, giro Xº 10″ pausa…¿sería posible?Gracias por tu tiempo.
Hola Andrés:
Por supuesto que es posible y además no es muy complicado.
Primero tendrías que calcular el numero de pasos a dar para girar los grados que necesites (dependerá de tu motor). Una vez que lo sepas en el programa hacer un bucle con ese numero de pasos, en el bucle habría que incluir las instrucciones:
digitalWrite(steps, HIGH); // Aqui generamos un flanco de bajada HIGH – LOW
delayMicroseconds(5); // Pequeño retardo para formar el pulso en STEP
digitalWrite(steps, LOW); // y el A4988 de avanzara un paso el motor
posteriormente, realizar la pausa con «delay» y ya se repite otra vez todo…
Espero que te sirva, un saludo.
Hola me gustaria saber como acelerar este motor desde cero (sin un potenciometro) para llegar a maxima velocidad y mantenerla.Gracias!
Hola Hector:
El control de la velocidad del motor se controla con la variable potenciometro que se declara al principio del programa, cuanto mayor es su valor mas lento irá el motor y por lo tanto cuanto menor más rápido. Solamente tienes que darle un valor a esa variable en tu programa y se producirá un retardo entre los pasos proporcional a ella, con 0 irá a máxima velocidad, ves probando distintos valores hasta que encuentres la velocidad que necesites.
hola paco como estas?
gracias por tu aporte
como seria el codigo para mover un paso a paso que cada vez que le de a un pulsador avance x cantidad de pasos y con un pote pueda variar esa velocidad.
es para una cinta transportadora que cad vez que lea un sensor arranca y para a una medida exacta.
gracias
Hola Ronaldo:
Teniendo como base el programa del articulo, tienes que hacer un bucle de un paso que se repita tantas veces como pasos quieres avanzar, (ahora lo hace permanentemente) y ademas poner una sentencia if.. then, que ejecute ese bucle si se ha pulsado el boton. Si no manejas la programacion de arduino te invito a apuntarte al curso gratuito de esta web y seras capaz de hacerlo seguro.
Un saludo
hola muchas gracias por el aporte al compilar en arduino de muestra erro en esta linea
}void setup() {
^
ddd:10: error: ‘void setup()’ previously defined here
void setup() {
^
C:\Users\Limb\Documents\Arduino\ddd\ddd.ino: In function ‘void loop()’:
ddd:34: error: redefinition of ‘void loop()’
void loop() {
^
ddd:19: error: ‘void loop()’ previously defined here
void loop() {
^
exit status 1
redefinition of ‘void setup()’
Hola Ángel:
El código que esta en la web no tiene ningún error, puede que al copiarlo se te haya podido colar algún error de sintaxis. Para que sea mas cómodo copiarlo del blog a tu Arduino, fíjate que al pasar el puntero del ratón por la ventana del código aparecen unos iconos en la parte superior. Elige el que sirve para copiar, se te resaltara todo el texto para que no te dejes nada y ahora pulsando a la vez CTRL+C se te copiará al portapapeles. Ahora puedes ir al Sketch de tu arduino y pulsando CRTL+V se pega sin ningún tipo de riesgo de dejarte algo.
Prueba así y ya me contarás…
hola yo maker, agradecido por lo subido.
tenes algun codigo para un pap bipolar, que avance y con un swich retroceda????????
para vos es muy sencillo, pero para los que estamos aprendiendo con arduino se nos complica.
de todas maneras se te agradece los aportes subidos.
gracias nuevamente
Hola Julio:
Si repasas el artículo verás todas tus preguntas respondidas, se usa un motor bipolar y con un pulsador que cambia el sentido.
Saludos.
disculpame, me olvide mencionar que es un bipolar y a4988 en arduino
gracias por responder, pero mi idea era que, con un pulso del swich vuelva solo, sin mantener pulsado, o alguno codigo que se paresca a la idea.
te agradesco de nuevo.
Para esto tendrás que modificar el programa, te recomiendo que te suscribas al curso gratuito de arduino . En el hay un capitulo dedicado a la lectura de pulsadores, con esto podrás hacer la modificación necesaria para que funcione como quieres…
Hola, excelente tu aporte y sobre todo para los que estamos comenzando, utilizas un lenguaje muy claro y sencillo que es de gran ayuda.
Quisiera saber si puedes orientarme, tengo un joystick de Arduino y quisiera manejar un motor con el mismo. Tengo entendido que funciona como si fueran dos potenciómetros pero no logro interpretar como programar para que al mover el joystick hacia adelante gire en una dirección y al mover el joystick para atrás gire en la dirección contraria.
Si pudieras darme una mano sería de gran ayuda ya que me encuentro desorientado.
Saludos y gracias por tus aportes.
Hola Javier, gracias por tus comentarios.
Lo que propones no es difícil de hacer pero hay que cambiar y añadir algunas cosas. Primero, tienes que leer el valor del potenciómetro en reposo en el cual el motor tendrás que desactivarlo. Para ello tendrán que poner el pin el pololu ENABLE a 1 ya que si está a 0 como es el caso de mi esquema, estará activado y girará. Para controlar esto, tienes que usar otro puerto libre del arduino y conectarla allí para desde el programa controlar este estado. Luego dependiendo de la lectura del potenciómetro según sea hacia delante o hacia atrás tendrás que modificar el programa y usar la estructura if…then para según los valores del potenciómetro actuar sobre el pololu. También tendrás que usar otro puerto conectado a DIR y actuar sobre él a través del programa según sea hacia delante o atrás ya que en el ejemplo se hace manualmente con el pulsador y tu lo necesitas que lo haga automáticamente dependiendo de la lectura del potenciómetro.
Te recomiendo que te suscribas al blog y leas el curso donde se explica todo esto con mas detalle.
En fin, hay trabajo por hacer, espero que tengas buenos resultados, ya nos contarás.
Saludos.
Muchas gracias por tu pronta respuesta. Me pondré manos a la obra muy pronto.
Saludos y gracias por tu amabilidad.
una pregunta, estoy elaborando un programa pero necesito ocupar el puerto sleep del chip porque mi motor giraría en un sentido una cantidad de vueltas hasta recibir una una señal que lo active e invierta su giro
No entiendo muy bien tu pregunta Cesar, pero el pin /SLEEP sirve para poner el driver en reposo y no consumir energía.
buenas tardes yo maker, copié el codigo del control de motor pap con pulsador y potenciometro.
con arduino y a4988, que está en esta pagina
anda excelente pero necesito que el pulsador pare el motor y al presionarlo de nuevo arranque.
exelente lo tuyo saludos y muchas gracias
julio rivas
Julio esta parte del codigo envia pulsos para mover el motor:
digitalWrite(steps, HIGH); // Aqui generamos un flanco de bajada HIGH – LOW
delayMicroseconds(5); // Pequeño retardo para formar el pulso en STEP
digitalWrite(steps, LOW);
delayMicroseconds(5);
Y para detenerlo basta esta linea solamente:
digitalWrite(steps, LOW);
Para lo que tu quieres la pones dentro de un boton con pin de entrada y lo lees con digitalRead(pinDelBoton);
disculpa como podría hacer que gire 90 grados cada que active un pulsador?
Hola Daniel:
Los motores paso a paso que se utilizan suelen tener 200 pasos por vuelta, con lo que para girar 90 grados necesitas decirle el motor que avance 50 pasos. Lo demás es sencillo, el programa lee el pulsador y si está pulsado ejecutas un bucle 50 veces avanzando un paso. Todo esto lo puedes aprender en el curso gratuito de Arduino en una semana que te llegará si te suscribes al blog. ¡Animate!
buenas tardes yomaker, como modificar este codigo para que no gire hasta tanto no precione algun boton
agradecido por los aportes
Hola Julio
Te recomiendo que leas la entrada http://yomaker.com/condicional-if-en-arduino/
Consistiría en leer un pulsador conectado a una entrada y usando la estructura IF , que se cumpliera cuando el botón esta pulsado.
Un saludo
Quiero calibrar un pololu como el de esta entrada, tengo todas las conexiones hechas igual que el tutorial pero no se como tengo que poner el multimetro para medir, si lo pongo en voltaje me sale un valor de 400 si lo pongo en amperios no marca nada valor 0. Y no encuentro ningún tutorial donde se vea bien la configuración del multimetro.
Hola Juanma:
Tienes que medir con el multimetro en tensión V en escala unos 10-20V, entre el tornillo de regulación y el pin de masa (GND). Lo explico mas detalladamente en el artículo.
En este articulo http://yomaker.com/comprar-multimetro-digital/ se explica como medir tensiones
Saludos
Hola! Tengo una duda respecto a la calibración de Vref del driver A4988, en mi caso tengo un motor pap de 12V y 0,6A, entonces, ¿Sí quiero que pasen los 0,6A por mi motor debo regular el pin Vref hasta 0,6/2,5=0,24V, y así lograré que mi motor opere en óptimas condiciones?. Muchas gracias por su blog.
Hola,
Si esa es la corriente que necesitas es correcto.
Un saludo
Gracias por contestar mi duda, pero aún no me queda claro que es voltaje Vref, que es lo que hace en el integrado y donde cae esa tensión. Espero su respuesta. Muchas gracias.
Ignacio, el voltaje Vref es una tensión de referencia que utiliza el circuito integrado para regular la intensidad que pasa por el motor que tienes conectado, esta tensión está entre el tornillo de ajuste y masa. Para medirla y ajustarla viene explicado con detalle en el artículo pues, por no repetirlo aquí, mejor lo vuelves a releer y si aun tienes dudas, me lo dices.
Un saludo.
Hola buenos días.
Estoy utilizando tu programa, pero a la vez quiero agregarle unas lineas para detener el motor cuando un sensor infrarojo este en 1 y siga avanzando cuando este en 0, pero que linea debo agregar para que el motor se detenga? Gracias
Hola Noe:
Se puede hacer de varias maneras pero yo usaría esta estructura de código al principio de la función loop()
if (x) { …. // se ejecutará cuando x sea igual a 1
…… }
x será la variable que dependerá del valor del detector infrarojo.
Te recomiendo que leas el artículo http://yomaker.com/condicional-if-en-arduino/ donde viene explicado con detalle y mejor si te suscribes si no lo has hecho ya al curso de Arduino gratis desde la página principal del blog.
Espero que te haya ayudado algo…
Saludos
Saludos, Monte el esquema tal cual con el código pero solo se mueve un paso al presionar el interruptor, pero no queda moviéndose continuamente
Hola Omar, revisa las conexiones, puede que haya algo mal conectado.
Un saludo.
Muchas gracias, si tenia intercambiados los pines de step y dirección lol era un error muy tonto y no lo había visto ahora funciona perfecto, no había trabajado con un motor a pasos así que pensé que era un problema de corriente, ahora le voy a meter una LCD Touch Screen para monitorear y controlar desde ahí, de antemano muchas gracias por la ayuda.
Buen dia, soy un aficionado a la construcion de herramientas que tengan que ver con la carpinteria, estoy con una cnc entre ceja y ceja pero partiendo de cero, al decir cero es cero, al ver unos tutoriales me tope con uno en el cual usan arduino uno combinado con modulo cnc qud a su ves usa los famosos a4988, mi pregunta es: si mi cnc es de unos 100cm de ancho y 200cm de largo, como determinar que tipo de moto pap devo utilizar?
Hola Carlos:
Yo no tengo CNC así que no te puedo ayudar mucho, lo que si te puedo decir es que mas que el tamaño de la CNC hay que tener en cuenta la fuerza que tiene que realizar la herramienta de corte y el peso, por lo que tienes que usar motores PAP que puedan manejar esa carga. El motor que uso yo es de un tamaño medio usado tanto para CNC como impresoras 3D, ten en cuenta que también un mismo motor lo tenemos que regular con el pololu para que trabaje con la fuerza que necesitemos.
Un saludo.
Bueno, gracias agradesco la sinceridad, me surge una nueva interrogante, el a4988 viene en dos o tres colores, la pregunta es lo mismo el rojo que el verde? Gracias, espero no molestar
Efectivamente el pololu a4988 viene en dos colores (verde y rojo) y son equivalentes, asi que puedes usar el que tengas.
Un saludo.
Gracias, se te agradece la ayuda
Buenas tardes, que debo modificar para quitar el potenciometro y que la velocidad sea constante?
Saludos
Hola Gary
Si eliminas las lineas 23 y 24 dejas de leer el potenciometro y ya no tienes la posibilidad de variar la velocidad, pero ten en cuenta que tendrás que darle un valor fijo a la variable potenciometro entre 900 y 2500 en la linea 7 del setup. Puedes probar otros valores fuera de este rango a ver hasta donde funciona o no dependiendo de la velocidad fija que quieras tener.
Saludos
Muchas gracias Paco
Una duda mas. Coloque un sensor infrarrojo para que al estar detectando un objeto este sensor, el motor se detiene, si el sensor no detecta nada el motor sigue moviendose. Pero llega un momento en el que el motor se aloca y empieza a girar en sentido contrario como si estuviera presionando el boton, cuando en ni ningun momento lo presione. Luego de unos 3 o 4 segundos, el motor vuelve a avanzar normalmente. A que se debera?
Gracias
Quite las lineas del boton, pero aun asi no se que pasa que de pronto gira en sentido contrario de forma automatica
Creo que tiene que ver algo con el potenciometro. Tuve que utilizar otro codigo para que no diera reverza el motor. pero con este código da reverza
int steps = 10; // pin step 2
int direccion = 11; // pin direccion 9
int potenciometro; // lectura del potenciometro
int boton = 6; // pin pulsador
const int sensorPin = 3;
void setup() {
Serial.begin(9600); //iniciar puerto serie
pinMode(sensorPin , INPUT); //definir pin como entrada
// inicializamos pin como salidas.
pinMode(steps, OUTPUT);
pinMode(direccion, OUTPUT);
pinMode(boton, INPUT);
}
void loop() {
potenciometro = analogRead(A1); // leemos el potenciometro
potenciometro = map(potenciometro,0,1024,900,2500); // adaptamos el valor leido a un retardo
int value = 1;
value = digitalRead(sensorPin ); //lectura digital de pin
if (value == HIGH) {
int sentido = digitalRead(boton); // Lee boton de direccion
digitalWrite(direccion, sentido); // cambiamos de dirección segun pulsador
digitalWrite(steps, HIGH); // Aqui generamos un flanco de bajada HIGH – LOW
delayMicroseconds(5); // Pequeño retardo para formar el pulso en STEP
digitalWrite(steps, LOW); // y el A4988 de avanzara un paso el motor
delayMicroseconds(potenciometro); // generamos un retardo con el valor leido del potenciometro
}
else
{
digitalWrite(steps, LOW);
delay(2000);
}
}
Hola buenas tardes Paco, te hago una consulta.. estos motores paso a paso se pueden usar por tiempos prolongados para girar continuamente? no tiene problema de calentamiento? Tengo que realizar un contador de granos y necesito accionar un plato que no demanda fuerza practicamente. Saludos y muchas gracias!!
Hola Javier:
Estos motores se calientan cuanto mas intensidad circula por ellos que es proporcional a la fuerza que tienen, si no vas a necesitar mucha fuerza, ajusta el driver pololu a la intensidad necesaria (ves probando) y así no se calentará en exceso. Es aconsejable que no estén encerrados para que circule el aire y así se disipe el calor bien. En cuanto el tiempo de funcionamiento no creo que tengas problema aunque su vida útil dependerá de la calidad del motor.
Un saludo
buenos dias se podria poner otro pulsador para cambiar el giro, pulsador giro derecho pulsador giro izquierdo
Hola Armando:
Se puede hacer cambiar de sentido con un pulsador como el ejemplo y también usar dos pulsadores, simplemente hay que leer dos pulsadadores y cuando leamos uno poner la variable sentido a 1 y cuando se pulse el otro, la variable a 0. Te recomiendo te suscribas al blog para recibir el curso donde se explica esto y seguramente lo podrás realizar sin dificultad.
Un saludo.
Saludos, grains por las preguntas y sobre todo por las respuestas, soy novato y analfabeto total en electronica, pero me estáis enseñando mucho. Tengo una duda, bueno muchas, pero la primera es:en el esquema del motor pap, que criterio se sigue para poner 65 v en el condensador. Gracias .
Hola Juan:
Los 65V. en el condensador indican la máxima tensión a la que puedes usarlos, como al alimentar el motor no pasamos de esa tensión maxima, nos es suficiente.
Bienvenido a este mundo de la electrónica y Arduino, espero que disfrutes…
Saludos
Hola, gracias por tus explicaciones y ejemplos, mi pregunta va ligada a la hecha por Paco Pons (es la última) ¿que criterio o dato técnico hay que seguir para la elección de uno u otro condensador? Es decir, yo tengo un pap a 12v y de 0,4 A, y como no, el pololu a4988. No tengo un condensador de 100 uF y 65V, tengo varios de100uF y 35V. Sería válido? si?, No? y porque?
Muchas gracias!
Hola Sergio:
La elección del condensador se decide dependiendo de dos cosas, la primera es la tensión de funcionamiento y tenemos que elegir un condensador de mayor tensión que la que uses para alimentarlo o sea que no puedes conectarlo a una tension (V) mayor a lo que marca, en tu caso como es de 35V y lo alimentas a 12V, es correcto. La otra es su capacidad y esto ya dependerá del circuito y tus necesidades de almacenamiento de energia, 100uF esta bien pero si no tenemos de ese valor podemos poner uno mayor que no pasa nada, si ponemos uno mas pequeño puede que ya no funcione tan correctamente (se puede probar que no se rompe nada), pero en este caso es un componente que no es muy critico ya que es para el filtrado de la tension de alimentacion del motor.
ATENCION! comprobar de conectar correctamente los terminales positivo y negativo ya que si no el condensador puede explotar!!
Muy bien, coincide con lo que pensaba, y tengo otra duda, la fuente de alimentación es una pequeña batería de 12V y 7 Ah, hay alguna diferencia en que sea una batería o un transformador de corriente alterna? Quizás pregunto algo estúpido, pero me queda esa duda.
Muchas Gracias!
En principio no hay problema con la batería mientras este bien cargada… 🙂
Un saludo.
Saludos Paco. le felicito por este proyecto, le escribo para preguntarle si fuera posible modifique su programa para agregarle tiempo al pulsar el botón. Le explico.
que al presionar el botón el motor cambie de giro y pasado el tiempo programado este cambie de giro y no vuelva cambiar de giro hasta que se presione nuevamente el botón. Podria sugerirme algun tutorial de ayuda para lograr esta función se lo agradeceria.
Hola Raul:
Te aconsejo que te suscribas al blog y sigas el curso de arduino para principiantes que te llegará a través de tu email.
Seguro que al finalizarlo puedes hacer todas esas modificaciones y muchas cosas más, en el se explica como leer pulsadores y realizar temporizaciones y bucles que te serán muy útiles para tu proyecto.
Un saludo.
buenas quiero hacer una cnc, pero tengo una dudas y me gustaria su ayuda, paso a detallar con los accesorios que cuento:
1.tengo 3 motores ldo-42sth33-0316 fabricante LDO de 12v+pololu a4988 verde (r100)+1 arduino uno version china similar a mega328.
me gustaria saber el vref para ajustar a los pololu?
si conecto un cargador de 12v de 5a sera suficiente para alimentar a estos 3 motores?
espero pueda brindarme su ayuda, desde ya le agradezco el tiempo empleado.
Hola Jonathan, tendrás que ir probando hasta que los motores tengan la suficiente fuerza para no perder pasos al mover tu CNC. Creo que con esa fuente podras ir funcionando, pero puede que vaya un poco justa.
Saludos.
hola paco, se puede hacer un CICLO UNICO en un motor pap con arduino y a4988 de: DOS vueltas
hacia adelante, UNA hacia atras y MEDIA hacia adelante precionando un pulsador
MUCHAS GRACIAS POR LOS APORTES PARA LOS NOVATOS, SALUDOS
Hola Julio:
Lo que propones se puede hacer modificando el ejemplo del articulo.
Supongo que ya has realizado el curso del blog por lo que aplicando lo que has visto en el capitulo de las instrucciones condicionales tendrías que utilizar una sentencia if (boton pulsado). Mientras no se pulse, la secuencia del programa no hará nada, llegará al final y volverá a ejecutarse el loop().
Al cumplirse la sentencia, tienes que poner la secuencia que necesites que realice el motor. Dependiendo que motor tengas, tienes que ver cuantos pasos por vuelta tiene, ahora tendrás que ordenarle que gire los pasos necesarios para dar 2 vueltas (utiliza para esto un bucle for), cambio de sentido y seguidamente otro bucle con una vuelta hacia delante, cambio de sentido y media hacia tras.
En el ejemplo el bucle es infinito y lo realiza la función loop(), como no necesitaba realizar un numero determinado de vueltas no usé un bucle for.
Yo creo que no es muy complicado y es una buena practica a realizar para afianzar conocimientos del curso ya que todo lo que necesitas esta explicado en el mismo.
Un saludo.
Hola que tal, buen aporte, note algo diferente entre la descripción de las conexiones y las conexiones que aparecen en el video, no estoy seguro pero algo así mire, la conexión de DIRECCIÓN en la descripción dice que va al pin 9 de arduino y en el video no veo ningún cable a ese pin, que paso ahi ?
Saludos amigo, espero me puedas ayudar
Hola francisco, efectivamente en el vídeo las conexiones no son las mismas ya que lo monté un tiempo antes de publicar el post. De todas maneras el pin utilizado no es importante ya que el código esta hecho para que cada uno pueda usar los que tenga libres en su proyecto en ese momento. Fijate que en setup() definimos unas variables int a las que asignamos el pin al que conectamos para que así sea mas fácil adaptar el código a cada caso concreto o realizar modificaciones posteriormente. Esto también reduce muchísimo el numero de errores a la hora de programar ya que es fácil equivocarse en el numero de pin. Por supuesto hay que hacer coincidir perfectamente los pines que usemos en el código con las conexiones realizadas si no no funcionará.
Gracias por tu observación, un saludo.
Hola, excelente proyecto me resuelve un problema que me venía planteando. Pero tengo una duda.
Es posible Setear el potenciometro para que aumente de la velocidad partiendo desde 0rmp hasta 700rpm.
Al mismo tiempo hacer que la escalada sea exponencial para que tengo buena sensibilidad en en los primeros rango?
Gracias de antemano
Hola Alexis:
Es posible todo lo que planteas en el comentario.
En primer lugar para que el motor no gire, basta con no mandar pulsos al pin step, luego el planteamiento del programa seria leer el potenciometro en su valor mas bajo y a través de una sentencia if – else no mandar pulsos al motor si el valor leído no supera ese valor.
Con respecto a que la escalada de velocidad sea exponencial, es cuestión de buscar la formula matemática que necesites y aplicarla al retardo delayMicroseconds(potenciometro); El valor de retardo está en la variable ‘potenciometro’ así que es el valor que tendrás que poner ahí después de aplicar la formula exponencial con el valor de la lectura del potenciometro.
Espero te haya servido para aclararte el planteamiento del código a programar.
Un saludo.
Hola, he leido los comentarios anteriores y veo que es muy atento.
le agradezco de antemano toda la orientacion que me pueda brindar.
lo que trato de hacer es introducir una medida en cm y que se almacene en una variable, entonces arranque un motor paso a paso moviendo una guía y se detenga hasta alcanzar dicha medida, he pensado tal vez en un encoder óptico o en sensores infrarojo o ultrasónico para sensar la distancia.
muchas gracias nuevamente.
saludos.
Hola Jorge:
No se la precisión que necesitas para posicionar tu motor, pero creo que en la mayoría de los casos no es necesario el uso de sensores ya que el mismo motor paso a paso ya se ha diseñado para controlar su posición. Un motor típico suele tener 400 pasos por vuelta así que dependiendo la longitud de la polea que tengas acoplada solo tienes que dividir la longitud de su circunferencia por el nº de pasos, de esta manera ya sabes lo que avanza tu guía en un paso del motor. Es cuestión de girar los pasos necesarios hasta llegar a tu distancia necesaria.
También es necesario colocar unos finales de carrera para empezar desde 0 con uno y que no se pase del final con otro.
Espero que te haya quedado clara la idea.
Un saludo.
excelente, muchisimas gracias.
un abrazo.
Buenas, cómo puedo establecer el inicio y final de carrera de un motor PaP? Gracias!
Hola Sergio, pues puedes hacerlo de muchas maneras. El caso es que tiene que haber un actuador que mande una señal al arduino para que le indique que esta en el final/principio de tu recorrido (uno para cada punto claro…) . Normalmente con un interruptor con palanca que al cerrarse actúe sobre una entrada del arduino, pero hay otros tipos de sensores (capacitivos, inductivos hall,…) que tambien pueden trabajar igual, eso ya depende de tus necesidades.
Un ejemplo de micro switch de palanca: http://s.click.aliexpress.com/e/lFbc0V7S
Saludos
disculpa como puedo cambiar de sentido con botones diferentes osea, un botón cambia a la derecha y otro a la izquierda. te lo agradecería
Hola Aldo:
Tendrías que conectar otro pulsador a otra entrada de Arduino y a través de sentencias If leer los pulsadores y actualizar la variable ‘sentido’ a 1 o 0 dependiendo de que botón se ha pulsado.
En el curso del blog de Arduino en una semana se explica, te aconsejo que te suscribas pues te será de gran ayuda.
Saludos.
Hola, una vez que ubico el potenciometro para cierta cantidad de rpm. se mantiene siempre en esa velocidad? como si fuera un motor sincrónico? teniendo en cuenta que la resistencia mecánica fuera siempre la misma. o puede llegar a variar. Gracias por tu atención y muy interesante todo
Hola Diego:
Los motores paso a paso funcionan de manera muy distinta a uno digamos «analógico».
En un motor PaP para que gire le tenemos que estar mandando continuamente ordenes para que cada vez avance un paso y para dar una vuelta tendremos que mandarle cientos de pulsos (dependerá de cuantos pasos por vuelta tenga el motor). Por lo tanto si la velocidad de estos pulsos que nosotros mandamos es constante, siempre llevará la misma velocidad.
Un saludo.
Hola, soy nueva en esto. Como sería el código para hacerlo funcionar con un potenciómetro? (Sin el botón.)
Hola laia:
El boton solo sirve para el cambio de sentido. El motor gira al conectar y regulas la velocidad con el potenciometro.
En el curso gratuito de esta web podrás ver como programar esto y muchas mas cosas…
Un saludo
Hola ya pud hacer girar el motor a pasos es unipolar pero necesito que inicie con un pulso y después gire 180 grados y se detenga y vuelva hacer ese ciclo espero y me pueda responder
Hola Alexis:
Si tu motor es como el mio de 200 pasos por vuelta, tienes que generar 100 pulsos para dar media vuelta o sea 180 grados. Con el ejemplo del articulo y haciendo un bucle que viene explicado en el curso gratuito de arduino no te sera dificil.
Ya nos contaras tus progresos
Saludos
hola paco, estoy iniciando en esto de arduino, me sirvio mucho este proyecto, consulta, puedo reemplazar el pulsador x una llave palanca o pulsador directamente sin cambiar nada de la programacion verdad?
Si claro, de esta manera el sentido quedará fijo en la dirección que elijas.
Saludos.
hola paco, yo otra vez, tendro driver drv8825, copie tal cual el archivo, pero no se mueve el motor, ya rebice todo, cambie driver, cambie motor y nada. no me tira ningun error ni nada.alguna idea del problema?
ya esta solucionado cambie a0 x a1. ahora consulta, si quiero q al presionar el pulsador antes de cambiar el giro quiero que haga un delay de 3 segundo . como puedo hacerlo?
Hola Ulises:
La verdad es que el ejemplo es un programa muy sencillo y no es que este pensado para hacer muchas modificaciones ya que quedaría una programación no muy elegante que digamos…
El caso es que tendríamos que almacenar en una variable el estado del pulsador y compararla con el del sentido actual del motor. Después en una sentencia de comparación IF , si se da el caso que son distintos, tenemos que generar un retardo (delay) de 3 segundos e invertir el giro.
Ten en cuenta que en el ejemplo estoy continuamente leyendo el botón, y para invertir el giro tengo que mantener pulsado el mismo, no se si es ese el objetivo que buscas. De todas maneras es mejor que reescribas el codigo desde el principio ya que te sera mas facil.
Muchas gracias x su respuesta.. yo puse una tecla en lugar del pulsador.. leeré mas sobre el tema ya q soy muy novato.. muchas gracias por su aporte..
Buen día Paco, se puede tener mas velocidad de la que se muestra en el vídeo y si es así, que tendría que cambiar en el código, estaré atento a tu respuesta gracias
Hola José:
En la instruccion: potenciometro = map(potenciometro,0,1024,900,2500); puedes probar a disminuir 900 a un numero menor a ver si alcanzas la velocidad que necesitas. De todas maneras los motores paso a paso no son los mas indicados para ir a gran velocidad sino para posicionarlos en un angulo determinado.
Saludos
muy buenas tardes paco excelente proyecto y tengo una pregunta no encuetro ese drive pero tengo el ULN2003 con su respectivo motor a pasos como podria usarlo con ese programa
Hola luis Alberto:
No puedes usar este programa porque tienes otro motor (unipolar) y otro driver distinto. Si quieres usar tu motor tienes que usar la librería Stepper que es muy conocida. Busca en youtube y google que seguro tienes tu motor y driver con ejemplos que puedes aprovechar.
Saludos
como me inscribo en el curo grqtuito me gusta ae¡rduino me gustaria hacer cosas que funcionen automqticamente ( tengo 60 años)
Hola Augusto, en la pagina principal tienes un formulario donde tienes que poner tu nombre y el email para mandarte los capitulos del curso.
Saludos
Hola paco!
De nuevo gracias por el sitio me ha servido mucho.
Algo que no he podido hacer es que controlar dos motores al mismo tiempo utilizando este código y agregando un pequeño filtro al potenciómetro para promediar las lecturas.
hola amigo
tu idea me gusta ya que estoy buscando la manera de enrollar filamentos 3d de una bobina a otra y para eso necesito que el filamento entrante se enrolle uniformemente para eso necesito tu diseño pero si se puede con alguna modificacion, control de velocidad y el cambio de giro automatico
gracias y felicidades
Hola J. Luis:
Me alegro que te sirva el diseño, las modificaciones que planteas son fáciles de implementar si sigues mi curso de Arduino.
Un saludo.
hola profe… Estoy montando la electrónica de un respirador artificial ….e modificado el código para que gire determinados pasos adelante y a tras… y controlo su velocidad con el potenciometro ….. podría controlar el numero de pasos con un botón o potenciometro ?…
gracias por toda la información recibida ……
Hola Faber, lo primero decirte que como experimento o me parece bien tu proyecto, pero ten en cuenta que para confiar la electronica a la vida de una persona, hay que tener mucha precaución y tener un nivel de seguridad que solo se consigue con una serie de certificaciones sanitarias para que todo vaya bien. Un Arduino no cumple los niveles de calidad
No entiendo muy bien tu pregunta, pero ten en cuenta que podrías usar un bucle for y cada vuelta en el bucle hace que el motor avance un paso, si le dices que lo realice un numero de vueltas determinado creo que solucionas tu problema.
Saludos
Me refiero a que viendo su tutorial no encuentro realmente en que parte define cuantos pasos va a realizar el motor, o a caso es que la variable step no la iguala a ciertos pasos y el motor gira indefinidamente si no le agregamos algun valor?
Creo que lo he comprendido, normalmente se utiliza la fuincion «for# para hacer que el motor gire cierta cantidad de pasos, si elimino ese for y solo mando una señal pwm al motor por el pin de step permanecerá girando hasta que el sensor lo interrumpa y ya ejecute lo demás, espero estar en lo correcto
Hola profe, soy nuevo en el mundo de arduino. Repliqué este proyecto y funcionó de forma impecable. Pero me surgió una duda, con este proyecto ¿es posible obtener (leer) la cantidad de pasos que da en un sentido antes de que cambie con el pulsador?
Hola Eduardo, si quieres que el motor haga una cantidad de pasos determinada, tendras que hacer un bucle for con esa cantidad de pasos. Si quieres comprobar que el motor no ha perdido pasos, tendras que usar un encoder y leerlo con el arduino…
Gracias profe, logré hacer lo del ciclo for y funcionó perfecto. Pero agregué otros elementos (teclado matricial y pantalla), para asignarle los pasos y la velocidad.
La cantidad de pasos asignada la reconoce bien, pero la velocidad no, el motor va muy lento, sin importar el valor que le asigne. ¿Cuál podría ser el error?
Ten en cuenta que los motores paso a paso son lentos, si quieres velocidad necesitas otra solucion.
saludos
Tengo un transformador de 12V 3A, segui el esquema pero los driver calientan mucho. Por que puede ser?
Es normal, por ahi pasa mucha corriente
Hola Paco, en primer lugar agradecerte que compartas tu proyecto, estoy haciendo una maquina para mi padre de anillar cañas de pescar, gracias a tí el invento funciona genial, pero el quiere menos velocidad, tego puesto este valor. potenciometro = map(potenciometro,0,1024,5000,15000) Pero si lo subo de 15000 ya el motor se vuelve loco.
Gracias.
Hola, me gustaría poder hacerte una consulta, en velocidad lineal un motor nema 17 a cuántos metros por minuto puede funcionar.
Se trata de mover un cabezal de impresión TIJ peso 300 gr. Con un movimiento lineal, con un motor nema 17;u otro que acciona un husillo, y mueve una pequeña plataforma sobre la que descansará el cabezal
La idea es recibir una señal libre de tensión que nos dé el inicio de carrera y desplace el cabezal a una velocidad constante.
Me gustaría saber si esto es posible. La velocidad es importante pues tendremos X tiempo para realizar la impresión.
Muchas gracias
Hola que tal
Excelente proyecto, me ha ayudado bastante.
Que debo hacer para controlar el tiempo que el motor gira?
Un timer que se active con un pulso para que el motor encienda un determinado tiempo y después se apague.
Gracias por tu ayuda.
Saludos
Que motor usar para subir o duplicar la velocidad
Estos motores no alcanzan velocidades muy altas. Si lo que necesitas es velocidad, tendrias que cambiar a otro tipo de motor.
Muchas gracias por tu aporte, tiempo y trabajo. Monté el proyecto y funciono bien…bien. Un atento saludo desde Montevideo-Uruguay.
Muchas gracias Roberto.