Gestion de la motorisation (part 1) : asservissement des moteurs DC

learn_raspberry_pi_motorPassons aux choses sérieuses, ajoutons à notre Lego de quoi se déplacer !

Intro

Comme précédemment pour les LEDs on passe par le module johnny-five.io. Celui-ci permet de contrôler une puce de type H-Bridge, qui gère jusqu’à deux moteurs DC (sens de rotation et puissance). L’utilisation est très simple, par rapport à la théorie qui nécessite notamment de gérer la fréquence d’une horloge.

Pour gérer un moteur, 3 pins de contrôles sont nécessaires :

  • La première doit être 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 de définir la vitesse de rotation du moteur (plus d’info ici).
  • Les deux autres permettent d’indiquer le sens de rotation

Le code

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

var MOTOR1 = ['GPIO18','GPIO17','GPIO27']; /*PWM0*/

var components = {
 motor: [
  {channel: MOTORDC1, name: 'Propulsion', info: 'hbridge', value: 0}
 ],
 ...
};

Information sur la numérotation des pins

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

board.on("ready", function(){
 ...
 components.motor.forEach(function(motor){
    gpios[motor.id] = new five.Motor(motor.channel);
 });
 ...
};

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 :

  • une puce de type micro contrôleur : la fameuse L293D (0.55€ sur aliexpress.com)
  • un moteur DC de 5 à 12V consommant moins de 600 mA : moteur Lego XL, ref 8882 (11.90€)
  • une alimentation externe 9V à 12V : Boitier de pile Lego 6 piles R6, ref 8881 (7.90€)
  • une breadboard
  • des câbles pour prototypage male/femelle, male/male

Quelques explications,

  • c’est le contrôleur L293D qui nous limite dans le choix du moteur (600mA) et qui nous oblige ainsi à passer par un site « fiable » ou du moins qui précise de manière détaillé les specs de ses moteurs.
  • une alimentation externe est utilisée car nous allons gérer un moteur de 9V/500mA. En règle générale, il est préférable de ne pas trop tirer sur l’alimentation du raspberry pi  afin de s’affranchir d’éventuelles instabilités.
  • Tous les moteurs Lego sont compatibles avec la puce car conçu pour être utilisés avec des piles standard, donc 500mA. Le moteur XL à l’avantage d’être puissant même si il dispose d’une faible vitesse de rotation. Après rien n’empêche de tester avec un M ou un L, en fonction du poids du robot.

What to do ?

Pour comprendre les branchements, on passe par la spécification de la puce :

learn_raspberry_pi_L293D

Le datasheet pour les currieux : l293d.pdf

Du coup on branche :

  1. Côté puce :
    1. La broche 16 à l’alimentation 5V dédiée à la puce (provenant du RPI)
    2. La broche 13 à la masse (GND)
    3. La broche 8 à l’alimentation externe dédiée aux moteurs
  2. Moteur 1 :
    1. La broche 1 à la pin PWM0 (GPIO 18)
    2. Les broches 2 et 7 au pin standard pour la direction (GPIO 17 et 27)
    3. Les broches 3 et 6 au premier moteur
  3. Moteur 2 :
    1. La broche 9 à la pin PWM1 (GPIO 19)
    2. Les broches 10 et 15 au pin standard pour la direction (GPIO 22 et 23)
    3. Les broches 11 et 14 au second moteur

Pour reconnaître le sens de la puce, il faut faire attention à ce que la demi-lune soit en haut. Pour le reste suivre le schéma en faisant attention aux input et output pour ne pas endommager le RPI.

Le RPI ne dispose que de deux pin de type PWM, il est donc possible de gérer indépendamment la vitesse de deux moteurs. Dans le cas où la vitesse n’est pas un problème, on peut synchroniser les deux moteurs en interconnectant les deux broches correspondantes de la puce (et ainsi n’utiliser que un pin PWM)

Ce qui donne en théorie les branchements suivants pour un seul moteur :

l293d-Sketch

Pour deux moteurs l293d-x2-Sketch

La pratique avec un moteur 12555881_1671426633131431_634235288_n

lego-motor-xl

Pour l’installation des moteurs sur le pick-up, un excellent mod a été réalisé par Alexis Vilvert (alias Muuss), avec instruction complète.

Adaptation des connecteurs Lego

Pour brancher les éléments Lego sur notre breadboard, il est nécessaire de couper les nappes à l’aide d’une pince coupante et de dénuder les fils.

Par la suite, il faut comprendre pourquoi il existe 4 fils pour le moteur alors que celui-ci n’en n’a besoin que de 2, et de la même manière pourquoi 4 fils sortent du bloc de pile.

chapitre en cours de rédaction, à compléter

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 :

aligator-web-motor

Dans la deuxième partie de ce post, nous parlerons l’ajout du Servo moteur pour la direction.

tumblr_n0iatyY57p1rpbikxo1_500


Partager

comments powered by Disqus