jueves, 24 de enero de 2013
Motor paso a paso unipolar
Ejemplo 1
int motorPin1 = 11; // PIN-es del Motor
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 8;
int delayTime = 500; // Delay que determina la velocidad de giro
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);
}
Ejemplo 2
int motorPins[] = {11, 9, 10, 8}; // PIN-es del motor
int count = 0; // Contador 1
int count2 = 0; // Contador 2
int delayTime = 500; // Delay que determina la velocidad de giro
int val = 0;
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 ...
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 --> 000 ...
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.
}
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario