jeudi 9 février 2017

Scratch sur Raspberry Pi (4): Contrôler un moteur cc

Après avoir appris comment faire clignoter une LED, comment lire un bouton poussoir et comment faire varier l'intensité lumineuse d'une LED, nous allons aujourd'hui contrôler un moteur à courant continu grâce au logiciel Scratch sur un Raspberry Pi.  Au moyen des touches du clavier, nous pourrons faire tourner le moteur et modifier sa vitesse ainsi que le sens de sa rotation­.



Matériel nécessaire

En plus d'un Raspberry Pi et d'un petit moteur électrique, nous aurons besoin d'une source d'alimentation pour le moteur (une pile, par exemple) et d'un circuit appelé "pont en H" spécialement conçu pour contrôler un moteur.  Je vous recommande l'utilisation d'une petite carte prête à l'emploi et comportant un L298N, tel qu'illustré ci-contre (si vous préférez, vous pouvez aussi utiliser un circuit intégré L293D).

Contrairement au Raspberry Pi, ces circuits intégrés sont capables de supporter les courants intenses qui sont nécessaires provoquer la rotation du moteur.   Ne branchez pas votre moteur directement aux pins GPIO du Raspberry Pi:  vous risqueriez d'endommager votre Rasbperry Pi!



Fabrication du circuit

La carte L298 permet de contrôler deux moteurs (ce qui est pratique, par exemple, pour le contrôle d'une plateforme robotique), mais nous nous contenterons aujourd'hui d'un seul moteur.

Les connexions qu'il faut faire sont illustrées ci-dessous:

  • Le moteur est branché dans les sorties OUT1 et OUT2 du module L298
  • La borne positive de l'alimentation pour le moteur est branchée dans l'entrée +12 V du module L298 (l'alimentation peut être inférieure à 12 V)
  • La borne négative de l'alimentation pour le moteur est branchée dans l'entrée GND du module L298.
  • Une des pins GND du Raspberry Pi est branchée dans l'entrée GND du module L298.
  • La pin BCM 23 du Raspberry Pi est branchée dans l'entrée IN1 du module L298.
  • La pin BCM 24 du Raspberry Pi est branchée dans l'entrée IN2 du module L298.
  • La pin BCM 25 du Raspberry Pi est branchée dans l'entrée ENA du module L298.



Si vous préférez utiliser un circuit intégré L293, voici le schéma du circuit.



Construction du programme

Le temps est venu de démarrer le logiciel Scratch (il se trouve dans la section "Programmation").

Notre programme va comporter 6 parties:
  1. Ce qui doit être fait au démarrage du programme, lorsqu'on clique sur le drapeau
  2. Ce qui doit être fait lorsqu'on appuie sur la touche "espace" (arrêt du moteur)
  3. Ce qui doit être fait lorsqu'on appuie sur la flèche vers le haut (augmentation de la vitesse)
  4. Ce qui doit être fait lorsqu'on appuie sur la flèche vers le bas (diminution de la vitesse)
  5. Ce qui doit être fait lorsqu'on appuie sur la flèche vers la droite (marche avant)
  6. Ce qui doit être fait lorsqu'on appuie sur la flèche vers la gauche (marche arrière)
Commençons par ce que doit faire le programme lorsqu'on clique sur le drapeau...


Nous envoyons le message "gpioserveron" qui démarre le serveur GPIO (ce qui permettra à Scratch d'interagir avec les entrées et les sorties du Raspberry Pi).


Ensuite, nous définissons la pin 25 comme une sortie PWM, ce qui signifie qu'elle alternera très rapidement entre 0 et 3,3 V.  Pour ce faire, nous envoyons le message "config25outputpwm".  Dans l'article précédent, le signal PWM servait à contrôler la luminosité d'une LED.  Ici, le signal PWM servira à contrôler la vitesse du moteur.


Cette vitesse sera stockée dans une variable que nous nommons "vitesse" (cliquez sur le bouton "Nouvelle variable" dans la catégorie "Variables".


Au démarrage du programme, nous donnons à la variable "vitesse" la valeur 50 (ce qui est une vitesse moyenne).

...et nous réglons le moteur à cette vitesse:


Nous configurons maintenant la pin 23 comme une sortie, grâce au message "config23out".  Il s'agit d'une sortie conventionnelle, et non d'une sortie PWM (sa tension conservera une valeur stable de 3,3 V ou de 0 V, sans oscillation rapide).


Au départ, nous réglons cette sortie à "off" (0 volt).



Même chose pour la pin 24:  nous en faisons une sortie, que nous réglons ensuite à off:


C'est terminé pour la partie du programme qui s'exécute au démarrage.

Occupons-nous maintenant de ce que le programme doit faire lorsqu'on appuie sur la touche "flèche vers le haut" ou "flèche vers le bas" sur le clavier.  Cette partie est identique à ce que nous avions fait dans le dernier article, pour rendre la LED plus brillante ou moins brillante.

Quand nous appuyons sur la flèche vers le haut, la valeur de la variable vitesse augmente de 10, et nous faisons tourner le moteur à cette vitesse.  Lorsque nous appuyons sur la flèche vers le bas, la valeur de la variable "vitesse" diminue de 10.



La touche "flèche vers la droite" mettra le moteur en marche avant, alors que la touche "flèche vers la droite" le mettra en marche arrière.  Pour que le moteur tourne, il faut qu'une (et seulement une) des pins 23 et 24 soit "on".



La touche "espace" permettra d'arrêter le moteur.  Pour ce faire, il s'agit de mettre à "off" les pins 23 et 24.

Le programme est terminé!

Mise à l'essai du programme

Après avoir cliqué sur le bouton en forme de drapeau afin de démarrer le programme, appuyez sur la flèche vers la droite pour faire tourner le moteur.  Le moteur changera de direction quand vous appuyez sur la flèche vers la gauche.  Il tournera plus vite si vous appuyez sur la flèche vers le haut, et moins vite si vous appuyez sur la flèche vers le bas.  Il s'arrêtera si vous appuyez sur la barre d'espacement.

Yves Pelletier   (TwitterFacebook)


1 commentaire:

  1. Bonjour,
    Excellent article.
    J'ai fais plusieurs tests concluants jusqu'à l'étape de la modulation PWM...
    Mon montage est bon car tout fonctionne en python mais pas avec scratch.
    J'ai essayé plusieurs méthodes dont le passage mise à jour raspbian (jessie), essai avec scratch2 mais rien n'y fait ...
    Auriez-vous une idée ?

    RépondreSupprimer