mercredi 20 juillet 2011

Commande de la motorisation

Introduction
Après le montage place à la programmation de l'Arduino Car.
Pour le moment, il ne sera malheureusement possible que de se concentrer sur la mise en marche et la commande des trains de direction.

La voiture étant encore dépourvue de détecteurs, il ne peut malheureusement pas interagir avec le monde extérieur.
J'entends par interaction le fait de ne pas aller se jeter bêtement dans dans un mur ou un arbre... mais chaque chose en son temps -);

Quoi qu'il en soit, cela n'empêche pas de préparer un code relativement correcte et faisant preuve d'une certaine lisibilité.


Résultats
Voici la vidéo du résultat obtenu histoire de se mettre un peu l'eau à la bouche ;-)


Informations techniques
Le code à été rédigé de manière à rendre son utilisation la plus "simple" et "évidente" possible.
Ainsi, lorsque les choses se compliquerons un peu, il n'y aura pas lieu de se demander comment on fait avancer la voiture... de simple appels de fonction tel que marche( AVANT, 100 ) (pour une avance à 100% de régime) me simplifiera grandement la vie.

Constantes
J'ai ajouté quelques définitions de constantes pour améliorer la lisibilité du code.
Concernant la direction:
  • DROITE: pour tourner à droite.
  • GAUCHE: pour tourner à gauche. 
  • AUCUN: Pour aller tout droit (abandonner tout changement de direction).
Il est également possible de commander chaque train de direction indépendamment... dans ce cas, j'utilise les constantes AVANT & ARRIERE décrites plus loin pour indiquer le train de direction à commander.

Concernant le déplacement:
  • AVANT: Marche avant OU Commande Direction Avant.
  • ARRIERE:  Marche Arrière OU Commande Direction Arrière
  • ARRET: Passer à l'arrêt
L'instruction marche
Mise en marche du moteur de propulsion dans un sens et a un régime déterminé.

void marche( byte Sens, byte Regime)

Paramètres:
  • Sens: Direction de déplacement (AVANT/ARRIERE/ARRET)
  • Regime: Regime moteur en % (de 0 à 100)
Note:
Pour un arrêt de la marche, il suffit d'indiquer un régime moteur de 0% (peu importe le sens).

L'instruction arret
Signifie l'arrêt du moteur de propulsion!

void arret()

Note:
Effectue l'appel  marche( ARRET, 0 );

L'instruction tourner - première forme
Commande du train de direction avant ou arrière dans le but de faire tourner le véhicule dans une direction désirée (vers la droite ou la gauche).

void tourner( byte Train, byte Direction )

Paramètres:
  • Train: Train de direction à commander (AVANT ou ARRIERE).
  • Direction: Direction que doit prendre le véhicule (DROITE, GAUCHE, ou AUCUN pour "tout droit").
Exemple:
tourner( AVANT, DROITE)

L'instruction tourner - deuxième forme
Coordonne les deux trains de directions (avant et arrière) dans le but de faire tourner le véhicule dans la direction voulue.

void tourner( byte Direction )

Paramètres:
  • Direction: Direction souhaitée pour le véhicule. DROITE, GAUCHE, AUCUN (pour "tout droit")
Exemple:
tourner( GAUCHE )

Code source
Source: ArduinoCar_Test_Moteur.pde
 
Code d'exemple
Dans un premier temps, le code initialise toutes les sorties dans la fonction setup().
Et bien que cela n'est pas conforme à l'utilisation générale d'Arduino, la fonction setup() appelle la fonction de test testMoteur().
En faisant de la sorte, la routine de test ne fonctionne qu'une seule et unique fois (ce qui est bien pratique) et est réactivable en pressant le bouton reset :-)

void setup(){
  // Direction
  pinMode( pinFrontDir1, OUTPUT );
  pinMode( pinFrontDir2, OUTPUT );
  pinMode( pinBackDir1, OUTPUT );
  pinMode( pinBackDir2, OUTPUT );
  // Motor 
  pinMode( pinMotor1, OUTPUT );
  pinMode( pinMotor2, OUTPUT );
  // La commande PWM est assurée à l'aide d'AnalogWrite
  
  testMoteur();
}

void testMoteur() {
  // Avance mis regime apparent
  marche( AVANT, 78 );
  delay( 5000 );
  
  // Demi-tour
  tourner( DROITE );
  marche( AVANT, 78 );
  delay(3200);
  arret();
  tourner( GAUCHE );
  marche( ARRIERE, 78 );
  delay(3200);
  arret();
  tourner( AUCUN );
 
  // Avance rapide
  marche( AVANT, 100 );
  delay( 3000 );
  arret();
  
  // Deplacement de travers
  tourner( AVANT, DROITE );
  tourner( ARRIERE, GAUCHE );
  marche( ARRIERE, 100 );
  delay( 4000 );
  tourner( AVANT, GAUCHE );
  tourner( ARRIERE, DROITE );
  marche( ARRIERE, 1000 );
  delay( 3000 );
  
  // Arret definitif
  arret();
  tourner( AUCUN );
}

Aucun commentaire:

Enregistrer un commentaire