Hola, estoy teniendo 2 problemas con mi programa,
1.Es que el motor va paso por paso en vez de girar continuamente, me pregunto si es el library que estoy usando (SpeedyStepper.h) no se cual es mejor entre ese o AccelStepper.h
motor HT23-401 (https://www.lenmark.com/products/ht23-401-high-torque-stepper-motor)
driver DM542 (Prestige XL2/L2 Stepping Motor(DM542))
- Mi programa tiene que hace uso de 2 motores, conectados a dos diferentes drivers, conectado a un arduino, uno de los motores tiene que baja y subir (vertical), y el otro tiene que girar, cuando el motor esta abajo tiene que girar por 50 segundo en sentido del reloj, subir 10 y luego girar otros 50 segundos en contra de las manecillas del reloj (es un sistema de limpieza, hace contactos con liquidos cuando esta abajo).
Alguien por favor me puede decir que libreria funciona mejor, y que estoy haciendo mal con mi programa, gracias !
#include <SpeedyStepper.h>
// Defining Stepper Motors
SpeedyStepper tStepper;
SpeedyStepper zStepper;
//Defining Pins
int run1 = 2;
int run2 = 3;
int run3 = 4;
int opStop = 12;
int beeper = 11;
//Defining Common Parameters
int zStepperTravel = 300; //in millimeters
int m1PlatformTravel = 300; //in millimeters
int m2PlatformTravel = 248; //in millimeters
int f4PlatformTravel = 270; //in millimeters
int zStepperVelocity = 70; //in millimeters per second
int oscillationHeight = 24.5; //in millimeters
int oscillationVelocity = 35; //in millimeters per second
int oscillationInterval = 8*1000; //in milliseconds
int prog1Duration = 2*60; //in Seconds
int prog2Duration = 5*60; //in Seconds
int prog3Duration = 5*60; //in Seconds
float prog1SpinSpeed = 0.2; //in revs/s
float prog2SpinSpeed = 0.2; //in revs/s
float prog3SpinSpeed = 0.2; //in revs/s
//-----------------------------------------------------------------------------
// setup/standby function
//-----------------------------------------------------------------------------
void setup() {
//Assigning Button Pins
pinMode (opStop, INPUT_PULLUP);
pinMode (run1, INPUT_PULLUP);
pinMode (run2, INPUT_PULLUP);
pinMode (run3, INPUT_PULLUP);
pinMode (beeper, OUTPUT);
digitalWrite(beeper, LOW);
//Assigning Stepper Pins
tStepper.connectToPins(7,6);
zStepper.connectToPins(10,9);
//pinMode(tStepperEna,OUTPUT);
//pinMode(zStepperEna,OUTPUT);
//Stepper Configuration
tStepper.setStepsPerRevolution(800);
tStepper.setSpeedInRevolutionsPerSecond(0.2);
tStepper.setAccelerationInRevolutionsPerSecondPerSecond(0.2);
zStepper.setStepsPerMillimeter(160);
zStepper.setAccelerationInMillimetersPerSecondPerSecond(50);
zStepper.setSpeedInMillimetersPerSecond(zStepperVelocity);
}
void loop() {
while (digitalRead(opStop) == HIGH){
//loop to stop machine start while opstop pressed
}
if (digitalRead(run1) == LOW){
prog(prog1Duration,prog1SpinSpeed,m1PlatformTravel);
}
if (digitalRead(run2) == LOW){
prog(prog2Duration,prog2SpinSpeed,m1PlatformTravel);
}
delay(1000);
}
//-----------------------------------------------------------------------------
// Run Program
//-----------------------------------------------------------------------------
void prog(long duration, float spinSpeed, int travel){
startBeep();
duration = duration * 1000; //converting seconds to milliseconds
zStepper.setSpeedInMillimetersPerSecond(zStepperVelocity);
zStepper.moveToPositionInMillimeters(travel);
tStepper.setSpeedInRevolutionsPerSecond(spinSpeed);
tStepper.setupMoveInRevolutions(300);
long timer = (duration) + millis();
long oscillation = millis();
boolean flipflop = true;
zStepper.setSpeedInMillimetersPerSecond(oscillationVelocity);
while(timer >= millis() && (digitalRead(opStop)==LOW)){
tStepper.processMovement();
zStepper.processMovement();
if (oscillation <= millis()){
oscillation = millis() + oscillationInterval;
if (flipflop == true){
zStepper.setupMoveInMillimeters(travel);
flipflop = false;
}
else{
zStepper.setupMoveInMillimeters(travel-oscillationHeight);
flipflop = true;
}
}
}
tStepper.setupStop();
while(tStepper.getCurrentVelocityInStepsPerSecond() > 10){
tStepper.processMovement();
zStepper.processMovement();
}
tStepper.setupMoveInRevolutions(-300);
timer = (duration) + timer;
while(timer >= millis() && (digitalRead(opStop)==LOW)){
tStepper.processMovement();
zStepper.processMovement();
if (oscillation <= millis()){
oscillation = millis() + oscillationInterval;
if (flipflop == true){
zStepper.setupMoveInMillimeters(travel);
flipflop = false;
}
else{
zStepper.setupMoveInMillimeters(travel-oscillationHeight);
flipflop = true;
}
}
}
tStepper.setupStop();
zStepper.setupStop();
while(tStepper.getCurrentVelocityInStepsPerSecond() > 10 && zStepper.getCurrentVelocityInStepsPerSecond() > 10){
tStepper.processMovement();
zStepper.processMovement();
}
if (digitalRead(opStop) == LOW){
progFinishedReset();
}
else{
opStopReset();
}
}
//-----------------------------------------------------------------------------
// Reset function after program has concluded
//-----------------------------------------------------------------------------
void progFinishedReset(){
// Sound initial beeper
if (digitalRead(opStop) == LOW){
for (int i = 0; i<=4; i++){
digitalWrite(beeper, HIGH);
delay(30);
digitalWrite(beeper, LOW);
delay(120);
}
}
zStepper.setSpeedInMillimetersPerSecond(zStepperVelocity);
if (digitalRead(opStop) == LOW){
zStepper.moveToPositionInMillimeters(0);
}
centerHead();
// Sound final beeper
if (digitalRead(opStop) == LOW){
for (int i = 0; i<=4; i++){
digitalWrite(beeper, HIGH);
delay(100);
digitalWrite(beeper, LOW);
delay(100);
}
}
}
//-----------------------------------------------------------------------------
// Reset function after opStop is pressed
//-----------------------------------------------------------------------------
void opStopReset(){
while (digitalRead(opStop) == HIGH){
delay(1000);
}
zStepper.moveToPositionInMillimeters(0);
centerHead();
}
//-----------------------------------------------------------------------------
// Point toolhead toward user
//-----------------------------------------------------------------------------
void centerHead(){
long currentPos = tStepper.getCurrentPositionInSteps() / 800;
long targetPos = (currentPos * 800);
tStepper.moveToPositionInSteps(targetPos);
tStepper.setCurrentPositionInSteps(0);
}
//-----------------------------------------------------------------------------
// Small beep to signal operation start
//-----------------------------------------------------------------------------
void startBeep(){
digitalWrite(beeper, HIGH);
delay(2);
digitalWrite(beeper, LOW);
}