Nuovo 2DOF 12V DC tergicristallo arduino

Running simulator build projects.
Please use the image gallery for your pictures, a short tutorial can be found here.
The first image in the first post will be shown in the project gallery.

Re: Nuovo 2DOF 12V DC tergicristallo arduino

Postby soraz » Thu 13. Mar 2014, 19:04

che codice stai usando per arduino ?
hai provato a seguire le guide e/o i progetti di altri utenti ?
hai provato a caricare qualche profilo di altri utenti per confrontare le configuraizoni ?

Ciao
User avatar
soraz
X-Sim Supporter
 
Posts: 45
Images: 67
Joined: Thu 23. May 2013, 21:02
Location: Noale - VE - Italy
Has thanked: 3 times
Been thanked: 5 times

Re: Nuovo 2DOF 12V DC tergicristallo arduino

Postby rosario972 » Thu 13. Mar 2014, 20:51

soraz wrote:che codice stai usando per arduino ?
hai provato a seguire le guide e/o i progetti di altri utenti ?
hai provato a caricare qualche profilo di altri utenti per confrontare le configuraizoni ?

Ciao



Ciao,ho provato a seguire altri progetti di altri utenti, con scarsi risultati :cry:

ci proverei volentieri a caricare altri profili ma non so da dove si fa ??


Sono riuscito a far muovere i motori inviando i codici nella seriale di arduino ! ;)

R3FLC1R01LFF (Max LEFT !!) -> roll left SINISTRO OK
RC1L3FRFFL01 (Max RIGT !!) -> roll right DESTRO OK

...........R64L64 R3FL3F R01L01 (Max!) -> si inclina il Playseat all'indietro OK
...........R9BL9B RC1LC1 RFFLFF (Max! ) -> si inclina il Playseat in avanti OK
L01 INIZIO OK
L64 INDIETRO OK
L7F CENTRALE OK
L9B AVANTI OK
LC1 AVANTI OK

R01 INIZIO OK
R64 INDIETRO OK
R7F CENTRALE OK
RB9 AVANTI OK
RCI AVANTI OK

se hai consigli suggerimenti per proseguire nel progetto te ne sarei grado !!

inserisco video http://youtu.be/Vkm7-AWDNjQ
User avatar
rosario972
 
Posts: 30
Joined: Sat 1. Feb 2014, 14:51
Has thanked: 1 time
Been thanked: 1 time

Re: Nuovo 2DOF 12V DC tergicristallo arduino

Postby rosario972 » Thu 13. Mar 2014, 21:55

codice arduino con cui muovo i motori col seriale !
Code: Select all
*/
#define BRAKEVCC 0
#define RV  2 //according to cable at 24/11/2011
#define FW  1 //according to cable at 24/11/2011
#define STOP 0
#define BRAKEGND 3
#define CS_THRESHOLD 253 //not use :(
////////////////////////////////////////////////////////////////////////////////
#define pwmMin 128;
#define pwmMax 250;
#define motLeft 0
#define motRigth 1
#define speedPin 10
#define potL A4
#define potR A5

////////////////////////////////////////////////////////////////////////////////
//  DECLARATIONS
////////////////////////////////////////////////////////////////////////////////
/*  VNH2SP30 pin definitions*/
int inApin[2] = {
  7, 4};  // INA: Clockwise input
int inBpin[2] = {
  8, 9}; // INB: Counter-clockwise input
int pwmpin[2] = {
  5, 6}; // PWM input
int cspin[2] = {
  2, 3}; // CS: Current sense ANALOG input
int enpin[2] = {
  0, 1}; // EN: Status of switches output (Analog pin)
int statpin = 13;
/* init position value*/
int DataValueL=125; //middle position
int DataValueR=125; //middle position

