.. note::
Bonjour, bienvenue dans la communauté Facebook des passionnés de SunFounder Raspberry Pi, Arduino et ESP32 ! Plongez au cœur de Raspberry Pi, Arduino et ESP32 avec d'autres passionnés.
**Pourquoi nous rejoindre ?**
- **Support d'experts** : Résolvez vos problèmes après-vente et vos défis techniques grâce à l'aide de notre communauté et de notre équipe.
- **Apprenez et partagez** : É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 avant-goûts.
- **Réductions spéciales** : Profitez de réductions exclusives sur nos produits les plus récents.
- **Promotions festives et concours** : Participez à des concours et promotions à l'occasion des fêtes.
👉 Prêt à explorer et à créer avec nous ? Cliquez sur [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui !
.. _2.2.2_thermistor_c_pi5:
2.2.2 Thermistor
===================
.. 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 qui permet de réaliser des
fonctions de contrôle de température, comme la création d'une alarme de surchauffe.
Composants
-------------
.. image:: img/list_2.2.2_thermistor.png
Principe
------------
Une thermistance est une résistance thermosensible qui présente un changement précis
et prévisible de sa résistance proportionnel à de petites variations de température.
L'ampleur de ce changement dépend de sa composition spécifique. Les thermistances font
partie d'un groupe plus large de composants passifs. Contrairement aux composants actifs,
les dispositifs passifs ne peuvent pas fournir de gain de puissance ou d'amplification
dans un circuit.
La thermistance est un élément sensible, et elle existe sous deux formes : Coefficient de
Température Négatif (CTN) et Coefficient de Température Positif (CTP), aussi connus sous
les abréviations CTN et CTP. Sa résistance varie de manière significative avec la température.
La résistance de la thermistance CTP augmente avec la température, tandis que celle de la
CTN fait l'inverse. Dans cette expérience, nous utilisons une CTN.
.. image:: img/image325.png
Le principe est que la résistance de la thermistance CTN varie en fonction de la
température de l'environnement extérieur. Elle détecte la température en temps réel
de l'environnement. Lorsque la température augmente, la résistance de la thermistance
diminue. Ensuite, les données de tension sont converties en quantités numériques via
l'adaptateur A/D. La température, en degrés Celsius ou Fahrenheit, est ensuite affichée
grâce à la programmation.
Dans cette expérience, une thermistance et une résistance de rappel de 10k sont utilisées.
Chaque thermistance a une résistance nominale. Ici, elle est de 10k ohms, mesurée à 25
degrés Celsius.
Voici la relation entre la résistance et la température :
R\ :sub:`T` =R\ :sub:`N` exp\ :sup:`B(1/TK – 1/TN)`
**R\ T** est la résistance de la thermistance CTN à la température **T\ K**.
**R\ N** est la résistance de la thermistance CTN à la température nominale
**T\ N**. Ici, la valeur de **R\ N** est de 10k.
**T\ K** est la température en Kelvin, avec une unité en K. Ici, la valeur de
**T\ K** est 273,15 + degrés Celsius.
**T\ N** est une température nominale en Kelvin ; l'unité est également K. Ici,
la valeur de **T\ N** est 273,15 + 25.
Et **B**\ (bêta), la constante matérielle de la thermistance CTN, est également
appelée indice de sensibilité thermique, avec une valeur numérique de 3950.
**exp** est l'abréviation d'exponentielle, et le nombre de base **e** est un
nombre naturel qui vaut environ 2,7.
Convertissez cette formule
T\ :sub:`K`\ =1/(ln(R\ :sub:`T`/R\ :sub:`N`)/B+1/T\ :sub:`N`) pour obtenir la
température en Kelvin, à laquelle il faut soustraire 273,15 pour obtenir les degrés Celsius.
Cette relation est une formule empirique. Elle est précise uniquement lorsque la
température et la résistance se situent dans une plage effective.
Schéma de câblage
---------------------
.. image:: img/image323.png
.. image:: img/image324.png
Procédures expérimentales
----------------------------
**Étape 1 :** Montez le circuit.
.. image:: img/image202.png
:width: 800
**Étape 2 :** Accédez au dossier du code.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/c/2.2.2/
**Étape 3 :** Compilez le code.
.. raw:: html
.. code-block::
gcc 2.2.2_Thermistor.c -lwiringPi -lm
.. note::
-lm permet de charger la bibliothèque mathématique. Ne l'omettez pas, sinon vous obtiendrez une erreur.
**Étape 4 :** Exécutez le fichier exécutable.
.. raw:: html
.. code-block::
sudo ./a.out
Une fois le programme exécuté, la thermistance détecte la température ambiante, qui
sera affichée à l'écran à la fin du calcul du programme.
.. note::
Si cela ne fonctionne pas après l'exécution, ou s'il y a un message d'erreur indiquant : "wiringPi.h: Aucun fichier ou répertoire de ce type", veuillez vous référer à :ref:`faq_c_nowork`.
**Code**
.. code-block:: c
#include
#include
#include
typedef unsigned char uchar;
typedef unsigned int uint;
#define ADC_CS 0
#define ADC_CLK 1
#define ADC_DIO 2
uchar get_ADC_Result(uint channel)
{
uchar i;
uchar dat1=0, dat2=0;
int sel = channel > 1 & 1;
int odd = channel & 1;
digitalWrite(ADC_CLK, 1);
delayMicroseconds(2);
digitalWrite(ADC_CLK, 0);
delayMicroseconds(2);
pinMode(ADC_DIO, OUTPUT);
digitalWrite(ADC_CS, 0);
// Bit de démarrage
digitalWrite(ADC_CLK,0);
digitalWrite(ADC_DIO,1); delayMicroseconds(2);
digitalWrite(ADC_CLK,1); delayMicroseconds(2);
// Mode entrée unique
digitalWrite(ADC_CLK,0);
digitalWrite(ADC_DIO,1); delayMicroseconds(2);
digitalWrite(ADC_CLK,1); delayMicroseconds(2);
// Impair
digitalWrite(ADC_CLK,0);
digitalWrite(ADC_DIO,odd); delayMicroseconds(2);
digitalWrite(ADC_CLK,1); delayMicroseconds(2);
// Sélectionner
digitalWrite(ADC_CLK,0);
digitalWrite(ADC_DIO,sel); delayMicroseconds(2);
digitalWrite(ADC_CLK,1);
digitalWrite(ADC_DIO,1); delayMicroseconds(2);
digitalWrite(ADC_CLK,0);
digitalWrite(ADC_DIO,1); delayMicroseconds(2);
for(i=0;i<8;i++)
{
digitalWrite(ADC_CLK,1); delayMicroseconds(2);
digitalWrite(ADC_CLK,0); delayMicroseconds(2);
pinMode(ADC_DIO, INPUT);
dat1=dat1<<1 | digitalRead(ADC_DIO);
}
for(i=0;i<8;i++)
{
dat2 = dat2 | ((uchar)(digitalRead(ADC_DIO))<
Il s'agit d'une bibliothèque mathématique en C qui déclare un ensemble de fonctions permettant de réaliser des opérations et des transformations mathématiques courantes.
.. code-block:: c
analogVal = get_ADC_Result(0);
Cette fonction est utilisée pour lire la valeur de la thermistance.
.. code-block:: c
Vr = 5 * (double)(analogVal) / 255;
Rt = 10000 * (double)(Vr) / (5 - (double)(Vr));
temp = 1 / (((log(Rt/10000)) / 3950)+(1 / (273.15 + 25)));
cel = temp - 273.15;
Fah = cel * 1.8 +32;
printf("Celsius: %.2f C Fahrenheit: %.2f F\n", cel, Fah);
Ces calculs convertissent les valeurs de la thermistance en degrés Celsius.
.. code-block:: c
Vr = 5 * (double)(analogVal) / 255;
Rt = 10000 * (double)(Vr) / (5 - (double)(Vr));
Ces deux lignes de code calculent la répartition de la tension avec la valeur
analogique lue afin d'obtenir Rt (résistance de la thermistance).
.. code-block:: c
temp = 1 / (((log(Rt/10000)) / 3950)+(1 / (273.15 + 25)));
Ce code se réfère à l'intégration de Rt dans la formule
**T\ K\ =1/(ln(R\ T/R\ N)/B+1/T\ N)** pour obtenir la température en Kelvin.
.. code-block:: c
temp = temp - 273.15;
Conversion de la température en Kelvin en degrés Celsius.
.. code-block:: c
Fah = cel * 1.8 +32;
Conversion des degrés Celsius en Fahrenheit.
.. code-block:: c
printf("Celsius: %.2f C Fahrenheit: %.2f F\n", cel, Fah);
Affiche les degrés Celsius, Fahrenheit et leurs unités à l'écran.