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.
}

No hay comentarios:

Publicar un comentario