////////////////////////////////////////////////////////////////////////////////
// INITIALIZATION
////////////////////////////////////////////////////////////////////////////////
void setup()
{
  /* serial initialization */
  Serial.begin(115200);
  /* motor initialization */
  pinMode(statpin, OUTPUT);
  for (int i=0; i<2; i++)
  {
    pinMode(inApin[i], OUTPUT);
    pinMode(inBpin[i], OUTPUT);
    pinMode(pwmpin[i], OUTPUT);
  }
  // Initialize braked for motor
  for (int i=0; i<2; i++)
  {
    digitalWrite(inApin[i], LOW);
    digitalWrite(inBpin[i], LOW);
  }
}
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////// Main Loop ////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void loop()
{
  int sensorL,sensorR;

  serialData();
  sensorR = analogRead(A4)/4; 
  sensorL = analogRead(A5)/4; // echelle 0-1000
/*  Serial.print(sensorL);
  Serial.print(" ; ");
  Serial.println(sensorR);
  motorGo(motRigth, FW, 255);
  delay(100);
  motorOff(motRigth);
  delay(1000);
*/
  motorMotion(motRigth,sensorR,DataValueR);
  motorMotion(motLeft,sensorL,DataValueL);

}
////////////////////////////////////////////////////////////////////////////////
// Procedure: wait for complete trame
////////////////////////////////////////////////////////////////////////////////
void serialData()
{
  byte Data[3]={
    '0','0','0'    };
  // il faut limmitter le temps pour garder le contr�le des moteurs
  if (Serial.available()>2){ //wait a packets of 6
    //test if order  R or L data type
    Data[0]=Serial.read();
    if (Data[0]=='R'){ // ordre connue ?, si non je verrais au prochain tour !
      Data[1]=Serial.read();
      Data[2]=Serial.read();
      DataValueR=NormalizeData(Data);
    }
    if (Data[0]=='L'){ // ordre connue ?, si non je verrais au prochain tour !
      Data[1]=Serial.read();
      Data[2]=Serial.read();
      DataValueL=NormalizeData(Data);

    }
  }
  if (Serial.available()>16) Serial.flush();
}
////////////////////////////////////////////////////////
void motorMotion(int numMot,int actualPos,int targetPos)
////////////////////////////////////////////////////////
{
  //  int potPinL=A4; //to include in header procedure
  //  int potPinR=A5; //to include in header procedure 

  int Tol=4;
  int difference;
  int pwm;
  int securityLow=20;
  int securityHigh=200;
  int brakeDistance=16;
  boolean move=true; 

  // encadrements des valeurs
  if (targetPos<securityLow+brakeDistance)   targetPos=(securityLow+brakeDistance);    //software limits, but consideration speed brake.
  if (targetPos>securityHigh-brakeDistance)  targetPos=(securityHigh-brakeDistance); //software limits, but consideration speed brake.
  // calculate speed about distance
  difference=abs(targetPos-actualPos);

  if (difference<=Tol) pwm=0;  // to near to mov
  if (difference>Tol) pwm=168;
  if (difference>50) pwm=200;
  if (difference>75) pwm=225; 
  if (difference>100) pwm=255;
  // pay attention for security for Right motor!!
  if (actualPos>securityHigh || actualPos<securityLow) move=false; //mechanicals limits
  //to near to move
  if (difference<= Tol) move=false; //to near to move   
  // en avant   (haut)
  if (actualPos<targetPos && move) {
    pwm=255; //need power to go up !
    motorGo(numMot, FW, pwm);
    }
  pwm=255;  //test !
  // en arriere (bas) 
  if (actualPos>targetPos && move) motorGo(numMot, RV, pwm);
  // ne pas bouger !
  if (move==false) motorOff(numMot);// STOP 
}
////////////////////////////////////////////////////////////////////////////////
void motorOff(int motor){
  ////////////////////////////////////////////////////////////////////////////////
  digitalWrite(inApin[motor], LOW);
  digitalWrite(inBpin[motor], LOW);
  analogWrite(pwmpin[motor], 0);
}
////////////////////////////////////////////////////////////////////////////////
void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm)
////////////////////////////////////////////////////////////////////////////////
{
  if (motor <= 1)
  {
    if (direct <=4)
    {
      // Set inA[motor]
      if (direct <=1)
        digitalWrite(inApin[motor], HIGH);
      else
        digitalWrite(inApin[motor], LOW);

      // Set inB[motor]
      if ((direct==0)||(direct==2))
        digitalWrite(inBpin[motor], HIGH);
      else
        digitalWrite(inBpin[motor], LOW);

      analogWrite(pwmpin[motor], pwm);

    }
  }
}
////////////////////////////////////////////////////////////////////////////////
// testPot
////////////////////////////////////////////////////////////////////////////////
void testPot(){

  Serial.print(analogRead(A4));
  Serial.print(";");
  Serial.println(analogRead(A5));
  delay(250);

}
////////////////////////////////////////////////////////////////////////////////
void testpulse(){
  int pw=120;
  while (true){

    motorGo(motLeft, FW, pw);
    delay(250);     
    motorOff(motLeft);
    delay(250);     
    motorGo(motLeft, RV, pw);
    delay(250);     
    motorOff(motLeft);   

    delay(500);     

    motorGo(motRigth, FW, pw);
    delay(250);     
    motorOff(motRigth);
    delay(250);     
    motorGo(motRigth, RV, pw);
    delay(250);     
    motorOff(motRigth);   
    Serial.println("testpulse pwm:80");     
    delay(500);

  }
}
////////////////////////////////////////////////////////////////////////////////
// Function: convert Hex to Dec
////////////////////////////////////////////////////////////////////////////////
int NormalizeData(byte x[3])
////////////////////////////////////////////////////////////////////////////////
{
  int result;

  if (x[2]==13)   //only a LSB and Carrier Return
  {
    x[2]=x[1];  //move MSB to LSB
    x[1]='0';     //clear MSB
  }
  for (int i=1; i<3; i++)
  {
    if (x[i]>47 && x[i]<58 ){//for xA to xF
      x[i]=x[i]-48;
    }                     
    if (  x[i]>64 && x[i]<71 ){//for x0 to x9
      x[i]=x[i]-55;               
    }
  }
  result=(x[1]*16+x[2]);
  return result;
}
User avatar
rosario972
 
