//PRÁCTICA #47
/*
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
paso completo simple (wave drive) energizando de a una bobina por vez utilizando una
matriz para su definicion.
Alimentar Arduino con fuente de alimentacion externa de 6 a 12 Vdc.
Secuencia: paso completo (wave drive)
*/
int IN1 = 8; // pin digital 8 de Arduino a IN1 de modulo controlador
int IN2 = 9; // pin digital 9 de Arduino a IN2 de modulo controlador
int IN3 = 10; // pin digital 10 de Arduino a IN3 de modulo controlador
int IN4 = 11; // pin digital 11 de Arduino a IN4 de modulo controlador
int demora = 20; // demora entre pasos, no debe ser menor a 10 ms.
// paso completo simple
int paso [4][4] = // matriz (array bidimensional) con la secuencia de pasos
{
{1, 0, 0, 0},
{0, 1, 0, 0},
{0, 0, 1, 0},
{0, 0, 0, 1}
};
void setup() {
pinMode(IN1, OUTPUT); // todos los pines como salida
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop() {
//El for repite los 4 pasos 512 veces
for (int i = 0; i < 512; i++) // 512*4 = 2048 pasos, t_vuelta=20*2048=40960ms=40s
{
//Los 4 pasos en un solo for
for (int i = 0; i < 4; 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);
}
/*
PASO A B C D
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 0 0 1
UN CICLO REQUIERE DE 4 PASOS
UN GIRO COMPLETO DE ROTOR REQUIERE DE 8 CICLOS
UN GIRO COMPLETO DEL EJE EXTERIOR REQUIERE DE 6A VUELTAS (REVOLUCIONES -REDUCCIÓN) DEL ROTOR
4 * 8 * 64 = 2048 PASOS PARA UNA REVOLUCIÓN
*/