.. note::
Bonjour et bienvenue dans la communauté des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder sur Facebook ! Plongez plus profondément dans l'univers du Raspberry Pi, d'Arduino et de l'ESP32 avec d'autres passionnés.
**Pourquoi nous rejoindre ?**
- **Support d'experts** : Résolvez vos problèmes après-vente et relevez les défis techniques grâce à l'aide de notre communauté et de notre équipe.
- **Apprendre & Partager** : Échangez des conseils et des tutoriels pour enrichir vos compétences.
- **Aperçus exclusifs** : Soyez les premiers informés des nouvelles annonces de produits.
- **Réductions spéciales** : Profitez de remises exclusives sur nos derniers produits.
- **Promotions festives et concours** : Participez à des concours et bénéficiez d'offres spéciales lors d'événements festifs.
👉 Prêt à explorer et créer avec nous ? Cliquez sur [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui !
.. _2.2.2_py_pi5:
2.2.2 Thermistance
====================
.. 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
--------------
Tout comme une photorésistance peut détecter la lumière, une thermistance est un
dispositif électronique sensible à la température. Elle peut être utilisée pour
réaliser des fonctions de contrôle de la température, comme la création d'une alarme thermique.
Composants nécessaires
----------------------
Pour ce projet, nous aurons besoin des composants suivants :
.. image:: ../python_pi5/img/2.2.2_thermistor_list.png
.. It's definitely convenient to buy a whole kit, here's the link:
.. .. list-table::
.. :widths: 20 20 20
.. :header-rows: 1
.. * - Name
.. - ITEMS IN THIS KIT
.. - LINK
.. * - Raphael Kit
.. - 337
.. - |link_Raphael_kit|
.. You can also buy them separately from the links below.
.. .. list-table::
.. :widths: 30 20
.. :header-rows: 1
.. * - COMPONENT INTRODUCTION
.. - PURCHASE LINK
.. * - :ref:`gpio_extension_board`
.. - |link_gpio_board_buy|
.. * - :ref:`breadboard`
.. - |link_breadboard_buy|
.. * - :ref:`wires`
.. - |link_wires_buy|
.. * - :ref:`resistor`
.. - |link_resistor_buy|
.. * - :ref:`thermistor`
.. - |link_thermistor_buy|
.. * - :ref:`adc0834`
.. - \-
Schéma de circuit
--------------------
.. image:: ../python_pi5/img/2.2.2_thermistor_schematic_1.png
.. image:: ../python_pi5/img/2.2.2_thermistor_schematic_2.png
Procédure expérimentale
---------------------------
**Étape 1 :** Construisez le circuit.
.. image:: ../python_pi5/img/2.2.2_thermistor_circuit.png
**Étape 2 :** Accédez au dossier du code.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/python-pi5
**Étape 3 :** Exécutez le fichier.
.. raw:: html
.. code-block::
sudo python3 2.2.2_Thermistor.py
Une fois le code lancé, la thermistance détectera la température ambiante,
qui sera affichée à l'écran après le calcul effectué par le programme.
.. warning::
Si une erreur ``RuntimeError: Cannot determine SOC peripheral base address`` apparaît, 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 chemin source du code, comme ``davinci-kit-for-raspberry-pi/python-pi5``. 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
# -*- coding: utf-8 -*-
import ADC0834
import time
import math
# Initialisation du module ADC0834
ADC0834.setup()
# Exécution du processus dans un bloc try-except
try:
while True:
# Lecture de la valeur analogique du capteur
analogVal = ADC0834.getResult()
# Conversion de la valeur analogique en tension
Vr = 5 * float(analogVal) / 255
# Calcul de la résistance de la thermistance
Rt = 10000 * Vr / (5 - Vr)
# Calcul de la température en Kelvin
temp = 1 / (((math.log(Rt / 10000)) / 3950) + (1 / (273,15 + 25)))
# Conversion de Kelvin en Celsius
Cel = temp - 273,15
# Conversion de Celsius en Fahrenheit
Fah = Cel * 1,8 + 32
# Affichage de la température en Celsius et en Fahrenheit
print('Celsius: %.2f C Fahrenheit: %.2f F' % (Cel, Fah))
# Attente de 0,2 seconde avant la prochaine lecture
time.sleep(0.2)
# Gestion de l'interruption clavier pour une terminaison propre
except KeyboardInterrupt:
# Libération des ressources de l'ADC0834
ADC0834.destroy()
**Explication du code**
#. Cette section importe la bibliothèque ADC0834 pour la conversion analogique-numérique, la bibliothèque ``time`` pour implémenter des délais, et la bibliothèque ``math`` pour effectuer des opérations mathématiques.
.. code-block:: python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import ADC0834
import time
import math
#. Initialisation du module ADC0834 pour permettre la lecture des valeurs analogiques.
.. code-block:: python
# Initialisation du module ADC0834
ADC0834.setup()
#. Implémentation d'une boucle infinie pour la lecture continue des données. La boucle lit la valeur analogique de la thermistance, la convertit en tension, calcule la résistance de la thermistance, puis la traduit en mesures de température en Kelvin, Celsius et Fahrenheit. Elle affiche ensuite les températures en Celsius et en Fahrenheit avec une pause de 0,2 seconde entre chaque lecture.
.. code-block:: python
# Exécution du processus dans un bloc try-except
try:
while True:
# Lecture de la valeur analogique du capteur
analogVal = ADC0834.getResult()
# Conversion de la valeur analogique en tension
Vr = 5 * float(analogVal) / 255
# Calcul de la résistance de la thermistance
Rt = 10000 * Vr / (5 - Vr)
# Calcul de la température en Kelvin
temp = 1 / (((math.log(Rt / 10000)) / 3950) + (1 / (273,15 + 25)))
# Conversion de Kelvin en Celsius
Cel = temp - 273,15
# Conversion de Celsius en Fahrenheit
Fah = Cel * 1,8 + 32
# Affichage de la température en Celsius et en Fahrenheit
print('Celsius: %.2f C Fahrenheit: %.2f F' % (Cel, Fah))
# Attente de 0,2 seconde avant la prochaine lecture
time.sleep(0.2)
#. Capture de l'exception ``KeyboardInterrupt`` pour terminer proprement le programme et libérer les ressources du module ADC0834.
.. code-block:: python
# Gestion de l'interruption clavier pour une terminaison propre
except KeyboardInterrupt:
# Libération des ressources de l'ADC0834
ADC0834.destroy()