.. 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 ! .. _2.1.7_py: 2.1.7 Potentiomètre ===================== .. note:: .. image:: ../img/mcp3008_and_adc0834.jpg :width: 25% :align: left Selon la version de votre kit, identifiez si vous disposez d’un **ADC0834** ou d’un **MCP3008** et suivez la section correspondante. Introduction -------------- La fonction ADC peut être utilisée pour convertir des signaux analogiques en signaux numériques. Dans cette expérience, l'ADC0834 est utilisé pour obtenir cette fonction ADC. Nous mettons en œuvre ce processus en utilisant un potentiomètre. Le potentiomètre modifie la quantité physique - la tension, qui est convertie par la fonction ADC. Composants Nécessaires ------------------------ Pour ce projet, nous avons besoin des composants suivants : .. image:: ../img/list_2.1.4_potentiometer.png Il est très pratique d'acheter un kit complet, voici le lien : .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nom - ÉLÉMENTS 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:`cpn_gpio_extension_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_led` - |link_led_buy| * - :ref:`cpn_potentiometer` - |link_potentiometer_buy| * - :ref:`cpn_adc0834` - \- Schéma Électrique ------------------- .. image:: ../img/image311.png .. image:: ../img/image312.png Procédures Expérimentales ---------------------------- **Étape 1 :** Construire le circuit. .. image:: ../img/image180.png .. note:: Veuillez placer la puce en vous référant à la position correspondante indiquée sur l'image. Notez que les rainures sur la puce doivent être à gauche lorsqu'elle est placée. **Étape 2 :** Ouvrir le fichier de code .. raw:: html .. code-block:: cd ~/raphael-kit/python/ **Étape 3 :** Exécuter. .. raw:: html .. code-block:: sudo python3 2.1.7_Potentiometer.py Après l'exécution du code, tournez le bouton du potentiomètre, l'intensité de la LED changera en conséquence. **Code** .. note:: Vous pouvez **Modifier/Réinitialiser/Copier/Exécuter/Arrêter** le code ci-dessous. Mais avant cela, vous devez accéder au 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 #!/usr/bin/env python3 import RPi.GPIO as GPIO import ADC0834 import time LedPin = 22 def setup(): global led_val # Set the GPIO modes to BCM Numbering GPIO.setmode(GPIO.BCM) # Set all LedPin's mode to output and initial level to High(3.3v) GPIO.setup(LedPin, GPIO.OUT, initial=GPIO.HIGH) ADC0834.setup() # Set led as pwm channel and frequece to 2KHz led_val = GPIO.PWM(LedPin, 2000) # Set all begin with value 0 led_val.start(0) # Define a MAP function for mapping values. Like from 0~255 to 0~100 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 def destroy(): # Stop all pwm channel led_val.stop() # Release resource GPIO.cleanup() def loop(): while True: res = ADC0834.getResult() print ('res = %d' % res) R_val = MAP(res, 0, 255, 0, 100) led_val.ChangeDutyCycle(R_val) time.sleep(0.2) if __name__ == '__main__': setup() try: loop() except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the program destroy() will be executed. destroy() **Explication du Code** .. code-block:: python import ADC0834 Importer la bibliothèque ADC0834. Vous pouvez vérifier le contenu de la bibliothèque en appelant la commande nano ADC0834.py. .. code-block:: python def setup(): global led_val # Set the GPIO modes to BCM Numbering GPIO.setmode(GPIO.BCM) # Set all LedPin's mode to output and initial level to High(3.3v) GPIO.setup(LedPin, GPIO.OUT, initial=GPIO.HIGH) ADC0834.setup() # Set led as pwm channel and frequece to 2KHz led_val = GPIO.PWM(LedPin, 2000) # Set all begin with value 0 led_val.start(0) Dans setup(), définir la méthode de numérotation comme BCM, configurer LedPin comme canal PWM et lui attribuer une fréquence de 2 kHz. **ADC0834.setup() :** Initialiser ADC0834, et connecter les broches définies CS, CLK, DIO de l'ADC0834 respectivement à GPIO17, GPIO18 et GPIO27. .. code-block:: python def loop(): while True: res = ADC0834.getResult() print ('res = %d' % res) R_val = MAP(res, 0, 255, 0, 100) led_val.ChangeDutyCycle(R_val) time.sleep(0.2) La fonction getResult() est utilisée pour lire les valeurs analogiques des quatre canaux de l'ADC0834. Par défaut, la fonction lit la valeur de CH0, et si vous souhaitez lire d'autres canaux, veuillez entrer le numéro du canal dans **( )**, par exemple, getResult(1). La fonction loop() lit d'abord la valeur de CH0, puis assigne la valeur à la variable res. Ensuite, elle appelle la fonction MAP pour mapper la valeur lue du potentiomètre de 0 à 100. Cette étape est utilisée pour contrôler le cycle de travail de LedPin. Vous pourrez maintenant voir que la luminosité de la LED change en fonction de la valeur du potentiomètre. Image du Phénomène ---------------------- .. image:: ../img/image181.jpeg