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