Raspberry Pi - Moteur DC

Ce tutoriel vous explique comment utiliser Raspberry Pi pour contrôler un moteur à courant continu. En détail, nous apprendrons :

Préparation du matériel

1×Raspberry Pi 4 Model B
1×L298N Motor Driver Module
1×5V DC Motor
1×(Optional) 12V DC Motor
1×5V Power Adapter for 5V DC motor
1×DC Power Jack
1×Jumper Wires
1×(Optional) Screw Terminal Block Shield for Raspberry Pi
1×(Optional) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B
1×(Optional) Plastic Case and Cooling Fan for Raspberry Pi 4B
1×(Optional) HDMI Touch Screen Monitor for Raspberry Pi

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du moteur à courant continu

Brochage du moteur à courant continu

Le moteur à courant continu a deux fils, le fil positif est généralement rouge et le fil négatif est généralement noir.

Brochage du moteur à courant continu

Comment ça marche

Lors de l'achat d'un moteur à courant continu, il est essentiel de comprendre la tension à laquelle il fonctionne. Par exemple, considérons un moteur à courant continu de 12V.

Lorsque vous alimentez le moteur à courant continu de 12V avec une source d'alimentation de 12V :

  • Connectez 12V et GND au fil positif et au fil négatif, respectivement : le moteur à courant continu tournera à vitesse maximale dans le sens horaire.
  • Connectez 12V et GND au fil négatif et au fil positif, respectivement : le moteur à courant continu tournera à vitesse maximale dans le sens antihoraire.

Comme indiqué précédemment, échanger le pôle d'alimentation entre deux fils du moteur à courant continu inversera sa rotation. C’est une façon de contrôler la direction du moteur à courant continu, mais pas par une modification manuelle, mais plutôt par la programmation.

Si la tension de l'alimentation d'un moteur à courant continu est inférieure à 12V, il tournera toujours, mais pas à sa vitesse maximale. Cela signifie qu'en modifiant la tension, nous pouvons altérer la vitesse du moteur à courant continu. Cependant, cette approche n'est généralement pas utilisée en raison de la difficulté à contrôler la tension de la source d'alimentation. Par conséquent, la tension de la source d'alimentation est maintenue constante et la vitesse du moteur à courant continu est régulée par un signal PWM. Plus le cycle de travail du PWM est important, plus le moteur à courant continu tournera vite.

Comment contrôler un moteur à courant continu

Comment contrôler un moteur à courant continu avec un Raspberry Pi

Le contrôle d'un moteur à courant continu implique deux facteurs : la vitesse et la direction. Le Raspberry Pi peut produire un signal PWM, mais ce signal a une tension et un courant faibles, il ne peut donc pas être utilisé pour contrôler le moteur. Nous devons utiliser un pilote matériel entre le Raspberry Pi et le moteur à courant continu. Le pilote effectue deux tâches :

  • Amplification du signal PWM du Raspberry Pi (en termes de courant et de tension) pour le contrôle de la vitesse
  • Réception du signal de commande du Raspberry Pi pour inverser la polarité de l'alimentation pour le contrôle de direction.
Contrôle du moteur CC avec Raspberry Pi

※ Note:

  • Ce tutoriel peut être utilisé pour n'importe quel moteur à courant continu. Nous utiliserons un moteur à courant continu de 12V comme exemple.
  • Lors du contrôle d'un moteur à courant continu de 5V, bien que la broche du Raspberry Pi délivre 5V (ce qui est la même tension que le moteur à courant continu), un pilote est toujours nécessaire entre le Raspberry Pi et le moteur à courant continu car la broche du Raspberry Pi ne peut pas fournir assez de courant pour le moteur à courant continu.

Il existe plusieurs types de puces et de modules qui peuvent être utilisés comme pilotes pour contrôler les moteurs à courant continu. Dans ce tutoriel, nous allons utiliser un module appelé L298N.

À propos du pilote L298N

Le pilote L298N peut être utilisé pour manipuler un moteur à courant continu et un moteur pas à pas. Ce tutoriel vous explique comment l'utiliser pour gérer le moteur à courant continu.

Brochage du pilote L298N

Brochage du pilote L298N

Le pilote L298N est capable de contrôler simultanément et indépendamment deux moteurs à courant continu, appelés moteur A et moteur B. Ce pilote a un total de 13 broches.

Les broches communes pour les deux moteurs :

  • Broche VCC : Cette broche fournit de l'énergie au moteur et peut aller de 5V à 35V.
  • Broche GND : Cette broche est connectée à la masse (0V) et sert de masse commune.
  • Broche 5V : Cette broche alimente le module L298N et peut être alimentée par la sortie 5V d'un Raspberry Pi.

