En este cuarto ejemplo vamos a ver como usar el motor paso a paso que viene con el kit de Arduino. Para ello es necesario el Arduino Mega, el motor paso a paso y su driver controlador.
Para realizar el montaje eléctrico hay que unir el motor con su conector especial al driver. Después el driver hay que conectarlo al Arduino con 4 cables de datos y 2 de corriente.
Driver / Arduino
- INT1 – D8
- INT2 – D9
- INT3 – D10
- INT4 – D11
- VCC – 5V
- GND – GND
En cuanto al código del motor se hace uso de él sin necesidad de librerías, «simplemente» hay que activar las salidas digitales en el momento correcto para que el motor gire en el sentido que queramos.
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 |
/* Author: Alberto Gil Tesa WebSite: http://giltesa.com License: CC BY-NC-SA 3.0 Description: Ejemplo de uso de un driver y motor paso a paso. Hace girar el eje del motor en una direccion u otra segun la constante "dir" Los pines se conectan: IN1, IN2, IN3 y IN4 con D8, D9, D10 y D11 respectivamente. */ #define Pin0 8 #define Pin1 9 #define Pin2 10 #define Pin3 11 #define dir true int step = 0; void setup() { pinMode(Pin0, OUTPUT); pinMode(Pin1, OUTPUT); pinMode(Pin2, OUTPUT); pinMode(Pin3, OUTPUT); } void loop() { // Aumenta, disminuye o resetea la variable step // Para que el motor gire paso a paso: if(dir) step++; else step--; if(step>7) step=0; if(step<0) step=7; switch(step) { case 0: motor( LOW , LOW , LOW , HIGH ); break; case 1: motor( LOW , LOW , HIGH , HIGH ); break; case 2: motor( LOW , LOW , HIGH , LOW ); break; case 3: motor( LOW , HIGH , HIGH , LOW ); break; case 4: motor( LOW , HIGH , LOW , LOW ); break; case 5: motor( HIGH , HIGH , LOW , LOW ); break; case 6: motor( HIGH , LOW , LOW , LOW ); break; case 7: motor( HIGH , LOW , LOW , HIGH ); break; default: motor( LOW , LOW , LOW , LOW ); break; } delay(1); } // Para no repetir codigo se usa una funcion que se llama en cada opcion del switch: void motor( boolean s1, boolean s2, boolean s3, boolean s4) { digitalWrite(Pin0, s1); digitalWrite(Pin1, s2); digitalWrite(Pin2, s3); digitalWrite(Pin3, s4); } |
Seguramente habrá alguna librería para manejarlo mas cómodamente, todo es investigarlo 😉
Hay una librería llamada Stepper que he encontrado vía los ejemplos. Hace que sea más sencillo 😀
Probé varias librerías pero ninguna funciono así que al final puse el código a mano aunque fuera para la prueba del motor xD
Se agradece el enlace, saludos!
hola quisiera saver una cosa. Tengo el mismo motor y el mismo driver y quiero saver que al conectarlo el pin de 12v donde lo conecto porque no me funciona
Hola,
El motor va a 5V.
Saludos.
Hola Alberto. Estoy siguiendo tus videos. Una pregunta, si quisiera que este mismo motor girase aleatoriamente en un sentido y luego en el otro, ¿qué debería cambiar en el código? Un saludo y gracias.
Hola,
Haz que la constante ‘dir’ sea una variable y cambiala a true o false según necesites que gire a un lado o al otro.
Saludos.
Gracias por la contestación, pero en mi caso necesito que sea aleatorio, sin intervención mía.
Un saludo.
Prueba con esto: http://playground.arduino.cc/ArduinoNotebookTraduccion/Random
Saludos
Se me quemo la arduino, realize estos pasos.
Algo debió ser distinto, ya ves que en el vídeo funciona.
Hola Alberto , estoy intentando hacer esto.
Pues te cuento, estoy manejando un Arduino UNO con un modulo DRIVER UNL2003 y un motor 28BYJ-48 , lo típico para manejar un motor paso a paso –
Aplicación , mi idea es que el motor , controlado desde un potenciometro gire en un sentido hasta un punto y vuelva en sentido contrario al mismo punto.
Uso, manejar una antena , ya sea de aro o ajustar un dipolo.
Logros, pocos, he conseguido que vaya en ambos sentidos pero se pone en bucle, loop , y no vuelve al sitio.
TE envío el programita y el esquema a ver si se te ocurre alguna idea.
Gracias denuevo
#include // Include the header file
// change this to the number of steps on your motor
#define STEPS 100
// create an instance of the stepper class using the steps and pins
Stepper stepper(STEPS, 8, 10, 9, 11);
int Pval = 0;
int potVal = 0;
void setup() {
stepper.setSpeed(40);
}
void loop() {
potVal = map(analogRead(A0),0,1024,0,500);
if (potVal>Pval)
stepper.step(100);
if (potVal<Pval)
stepper.step(-100);
Pval = potVal;
Serial.println(Pval); //for debugging
}
—
73 de EA5GU.Paco
Carpe diem quam minimum credula postero
http://www.ea5gu.es