Aller au contenu


Contenu de zuzu

Il y a 9 élément(s) pour zuzu (recherche limitée depuis 04-avril 13)


#67401 Radio rc et pont h

Posté par zuzu sur 21 février 2016 - 06:28 dans Programmation

Bon je veux bien me lancer. Ne m'en veux pas si je pose des questions débiles !!!
 
 
Je commence simple mais déjà les questions arrivent :
 
         * j'ai remplacé joystickpin 1et 2 par rcvalueX et rcvalueY : c'est possible ?
 
         * je comprends pas bien Mspeed car il n'est pas utilisé dans le code alors que Mspeed1 et Mspeed2.
 
Merci par avance de ta patience !
 
 
 
// liste des define
 
#define motorPin1a 1 // Marche avant du premier moteur
#define motorPin1b 2 // Marche arrière du premier moteur
#define speedPin1 3 // L293D enable pin pour le premier moteur
#define motorPin2a 4 // Marche avant du deuxième moteur
#define motorPin2b 7 // Marche arrière du deuxième moteur
#define speedPin2 5 // L293D enable pin pour le deuxième moteur
#define RCvalueX 11  // Valeur de la RC en X
#define RCvalueY 12  // Valeur de la RC en Y
 
// Déclarations des variables globales il faut essayer de les limiter
 
int Mspeed= 0;
int Mspeed1 = 0;
int Mspeed2 = 0;
 
unsigned long time;
 
void setup()
 
{
 
pinMode(motorPin1a, OUTPUT);   // réglage des broches en output
pinMode(motorPin1b, OUTPUT);
pinMode(speedPin1, OUTPUT);
pinMode(motorPin2a, OUTPUT);
pinMode(motorPin2b, OUTPUT);
pinMode(speedPin2, OUTPUT);
 
}
​



#67334 Radio rc et pont h

Posté par zuzu sur 20 février 2016 - 12:07 dans Programmation

Bon revenons au sujet du post, j'avais trouvé un code qui utilisait une commande d'un pont H par joystick analogique filaire pour piloter 2 moteurs DC;

 

Voici le code avec les commentaires (en rouge) pour le modifier et obtenir une commande par une radio RC :  

#define motorPin1a 1 // Marche avant du premier moteur
#define motorPin1b 2 // Marche arrière du premier moteur
#define speedPin1 3 // L293D enable pin pour le premier moteur
#define motorPin2a 4 // Marche avant du deuxième moteur
#define motorPin2b 7 // Marche arrière du deuxième moteur
#define speedPin2 5 // L293D enable pin pour le deuxième moteur
#define JoyStickPin1 1  //                   #define JoyStickPin1 11  
#define JoyStickPin2 2  //                   #define JoyStickPin2 12  



int Mspeed= 0;
int Mspeed1 = 0;
int Mspeed2 = 0; 


unsigned long time;


void setup() {


// réglage des broches à output
pinMode(motorPin1a, OUTPUT);
pinMode(motorPin1b, OUTPUT);
pinMode(speedPin1, OUTPUT);
pinMode(motorPin2a, OUTPUT);
pinMode(motorPin2b, OUTPUT);
pinMode(speedPin2, OUTPUT);
}


