Note

Bonjour et bienvenue dans la communauté des passionnés de SunFounder Raspberry Pi, Arduino et ESP32 sur Facebook ! Plongez dans l’univers de 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 relevez 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 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 concours : Participez à des concours et à des promotions lors des fêtes.

👉 Prêt à explorer et à créer avec nous ? Cliquez sur [Ici] et rejoignez-nous dès aujourd’hui !

3.1.8 Moniteur de Surchauffe

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

Vous souhaitez peut-être créer un dispositif de surveillance de la surchauffe adapté à diverses situations, par exemple, dans une usine, si vous souhaitez activer une alarme et éteindre automatiquement une machine en cas de surchauffe d’un circuit. Dans cette leçon, nous allons utiliser un thermistor, un joystick, un buzzer, une LED et un afficheur LCD pour réaliser un appareil intelligent de surveillance de température dont le seuil est ajustable.

Composants

../_images/list_Overheat_Monitor1.png ../_images/list_Overheat_Monitor21.png

Schéma de câblage

T-Board Name

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO18

Pin 12

1

18

GPIO27

Pin 13

2

27

GPIO22

Pin15

3

22

GPIO23

Pin16

4

23

GPIO24

Pin18

5

24

SDA1

Pin 3

SCL1

Pin 5

../_images/Schematic_three_one81.png

Procédures expérimentales

Étape 1 : Construisez le circuit.

../_images/image2581.png

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

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

Étape 3 : Compilez le code.

gcc 3.1.8_OverheatMonitor.c -lwiringPi -lm

Étape 4 : Exécutez le fichier compilé.

sudo ./a.out

Lorsque le programme est lancé, la température actuelle et le seuil de température élevé 40 sont affichés sur l’écran I2C LCD1602. Si la température actuelle dépasse le seuil, le buzzer et la LED se déclenchent pour vous alerter.

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

Le Joystick vous permet d’ajuster le seuil de température élevé. En le basculant dans la direction des axes X et Y, vous pouvez augmenter ou diminuer la valeur actuelle du seuil. Appuyez à nouveau sur le Joystick pour réinitialiser le seuil à sa valeur initiale.

Explication du Code

int get_joystick_value(){
    uchar x_val;
    uchar y_val;
    x_val = get_ADC_Result(1);
    y_val = get_ADC_Result(2);
    if (x_val > 200){
        return 1;
    }
    else if(x_val < 50){
        return -1;
    }
    else if(y_val > 200){
        return -10;
    }
    else if(y_val < 50){
        return 10;
    }
    else{
        return 0;
    }
}

Cette fonction lit les valeurs des axes X et Y du joystick. Si X>200, la fonction renvoie 1 ; si X<50, elle renvoie -1 ; si Y>200, elle renvoie -10 ; et si Y<50, elle renvoie 10.

void upper_tem_setting(){
    write(0, 0, "Upper Adjust:");
    int change = get_joystick_value();
    upperTem = upperTem + change;
    char str[6];
    snprintf(str,3,"%d",upperTem);
write(0,1,str);
int len;
  len = strlen(str);
  write(len,1,"             ");
    delay(100);
}

Cette fonction ajuste le seuil de température et l’affiche sur l’écran LCD I2C1602.

double temperature(){
    unsigned char temp_value;
    double Vr, Rt, temp, cel, Fah;
    temp_value = get_ADC_Result(0);
    Vr = 5 * (double)(temp_value) / 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;
    return cel;
}

Cette fonction lit la valeur analogique du CH0 (thermistor) de l”ADC0834 et la convertit en valeur de température.

void monitoring_temp(){
    char str[6];
    double cel = temperature();
    snprintf(str,6,"%.2f",cel);
    write(0, 0, "Temp: ");
    write(6, 0, str);
    snprintf(str,3,"%d",upperTem);
    write(0, 1, "Upper: ");
    write(7, 1, str);
    delay(100);
    if(cel >= upperTem){
        digitalWrite(buzzPin, HIGH);
        digitalWrite(LedPin, HIGH);
    }
    else if(cel < upperTem){
        digitalWrite(buzzPin, LOW);
        digitalWrite(LedPin, LOW);
    }
}

Cette fonction affiche la température actuelle et le seuil de température élevé sur l’écran I2C LCD1602. Si la température actuelle dépasse le seuil, le buzzer et la LED se déclenchent.

int main(void)
{
    setup();
    int lastState =1;
    int stage=0;
    while (1)
    {
        int currentState = digitalRead(Joy_BtnPin);
        if(currentState==1 && lastState == 0){
            stage=(stage+1)%2;
            delay(100);
            lcd_clear();
        }
        lastState=currentState;
        if (stage==1){
            upper_tem_setting();
        }
        else{
            monitoring_temp();
        }
    }
    return 0;
}

La fonction main() contient le processus global du programme comme suit :

1) Lorsque le programme démarre, la valeur initiale de stage est 0. La température actuelle et le seuil de température élevé 40 sont affichés sur l’écran I2C LCD1602. Si la température actuelle dépasse le seuil, le buzzer et la LED se déclenchent.

2) En appuyant sur le joystick, stage passe à 1 et vous pouvez ajuster le seuil de température élevé. En basculant le joystick dans la direction des axes X et Y, vous pouvez augmenter ou diminuer la valeur actuelle du seuil. Appuyez à nouveau sur le joystick pour réinitialiser le seuil à sa valeur initiale.