0% encontró este documento útil (0 votos)
8 vistas4 páginas

Control Motor Paso A Paso Sin Libreria 2.ino

El documento describe un programa para controlar un motor paso a paso 28BYJ-48 utilizando Arduino. Se presentan tres modos de operación del motor, cada uno con diferentes configuraciones de pasos y características de rendimiento. Además, se incluyen funciones para girar el motor a la izquierda y a la derecha, así como para ajustar el número de vueltas y el retraso entre pasos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
8 vistas4 páginas

Control Motor Paso A Paso Sin Libreria 2.ino

El documento describe un programa para controlar un motor paso a paso 28BYJ-48 utilizando Arduino. Se presentan tres modos de operación del motor, cada uno con diferentes configuraciones de pasos y características de rendimiento. Además, se incluyen funciones para girar el motor a la izquierda y a la derecha, así como para ajustar el número de vueltas y el retraso entre pasos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 4

/* ----------------------------------------------------------------

http://www.prometec.net/motor-28byj-48
Prog_4_2

Moviendo un motor paso a paso 28BYJ-48 con Arduino


--------------------------------------------------------------------
*/
#define IN1 8
#define IN2 10
#define IN3 9
#define IN4 11

// El modo 0 tiene 4 estados


// Recomendado por el fabricante
// Máximo par, buena velocidad y alto consumo.
// PASO A B C D
// 1 1 1 0 0
// 2 0 1 1 0
// 3 0 0 1 1
// 4 1 0 0 1

// El modo 1 tiene 4 estados


// Se le llama wave drive
// Un par menor que el anterior (porque solo se activa una bobina en lugar de dos)
y consumo bajo
// 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

// El modo 2 tiene 8 estados con medios pasos


// Movimiento es más suave y lento que con los métodos anteriores, y el consumo y
el par es también intermedio.
// PASO A B C D
// 1 1 0 0 0
// 2 1 1 0 0
// 3 0 1 0 0
// 4 0 1 1 0
// 5 0 0 1 0
// 6 0 0 1 1
// 7 0 0 0 1
// 8 1 0 0 1

char Working='s';
int vueltas=1;
int RETARDO=10;

int Paso [ 8 ][ 4 ] =
{ {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() {
Serial.begin(9600);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);

Working='n';
}

void Activa(int n) {
digitalWrite( IN1, Paso[n][ 0] );
digitalWrite( IN2, Paso[n][ 1] );
digitalWrite( IN3, Paso[n][ 2] );
digitalWrite( IN4, Paso[n][ 3] );
// Serial.println("n="+String(n)+": "+String(Paso[n][0])+","+String(Paso[n][1])
+","+String(Paso[n][2])+","+String(Paso[n][3]));
}

void Gira_Izquierda(int veces) {


for (int i=0;i<veces;i++) {
Activa(1);
delay(RETARDO);
Activa(3);
delay(RETARDO);
Activa(5);
delay(RETARDO);
Activa(7);
delay(RETARDO);
}
}

void Gira_Derecha(int veces) {


for (int i=0;i<veces;i++) {
Activa(7);
delay(RETARDO);
Activa(5);
delay(RETARDO);
Activa(3);
delay(RETARDO);
Activa(1);
delay(RETARDO);
}
}

void loop() {
// R: Giro continuo a la derecha
// D: N vueltas a la derecha
// L: Giro continuo a la izquierda
// I: N vueltas a la izquierda

// R: Giro continuo a la derecha


if (Working == 'r') {
//Serial.println("Right");
Gira_Derecha(vueltas);
};

// D: N vueltas a la derecha
if (Working == 'd') {
//Serial.println("Right");
Gira_Derecha(vueltas);
Working='n';
};

// L: Giro continuo a la izquierda


if (Working == 'l') {
Gira_Izquierda(vueltas);
Working='l';
};

// I: N vueltas a la izquierda
if (Working == 'i') {
Gira_Izquierda(vueltas);
Working='n';
};

if (Working == '+') {
vueltas=vueltas+1;
Serial.println(vueltas);
Working='n';
}

if (Working == '-') {
vueltas=vueltas-1;
Serial.println(vueltas);
Working='n';
}

if (Working == '1') {
RETARDO = RETARDO - 1;
Serial.println(RETARDO);
Working='n';
}

if (Working == '2') {
RETARDO = RETARDO + 1;
Serial.println(RETARDO);
Working='n';
}

// P: Imprime valor de N (numero de vueltas)


if (Working == 'p') {
Serial.println(vueltas);
Working='n';
}

if (Working == 's') {
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
};
if (Serial.available() > 0) {
int temp = Serial.read();
if (temp != 10) {
Serial.println(temp);
Working = temp;
switch (Working) {
case 's': Serial.println("Stop"); break;
case 'l': Serial.println("Left"); break;
case 'r': Serial.println("Right"); break;
};
};
//Serial.println(Working);
};
}

También podría gustarte