void loop() {
  Mspeed1 = (analogRead(JoyStickPin1)-511)/2; //           Mspeed1 = (pulseIn(11,HIGH,25000)-1432)/2;  1432 est la valeur du neutre
  Mspeed1 = Mspeed1 - (analogRead(JoyStickPin2)-511)/2; //      Mspeed1 = Mspeed1 - (pulseIn(12,HIGH,25000)-1432)/2;
  if (Mspeed1 > 255) {
    Mspeed1 = 255;
  }
    if (Mspeed1 < -255) {
    Mspeed1 = -255;
  }
 
  Mspeed2 = (analogRead(JoyStickPin1)-511)/2; //                     Mspeed2 = (pulseIn(11,HIGH,25000)-1432)/2;   
  Mspeed2 = Mspeed2 + (analogRead(JoyStickPin2)-511)/2;     Mspeed2 = Mspeed2 + (pulseIn(12,HIGH,25000)-1432)/2;         
  if (Mspeed2 > 255) {
    Mspeed2 = 255;
  }    
  if (Mspeed2 < -255) {
    Mspeed2 = -255;
  }
 
  if (Mspeed1 > 0)  // donc marche arrière
  {
    analogWrite(speedPin1, abs(Mspeed1));
    digitalWrite(motorPin1a, LOW);
    digitalWrite(motorPin1b, HIGH);
  }
  else {   // donc marche avant (ou repos)
    analogWrite(speedPin1, abs(Mspeed1));
    digitalWrite(motorPin1a, HIGH);
    digitalWrite(motorPin1b, LOW);
  }
 
  if (Mspeed2 > 0)  // donc marche arrière
  { 
    analogWrite(speedPin2, abs(Mspeed2));
    digitalWrite(motorPin2a, LOW);
    digitalWrite(motorPin2b, HIGH);   
  }
  else  // donc marche avant (ou repos)
  {  
    analogWrite(speedPin2, abs(Mspeed2));
    digitalWrite(motorPin2a, HIGH);
    digitalWrite(motorPin2b, LOW);
  }
}

voilà !!




#67181 Radio rc et pont h

Posté par zuzu sur 15 février 2016 - 07:28 dans Programmation

Nikel ! j'ai fait comme tu me l'as dit.

 

Un grand merci !!




#67149 Radio rc et pont h

Posté par zuzu sur 14 février 2016 - 09:54 dans Programmation

Ok merci.
 
je vais essayé.




#67138 Radio rc et pont h

Posté par zuzu sur 14 février 2016 - 07:29 dans Programmation

J'ai refait le test avec un autre récepteur RC, ça fonctionne !!!

Je l'ai testé avec les 2 sketchs, parfait.

 

Pour les valeurs :

 

pos mini : 1033

neutre : 1432

pos max : 1828

 

je comprends mieux maintenant !!!

 

Ensuite, je pensais convertir les valeurs du récepteur pour les adapter à ce programme qui utilise un joystick 2 axes filaire.

 

C'est possible de faire cela?

// Définition des broches analogique
#define JOYSTICK_X A0 // X -> droite / gauche
#define JOYSTICK_Y A1 // Y -> vitesse / direction
 
// Définition des états des moteurs
#define MOTEUR_STOP 0
#define MOTEUR_AVANCE 1
#define MOTEUR_RECULE 2
 
// Définition de la marge autour du point d'origine (0, 0)
// Permet d'éviter que les moteurs n'oscille entre MOTEUR_AVANCE et MOTEUR_RECULE
#define THRESHOLD 20
 
// Définition de la valeur maximum pour la vitesse
#define MAX_SPEED 127
 
// Variables global
// calX : calibration en 0 de l'axe X
// calY : calibration en 0 de l'axe Y
// vitesse : vitesse calculé
// direction : direction calculé
int calX, calY, vitesse, direction;
// coefG : coefficient de vitesse (entre 0 et 1) pour le moteur gauche
// coefD : coefficient de vitesse (entre 0 et 1) pour le moteur droit
float coefG, coefD;
 
// setup()
void setup() 
{
  // Initialisation du port série
  Serial.begin(115200);
 
  // Calibration de la valeur (0, 0) du joystick
  calX = analogRead(JOYSTICK_X);
  calY = analogRead(JOYSTICK_Y);
}
 
