Go Down

Topic: controllare 2 step motor con joystick e endstop (Read 184 times) previous topic - next topic

michelez78

Aug 10, 2017, 02:49 pm Last Edit: Aug 10, 2017, 05:42 pm by michelez78
Ragazzi, sto cercando di pilotare 2 stepper con un joystick ed Arduino. Per un sistema pan e tilt. Ora ho un problema: su un asse ho un home button centrale, come faccio a farglielo capire. Ho buttato giù questo sketch, che quando trova l'end stop torna indietro di qualche grado e funziona... Però io vorrei che capisse dove si trova e contasse un dato n di step nella direzione che voglio io quando scatta l'endstop.
non so se mi sono spiegato bene....



Code: [Select]


#include <Stepper.h>
const int stepsPerRevolution = 64;  // change this to fit the number of steps per revolution
                                     
// initialize the stepper library for both steppers:
Stepper small_stepper(stepsPerRevolution, 8,10,9,11); 
Stepper small_stepper2(stepsPerRevolution, 3,5,4,6);
const int homeButton = 2; // initialize pin X endstop button
bool inputWasLow = true;
int buttonState;
int countStep = 1000; // Step counter for  position identification

void setup() {
Serial.begin(115200);
  // set the speed of the motors
  small_stepper.setSpeed(200);    // set first stepper speed
  small_stepper2.setSpeed(200);   // set second stepper speed
   pinMode(homeButton, INPUT); // set X endstop button
}


void loop() {
 
  int sensorReading = analogRead(A0); // read value from joystick X-axis
buttonState = digitalRead(homeButton);

  Serial.println("inizializzazione");
  Serial.println(buttonState);
 
  Serial.println(inputWasLow);
  Serial.println(sensorReading);
 
  //delay(200);
   
  if (buttonState== 0)
  {
     inputWasLow = true;
  if (sensorReading < 450) { small_stepper.step(1);    // step left
  countStep=countStep+1;}
  if (sensorReading > 550) { small_stepper.step(-1);   // step right
  countStep=countStep-1;}
 
  int sensorReading2 = analogRead(A1); // read value from joystick Y-axis

  if (sensorReading2 < 450) { small_stepper2.step(1); } // step forward
  if (sensorReading2 > 550) { small_stepper2.step(-1); } // step backward
 
  Serial.println(countStep);
 }
 if (buttonState== 1)
 {
//    if(inputWasLow)
//    {
//        inputWasLow = false;}
small_stepper.step(10);
}
 }


PaoloP


michelez78

Uno è un fine corsa (a fine corsa)
L'altro però è un switch a metà corsa. Quando viene azionato dovrebbe sapere di essere a metà e di avere un certo n di step sia a destra che a sinistra.. Non so se mi spiego.

brunello22

Certo che ti spieghi, anche se non capisco il problema.
Se sei sul punto centrale, è come se fossi al punto zero.

quindi xxx.step(5) avanza di 5 passi in una direzione
oppure xxx.step(-5) avanza di 5 passi nell'altra direzione.
Se sai che gli step totali per un giro sono 64 ( che poi sono probabilmente di piu', dipende dallo stepper che usi ) sei praticamente al passo 32
"C' è chi legge Guerra & Pace e non ci capisce un tubo vuoto; c'è chi legge l'etichetta delle patatine fritte e ci trova la spiegazione del mondo"

michelez78

Ehm, scusa non ho capito io sta volta! ;-)

Go Up