Posts: 30
Joined: Sat 1. Feb 2014, 14:51
Has thanked: 1 time
Been thanked: 1 time

Re: Nuovo 2DOF 12V DC tergicristallo arduino

Postby soraz » Fri 14. Mar 2014, 22:52

ciao,
il codice mi sembra a posto dato che se non ho visto male e' preso da --> http://www.gamoover.net/Forums/index.php?topic=25907
potresti comunque installare quello di RacingMat che ha fatto delle migliorie prendendolo da qui --> viewtopic.php?f=37&t=943

Dato che i motori si muovono, passa a x-sim converter.
Clicca il bottone a sinistra "Math Setup", "add axis" dove metti il nome come Left o Sinistra e selezioni la voce "i use USO or choose later", premi "ok" ed inserisci un'altra ascissa con nome right o Destra.
Clicca il bottone a sinistra "Output setup", in centro quello "U.S.O.", in alto seleziona la porta seriale che viene vista dal sistema quando hai la scheda arduino connessa, clicca "Add entry to list", poco sotto c'e' un combo con i nomi delle due ascisse prima inserite e verifica che per entrambe siano attivi i pallini su "8 bit resolution" e "hexadezimal output".
Nella sezione inferiore seleziona la porta di comunizione prima aggiunta, imposta i parametri che dovrebbero essere 115200,8,NOPARITY, ONESTOPBIT e nel campo "Datapacket centrale" inserisci la stringa di comando "L~01~R~02~" o "R~01~L~02~" a seconda delle ascisse prima inserite.
Torna in "Math Setup", seleziona il plugin "Output 1:1 (GForce)" aggiungendolo una prima volta per l'estrattore 25 che corrisponde alla forza laterale ed una seconda volta per il 27 che corrisponde a freno/acceleratore; questa operazione va fatta per entrambe le ascisse.
Sotto "Program settings" io ho selezionato la voce "Trigger on the actuator flag of a developer plugin" e attivato il flag "Enable autostart trigger in X-Sim converter".

