.. note::
Bonjour et bienvenue dans la communauté SunFounder Raspberry Pi, Arduino et ESP32 sur Facebook ! Plongez plus profondément dans l'univers du Raspberry Pi, Arduino et ESP32 avec d'autres passionnés.
**Pourquoi nous rejoindre ?**
- **Support d'experts** : Résolvez les problèmes après-vente et surmontez les défis techniques avec l'aide de notre communauté et de notre équipe.
- **Apprendre & Partager** : Échangez des conseils et des tutoriels pour perfectionner vos compétences.
- **Aperçus exclusifs** : Bénéficiez d'un accès anticipé aux nouvelles annonces de produits et aux avant-premières.
- **Réductions spéciales** : Profitez de réductions exclusives sur nos nouveaux produits.
- **Promotions festives et cadeaux** : Participez à des concours et à des promotions spéciales lors des fêtes.
👉 Prêt à explorer et à créer avec nous ? Cliquez sur [|link_sf_facebook|] pour nous rejoindre dès aujourd'hui !
.. _2.1.4_py_pi5:
2.1.4 Potentiomètre
=======================
.. note::
.. image:: ../img/mcp3008_and_adc0834.jpg
:width: 25%
:align: left
Selon la version de votre kit, identifiez si vous disposez du **ADC0834** ou du **MCP3008** et suivez la section correspondante.
Introduction
----------------
La fonction ADC (convertisseur analogique-numérique) est utilisée pour convertir
des signaux analogiques en signaux numériques. Dans cette expérience, le module
ADC0834 est employé pour réaliser cette fonction. Ici, nous illustrons ce processus
en utilisant un potentiomètre. Le potentiomètre modifie la grandeur physique (la tension),
qui est ensuite convertie par l'ADC.
Composants nécessaires
--------------------------
Pour ce projet, nous aurons besoin des composants suivants.
.. image:: ../python_pi5/img/2.1.7_potentiometer_list.png
.. Il est très pratique d'acheter un kit complet, voici le lien :
.. .. list-table::
.. :widths: 20 20 20
.. :header-rows: 1
.. * - Nom
.. - COMPOSANTS DANS CE KIT
.. - LIEN
.. * - Kit Raphael
.. - 337
.. - |link_Raphael_kit|
.. Vous pouvez également les acheter séparément via les liens ci-dessous.
.. .. list-table::
.. :widths: 30 20
.. :header-rows: 1
.. * - INTRODUCTION DES COMPOSANTS
.. - LIEN D'ACHAT
.. * - :ref:`gpio_extension_board`
.. - |link_gpio_board_buy|
.. * - :ref:`breadboard`
.. - |link_breadboard_buy|
.. * - :ref:`wires`
.. - |link_wires_buy|
.. * - :ref:`resistor`
.. - |link_resistor_buy|
.. * - :ref:`led`
.. - |link_led_buy|
.. * - :ref:`potentiometer`
.. - |link_potentiometer_buy|
.. * - :ref:`adc0834`
.. - \-
Schéma de circuit
----------------------
.. image:: ../python_pi5/img/2.1.7_potentiometer_second_1.png
.. image:: ../python_pi5/img/2.1.7_potentiometer_second_2.png
Procédure expérimentale
--------------------------
**Étape 1 :** Construisez le circuit.
.. image:: ../python_pi5/img/2.1.7_Potentiometer_circuit.png
.. note::
Placez le composant en vous référant à la position correspondante indiquée
sur l'image. Notez que l'encoche sur le composant doit être orientée vers
la gauche lorsqu'il est en place.
**Étape 2 :** Ouvrez le fichier de code.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/python-pi5
**Étape 3 :** Exécutez le code.
.. raw:: html
.. code-block::
sudo python3 2.1.4_Potentiometer.py
Une fois le code exécuté, tournez le bouton du potentiomètre, l'intensité de
la LED changera en conséquence.
.. warning::
En cas d'erreur ``RuntimeError: Cannot determine SOC peripheral base address``, veuillez consulter :ref:`faq_soc`.
**Code**
.. note::
Vous pouvez **Modifier/Réinitialiser/Copier/Exécuter/Arrêter** le code ci-dessous. Mais avant cela, assurez-vous de vous rendre dans le répertoire source, tel que ``davinci-kit-for-raspberry-pi/python-pi5``. Après modification, vous pouvez exécuter le code pour observer le résultat.
.. raw:: html
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import PWMLED
import ADC0834
import time
# Initialiser une LED PWM sur la broche GPIO 22
led = PWMLED(22)
# Configurer le module ADC0834
ADC0834.setup()
def MAP(x, in_min, in_max, out_min, out_max):
"""
Map a value from one range to another.
:param x: The value to be mapped.
:param in_min: The lower bound of the value's current range.
:param in_max: The upper bound of the value's current range.
:param out_min: The lower bound of the value's target range.
:param out_max: The upper bound of the value's target range.
:return: The mapped value.
"""
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
try:
while True:
# Lire la valeur actuelle du module ADC0834
res = ADC0834.getResult()
print('res = %d' % res)
# Convertir la valeur de l'ADC en une plage adaptée pour régler la luminosité de la LED
R_val = MAP(res, 0, 255, 0, 100)
# Régler la luminosité de la LED
led.value = float(R_val / 100)
# Attendre 0,2 secondes avant la prochaine lecture
time.sleep(0.2)
# Sortie propre lors de l'appui sur 'Ctrl+C'
except KeyboardInterrupt:
led.value = 0 # Éteindre la LED
**Explication du code**
#. ``gpiozero`` est utilisé pour contrôler la LED PWM, ``ADC0834`` pour la conversion analogique-numérique, et ``time`` pour les temporisations.
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import PWMLED
import ADC0834
import time
#. Initialisez une LED PWM connectée à la broche GPIO 22 et configurez le convertisseur ADC0834.
.. code-block:: python
# Initialiser une LED PWM sur la broche GPIO 22
led = PWMLED(22)
# Configurer le module ADC0834
ADC0834.setup()
#. Définissez une fonction appelée ``MAP`` pour convertir une plage de valeurs en une autre, utile pour ajuster les niveaux de luminosité de la LED en fonction des valeurs de l'ADC.
.. code-block:: python
def MAP(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
#. Lisez continuellement la valeur de l'ADC, ajustez la luminosité de la LED en conséquence et implémentez un délai de 0,2 secondes pour améliorer la stabilité.
.. code-block:: python
try:
while True:
# Get the current reading from the ADC0834 module
res = ADC0834.getResult()
print('res = %d' % res)
# Map the ADC value to a range suitable for setting LED brightness
R_val = MAP(res, 0, 255, 0, 100)
# Set the LED brightness
led.value = float(R_val / 100)
# Wait for 0.2 seconds before reading again
time.sleep(0.2)
# Sortie propre lors de l'appui sur 'Ctrl+C'
except KeyboardInterrupt:
led.value = 0 # Éteindre la LED