Código Fuente:
const int dirPin = 8; const int stepPin = 9; unsigned long pasosvuelta; float grados; unsigned long rpms; unsigned long pasos; unsigned long retardo; String mensaje = ""; //-----------------SETUP------------------------------ void setup() { pinMode(dirPin, OUTPUT); //coloco el Pin de Dirección como salida pinMode(stepPin, OUTPUT); //coloco el Pin de Step como salida Serial.begin(115200); //inicio la comunicación serial a 115200 baud pasosporvuelta(); //llamo a la función para definir los pasos por vuelta. } //-----------------LOOP------------------------------ void loop() { sentido(); //llamo a la función para definir el sentido de giro. giro(); //llamo a la función para definir los grados que debe girar el motor. velocidad(); //llamo a la función para definir la velocidad de giro en RPM. pasos = (grados/360)*pasosvuelta; //calculo la cantidad de pasos que tengo que enviar. Serial.print(pasos); Serial.print(" pasos a "); retardo = 30000000/(rpms*pasosvuelta); //calculo el retardo según las RPM indicadas. Serial.print(retardo); Serial.print(" uSeg\n"); Serial.println("---------------------------------------"); for (int x = 0; x < pasos; x++) { //envio los pasos calculados con el retardo calculado digitalWrite(stepPin, HIGH); delayMicroseconds(retardo); digitalWrite(stepPin, LOW); delayMicroseconds(retardo); } } //-----------------FUNCIONES-------------------------- void pasosporvuelta() { Serial.print("¿Pasos por vuelta? (pasos del motor * micropasos) "); while (Serial.available() == 0 ) {} //queda esperando hasta recibir un mensaje mensaje = Serial.readString(); pasosvuelta = mensaje.toInt(); //convierte en mensaje recibido en un entero if (pasosvuelta == 0) { //si no es un número envía ERROR y vuelve a llamar a la función Serial.print("ERROR\n"); pasosporvuelta(); } else { //si es un número nos envia un mensaje de OK Serial.print(pasosvuelta); Serial.print(" OK\n"); } } void sentido() { Serial.print("¿Sentido de giro? (0 horario / 1 antihorario) "); while (Serial.available() == 0 ) {} mensaje = Serial.readString(); if (mensaje == "0\n") { Serial.print("horario OK\n"); digitalWrite(dirPin, HIGH); } else if (mensaje == "1\n") { Serial.print("antihorario OK\n"); digitalWrite(dirPin, LOW); } else { Serial.print("ERROR\n"); sentido(); } } void giro() { Serial.print("¿Grados? "); while (Serial.available() == 0 ) {} mensaje = Serial.readString(); grados = mensaje.toFloat(); if (pasosvuelta == 0) { Serial.print("ERROR\n"); giro(); } else { Serial.print(grados); Serial.print(" OK\n"); } } void velocidad() { Serial.print("¿Velocidad de giro? (RPM) "); while (Serial.available() == 0 ) {} mensaje = Serial.readString(); rpms = mensaje.toInt(); if (rpms == 0) { Serial.print("ERROR\n"); velocidad(); } else { Serial.print(rpms); Serial.print(" OK\n"); } }
Hola, estoy siguiendo tu tutorial, tengo un motor de 23 volts y estoy tratando de hacer funcionar mi primer motor ya que nunca use uno, tengo varios nema sacados de fotocopiadoras pero el problema es que al no ser de 12 volts tengo que alimentarlos distinto, por eso te envio el archivo de fritzing a ver is esta bien hecho antes de quemar todo aqui esta compartido el archivo http://fritzing.org/projects/stepper-motor-24volts-and-driver-drv8825 gracias ojalá puedas ayudarme
ResponderEliminarene a seta i
ResponderEliminar