Broches du moteur A (Canal A):

  • Broches ENA : Ces broches sont utilisées pour réguler la vitesse du moteur A. En retirant le cavalier et en connectant cette broche à une entrée PWM, nous pouvons contrôler la vitesse du moteur A.
  • Broches IN1 & IN2 : Ces broches sont responsables du contrôle de la direction de rotation du moteur A. Lorsque l'une d'elles est réglée sur HIGH et l'autre sur LOW, le moteur A tourne. Si les deux entrées sont soit HIGH soit LOW, le moteur A cesse de bouger.
  • Broches OUT1 & OUT2 : Ces broches sont connectées au moteur A.

Broches du moteur B (Canal B) :

  • Lorsque les entrées IN3 et IN4 sont HAUTES ou BASSES, le moteur B tournera et les broches OUT3 et OUT4 fourniront le courant au moteur.
  • Broches ENB : peuvent être utilisées pour gérer la vitesse du moteur B. En retirant le cavalier et en connectant cette broche à l'entrée PWM, nous pouvons contrôler la vitesse du moteur B.
  • Broches IN3 et IN4 : sont responsables du contrôle de la direction de rotation du moteur B. Lorsque l'une d'elles est HAUTE et l'autre est BASSE, le moteur B tournera. Si les deux entrées sont soit HAUTES, soit BASSES, le moteur B cesse de bouger.
  • Broches OUT3 et OUT4 : sont reliées au moteur B. Lorsque les entrées IN3 et IN4 sont HAUTES ou BASSES, le moteur B tournera et les broches OUT3 et OUT4 fourniront le courant au moteur.

Le pilote L298N a deux sources d'alimentation d'entrée :

  • Un pour le moteur à courant continu (broches VCC et GND) allant de 5 à 35 V.
  • Un pour le fonctionnement interne du module L298N (broches 5V et GND) avec une plage de tension de 5 à 7 V.

Retirez tous les cavaliers du pilote L298N pour plus de simplicité. Cela est nécessaire car les cavaliers sont utilisés pour des usages avancés ou à d'autres fins.

Nous pouvons gérer deux moteurs à courant continu de manière indépendante et simultanée en utilisant un Raspberry Pi et un pilote L298N. Pour gérer chaque moteur, nous avons seulement besoin de trois broches du Raspberry Pi.

※ Note:

Le reste de ce tutoriel se concentrera sur le contrôle d'un moteur à courant continu en utilisant le canal A. Des étapes similaires peuvent être suivies pour contrôler l'autre moteur à courant continu.

Comment contrôler la vitesse d'un moteur à courant continu via un pilote L298N

Il est facile d'ajuster la vitesse d'un moteur à courant continu en produisant un signal PWM vers la broche ENA du L298N. Cela peut être fait en :

  • Connecter une broche Raspberry Pi à l'ENA du L298N
  • Générer un signal PWM vers la broche ENA en utilisant la fonction pwm.ChangeDutyCycle(). Le pilote L298N amplifie le signal PWM pour le moteur à courant continu.
pwm.ChangeDutyCycle(speed) # la vitesse est une valeur de 0 à 100

La vitesse est comprise entre 0 et 100. Lorsque la vitesse est de 0, le moteur ne bouge pas. Lorsque la vitesse est de 100, le moteur tourne à sa vitesse maximale.

Comment contrôler la direction d'un moteur à courant continu via un pilote L298N

La rotation d'un moteur peut être gérée en appliquant une logique HAUTE/BASSE aux broches IN1 et IN2. Le tableau ci-dessous montre comment contrôler la direction dans les deux canaux.

IN1 pin IN2 pin Direction
LOW LOW Motor A stops
HIGH HIGH Motor A stops
HIGH LOW Motor A spins Clockwise
LOW HIGH Motor A spins Anti-Clockwise

En conséquence :

  • Raspberry Pi pour contrôler le moteur A dans le sens horaire.
GPIO.output(IN1_PIN, GPIO.HIGH) # Sortie GPIO sur IN1_PIN à l'état HAUT GPIO.output(IN2_PIN, GPIO.LOW) # Sortie GPIO sur IN2_PIN à l'état BAS
  • Raspberry Pi pour contrôler le moteur A dans le sens antihoraire.
GPIO.output(IN1_PIN, GPIO.LOW) # Mettre la sortie IN1_PIN à LOW GPIO.output(IN2_PIN, GPIO.HIGH) # Mettre la sortie IN2_PIN à HIGH

※ Note:

La rotation du moteur peut être inversée en connectant les broches OUT1 et OUT2 à deux broches du moteur à courant continu de manière opposée. Pour ce faire, il est nécessaire soit d'inverser les broches OUT1 et OUT2, soit de modifier le signal de contrôle sur les broches IN1 et IN2 dans le code.

Comment arrêter la rotation d'un moteur à courant continu

Deux méthodes pour arrêter un moteur à courant continu sont :

  • Réduire la vitesse à zéro
pwm.ChangeDutyCycle(0) # Changer le cycle de service à 0
  • Définit les broches IN1 et IN2 sur la même valeur, soit BASSE, soit HAUTE.
GPIO.output(IN1_PIN, GPIO.LOW) GPIO.output(IN2_PIN, GPIO.LOW)
  • Ou
