Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ATENCI N: Está página está desactualizada, se mantiene en el servidor de Arduino.cc a título ilustrativo y cómo documentación, sin
embargo, no es posible editarla y no se harán modificaciones de la misma. Es posible que haya caracteres que no se muestren de la
forma apropiada, no se hará nada por editarlos
En éste ejercicio veremos dos ejemplo de como trabajar con un motor paso a paso unipolar. Este tipo de motores los podemos
encontrar en disqueteras antiguas, y son muy fáciles de controlar. El que utilizamos en este ejercicio tiene seis conectores en los que
dos (o uno dependiendo del diseño del motor) es el voltaje de referencia (VCC) y otros cuantro se utilizan para manejar el motor
enviando señales síncronizadas.
En este enlace se muestra más información sobre el funcionamiento de motores paso a paso
El primer ejemplo muestra el código básico para hacer girar el motor en una dirección. Pretende orientar a aquellos que nunca han
manejado un motor paso a paso. El segundo ejemplo muestra un código más complejo, que permite hacer girar el motor a distintas
velocidades y en ambas direcciones, controlando ambas cosas con un potenciómetro.
En la placa protoboard se ha empleado un potenciómetro de 10K Ohmios que está conectado a una entrada analógica y a un driver
ULN2003A. Este driver cuenta con un puñado de transistores en su interior. Estos permiten conectar componentes y dispositivos que
necesitan mucha más corriente que la que puede ofrecer el Atmaga8 de la placa Arduino.
+5 V
Detalle del conexionado del driver ULN2003A
Esquema válido para ambos ejemplos. Para el ejemplo 1 hay que eliminar el potenci metro
Imágen de una placa protoboard con un potenci metro y un driver ULN2003A conectados a una placa Arduino
Elementos necesarios
Un driver ULN2003A.
Un potenciómetro de 10K Ohmios.
Un motor paso a paso.
Una placa protoboard.
Cables para realizar las conexiones.
C digo fuente
Ejemplo 1: C digo básico para manejar un motor paso a paso
void setup() {
pinMode(motorPin1, OUTPUT); // Configuraci n de los PIN-es como salida digital
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop() {
digitalWrite(motorPin1, HIGH); // Los pines se activan en secuencia
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
}
void setup() {
for (count = 0; count < 4; count++) { // Configuraci n de los PIN-es como salida digital
pinMode(motorPins[count], OUTPUT);
}
}
void moveForward() {
if ((count2 == 0) || (count2 == 1)) { // Mueve el motor hacia delante. Para hacerlo desplaza los
count2 = 16;
} // bits de la vable count2 entre los PIN-es del motor.
count2>>=1;
for (count = 3; count >= 0; count--) { // 16 = 00010000 --> 00001000 --> 00000100 --> 00000010 ...
digitalWrite(motorPins[count], count2>>count&0x01);
}
delay(delayTime);
}
void moveBackward() {
if ((count2 == 0) || (count2 == 1)) { // Mueve el motor hacia delante. Para hacerlo desplaza los
count2 = 16; // bits de la vable count2 entre los PIN-es del motor.
}
count2>>=1;
for (count = 3; count >= 0; count--) { // 16 = 00010000 --> 00001000 --> 00000100 --> 00000010 ...
digitalWrite(motorPins[3 - count], count2>>count&0x01);
}
delay(delayTime);
}
void loop() {
val = analogRead(0);
if (val > 540) { // Cuanto mayor es el valor del potenci metro
delayTime = 2048 - 1024 * val / 512 + 1; // más rápido se mueve hacia delante
moveForward();
} else if (val < 480) { // Cuanto menor es el valor del potenci metro
delayTime = 1024 * val / 512 + 1; // más rápido se mueve hacia atrás
moveBackward();
} else {
delayTime = 1024; // Cuando el valor del potenciometro se encuentra
} // en la zona media, el motor se para.
}
Referencias
Con el objetivo de entender mejor este ejemplo, hemos revisado numerosa documentación. Los enlaces que vienen a continuación
pueden resultar interesantes con el objetivo de aprender algo más sobre la teoría de motores paso a paso:
Castellano:
Inglés: