hola buenas tardes
Estoy usando la librería accelstepper para controlar la posición de un nema 23, tb6600, con un potenciómetro.
el código hace que respete el giro y la posición hasta cierto punto pero despues empieza a vibrar y girar cuando no muevo el potenciómetro.
El valor que da la lectura del potenciómetro puede variar espontáneamente aunque no lo toques. Para verificar esto imprime el valor de pot1sig.
Para remediar este efecto, modifica tu programa para mover el motor solamente si la lectura del potenciometro varía más allá de un valor predefinido
Para esto requieres una variable adicional que almacene la lectura anterior y con la que puedas comparar la lectura nueva. Si la diferencia entre ambas supera el valor predefinido, mueves el motor y actualizas la lectura.
Los variacion que observes en la impresión del párrafo 1 te sirve para establecer el valor predefinido de comparación.
Esto requiere manejo de conceptos matemáticos básicos como valor abstoluto.
si el valor absoluto de (posActual - posAnterior) > 10 por ejemplo entonces si tomas acción.
// agrega junto a
int pot1sig;
int pot1sigAnt = 0;
void loop() {
pot1sig = analogRead(pot1);
if (abs(pot1sig-pot1sigAnt) > 10) { // este valor ajustalo a tu necesidad.
pot1sig = map(pot1sig,0,1023,0,1000);
stepper.moveTo(pot1sig);
stepper.setSpeed(600);
stepper.runSpeedToPosition();
Serial.println(pot1sig);
}
pot1sigAnt = pot1sig;
}
No se como debe funcionar los procedimientos como runSpeedToPosition()
Si asi omo lo puse no va, cambia a esto
// agrega junto a
int pot1sig;
int pot1sigAnt = 0;
void loop() {
pot1sig = analogRead(pot1);
if (abs(pot1sig-pot1sigAnt) > 10) { // este valor ajustalo a tu necesidad.
pot1sig = map(pot1sig,0,1023,0,1000);
stepper.moveTo(pot1sig);
Serial.println(pot1sig);
}
stepper.setSpeed(600);
stepper.runSpeedToPosition();
pot1sigAnt = pot1sig;
}