Passiamo ora a x-sim extractor dove dovrai se non l'hai gia' fatto far trovare i giochi riconosciuti da x-sim tramite l'apposito wizard, fare un doppio click sul gioco che ti interessa, selezionare il profilename o se vuoi ne cerchi uno tra quelli disponibili cliccando "Find a fitting game profile online", alla nuova finestra premi "Search online" e nella lista che appare selezioni quello che ti aggrada e sotto "Donwload this profile and return" (attenzione agli alert non tutti vanno bene) ed infine "Play Game".

ATTENZIONE : la prima volta che usi un profilo tieni le slide dei valori basse o se crei un profilo tutto nuovo ti consiglio di spegnere l'alimentazione dei motori, e fare qualche giro senza incidenti con la rilevazione automatica dei valori massimi nei plugin di "Math Setup".

NOTE BENE: Un particolare che forse ti e' sfuggito e' che utilizzando l'interfaccia seriale (U.S.O.) in x-sim converter al momento le funzioni "Calibration setup", "Gauge setup", "Interface settings", "Output Analyzer" non servono a niente, io per capire che tutto funzioni lancio il gioco in finestra vedo se il bottone "Start" del converter diventi rosso con scritto "Stop".

Resto a disposizione per ulteriori dettagli se in qualche passaggio non ti trovi, ma ricorda che puoi trovare tante informazioni nel sito di x-sim come nei forum, documentazione o tutorial e nel caso abbiamo anche a disposizione "google traduttore" che tra tanti strafalcioni qualcosa ci fa capire.

p.s.: il giunto ce l'ho da 50cm perche' il fabbro non si e' fidato a tagliarlo, per me ottimale sarebbe da 30cm ed addirittura meglio usare un giunto omeocinetico che sembra essere piu' robusto.

Buon lavoro
User avatar
soraz
X-Sim Supporter
 
Posts: 45
Images: 67
Joined: Thu 23. May 2013, 21:02
Location: Noale - VE - Italy
Has thanked: 3 times
Been thanked: 5 times

Re: Nuovo 2DOF 12V DC tergicristallo arduino

Postby rosario972 » Fri 14. Mar 2014, 23:38

ciao, voglio intanto ringraziarti per il tempo dedicatomi per le spiegazioni !
quanto prima proverò e ti farò sapere ! ;)

Ciao, ho fatto alcune prove e grazie ai tuoi suggerimenti qualcosa è cambiato ;) adesso extractor comunica con converter e passa i dati che sono in continuo mutamento comè giusto che sia ! ( entrambi girano sullo stesso pc! il bello verra dopo quando dovrò passare converter e arduino su protatile :D ) quel che non funziona è "USO" anche perché in "enter available comport or select "use network" a me appare Arduino Uno e sotto Device path:\\.\COM4 :oops:
Attachments
errore
cheda arduino in prefiferiche
User avatar
rosario972
 
Posts: 30
Joined: Sat 1. Feb 2014, 14:51
Has thanked: 1 time
Been thanked: 1 time

Re: Nuovo 2DOF 12V DC tergicristallo arduino

Postby soraz » Mon 17. Mar 2014, 23:28

i dati che riporti sono corretti, hai prenmuto "add entry to list" e ti trovi sotto la COM4 ?
per il resto dovrebbe essere solo un problema di sequenza di avvio; tipo accendo pc, attacco il cavo usb di Arduino, alimento i motori, lancio x-sim, lancio gioco da x-sim.

ciao

2617
User avatar
soraz
X-Sim Supporter
 
Posts: 45
Images: 67
Joined: Thu 23. May 2013, 21:02
Location: Noale - VE - Italy
Has thanked: 3 times
Been thanked: 5 times

