Gestion de la motorisation (part 2) : asservissement des servo moteur

tower-pro-sg90Pour gérer la direction du véhicule il va être nécessaire de mettre en place un servo moteur.

Intro

Le problème de l’utilisation d’un moteur DC classique, c’est que l’on ne connait pas sa position actuel. En effet, le problème de la gestion de la direction est de pouvoir revenir à une position centrale afin d’avancer tout droit. Pour cela, deux possibilités :

  • Utiliser un elastic permettant, lorsque le moteur DC ne tourne pas dans un sens ou dans un autre, de revenir au milieu
  • Utiliser un moteur auquel il est possible de lui indiquer une position : un servo moteur

Afin de simplifier la vie (niveau montage et précision), j’ai choisi d’utiliser un Servo.

Pour gérer un moteur de type Servo, une seule pin de contrôle est nécessaire :

  • Une pin de type PWM (Pulse Width Modulation). Il en existe 2 sur les modèles B+/2 : le GPIO18 et le GPIO19. Ce type de pin va permettre d’indiquer la position souhaité du moteur.

Le code

Comme d’habitude on passe par le module johnny-five.io. Qui permet de contrôler le moteur nativement (delta un petit réglage).

Comme à l’accoutumé, on déclare le nouveau composant :

var MOTORSERVO1 = 'GPIO19'; /*PWM1*/
var components = {
 servo: [
   {channel: MOTORSERVO1, name: 'Direction Servo', info: 'SG90', value: 0}
 ],
 ...
};

Information sur la numérotation des pins

puis on l’initialise au chargement de la « board » :

board.on("ready", function(){
 ...
 components.servo.forEach(servo => {
   gpios[servo.id] = new five.Servo({
     pin: servo.channel, 
     pwmRange: [500,2400],
     startAt: 90
   });
 ...
};

Avec les valeurs par défaut le moteur ne tourne que de 90°, il est nécessaire pour disposer des 180° effectif de régler la largeur de la période du PWM. Après quelques tests, les valeurs concluantes sont ceux indiqués ici : 500 à 2400 ms.

Plus de détail sur le code sur github : https://github.com/achorein/aligator

 

L’électronique

Matériel

Niveau électronique nous avons besoin de plusieurs choses :

  • un moteur Servo :
    • Dans notre cas, un de 5V car sera branché sur l’alimentation du RPI : le SG-90 (< 5€)
    • Ou sinon un moteur entre 9 et 12V pour le câbler à l’alimentation des moteurs Lego : Lego Servo ref 8804 (25€)
  • du fil de fer fin pour l’intégration avec le Lego
  • une breadboard
  • des câbles pour prototypage male/femelle, male/male

 

Branchement

Ce qui donne en théorie les branchements suivants (plutôt simple) :

Servo-Sketch

Adaptation au Lego

L’avantage du Servo c’est qu’il est fourni avec une hélice trouée. Il est alors facile de fixer le moteur à un engrenage Lego avec du fil de fer.

servo-1

Une fois cela fait, on ajoute un petit socle pour le maintenir en position et on le branche en direct sur l’axe de direction (sous la cabine du pickup)

servo-2

Test

Il ne reste plus qu’à tester tout ça. Comme d’habitude on lance le serveur à l’aide de la commande « sudo npm start ».

Ensuite, direction l’interface Web (légèrement adaptée pour le coup) avec son navigateur ou son téléphone pour contrôler les moteurs :

 

Dans la troisième partie de ce post, nous parlerons de la mise en place de l’interface web de pilotage du Lego Technic.

 


Partager

comments powered by Disqus