.. 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 [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui ! 3.1.8 Moniteur de Surchauffe =============================== .. 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 -------------- 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 ------------ .. image:: img/list_Overheat_Monitor.png :align: center .. image:: img/list_Overheat_Monitor2.png :align: center 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 ============ ======== ======== === .. image:: img/Schematic_three_one8.png :width: 700 :align: center Procédures expérimentales ---------------------------- **Étape 1 :** Construisez le circuit. .. image:: img/image258.png :width: 800 **Étape 2 :** Accédez au dossier du code. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/c/3.1.8/ **Étape 3 :** Compilez le code. .. raw:: html .. code-block:: gcc 3.1.8_OverheatMonitor.c -lwiringPi -lm **Étape 4 :** Exécutez le fichier compilé. .. raw:: html .. code-block:: 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 :ref:`faq_c_nowork`. 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** .. code-block:: c 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**. .. code-block:: c 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. .. code-block:: c 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. .. code-block:: c 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. .. code-block:: c 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.