Está en la página 1de 3

//******** VELOCIDAD DE GIRO del motor de pasos***********************

#define VELOCIDAD 1000


//*************************************************
//******COMUNICACION SERIAL RS-232 PC-ARDUINO*******
//PIN 0 RX cable gris
//PIN 1 TX cable morado
//*************************************************
//*** Final de carrera conectado como entrada digital al pin 8 *****
int botonPin = 8; //Pin digital 8 cable naranja
long pasosamover;
//******************************************************************
//***************A4988********
//int enable=; // SIN CONEXIN
int msuno = 2; // CABLE AZUL
int msdos = 3; // CABLE BLANCO
int mstres = 4; // CABLE GRIS
int reset = 5; // CABLE CAFE
//int sleep=6; // SIN CONEXIN
int steps = 6; // CABLE MORADO
int direccion = 7; // CABLE ANARANJADO
//*****************************
//en micropasos 3200 pasos/ revolucion;
void setup() {
// initialize the digital pin as an output.

pinMode(botonPin, INPUT);
pinMode(steps, OUTPUT);
pinMode(direccion, OUTPUT);
pinMode(reset, OUTPUT);
pinMode(msuno, OUTPUT);
pinMode(msdos, OUTPUT);
pinMode(mstres, OUTPUT);
pinMode(13, OUTPUT); // Declaramos que utilizaremos el pin 13 como salida
Serial.begin(9600); // inicializa la comunicacion serial

// Rutina de lazo infinito


void loop() { //abre void
digitalWrite(reset, LOW);
if (Serial.available()>0)
{ // abre if
if (Serial.find("A")){ //abre if 1 inicializza motor
inicmotor();
}//cierra if 1 inicializa motor
else{ //abre else 1
if (Serial.find("F-")){
int val = Serial.parseInt();
cw(val);
}
else{
if (Serial.find("F")){
int val = Serial.parseInt();
ccw(val);}
}

}//cierra if
} //cierra void

} //cierra else 1

void cw(int val){


digitalWrite(13, LOW); //Si el valor de input es diferente de off, se apaga el
LED
digitalWrite(reset, HIGH); //Cuando reset se encuentre en HIGH el motor arra
ncar y leer los comandos enviados.
digitalWrite(direccion, LOW);
digitalWrite(msuno, HIGH);
digitalWrite(msdos, HIGH);
digitalWrite(mstres, HIGH);
pasosamover = map(val, 0, 1300, 0, 208000);
for (int i = 0; i<pasosamover; i++)
//Equivale al numero de vueltas (2
00 es 360 grados) o micropasos
{
digitalWrite(steps, LOW); // LOW to HIGH hace que el motor avance ya que
da la orden
digitalWrite(steps, HIGH);
// al A4988 de avanzar una vez por cada puls
o de energia.
delayMicroseconds(VELOCIDAD);
// Regula la velocidad, cuanto mas b
ajo mas velocidad.
}
Serial.write("o");
}
void ccw(int val){
digitalWrite(13, LOW); //Si el valor de input es diferente de off, se apaga el
LED
digitalWrite(reset, HIGH); //Cuando reset se encuentre en HIGH el motor arra
ncar y leer los comandos enviados.
digitalWrite(direccion, HIGH);
digitalWrite(msuno, HIGH);
digitalWrite(msdos, HIGH);
digitalWrite(mstres, HIGH);
pasosamover = map(val, 0, 1300, 0, 208000);
for (int i = 0; i<val; i++)
//Equivale al numero de vueltas (200 es 36
0 grados) o micropasos
{
digitalWrite(steps, LOW); // LOW to HIGH hace que el motor avance ya que
da la orden
digitalWrite(steps, HIGH);
// al A4988 de avanzar una vez por cada puls
o de energia.
delayMicroseconds(VELOCIDAD);
// Regula la velocidad, cuanto mas b
ajo mas velocidad.
}
Serial.write("o");
}
void inicmotor(){

digitalWrite(13, HIGH); //Si el valor de input es on, se enciende el led


digitalWrite(reset, HIGH); //Cuando reset se encuentre en HIGH el motor
arrancar y leer los comandos enviados.
digitalWrite(direccion, HIGH); // (direccion adecuada para inicializar d
ireccion HIGH CCW) (Direcion para ir a cero nanometros direccion LOW CW)
digitalWrite(msuno, HIGH);
digitalWrite(msdos, HIGH);
digitalWrite(mstres, HIGH);
while (digitalRead(botonPin) == LOW)
{
digitalWrite(steps, LOW); // This LOW to HIGH change is what creates the
digitalWrite(steps, HIGH); // al A4988 de avanzar una vez por cada pulso de
energia.
delayMicroseconds(VELOCIDAD);
// Regula la velocidad, cuanto mas bajo ma
s velocidad.
}
Serial.write("o");
}

También podría gustarte