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
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
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 |
Procédures expérimentales
Étape 1 : Construisez le circuit.
É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.