Re: Nuovo 2DOF 12V DC tergicristallo arduino

Postby rosario972 » Thu 20. Mar 2014, 00:07

soraz wrote:i dati che riporti sono corretti, hai prenmuto "add entry to list" e ti trovi sotto la COM4 ?
per il resto dovrebbe essere solo un problema di sequenza di avvio; tipo accendo pc, attacco il cavo usb di Arduino, alimento i motori, lancio x-sim, lancio gioco da x-sim.

ciao

2617


Ciao, ho provato diverse soluzioni ma nulla non riesco a far muovere i motori tramite x-sim !
al lacio di x-sim converter i motori si posizionano al centro segno che il softwer li vede e li muove per portarli in posizione di partenza ! al lacio di x-sin extrator la comunicazione cè e il pulsante diventa rosso, in contemporanea compare il segnale di errore di comunicazione della porta com4 ! quindi penso di sbagliare qualcosa in arduino ?!!? :( se qualcuno può aiutarmi nei passaggi per la giusta configurazione di arduino !!??!! :o :roll:
User avatar
rosario972
 
Posts: 30
Joined: Sat 1. Feb 2014, 14:51
Has thanked: 1 time
Been thanked: 1 time

Re: Nuovo 2DOF 12V DC tergicristallo arduino

Postby soraz » Fri 21. Mar 2014, 15:23

Penso sia superfluo chiederti se hai disattivao l'UAC e lanci x-sim con l'opzione 'Esegui questo programma come amministratore' come specificato a pagina 4 del manuale -> http://www.x-sim.de/documents/X-Sim%20Quick%20Guide.pdf

Prova a vedere anche qui che parla di driver :
viewtopic.php?f=40&t=155&start=40&hilit=uso+error+opening+com#p7154

ciao
User avatar
soraz
X-Sim Supporter
 
Posts: 45
Images: 67
Joined: Thu 23. May 2013, 21:02
Location: Noale - VE - Italy
Has thanked: 3 times
Been thanked: 5 times

Re: Nuovo 2DOF 12V DC tergicristallo arduino

Postby rosario972 » Fri 21. Mar 2014, 20:37

soraz wrote:Penso sia superfluo chiederti se hai disattivao l'UAC e lanci x-sim con l'opzione 'Esegui questo programma come amministratore' come specificato a pagina 4 del manuale -> http://www.x-sim.de/documents/X-Sim%20Quick%20Guide.pdf

Prova a vedere anche qui che parla di driver :
viewtopic.php?f=40&t=155&start=40&hilit=uso+error+opening+com#p7154

ciao


;) ;) ciao, si si quei passaggi tutti fatti sin da principio ! :) :) grazie comunque

la cosa strana è che arduino tramite seriale com 4 li muove !
all avvio del programma li porta in posizione ma dopo nessun movimento con l' avvio del gioco anche se il botto ne diventa rosso e cè il movimento !
da questo suppongo che sia un problema di gestione dei dati da inviare alla scheda dei motori :?: :?: :roll: :?: :?:

X il 2 link è la configurazione del display :) :)

vedremo qualcosa dovrà saltare fuori curiosando :P
User avatar
rosario972
 
Posts: 30
Joined: Sat 1. Feb 2014, 14:51
Has thanked: 1 time
Been thanked: 1 time

Re: Nuovo 2DOF 12V DC tergicristallo arduino

Postby rosario972 » Sat 22. Mar 2014, 18:57

curiosando e dopo aver eseguito altre mille prove sono riuscito nel far muovere i motori tramite s-xim :D :twisted: :twisted:
la cosa mi incoraggia anche se rimane ancora tanto da fare prima di collegare i motori alla postazione per un reale movimento !! :P
User avatar
rosario972
 
Posts: 30
Joined: Sat 1. Feb 2014, 14:51
Has thanked: 1 time
Been thanked: 1 time

PreviousNext

Return to Motion simulator Projects in progress

Who is online

Users browsing this forum: No registered users and 1 guest