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 [Ici] et rejoignez-nous dès aujourd’hui !

2.2.2 Thermistor

Note

../_images/mcp3008_and_adc0834.jpg

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

../_images/list_2.2.2_thermistor1.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.

../_images/image3251.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 :

RT =RN expB(1/TK – 1/TN)

RT est la résistance de la thermistance CTN à la température TK.

RN est la résistance de la thermistance CTN à la température nominale TN. Ici, la valeur de RN est de 10k.

TK est la température en Kelvin, avec une unité en K. Ici, la valeur de TK est 273,15 + degrés Celsius.

TN est une température nominale en Kelvin ; l’unité est également K. Ici, la valeur de TN 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 TK=1/(ln(RT/RN)/B+1/TN) 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

../_images/image3231.png ../_images/image3241.png

Procédures expérimentales

Étape 1 : Montez le circuit.

../_images/image2021.png

Étape 2 : Accédez au dossier du code.

cd ~/davinci-kit-for-raspberry-pi/c/2.2.2/

Étape 3 : Compilez le code.

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.

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 à Le code C ne fonctionne pas ?.

Code

#include <wiringPi.h>
#include <stdio.h>
#include <math.h>

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))<<i);
        digitalWrite(ADC_CLK,1);    delayMicroseconds(2);
        digitalWrite(ADC_CLK,0);    delayMicroseconds(2);
    }

    digitalWrite(ADC_CS,1);
    pinMode(ADC_DIO, OUTPUT);
    return(dat1==dat2) ? dat1 : 0;
}

int main(void)
{
    unsigned char analogVal;
    double Vr, Rt, temp, cel, Fah;
    if(wiringPiSetup() == -1){ // En cas d'échec d'initialisation de wiringPi, affichez un message à l'écran
        printf("setup wiringPi failed !");
        return 1;
    }
    pinMode(ADC_CS,  OUTPUT);
    pinMode(ADC_CLK, OUTPUT);

    while(1){
        analogVal = get_ADC_Result(0);
        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);
        delay(100);
    }
    return 0;
}

Explication du Code

#include <math.h>

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.

analogVal = get_ADC_Result(0);

Cette fonction est utilisée pour lire la valeur de la thermistance.

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.

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

temp = 1 / (((log(Rt/10000)) / 3950)+(1 / (273.15 + 25)));

Ce code se réfère à l’intégration de Rt dans la formule TK=1/(ln(RT/RN)/B+1/TN) pour obtenir la température en Kelvin.

temp = temp - 273.15;

Conversion de la température en Kelvin en degrés Celsius.

Fah = cel * 1.8 +32;

Conversion des degrés Celsius en Fahrenheit.

printf("Celsius: %.2f C  Fahrenheit: %.2f F\n", cel, Fah);

Affiche les degrés Celsius, Fahrenheit et leurs unités à l’écran.