Skocz do zawartości

Robot z silnikami krokowymi sterowany padem PS2


Mc_Kusterson

Pomocna odpowiedź

Witam.

Jakiś czas temu postanowiłem zbudować ramię robota oparte o silniki krokowe. Do sterowania robotem chcę użyć bezprzewodowego pada od PS2. Silnikami będzie sterować "sterownik silnika krokowego TB6600", a całość będzie oparta o arduino. Dużą część robota mam już gotową, lecz przed kolejnymi etapami budowy chciałbym go trochę przetestować. Tak jak z budowaniem nie mam większych problemów, tak z programowaniem niezbyt mi idzie. Znalazłem w internecie kilka projektów i zainspirowałem się nimi tworząc swój kod. Jest z nim taki problem że nie zawsze działa oraz nie ma płynnej regulacji obrotów. Program docelowo ma działać w ten sposób że: gdy wychylę drążek na padzie do przodu silnik kręci się w prawo, im mocniej go wychylę to tym szybciej silnik się będzie kręcił. Analogicznie gdy wychylę go w drugą stronę, tylko że silnik kręci się w przeciwną stronę(w lewo). Pozycja neutralna joysticka - nic się nie dzieje. Prosiłbym o pomoc w naprawieniu tego kodu.

 

#include <PS2X_lib.h> 
#include <AccelStepper.h>
AccelStepper stepper(1, 8, 9);
PS2X ps2x; 
int error = 0;
byte type = 0;
int Analog_X = 0;
int Analog_X_AVG = 0; 
 
  
void setup()
{
 Serial.begin(57600);
 error = ps2x.config_gamepad(13,11,10,12, false, false); 
 if(error == 0){
   Serial.println("Found Controller, configured successful");
   Serial.println("Try out all the buttons, X will vibrate the controller, faster as you press harder;");
  Serial.println("holding L1 or R1 will print out the analog stick values.");
  Serial.println("Go to www.billporter.info for updates and to report bugs.");
 }
   
  else if(error == 1)
   Serial.println("No controller found, check wiring, see readme.txt to enable debug. visit www.billporter.info for troubleshooting tips");
   
  else if(error == 2)
   Serial.println("Controller found but not accepting commands. see readme.txt to enable debug. Visit www.billporter.info for troubleshooting tips");
   
  else if(error == 3)
   Serial.println("Controller refusing to enter Pressures mode, may not support it. ");
   
   //Serial.print(ps2x.Analog(1), HEX);
   
   type = ps2x.readType(); 
     switch(type) {
       case 0:
        Serial.println("Unknown Controller type");
       break;
       case 1:
        Serial.println("DualShock Controller Found");
       break;
       case 2:
         Serial.println("GuitarHero Controller Found");
       break;
     }
  

 InitialValues();
 stepper.setMaxSpeed(5000); 
  stepper.setAcceleration(1000);   
  stepper.setSpeed(500);
  delay(500);
}

void loop()
{
 ps2x.read_gamepad(); 
 
         
 ReadAnalog();  
  stepper.runSpeed(); 
}
   
   
   void ReadAnalog()
{
 
  Analog_X = ps2x.Analog(PSS_LY);  
  if(abs(Analog_X-Analog_X_AVG)>25) 
  {
  stepper.setSpeed(5*(Analog_X-Analog_X_AVG));    
  }
  else
  {
    stepper.setSpeed(0);
  }
  
}
  void InitialValues()
{
 
  float tempX = 0;
  for(int i = 0; i<50; i++)
  {
     tempX += ps2x.Analog(PSS_LY); 
     delay(10); 
     
  } 
   Analog_X_AVG = tempX/50;
   Serial.print("AVG_X: ");
  Serial.println(Analog_X_AVG); 
}
     

Przechwytywanie.thumb.PNG.f3ee90602f2b258b915f247824dd028e.PNG

 

 

 

 

Edytowano przez Mc_Kusterson
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.