L’objectif d’aujourd’hui est d’allumer un appareil électrique en fonction du capteur de température et d’humidité. En fonction d’une certaine température, on activera le relais.
Prérequis
- branchement du module DHT22
- ajout de la librairie DHT22
- branchement du module relais
- configuration nano
- configuration uno
Le branchement va être assez simple :
Le module DHT22 sur mon schéma (VCC / DATA / GND):
- VCC vers le 5v
- DATA connecté au PIN 7 de l’arduino
- GND au GND de la carte
Bien vérifier sur votre module les 3 branchements afin d’ajuster en fonction de votre module.
Pour le module relais (DATA / VCC / GND) :
- DATA connecté au PIN 2 de l’arduino
- VCC au 5V
- et le GND au GND
Pour l’exercice, j’utilise une breadboard afin de faciliter le raccordement.
De l’autre côté du module, on va se brancher sur le mode NO (c’est-à-dire Normalement Ouvert) en connectant une prise mâle (à brancher sur le secteur) et une prise femelle afin de pouvoir ajouter tout et n’importe quoi 🙂
Avec ce système vous n’avez pas besoin de bidouiller un appareil électrique. Il faudra simplement le brancher sur votre prise 🙂 et op on sera bon.
Branchement réel :
Ici il faut bien faire attention aux fils électriques car une fois le tout en place, du 220v passera. Pour un vrai projet que l’on utilise au quotidien, il faut bien penser à protéger et isoler cette partie afin d’éviter tout risque inutile.
Place au code
Il va être simple et surtout on l’a déjà vu dans d’autres articles. La seule chose c’est qu’on va coupler 2 sketchs ensemble afin d’avoir notre programme opérationnel. Le sketch de base est celui du DHT22, auquel on va rajouter 2-3 élément pour contrôle le relais.
// ajout de la lib DHT
#include <DHT.h>
// création d'une constante qui aura pour nom DHTTYPE et pour valeur DHT22
#define DHTTYPE DHT22
// initialisation de la PIN qui reçoit les datas de notre module
// dans mon cas, la PIN digital 7
const int TEMP_PIN = 7;
/**
* Initialisation du PIN Digital
*/
const int RELAY = 2;
// initialisation de la class DHT11 via le mot clé DHT
// dht minuscule est simplement le nom que je lui donne, on pourrait l'appeler captain sans souci 🙂 mais plus le code est clair et plus la lecture sera simple
// en paramètre, la PIN et la lib
DHT dht(TEMP_PIN, DHTTYPE);
void setup() {
Serial.begin(9600);
// syntaxe trouvée sur le arduino.cc
// elle permet d'attendre que le serial soit disponible
while (!Serial) {
; // wait for serial port to connect. Needed for native USB
}
// permet de démarrer la lecture des données
dht.begin();
/**
* Initialisation des pinMode() en mode output car on va envoyer du courant ou non
*/
pinMode(RELAY, OUTPUT);
}
void loop() {
// on attend 2secondes avant notre première lecture
// cela permet au module de charger correctement et cela évite des erreurs
delay(2000);
// lecture de l'humidité
float h = dht.readHumidity();
// lecture de la température en degré celsius (c'est l'option par défaut)
float t = dht.readTemperature();
// petite vérification que l'on a bien une donnée.
// isnan() permet de vérifier si la valeur n'est pas un nombre
// dans notre cas si un des trois résultats n'est pas un nombre, on rentre dans la condition
// une fois dans la condition, un petit message d'error et on arrête tout grâce au mot clé : return
// on retourne sur le début de la boucle pour lire à nouveau les données
// et si on n'a pas de données du capteur de température, on pense à enlever le courant du relais afin de couper le courant.
if (isnan(h) || isnan(t)) {
Serial.println("Erreur de lecture du capteur DHT !");
digitalWrite(RELAY, LOW);
return;
}
// si la température est inférieure à 20 (20°) on active le relais
if(t < 20){
digitalWrite(RELAY, HIGH);
} else {
// sinon on l'éteint
digitalWrite(RELAY, LOW);
}
// Pour le debug, on affiche les valeurs du capteur de températeur/humidité dans le moniteur de série
// String() permet de convertir notre variable en string afin de pouvoir la concaténer sans souci
Serial.println("Humidité : " + String(h) + "%");
Serial.println("Température : " + String(t) + "°C");
}
Avec ce Sketch, on a un système qui fonctionne. Dans notre cas, des que la température descend en dessous de 20°, on active le relais ce qui va permettre au courant de passer. Et sur la prise femelle on peut brancher tout ce qu’on souhaite comme par exemple un chauffage d’appoint qui s’allumerait uniquement si la température baisse.
Le relais est très pratique pour gérer du 220v ou autre source d’alimentation. Le plus de tout ceci c’est qu’on ne touche pas à l’appareil électrique, on lui donne simplement du courant ou non .
Téléchargement du Sketch relais & module DHT22Si cet article vous a plu, n’hésitez pas à laisser un commentaire, noter et partager l’article.
Hey ! Petite question, est-ce que l’initialisation de la classe du DHT22 se déclare de la même manière que le DHT11 ? Merci
+
Merci pour ton commentaire et pour te répondre, j’ai justement fait un article sur le DHT11 / Mais en rapide la réponse est oui 🙂
Salut Merci pour l’article!! petite question, comment je peux faire pour juste faire un contact sec avec le relais ? en fait je veux lui dire la température est à 20° ferme le relais 1 seconde (ça allume ma chaudière). Je veux juste réaliser un contact sec avec arduino + relais + dht22 mais je trouve pas merci pour l’aide
Merci pour ton commentaire. Je pense que tu t’es trompé dans et que tu voulais dire : si température en dessous de 20° on allume la chaudière 🙂
Du coup moi je ferais ce genre de chose :
En gros si en dessous de 20 et flag vaut 0
On ferme le relais, on attends 1s, le flag passe a 1 et on réouvre le relais
Comme ca après le prochain tour de boucle on fait rien de plus que garder le relais ouvert
Et je rajoute une condition pour dire : ok si la température est supp à 25° on reset le flag a 0. Ici l’déal serait d’avoir une autre connexion afin de pouvoir couper la chaudière (après si elle se coupe toute seule après une certaine température, c’est parfait et tu as ça de moins à faire)
J’espère d’avoir donner des pistes