Code de recherche

Code Arduino et vidéo pour le capteur de température et d'humidité DHT22

Code Arduino et vidéo pour le capteur de température et d'humidité DHT22

Dans ce tutoriel, nous apprendrons comment utiliser le capteur de température et d'humidité DHT22 avec un Arduino. Le DHT22, aussi appelé AM2302, est capable de mesurer des températures de -40 à 80 degrés Celsius et une humidité de 0 à 99 %. En suivant ce guide, vous pourrez afficher la température en Celsius, Fahrenheit ou Kelvin, ainsi que le niveau d'humidité.

DHT22 sensor with PCB-1

Nous allons utiliser la bibliothèque pour capteurs DHT afin de lire facilement les données du capteur. Cette bibliothèque simplifie le processus de communication avec le DHT22 et nous permet d'accéder aux valeurs de température et d'humidité en seulement quelques lignes de code. Pour une explication plus approfondie, je vous encourage à regarder la vidéo associée (dans la vidéo à 00:00).

Le matériel expliqué

Le composant principal de ce projet est le module capteur DHT22, qui est un capteur numérique de température et d'humidité. Il utilise un élément capacitif de détection de l'humidité et une thermistance pour mesurer l'air ambiant. La sortie est un signal numérique qui peut être lu par un Arduino.

Le DHT22 fonctionne sur une plage de tension de 3,3 à 5 volts et communique via une interface à fil unique, ce qui le rend facile à intégrer dans vos projets. Il offre également une longue distance de transmission allant jusqu'à 20 mètres, permettant une flexibilité dans le placement du capteur.

Détails de la fiche technique

FabricantAosong
Numéro de pièceDHT22 (AM2302)
Tension logique / E/S3,3 à 5 V
Tension d'alimentation3.3 - 5 V
Plage de mesure (Température)-40 à +80 °C
Plage de mesure (humidité)0 à 99 %
Précision (Température)±0,5 °C
Précision (humidité)±2 % à 25 °C
Résolution0.1 °C / 0.1 %
Distance de transmissionjusqu'à 20 m
Paquetmodule à 4 broches

  • Veillez à fournir une alimentation correcte comprise entre 3,3 V et 5 V.
  • Utilisez une résistance pull-up de 10 kΩ entre la broche de données et l'alimentation.
  • Gardez les fils du capteur courts pour des mesures précises.
  • Évitez un sondage trop fréquent ; prévoyez des délais entre les relevés.
  • Tenez compte des facteurs environnementaux qui affectent les mesures.

Instructions de câblage

Arduino wiring for DHT22 sensor
Arduino wiring for DHT22 sensor

Pour câbler le capteur DHT22, commencez par connecter la broche d'alimentation (broche 1) du capteur à la sortie 5V de l'Arduino. Ensuite, connectez la broche de masse (broche 4) à l'une des broches GND de l'Arduino. La broche de données (broche 2) doit être reliée à la broche digitale 2 de l'Arduino pour la communication. De plus, placez une résistance de 10 kΩ entre la broche de données et la broche d'alimentation pour garantir des mesures stables.

Si vous utilisez une broche différente pour les données, n'oubliez pas de mettre à jour le code en conséquence en changeant la#define DHTPINValeur à adapter à la broche choisie. La configuration devrait être simple ; en suivant ces branchements, votre capteur fonctionnera correctement.

Exemples de code et guide pas à pas

Le code suivant initialise le capteur DHT22 et lit les valeurs de température et d'humidité. Tout d'abord, nous incluons la bibliothèque DHT et définissons la broche à laquelle le capteur est connecté :

#include "DHT.h"
#define DHTPIN 2     // what digital pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302)
DHT dht(DHTPIN, DHTTYPE);

Ici, la variableDHTPINest réglé sur 2, ce qui indique que la broche de données du capteur est connectée à la broche numérique 2 de l'Arduino. LeDHTTYPEdéfinit le type de capteur utilisé, qui, dans ce cas, est le DHT22.

Ensuite, dans lesetup()dans la fonction, nous initialisons le capteur et le moniteur série :

void setup() {
  Serial.begin(9600);
  dht.begin();
}

Cet extrait de code initialise la communication série et prépare le capteur DHT pour la lecture. LeSerial.begin(9600)définit le débit en bauds pour la communication série.

Dans leloop()fonction, nous pouvons lire et afficher les valeurs de température et d'humidité :

