Note
Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l’univers des Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.
Pourquoi rejoindre ?
Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.
Apprendre et partager : É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 aperçus.
Réductions spéciales : Profitez de réductions exclusives sur nos produits les plus récents.
Promotions festives et cadeaux : Participez à des cadeaux et des promotions de vacances.
👉 Prêt à explorer et à créer avec nous ? Cliquez [ ici ] et rejoignez-nous aujourd’hui !
6.3 Alarme de Haute Température¶
Ensuite, nous allons fabriquer un dispositif d’alarme de haute température en utilisant un thermistor, un bouton-poussoir, un potentiomètre et un LCD. Le LCD1602 affiche la température détectée par le thermistor et la valeur seuil de haute température, qui peut être ajustée à l’aide d’un potentiomètre. La valeur seuil est stockée dans l’EEPROM en même temps, donc si la température actuelle dépasse la valeur seuil, le buzzer sonnera.
Composants requis
Pour ce projet, nous aurons besoin des composants suivants.
Il est certainement pratique d’acheter un kit complet, voici le lien :
Nom |
ÉLÉMENTS DE CE KIT |
LIEN |
|---|---|---|
3 in 1 Starter Kit |
380+ |
Vous pouvez également les acheter séparément via les liens ci-dessous.
INTRODUCTION DES COMPOSANTS |
LIEN D’ACHAT |
|---|---|
- |
|
Schéma
Câblage
Code
Note
Vous pouvez ouvrir le fichier
6.3.high_tem_alarm.inosous le chemin de3in1-kit\basic_project\6.3.high_tem_alarmdirectement.Ou copiez ce code dans Arduino IDE .
La bibliothèque
LiquidCrystal I2Cest utilisée ici, vous pouvez l’installer depuis le Library Manager.
Après le téléchargement réussi du code, le LCD1602 affiche la température détectée par le thermistor et la valeur seuil de haute température, qui peut être ajustée à l’aide d’un potentiomètre. La valeur seuil est stockée dans l’EEPROM en même temps, donc si la température actuelle dépasse la valeur seuil, le buzzer sonnera.
Note
Si le code et le câblage sont corrects, mais que le LCD n’affiche toujours pas de contenu, vous pouvez tourner le potentiomètre à l’arrière.
Comment ça fonctionne ?
Initialisez le bouton, le buzzer et le LCD1602 I2C, et lisez les valeurs de l’EEPROM. Une interruption est également utilisée ici pour lire l’état du bouton.
void setup() { pinMode(buzzerPin, OUTPUT); pinMode(buttonPin, INPUT); lcd.init(); lcd.backlight(); upperTem = EEPROM.read(0); delay(1000); attachInterrupt(digitalPinToInterrupt(buttonPin), buttonState, FALLING); }
L’interruption est utilisée ici pour lire l’état du bouton. Lorsque le bouton est pressé,
buttonPinpasse de bas à haut.La fonction buttonState est appelée lorsque l’interruption se déclenche, et elle bascule la valeur de la variable state.
FALLINGsignifie que l’interruption se produit lorsquebuttonPinpasse de bas à haut.
Pour définir le seuil de haute température, la fonction
upperTemSetting()est appelée lorsque state est à 1 (state bascule entre 0 et 1 avec la pression du bouton) dans le programme principal, sinonmonitoringTemp()est appelée pour afficher la température actuelle et le seuil défini.void loop() { if (state == 1) { upperTemSetting(); } else { monitoringTemp(); } }
À propos de la fonction
upperTemSetting().void upperTemSetting() { int setTem = 0; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Adjusting..."); lcd.setCursor(0, 1); lcd.print("Upper Tem: "); while (1) { lcd.setCursor(11, 1); setTem = map(analogRead(potPin), 0, 1023, 0, 100); lcd.print(setTem); if (state == 0) { EEPROM.write(0, setTem); upperTem = setTem; lcd.clear(); return; } } }
Un seuil peut être défini avec cette fonction. Lorsque vous entrez dans cette fonction, le LCD1602 affiche la valeur seuil actuelle, qui peut être modifiée à l’aide du potentiomètre. Cette valeur seuil sera stockée dans l’EEPROM et quittée lorsque le bouton sera pressé à nouveau.
À propos de la fonction
monitoringTemp().void monitoringTemp() { long a = analogRead(temPin); float tempC = beta / (log((1025.0 * 10 / a - 10) / 10) + beta / 298.0) - 273.0; float tempF = 1.8 * tempC + 32.0; lcd.setCursor(0, 0); lcd.print("Temp: "); lcd.print(tempC); lcd.print(char(223)); lcd.print("C "); lcd.setCursor(0, 1); lcd.print("Upper: "); lcd.print(upperTem); lcd.print(char(223)); lcd.print("C "); delay(300); if (tempC >= upperTem) { digitalWrite(buzzerPin, HIGH); delay(50); digitalWrite(buzzerPin, LOW); delay(10); } else { digitalWrite(buzzerPin, LOW); } }
En utilisant cette fonction, vous pouvez afficher la température et régler une alarme.
La valeur du thermistor est lue puis convertie en température Celsius par la formule et affichée sur le LCD1602.
Le seuil défini est également affiché sur le LCD.
Si la température actuelle est supérieure au seuil, le buzzer sonnera une alarme.