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.
#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.