Stepper motor arduino
| Título | Guía uso stepper motor Arduino |
|---|---|
| Tipo de Proyecto | Proyecto de Curso |
| Período | 2019-2019 |
| Asignatura | Interacción y Performatividad |
| Del Curso | Interacción y Performatividad 2019 |
| Carreras | Diseño |
| Alumno(s) | Gabriel Olivares Torrijo, Rodrigo Toro, Marcelo Mondaca, Omar Nuñez, Christian Gazmuri |
| Profesor | Renzo Varela |
Ilustración y modo de conectar los motores
En esta guía explicaremos como hacer funcionar un motor stepper a través de Arduino, la forma de conexión y entregaremos un código (a modo de ejemplo) para este.
En el taller contamos con 2 tipos de motores, estos se diferencian según el color del cableado que poseen:
Motor 1: cuenta con los colores rojo, verde, amarillo y azul.
Motor 2: cuenta con los colores rojo, azul, verde y negro.
Estos colores corresponden a A+, A-, B+ y B- respectivamente en ambos casos.


Para hacer funcionar el Motor stepper, ademas de contar con el Arduino se necesita de un Transformador y un Driver. La función del transformador consiste en modificar la corriente alterna(220V) a corriente continua (12V) y así suplir con la energía necesaria al motor. Este transformador necesita de un enchufe, el cual se conecta en L (linea) y N (neutro). El driver BL-TB6560-V2.0 es la unión entre el arduino y el motor. El Arduino no puede sustentar al motor con la energía suficiente, es por esto que el Driver obtiene la energía necesaria del Transformador y además la señal de control del arduino para enviársela al motor. La conexión del sistema se muestra en la siguiente imagen.

CÁLCULOS Y VARIABLES
Se piensa en realizar con el motor stepper un recorrido que sea de ida y vuelta,controlando en éste el tiempo de enrollar y desenrollar la cuerda, y controlando la distancia a la cual se quiere trabajar.
Por lo que se toman las siguientes consideraciones de cálculos, y otras las dejamos de lado, aún sabiendo que en un recorrido más extenso esa medida que no es tomada en este proyecto si afectará en si a todo el proyecto.
- .- Lo primero a tomar en cuenta es la distancia de recorrido, extensión de un hilo o cuerda el cual se enrollará o desenrollará (para nuestro caso 10 cm).
- .- Por consiguiente, es importante tener claridad del radio que tiene el eje del motor, o la pieza que irá en el eje del motor (en nuestro caso radios de 2.5 mm y 3.5 mm).
- .- Saber que en el programa arduino el motor gira una vuelta completa en 1600 pasos, por lo que esta cifra se debe multiplicar por la variable o cálculo distancia/perímetro.
(en nuestro caso de radio 3.5 mm, sería 1600 step x (10 cm/3.5 mm) = 4571 step o pasos). Esto quiere decir que para completar los 10 cm. es necesario que el motor de alrededor de 28 a 29 vueltas, y considerando que una vuelta son 1600 step, entonces 1600 x 28 o 29 = [4480 a 4640]. Para radio 2.5 mm es, 1600 x (10 cm/ 2.5mm) = 6400 steps. (40 vueltas)
- .- Para calcular el tiempo existe la siguiente constante 0.0455 que corresponde a 1 mm. de radio, y esta constante sirve para encontrar la unidad de tiempo en arduino.
Explicación segundos / (constante / radio) = unidad de tiempo
- 10 seg. / (0.0455c/3.5mm,) = 10 / 0.013 c/mm = ~769 unidad de tiempo
- 10 seg./ (0.0455c/2.5 mm.)= 10 / 0.0182 c/mm=~549 unidad de tiempo
Conclusión, mientras mayor sea el radio del eje del motor, la variable c/mm será menor, siendo la variable de 1 mm = 0.0455, y de <1 = variable mayor que 0.0455. Por otra parte, mientras mayor sea el radio del eje la unidad de tiempo también será mayor.
no tomamos en cuenta que al enrollarse el hilo o cuerda el espesor del eje aumentará porque el mismo hilo o cuerda le darán mas espesor al eje, pero no lo calculamos pensando en que como la distancia que estábamos calculando era tan pequeña que nos pareció innecesario.
//Valores editables
int radio=3.5; // medida del radio del eje del motor en milimetros
int distancia=100; // distancia de recorrido de la cuerda en milimetros
int duracion=10; // tiempo del recorrido en segundos, 10 para enrollar y 10 para desenrollar
const int stepPin = 5; // pin de conexión al arduino
const int dirPin = 11; // pin de conexión al arduino
const int enPin = 12; // pin de conexión al arduino
int unidadtiempo=(0.0455/radio); // constante dividida por el radio del eje del motor
int total=(duracion/(0.0455/radio)); // tiempo dividido por unidadtiempo
int perimetro=(2*PI*radio); // perímetro del espesor del eje del motor
int calculo1=(distancia/perimetro); // cálculo para saber cuantas vueltas debe dar el motor en una distancia determinada
int calculo2=(calculo1*1600); // cálculo 1 por 1600 (correspondiente a una vuelta del motor)
void setup() {
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(enPin,OUTPUT);
digitalWrite(enPin,LOW);
}
void loop() {
digitalWrite(dirPin,HIGH); // sentido de giro del motor a la derecha
for(int x = 0; x < calculo2; x++) { // ciclo for para mantener la duración del ciclo
digitalWrite(stepPin,HIGH);
delayMicroseconds(total);
digitalWrite(stepPin,LOW);
delayMicroseconds(total);
}
delay(10); // un segundo de retraso
digitalWrite(dirPin,LOW); // sentido de giro del motor a la izquierda
for(int x = 0; x < calculo2; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(total);
digitalWrite(stepPin,LOW);
delayMicroseconds(total);
}
delay(10); // un segundo de retraso
}
//Fin del Código