Introduction

Dans ce projet, on va enregistrer les données de température et d’humidité à l’aide d’un capteur DHT22, puis à les stocker sur une carte micro-SD.


Dans cette application, la température et le taux d’humidité de l’air seront mesurés à intervalles réguliers. Chaque relevé sera sauvegardé progressivement dans un fichier présent sur la carte SD. Pour réaliser ce dispositif, on utilisera le capteur de température et d’hygrométrie DHT22, connecté à la broche 5 de la carte Arduino.

Schéma du circuit

Programme du circuit

#include <SD.h>
#include <DHT.h>

const int sdCardPinChipSelect = 10;
const char* nomDuFichier = "donnees.csv";
File monFichier;

const int brocheDeBranchementDHT = 8;
const int typeDeDHT = DHT22;
DHT dht(brocheDeBranchementDHT, typeDeDHT);

const long delaiIntervaleDeMesures = 2000; // Intervalle de mesure/enregistrement (exprimé en millis secondes)

void setup() {
  Serial.begin(9600);
  Serial.println(F("Programme DATALOGGER (enregistrement t°/hygro à partir d'un DHT22, et stockage des infos sur carte SD"));

  // Vérification : est-ce que la carte SD est bien accessible depuis l'Arduino ?
  Serial.println(F("Initialisation de la carte SD"));
  if (!SD.begin(sdCardPinChipSelect)) {
    Serial.println(F("Echec de l'initialisation du lecteur de carte SD"));
    while (true);
  }
  Serial.println(F(" reussie !"));

  dht.begin();
}

void loop() {
  // Lecture des données
  float tauxHumidite = dht.readHumidity();
  float temperature = dht.readTemperature();

  // Vérification si données bien reçues
  if (isnan(tauxHumidite) || isnan(temperature)) {
    Serial.println(F("Aucune valeur retournée par le DHT22. Est-il bien branché ?"));
    delay(2000);
    return; // Si aucune valeur n'a été reçue par l'Arduino, on attend 2 secondes, puis on redémarre la fonction loop()
  }

  // Mise en forme de ces données (un seul chiffre après la virgule)
  String tauxHumiditeArrondi = String(tauxHumidite, 1);
  String temperatureArrondie = String(temperature, 1);
  tauxHumiditeArrondi.replace(".", ",");
  temperatureArrondie.replace(".", ",");

  // Affichage des valeurs sur le moniteur série de l'IDE Arduino
  Serial.print("Humidite = ");
  Serial.print(tauxHumiditeArrondi);
  Serial.print(" % - ");
  Serial.print("Temperature = ");
  Serial.print(temperatureArrondie);
  Serial.println(" degre C");

  // Enregistrement de ces données sur la carte SD
  monFichier = SD.open(nomDuFichier, FILE_WRITE);
  if (monFichier) {
    monFichier.print(tauxHumiditeArrondi);
    monFichier.print(";");
    monFichier.println(temperatureArrondie);
    monFichier.close();
    Serial.println(F("Enregistrement reussi en carte SD"));
  }
  else {
    Serial.println(F("Erreur lors de la tentative d'ouverture du fichier en écriture, sur la carte SD"));
  }

  // Temporisation de X secondes (2 sec min, pour que le DHT22 ait le temps de faire ses mesures)
  Serial.println();
  delay(delaiIntervaleDeMesures);
}

Une fois l’ensemble des mesures collectées, il sera possible, à la fin de l’expérience, de retrouver toutes les valeurs enregistrées dans un fichier stocké sur la carte SD. Ce fichier, nommé « DONNEES.CSV », regroupe l’intégralité des relevés effectués.
Les données y sont organisées selon le format suivant : taux d’humidité ; température, séparées par un point-virgule, avec un retour à la ligne pour chaque nouvelle mesure.
Vous trouverez ci-dessous un extrait du fichier présent sur la carte SD après l’exécution du programme. À noter que ce fichier ne contient aucun texte descriptif, mais uniquement des valeurs numériques arrondies à une décimale et séparées par des points-virgules.