// loop()
void loop() 
{
  // Calcul des données
  getData(calX, calY, &coefG, &coefD, &vitesse, &direction);
 
  // Affichage de la vitesse du moteur gauche
  Serial.print("Moteur Gauche : ");
  Serial.println((int)(vitesse * coefG));
  
  // Affichage de la vitesse du moteur droit
  Serial.print("Moteur Droit : ");
  Serial.println((int)(vitesse * coefD));
 
  // Affichage de la direction des moteurs
  Serial.print("Direction : ");
  if(direction == MOTEUR_AVANCE) // Vers l'avant
    Serial.println("AVANT");
  else if(direction == MOTEUR_RECULE) // Vers l'arriére
    Serial.println("ARRIERE");
  else
    Serial.println("ARRET"); // Aucun mouvement
 
  // Delai de 500ms pour pouvoir lire la console
  delay(500);
}
 
// Fonction calculant les divers coefficient de vitesse, la direction, ainsi que la vitesse
void getData(int calX, int calY, float *coefG, float *coefD, int *vitesse, int *direction) 
{
  // rawX : valeur brute en X du joystick centrée sur calX
  // rawY : valeur brute en Y du joystick centrée sur calY
  int rawX, rawY;
  
  // Mesure des valeurs brute en X et Y
  rawX = analogRead(JOYSTICK_X) - calX;
  rawY = analogRead(JOYSTICK_Y) - calY;
 
  // Si -THRESHOLD < rawY < THRESHOLD
  if(rawY > -THRESHOLD && rawY < THRESHOLD)
  {
    // Les moteurs sont marqués comme arrétés, et vitesse = 0
    *direction = MOTEUR_STOP;
    *vitesse = 0;
  }  // Si rawY >= 0
  else if(rawY >= 0)
  {
    // Les moteurs sont marqués en mode "recule"
    *direction = MOTEUR_RECULE;
    // La vitesse est égale à map(rawY) depuis 0 ~ (1023 - calY) vers 0 ~ MAX_SPEED
    *vitesse = map(rawY, 0, 1023 - calY, 0, MAX_SPEED);
  } // Si rawY < 0
  else 
  {
    // Les moteurs sont marqués en mode "recule"
    *direction = MOTEUR_AVANCE;
    // La vitesse est égale à map(rawY) depuis 0 ~ calY vers 0 ~ MAX_SPEED
    *vitesse = map(-rawY, 0, calY, 0, MAX_SPEED);
  }
 
  // Si rawX < -THRESHOLD alors coefG = -rawX / calX sinon coefG = 1
  *coefG = (rawX < -THRESHOLD) ? -rawX / (float)calX : 1;
  
  // Si rawX > THRESHOLD alors coefD = rawX / calX sinon coefD = 1
  *coefD = (rawX > THRESHOLD) ? rawX / (float)calX : 1;
}
​



#67077 Radio rc et pont h

Posté par zuzu sur 13 février 2016 - 10:58 dans Programmation

Pour tester, j'ai fait cela :


int ch2;
void setup() {
pinMode(5, INPUT);
Serial.begin(9600);
}
void loop() {
  ch2 = pulseIn(5, HIGH, 25000);
Serial.println(ch2);
delay(25);
}

affichage moniteur (pas réussi à coller l'image du moniteur) :

1

1345

1

1350

1

1

11575

1

1350

2

1

1

11649 




#67058 Radio rc et pont h

Posté par zuzu sur 13 février 2016 - 08:03 dans Programmation

Point 1a : a priori ok

 

j'ai lu qu'il y avait une manière de faire sans la fonction pulseIn mais j'ai pris peur.




#67046 Radio rc et pont h

Posté par zuzu sur 13 février 2016 - 06:02 dans Programmation

Mon but est d'apprendre ( arduineur depuis 5 jours).

1ère étape : lire signal du récepteur
J'ai trouvé un sketch pour lire le signal du récepteur qui utilise la fonction pulseIn.
Mais quand je l'utilise, les valeurs lues par moniteur arduino ne cessent de varier, pourquoi ?



#67041 Radio rc et pont h

Posté par zuzu sur 13 février 2016 - 03:58 dans Programmation

Bonjour à tous,

Débutant en arduino, je cherche un sketch qui servirai à piloter 2 moteurs avec un pont h et un ensemble radio/récepteur RC.

Merci d'avance pour votre aide