GPIO.output(IN1_PIN, GPIO.HIGH) # Sortie du signal pour le PIN IN1 à HAUT GPIO.output(IN2_PIN, GPIO.HIGH) # Sortie du signal pour le PIN IN2 à HAUT

Comment contrôler un moteur à courant continu à l'aide d'un pilote L298N.

Schéma de Câblage

Retirez les trois cavaliers du module L298N avant de le connecter.

Schéma de câblage du driver de moteur DC L298N pour Raspberry Pi

This image is created using Fritzing. Click to enlarge image

Pour simplifier et organiser votre câblage, nous vous recommandons d'utiliser un Screw Terminal Block Shield pour Raspberry Pi. Ce shield garantit des connexions plus sûres et plus faciles à gérer, comme illustré ci-dessous :

Raspberry Pi Screw Terminal Block Shield

Code de Raspberry Pi

Nous allons écrire du code Python qui s'exécute sur un Raspberry Pi pour effectuer les actions suivantes :

  • Augmente la vitesse d'un moteur à courant continu
  • Modifie la direction
  • Diminue la vitesse d'un moteur à courant continu
  • Arrête le moteur

Étapes rapides

  • Retirez les trois cavaliers du module L298N.
  • Assurez-vous d'avoir Raspbian ou tout autre système d'exploitation compatible avec le Raspberry Pi installé sur votre Pi.
  • Assurez-vous que votre Raspberry Pi est connecté au même réseau local que votre PC.
  • Assurez-vous que votre Raspberry Pi est connecté à Internet si vous avez besoin d'installer des bibliothèques.
  • Si c'est la première fois que vous utilisez un Raspberry Pi, consultez Installation du logiciel - Raspberry Pi..
  • Connectez votre PC au Raspberry Pi via SSH en utilisant le client SSH intégré sous Linux et macOS ou PuTTY sous Windows. Consultez comment connecter votre PC au Raspberry Pi via SSH.
  • Assurez-vous que vous avez la bibliothèque RPi.GPIO installée. Si ce n'est pas le cas, installez-la en utilisant la commande suivante :
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Créez un fichier de script Python dc_motor.py et ajoutez le code suivant :
# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi est mis à disposition du public sans aucune restriction. # Pour des instructions complètes et des schémas de câblage, veuillez visiter: # https://newbiely.fr/tutorials/raspberry-pi/raspberry-pi-dc-motor import RPi.GPIO as GPIO import time # Constants ENA_PIN = 25 # GPIO pin connected to the EN1 pin L298N IN1_PIN = 8 # GPIO pin connected to the IN1 pin L298N IN2_PIN = 7 # GPIO pin connected to the IN2 pin L298N # Setup GPIO.setmode(GPIO.BCM) GPIO.setup(ENA_PIN, GPIO.OUT) GPIO.setup(IN1_PIN, GPIO.OUT) GPIO.setup(IN2_PIN, GPIO.OUT) # Create PWM object pwm = GPIO.PWM(ENA_PIN, 100) # 100 Hz frequency # Main loop try: while True: # Motor A spins clockwise GPIO.output(IN1_PIN, GPIO.HIGH) GPIO.output(IN2_PIN, GPIO.LOW) # Increase speed gradually for speed in range(0, 101): pwm.ChangeDutyCycle(speed) time.sleep(0.01) time.sleep(1) # Rotate at maximum speed for 1 second in clockwise direction # Change direction to anti-clockwise GPIO.output(IN1_PIN, GPIO.LOW) GPIO.output(IN2_PIN, GPIO.HIGH) time.sleep(1) # Rotate at maximum speed for 1 second in anti-clockwise direction # Decrease speed gradually for speed in range(100, -1, -1): pwm.ChangeDutyCycle(speed) time.sleep(0.01) time.sleep(1) # Stop motor for 1 second except KeyboardInterrupt: pass finally: # Stop PWM and cleanup GPIO on program exit pwm.stop() GPIO.cleanup()
  • Enregistrez le fichier et exécutez le script Python en entrant la commande suivante dans le terminal :
python3 dc_motor.py

Le script s'exécute en boucle infinie jusqu'à ce que vous appuyiez sur Ctrl + C dans le terminal.

Vous observerez :

  • Le moteur à courant continu va accélérer, puis tourner à sa vitesse maximale pendant 1 seconde.
  • La direction du moteur à courant continu sera changée.
  • Le moteur à courant continu tournera à sa vitesse maximale dans le sens opposé pendant 1 seconde.
  • Le moteur à courant continu va décélérer.
  • Le moteur à courant continu restera immobile pendant 1 seconde.
  • Ce processus sera répété en continu.

※ Note:

Ce tutoriel vous explique comment ajuster la vitesse d'un moteur à courant continu par rapport à sa vitesse maximale. Pour contrôler la vitesse absolue (rotations par seconde), nous devons utiliser un contrôleur PID et un encodeur. Le contrôle de la vitesse absolue du moteur à courant continu sera abordé dans un autre tutoriel.

Vidéo

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!