.. 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