Saltar la navegación

Medio paso, máxima definición, definido con matriz

Medio paso, máxima definición, definido con matriz

//La secuencia es la de medio paso para maxima precision y torque medio utilizando una matriz para su definicion.

/*

Capitulo 30 de Arduino desde cero en Español.

Programa que realiza un giro completo del motor 28BYJ-48 en conjunto con el controlador basado en ULN2003, detiene 5 segundos y luego comienza nuevamente.

La secuencia es la de medio paso para maxima precision y torque medio utilizando una matriz para su definicion.

Alimentar Arduino con fuente de alimentacion externa de 6 a 12 Vdc.

Autor: bitwiseAr

*/

int IN1 = 2; // pin digital 2 de Arduino a IN1 de modulo controlador

int IN2 = 3; // pin digital 3 de Arduino a IN2 de modulo controlador

int IN3 = 4; // pin digital 5 de Arduino a IN3 de modulo controlador

int IN4 = 5; // pin digital 5 de Arduino a IN4 de modulo controlador

int demora = 20; // demora entre pasos, no debe ser menor a 10 ms.

// medio paso

int paso [8][4] = // matriz (array bidimensional) con la secuencia de pasos

{

{1, 0, 0, 0},

{1, 1, 0, 0},

{0, 1, 0, 0},

{0, 1, 1, 0},

{0, 0, 1, 0},

{0, 0, 1, 1},

{0, 0, 0, 1},

{1, 0, 0, 1}

};

void setup() {

pinMode(IN1, OUTPUT); // todos los pines como salida

pinMode(IN2, OUTPUT);

pinMode(IN3, OUTPUT);

pinMode(IN4, OUTPUT);

}

void loop() {

for (int i = 0; i < 512; i++) // 512*8 = 4096 pasos

{

for (int i = 0; i < 8; i++) // bucle recorre la matriz de a una fila por vez

{ // para obtener los valores logicos a aplicar

digitalWrite(IN1, paso[i][0]); // a IN1, IN2, IN3 e IN4

digitalWrite(IN2, paso[i][1]);

digitalWrite(IN3, paso[i][2]);

digitalWrite(IN4, paso[i][3]);

delay(demora);

}

}

digitalWrite(IN1, LOW); // detiene por 5 seg.

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

delay(5000);

}