Serial.print("Temperature: ");
Serial.print(getTemp("c")); // Celsius
Serial.print(" *C ");
Serial.print(getTemp("h")); // Humidity
Serial.println(" % ");

Cette partie du code affiche la température en degrés Celsius et le pourcentage d'humidité sur le moniteur série. La fonctiongetTemp()est utilisé pour récupérer les données demandées en fonction du paramètre passé.

Démonstration / À quoi s'attendre

Une fois que tout est configuré et que le code est téléversé, vous devriez voir les relevés de température et d'humidité affichés sur le moniteur série. Le DHT22 peut prendre un moment pour se stabiliser, donc veillez à laisser quelques secondes entre chaque relevé (dans la vidéo à 15:00). S'il y a des problèmes avec les relevés, vérifiez votre câblage et assurez-vous que les connexions sont bien fixées. Les erreurs fréquentes incluent des attributions de broches incorrectes ou des problèmes d'alimentation.

Horodatages vidéo

  • 00:00- Introduction au capteur DHT22
  • 01:30- Câblage du capteur
  • 03:00- Explication du code
  • 04:30- Démonstration de code
  • 06:00- Conclusion

Images

Arduino wiring for DHT22 sensor
Arduino wiring for DHT22 sensor
DHT22 sensor with PCB-1
DHT22 sensor with PCB-1
DHT22 with PCB red
DHT22 with PCB red
DHT22 sensor no PCB
DHT22 sensor no PCB
54-Arduion code DHT22 Temperature and Humidity Sensor Module
Langue: C++
++
/*
 * This is the Arduino code for the DHT22 module to read temperature and humidity.
 * This code can display temperature in:
 * getTemp("c") is used to get Celsius.
 * getTemp("f") is used to get Fahrenheit.
 * getTemp("k") is used for Kelvin.
 * getTemp("hif") is used to get Fahrenheit.
 * getTemp("hic") is used to get Celsius.
 * getTemp("h") is used to get humidity.
 * Watch the video https://youtu.be/oi_GPSLjgBY
 * Other Arduino library and videos https://robojax.com
 * 
 * Written/updated by Ahmad Shamshiri for Robojax.com Video
 * Date: Jan 08, 2018, in Ajax, Ontario, Canada
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: This code is "AS IS" and for educational purposes only.
 * 
 * original source code : https://github.com/adafruit/DHT-sensor-library
 */

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain


#include "DHT.h"

#define DHTPIN 2     // what digital pin we're connected to

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster processors.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println("DHTxx Robojax test!");

  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);


  // Robojax.com test video
  Serial.print("Temperature: ");
  
  Serial.print(getTemp("c"));
  
  Serial.print(" *C ");
  Serial.print(getTemp("f"));
  Serial.println (" *F");
  Serial.println("-----------------");  
  Serial.print("Heat index: ");
  Serial.print(getTemp("hic"));
  Serial.print(" *C ");
  Serial.print(getTemp("hif"));
  Serial.println(" *F");
  Serial.print(getTemp("k"));
  Serial.println(" *K");
  Serial.println("-----------------");    
  Serial.print("Humidity: ");
  Serial.print(getTemp("h"));
  Serial.println(" % ");
  Serial.println("===========================");
}


/*
 * getTemp(String req)
 * returns the temperature related parameters
 * req is string request
 * This code can display temperature in:
 * getTemp("c") is used to get Celsius.
 * getTemp("f") is used to get Fahrenheit.
 * getTemp("k") is used for Kelvin.
 * getTemp("hif") is used to get Fahrenheit.
 * getTemp("hic") is used to get Celsius.
 * getTemp("h") is used to get humidity.
 */
float getTemp(String req)
{

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor).
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return 0.0;
  }
  // Compute heat index in Kelvin 
  float k = t + 273.15;
  if(req =="c"){
    return t;//return Celsius
  }else if(req =="f"){
    return f;// return Fahrenheit
  }else if(req =="h"){
    return h;// return humidity
  }else if(req =="hif"){
    return hif;// return heat index in Fahrenheit
  }else if(req =="hic"){
    return hic;// return heat index in Celsius
  }else if(req =="k"){
    return k;// return temperature in Kelvin
  }else{
    return 0.000;// if no request found, return 0.000
  }
 
}

Fichiers📁

Bibliothèques Arduino (zip)

Fichier Fritzing

Manuel de l'Utilisateur