Articles - Arduino

Direction pilotée

  |   1300  |  Poster commentaire  |  Arduino

La direction pilotée




Plusieurs types d'essieux existent sur les remorques notamment au niveau des essieux directionnels. Ici nous ne parlerons pas des essieux suiveurs, par contre nous allons étudier les essieux à direction pilotée.

Description


Sur les remorques de convoi exceptionnel pour le transport des charges lourdes ou de grandes longueurs, les essieux sont très souvent directionnels et pilotés par un capteur sur la sellette (mode automatique) et par une télécommande (mode manuel) que le conducteur peut utiliser pour les passages difficiles.


Réalisation


Pour ce montage, l'utilisation d'un arduino est la solution la plus économique et la plus facile à mettre en œuvre. En tout cas, c'est la solution que j'ai retenue et que je vais vous détailler. Cette solution permet de piloter la remorque par rapport à l'angle mesuré à la sellette, ou directement par une voie variable de la radio : pilotage auto lorsque voie de radio au neutre, pilotage manuelle lorsque voie de la radio utilisée.


- Le potar P permet de mesure l'angle de la remorque par rapport au camion qui la tracte. Il pourra avoir une valeur de 5Kohms, 10Kohms ou même 100Kohms (plus globalement, tout potar de plus de 10Kohms fera très bien l'affaire).
- La prise RX devra être raccordée sur la voie du récepteur permettant de piloter la direction.
- L'alimentation du montage doit être de 5Volts, puisque l'arduino fonction sous cette tension et le récepteur aussi.
- Le choix de l'Arduino est assez libre puisque peu de ressources vont être nécessaires.

Code CPP :
#include <SoftRcPulseOut.h>
SoftRcPulseOut myservo;  // create servo object to control a servo 
int potpin = A0;  // Raccorder le fil de signal du potar sur la pin A0 de l'arduino
int milsignrc = 1510 ;
int signalrc = 2; // Raccorder le fil de signal du récepteur sur la pin 2 de l'arduino
int Valrc;    // variable pour lire le signal RC
int Valpot;  // variable pour lire la valeur du potar
int Val; // variable de calcul de position du servo
void setup() 
{ 
  pinMode(signalrc,INPUT);
  myservo.attach(9);  // raccorder le fil signal vers le servo sur le pin 9 de l'arduino 
} 
 
void loop() 
{ 
  Valrc = pulseIn(signalrc, HIGH);  //mémorise la valeur du signal
  Serial.println(Valrc);
  if (Valrc > (milsignrc + 431) || Valrc < (milsignrc - 431) )   {
    Valrc = milsignrc ;
  }
  Valpot = analogRead(potpin);           // lit la valeur du potar
 
  if (Valrc > (milsignrc - 10) && Valrc < (milsignrc + 10) )   {
    Val = map(Valpot, 0, 1023, 0, 179);
  } else {
    Val = map(Valrc, milsignrc - 430, milsignrc + 430, 0, 179); // transforme la valeur du potar en position de servo 
 
  }
 
  myservo.write(Val);                  // envoi la valeur de positionnement au servo
  delay(10);            // mise en pause pour laisser du temps au servo pour se positionner
 SoftRcPulseOut::refresh();
}

Ce bout de code doit être téléversé dans votre Arduino, mais il vous faudra auparavant récupérer la librairie SoftRcPulseOut.h sur le site https://github.com/RC-Navy/DigisparkArduinoIntegration/tree/master/libraries .
Certaines valeurs ont été calculées suite à des mesures faites sur ma radio FUTABA FC18. Un petit ajustement de la valeur milsignrc sera peut être nécessaire pour d'autres radio des marques GRAUPNER, FUTABA ou encore ROBBE. Pour les émetteurs MULTIPLEX, cette valeur sera d'environ 1600.


Solution simplifiée


Certains voudront une direction pilotée par la sellette, mais ne souhaiterons pas avoir la commande a partir de l'émetteur.
Dans ce cas un simple testeur de servo pourra être utilisé mais rien ne vous empêche de le fabriquer vous même. Pour ceci, vous avez cette page .