Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ARDUINO
(28/12/13)
En este tutorial veremos que es un motor paso a paso, las diferentes
maneras de conectarlos y como controlarlos con Arduino.
Material
-Arduino Uno Rev 3
-Motor paso a paso unipolar
-Motor paso a paso bipolar
-L293D
-ULN2803
-2 Transistores NPN
-Pulsadores
-4 Resistencias 10K y 2 resistencias 1K
-Potenciómetro
-Fuente alimentación
Funcionamiento
Cuando circula corriente por una o más bobinas del estator se crea un campo
magnético creando los polos Norte-Sur. Luego el rotor se equilibrará
magnéticamente orientando sus polos Norte-Sur hacia los polos Sur-Norte del
estator. Cuando el estator vuelva a cambiar la orientación de sus polos a través de
un nuevo impulso recibido hacia sus bobinas, el rotor volverá a moverse para
equilibrarse magnéticamente. Si se mantiene esta situación, obtendremos un
movimiento giratorio permanente del eje. El ángulo de paso depende de la relación
entre el nombre de polos magnéticos del estator y el nombre de polos magnéticos
del rotor.
Hay dos tipos de motores paso a paso: los unipolares y los bipolares.
Los bipolares se componen de 2 bobinas y los unipolares de 4 bobinas. Para
diferenciarlos físicamente basta con observar el número de terminales de cada
motor. Los bipolares siempre tienen 4 terminales, dos para cada bobina, y los
unipolares normalmente tienen 6 terminales, dos para cada bobina y los otro dos
son los comunes de estas. Hay motores unipolares con 5 terminales en que los dos
comunes están unidos internamente.
La diferencia entre los dos es que un motor paso a paso unipolar se activa una
bobina a la vez mientras que un motor bipolar se activa más de una bobina a la
vez. Esto hace que un motor bipolar tenga más torque que un motor unipolar. Por
contra, un motor bipolar es más complejo de controlar que un unipolar.
1 /*
www.diymakers.es
2 by A.García
3 Mover motores paso a paso con Arduino
4 Tutorial en: http://diymakers.es/mover-motores-paso-paso-con-arduino/
5 */
6
#include <Stepper.h> //Importamos la librería para controlar motores paso a paso
7
8 #define STEPS 200 //Ponemos el número de pasos que necesita para dar una vuelta.
9
10 // Ponemos nombre al motor, el número de pasos y los pins de control
11 Stepper stepper(STEPS, 8, 9, 10, 11); //Stepper nombre motor (número de pasos por
12
13 void setup()
14 {
// Velocidad del motor en RPM
15 stepper.setSpeed(100);
16 }
17
18 void loop()
19 {
//Girar una vuelta entera en un sentido
20 stepper.step(200);
21 delay(500); //Pequeña pausa
22
23 //Girar una vuelta entera en sentido contrario
24 stepper.step(-200);
25 } delay(500); //Pequeña pausa
26
27
28
29
30
Utilizando esta conexión tenemos un pequeño problema, y es que usamos cuatro
pins del Arduino para controlar el motor, y eso son muchos. Si queremos controlar
más de un motor paso a paso y usar otros pins para otras conexiones, nos
quedaremos cortos de pins. Esto se puede solucionar con una conexión diferente
que solo utiliza dos pins de control del Arduino.
De esta manera solo tenemos que usar dos pins de control e invertirlos. Para
invertirlos usaremos dos transistores NPN (BC547,BD139, etc…) polarizados en
emisor común y que trabajen en modo saturación-corte. Así el transistor trabaja
como un inversor de señal.
De este modo, usaremos solo dos pins del Arduino y con los dos NPN en modo de
inversor obtendremos los cuatro pins de control necesarios para atacar el L293.
El programa es el mismo que antes, con la diferencia que cambiaremos los pins de
control:
En vez de usar:
Stepper stepper(STEPS, 8, 9,10,11);
Cambiamos por:
Stepper stepper(STEPS, 8, 9);
1 /*
2 www.diymakers.es
by A.García
3 Mover motores paso a paso con Arduino
4 Tutorial en: http://diymakers.es/mover-motores-paso-paso-con-arduino/
5 */
6
7 #include <Stepper.h> //Importamos la librería para controlar motores paso a paso
8
9 #define STEPS 200 //Ponemos el número de pasos que necesita para dar una vuelta.
10
// Ponemos nombre al motor, el número de pasos y los pins de control
11 Stepper stepper(STEPS, 8, 9); //Stepper nombre motor (número de pasos por vuelta,
12
13 void setup()
14 {
15 // Velocidad del motor en RPM
stepper.setSpeed(100);
16 }
17
18 void loop()
19 {
20 //Girar una vuelta entera en un sentido
21 stepper.step(200);
delay(500); //Pequeña pausa
22
23 //Girar una vuelta entera en sentido contrario
24 stepper.step(-200);
25 delay(500); //Pequeña pausa
26 }
27
28
29
30
Programa
/*
1 www.diymakers.es
2 by A.García
3 Mover motores paso a paso con Arduino
4 Tutorial en: http://diymakers.es/mover-motores-paso-paso-con-arduino/
5 */
6
#include <Stepper.h> //Importamos la librería para controlar motores paso a paso
7
8 #define STEPS 200 //Ponemos el número de pasos que necesita para dar una vuelta.
9
10 // Ponemos nombre al motor, el número de pasos y los pins de control
11 Stepper stepper(STEPS, 8, 9); //Stepper nombre motor (número de pasos por vuelta,
12
int pot; //Variable lectura potenciómetro
13 int derecha=3; //Pulsador derecha
14 int izquierda=2; //Pulsador izquierda
15 int direccion; //Variable para indicar la direccón
16
17 void setup()
{
18 pinMode(derecha,INPUT);
19 pinMode(izquierda,INPUT);
20 }
21
22 void loop()
23 {
pot=analogRead(A0); //Lectura potenciómetro
24 pot = map(pot, 0, 1023, 30, 150); //Establecemos la velocidad entre 30 y 150 rp
25
26 stepper.setSpeed(pot); //Indicamos la velocidad al motor
27
28 stepper.step(direccion); //Indicamos la dirección al motor
29
30 if(digitalRead(izquierda)==HIGH)
{
31 direccion=200; //Si pulsamos el pulsador izquierdo, el motor gira a la izqu
32 }
33
34 if(digitalRead(derecha)==HIGH)
35 {
36 direccion=-200; //Si pulsamos el pulsador derecho, el motor gira a la derec
}
37 }
38
39
40
41
42
43
44
……----------------------------------------------------------------------------------------otro codec
Primero, hee si el joystick tienen eje X y eje Y, porque no mover el motor con un eje y el paso a
paso con el otro
void setup ()
{
pinMode(ejeX1,INPUT); //Lee joistik X
pinMode(ejeY1,INPUT); //Lee joistik Y
pinMode(botJ1,INPUT); //Boton jotick
}
void loop ()
{
if (digitalRead(botJ1) == HIGH)
{
if (temp ==0)
{temp = 1;}
else
{temp=0;}
}
if (temp ==0) // el motor manda
{
}
else // el paso a paso manda
{
}
}
.--------------------------------------------------------….otroo codec
Bienvenidos a otro tutorial, esta vez vamos a aprender a usar un motor paso a paso, teneis
una breve explicación sobre motores aquí por si tenéis dudas. La que vamos a hacer es
controlar el giro del motor mediante un joystick, si el joystick esta en su posición central,
el motor no hará nada, si lo movemos en un sentido del eje X el motor girará en una
dirección y si movemos el joystick hacia el otro sentido del eje X, el motor girará en el
otro sentido.
Normalmente los motores paso a paso se usan con algún tipo de controlador para ayudar
a soncronizar las polarizaciones de los electroimanes, en este caso usaremos el
controlador ULN 2003. En mi caso tengo un módulo con el controlador pero el esquema
lo he puesto con el controlador únicamente.
Que necesitamos:
1 PlacaArduino Uno
1 Protoboard
1 Motor Paso a Paso
1 Controlador ULN2003
1 Joystick
Cables para realizar las conexiones
Lo primero que haremos sera conectar los pines de GND y 5V de la placa a la protoboard,
una vez hecho esto, conectamos los pins 5V y GND del joystick y el controlador a la
protoboard. Conectamos ahora el cable del motor paso a paso al módulo. Por último
tenemos que conectar los pines 1N1, 1N2, 1N3, 1N4 del módulo a los pines que vayamos
a usar, en mi caso 8, 10, 9, 11 (atentos al orden que es importante si no no se polarizarán
los electroimanes).
Debería quedar algo parecido a esto:
Código fuente:
Código fuente:
#include <Stepper.h>
int pasos=100;
int pasosPorLectura=5;
int leer;
int rotacion;
Stepper stepper(pasos, 8,10,9,11);
int velocidadMotor;
void setup(){
pinMode (A0, INPUT);
stepper.setSpeed(200);
}
void loop(){
leer=analogRead(A0);
velocidadMotor=abs(map(leer, 0, 1023, -20, 20))*10;
if (velocidadMotor>10){
rotacion = leer>511?1:-1;
stepper.setSpeed(velocidadMotor);
stepper.step(rotacion*5);
}
}
Para este ejemplo, tenemos que incluir la librería Stepper, que nos
ayudará a manejar nuestro motor, se puede hacer sin ella pero es mucho
más trabajoso.
Lo primero que hacemos es declarar el número de pasos que dará el
motor por vuelta (pasos), número de pasos que dara cada vez que
leamos (pasosPorLectura), y nuestra variable stepper que será la
encargada de hacer girar al motor (fijaros en el orden de los pines). En el
void setup() configuramos el pin A0 como entrada y la velocidad del
motor a 200 (aunque la modificaremos cada ciclo).
En el void loop() leemos el valor que nos envía el joystick y lo mapeamos
para guardarlo en velocidadMotor, explico un poco este paso, lo que
hacemos es mapearlo ya que el la entrada analógica nos da un valor de
0 a 1023, y nosotros queremos de 0 a 200; cuando ponemos de -20 a 20,
la función abs nos da el valor absoluto el cual nosotros lo multiplicamos
por 10, para que como mínimo sea 10 la velocidad, ya que velocidades
inferiores dan un efecto raro.
Ahora hay que controlar el sentido del giro, el punto medio del joystick es
511, así que si el valor que nos da es infierior a ese giramos en sentido
contrario y si es mayor en el sentido normal. LE pasamos los valores al
motor paso a paso y listo.