.. note::
Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l'univers des Raspberry Pi, Arduino et ESP32 avec d'autres passionnés.
**Pourquoi rejoindre ?**
- **Support d'experts** : Résolvez les problèmes après-vente et les défis techniques avec l'aide de notre communauté et de notre équipe.
- **Apprendre et partager** : Échangez des astuces et des tutoriels pour améliorer vos compétences.
- **Aperçus exclusifs** : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus.
- **Réductions spéciales** : Profitez de réductions exclusives sur nos produits les plus récents.
- **Promotions festives et cadeaux** : Participez à des cadeaux et des promotions de vacances.
👉 Prêt à explorer et à créer avec nous ? Cliquez [|link_sf_facebook|] et rejoignez-nous aujourd'hui !
.. _1.3.1_py:
1.3.1 Moteur
================
Introduction
-------------------
Dans ce projet, nous allons apprendre à utiliser le L293D pour piloter un moteur à courant continu
et le faire tourner dans le sens horaire et antihoraire. Étant donné que le moteur à courant continu
nécessite un courant plus élevé, par mesure de sécurité, nous utilisons ici le module d'alimentation
pour alimenter les moteurs.
Composants Nécessaires
--------------------------------
Pour ce projet, nous avons besoin des composants suivants.
.. image:: ../img/list_1.3.1.png
Il est certainement pratique d'acheter un kit complet, voici le lien :
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nom
- ARTICLES DANS CE KIT
- LIEN
* - Kit Raphael
- 337
- |link_Raphael_kit|
Vous pouvez également les acheter séparément à partir des liens ci-dessous.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUCTION AUX COMPOSANTS
- LIEN D'ACHAT
* - :ref:`cpn_gpio_extension_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_power_module`
- \-
* - :ref:`cpn_l293d`
- \-
* - :ref:`cpn_motor`
- |link_motor_buy|
Schéma de Principe
----------------------
Branchez le module d'alimentation sur la breadboard et insérez le cavalier sur la broche 5V,
il fournira alors une tension de 5V. Connectez la broche 1 du L293D au GPIO22 et définissez-la
comme niveau haut. Connectez la broche 2 au GPIO27 et la broche 7 au GPIO17, puis définissez
l'une des broches en haut et l'autre en bas. Ainsi, vous pouvez changer le sens de rotation du moteur.
.. image:: ../img/image336.png
**Procédures Expérimentales**
**Étape 1 :** Construisez le circuit.
.. image:: ../img/image117.png
.. note::
Le module d'alimentation peut appliquer une batterie 9V avec le connecteur de batterie 9V dans
le kit. Insérez le cavalier du module d'alimentation dans les bandes de bus 5V de la breadboard.
.. image:: ../img/image118.jpeg
**Étape 2 :** Accédez au dossier du code.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python
**Étape 3 :** Exécutez.
.. raw:: html
.. code-block::
sudo python3 1.3.1_Motor.py
Lorsque le code s'exécute, le moteur tourne d'abord dans le sens horaire pendant 5s puis s'arrête
pendant 5s, ensuite, il tourne dans le sens antihoraire pendant 5s ; ensuite, le moteur s'arrête
pendant 5s. Cette série d'actions sera exécutée en boucle.
**Code**
.. note::
Vous pouvez **Modifier/Réinitialiser/Copier/Exécuter/Arrêter** le code ci-dessous. Mais avant cela, vous devez vous rendre dans le chemin du code source comme ``raphael-kit/python``. Après avoir modifié le code, vous pouvez l'exécuter directement pour voir l'effet.
.. raw:: html
.. code-block:: python
import RPi.GPIO as GPIO
import time
# Set up pins
MotorPin1 = 17
MotorPin2 = 27
MotorEnable = 22
def setup():
# Set the GPIO modes to BCM Numbering
GPIO.setmode(GPIO.BCM)
# Set pins to output
GPIO.setup(MotorPin1, GPIO.OUT)
GPIO.setup(MotorPin2, GPIO.OUT)
GPIO.setup(MotorEnable, GPIO.OUT, initial=GPIO.LOW)
# Define a motor function to spin the motor
# direction should be
# 1(clockwise), 0(stop), -1(counterclockwise)
def motor(direction):
# Clockwise
if direction == 1:
# Set direction
GPIO.output(MotorPin1, GPIO.HIGH)
GPIO.output(MotorPin2, GPIO.LOW)
# Enable the motor
GPIO.output(MotorEnable, GPIO.HIGH)
print ("Clockwise")
# Counterclockwise
if direction == -1:
# Set direction
GPIO.output(MotorPin1, GPIO.LOW)
GPIO.output(MotorPin2, GPIO.HIGH)
# Enable the motor
GPIO.output(MotorEnable, GPIO.HIGH)
print ("Counterclockwise")
# Stop
if direction == 0:
# Disable the motor
GPIO.output(MotorEnable, GPIO.LOW)
print ("Stop")
def main():
# Define a dictionary to make the script more readable
# CW as clockwise, CCW as counterclockwise, STOP as stop
directions = {'CW': 1, 'CCW': -1, 'STOP': 0}
while True:
# Clockwise
motor(directions['CW'])
time.sleep(5)
# Stop
motor(directions['STOP'])
time.sleep(5)
# Anticlockwise
motor(directions['CCW'])
time.sleep(5)
# Stop
motor(directions['STOP'])
time.sleep(5)
def destroy():
# Stop the motor
GPIO.output(MotorEnable, GPIO.LOW)
# Release resource
GPIO.cleanup()
# If run this script directly, do:
if __name__ == '__main__':
setup()
try:
main()
# When 'Ctrl+C' is pressed, the program
# destroy() will be executed.
except KeyboardInterrupt:
destroy()
**Explication du Code**
.. code-block:: python
def motor(direction):
# Clockwise
if direction == 1:
# Set direction
GPIO.output(MotorPin1, GPIO.HIGH)
GPIO.output(MotorPin2, GPIO.LOW)
# Enable the motor
GPIO.output(MotorEnable, GPIO.HIGH)
print ("Clockwise")
...
Créer une fonction, ``motor()``, dont la variable est direction. Lorsque
la condition direction=1 est remplie, le moteur tourne dans le sens horaire ; quand
direction=-1, le moteur tourne dans le sens antihoraire ; et lorsque
la condition direction=0 est remplie, il cesse de tourner.
.. code-block:: python
def main():
# Define a dictionary to make the script more readable
# CW as clockwise, CCW as counterclockwise, STOP as stop
directions = {'CW': 1, 'CCW': -1, 'STOP': 0}
while True:
# Clockwise
motor(directions['CW'])
time.sleep(5)
# Stop
motor(directions['STOP'])
time.sleep(5)
# Anticlockwise
motor(directions['CCW'])
time.sleep(5)
# Stop
motor(directions['STOP'])
time.sleep(5)
Dans la fonction main(), créer un tableau, directions[], dans lequel CW est
égal à 1, la valeur de CCW est -1, et le nombre 0 correspond à Stop.
Lorsque le code s'exécute, le moteur tourne d'abord dans le sens horaire pendant 5s puis s'arrête pendant
5s, ensuite, il tourne dans le sens antihoraire pendant 5s ; ensuite, le moteur
s'arrête pendant 5s. Cette série d'actions sera exécutée en boucle.
Maintenant, vous devriez voir la pale du moteur tourner.
Image du Phénomène
------------------
.. image:: ../img/image119.jpeg