Pages: [1]   Go Down
Author Topic: Ayuda Control Motor de pasos  (Read 1051 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Que tal compañeros con nuevo en esto de arduino y tengo un pequeño problema que espero podamos resolver, les comento estoy tratando de controlar un motor de pasos bipolar con un driver l293 y la placa arduino UNO, ya tengo la secuencia de pasos y las activo a través de la tecla H, el problema es que no puedo detener el motor, con la letra L mando las 4 salidas  a LOW asignadas para el motor pero al parecer por el delay de los pasos del motor no me detiene el giro del motor.
Esta algo raro el codigo es el siguiente:
Code:
int outputPin1 = 8;
int outputPin2 = 9;
int outputPin3 = 10;
int outputPin4 = 11;
int val;

void setup(){
Serial.begin(9600);
 pinMode(outputPin1, OUTPUT);
 pinMode(outputPin2, OUTPUT);
 pinMode(outputPin3, OUTPUT);
 pinMode(outputPin4, OUTPUT);
}

void loop(){
  if (Serial.available()){
    val = Serial.read();
   
    switch (val){
    case 'H':
   
// PASO 1
digitalWrite(outputPin1, HIGH);
digitalWrite(outputPin2, LOW);
digitalWrite(outputPin3, HIGH);
digitalWrite(outputPin4, LOW);
delay(500);

//PASO 2
digitalWrite(outputPin1, HIGH);
digitalWrite(outputPin2, LOW);
digitalWrite(outputPin3, LOW);
digitalWrite(outputPin4, HIGH);
delay(500);

//PASO 3
digitalWrite(outputPin1, LOW);
digitalWrite(outputPin2, HIGH);
digitalWrite(outputPin3, LOW);
digitalWrite(outputPin4, HIGH);
delay(500);

//PASO 4
digitalWrite(outputPin1, LOW);
digitalWrite(outputPin2, HIGH);
digitalWrite(outputPin3, HIGH);
digitalWrite(outputPin4, LOW);
delay(500);
break;

    case 'L':
    digitalWrite(outputPin1, LOW);
    digitalWrite(outputPin2, LOW);
    digitalWrite(outputPin3, LOW);
    digitalWrite(outputPin4, LOW);
    delay(30);
    break;
 
    }
  }
}

Es muy sencillo pero necesito poder detener el giro del motor, otro punto es el que ya probe el mismo codigo para encender 4 leds pero sin delay y el apagado de ellos si funciona el problema es el delay que no me deja detener el motor :S.
Espero tenga una solucion sencilla este problema.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,

Te paso un codigo comentado, lo que hace es acelerar, frenar, y girar el servo depende de la tecla apretada smiley-wink
Espero que te sirva

************************
#include "SoftwareSerial.h"; //Libreria para el control del puerto serie del teclado.
#include "Servo.h";

int ledPin= 13; // selecciona el pin para el LED que nos indica la comunicacion del PC con la placa 
int status = HIGH;
int tecla;
int M1_A = 4; // Motor 1 entrada A
int M1_B = 5; // Motor 1 entrada B
Servo direccion;

void setup() {
 
  Serial.begin(9600); //Inicializamos el teclado con la frecuencia de 9600 baud
  Serial.print("AUTOMATA");
  pinMode( M1_A, OUTPUT); // declara el motor 1 A como salida
  pinMode( M1_B, OUTPUT); // declara el motor 1 B como salida
  pinMode(ledPin, OUTPUT); // declara LED como salida
  direccion.attach(6); //Definimos la funcion "direccion" al servo y le indicamos que lo tenemos conectado en el pin 6
}


void loop(){

  tecla= Serial.read();// lee el valor del puerto seri
    if(tecla!= -1 && tecla== 'a') { // Pregunta si el valor es "a" y además el estado cambió
     digitalWrite( M1_A, HIGH);   // Ponemos el motor en HIGH para acelerar el motor para tirar hacia delante
     digitalWrite( M1_B, HIGH); 
     }
    else if(tecla!= -1 && tecla== 'p') { // Pregunta si el valor es "p" y además el estado cambió
     digitalWrite( M1_A, LOW);   // Ponemos el motor en LOW para acelerar el motor para tirar hacia delante
     digitalWrite( M1_B, HIGH);   
   
    }
   else if(tecla!= -1 && tecla== 'f') { // Pregunta si el valor es L y además el estado cambió
     digitalWrite( M1_A, LOW);   // Valores ALTO en A y BAJO en B simultáneamente
     digitalWrite( M1_B, LOW);    // hacen girar el motor 1 hacia ADELANTE
    }
    else if(tecla!= -1 && tecla== 'd') { // Pregunta si el valor es L y además el estado cambió
     direccion.write(180); //Indicamos que el servo girara la direccion a la derecha
    }
   else if(tecla!= -1 && tecla== 'i') { // Pregunta si el valor es L y además el estado cambió
     direccion.write(0); //Indicamos que el servo girara la direccion a la izquierda
    }
   
   digitalWrite(ledPin, status);

 }

Logged

Spain
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola Sagdec.

Por lo que entiendo, el motor de pasos da 4 pasos, uno cada 500 milisegundos (por el delay) cada vez que recibe el valor H
entonces se para hasta que hay otra H

es así?
Logged

Pages: [1]   Go Up
Jump to: