Enregistreur de données de température Arduino avec module de carte SD
Cet article vous montre comment créer un enregistreur de données de température Arduino. Nous utiliserons le DHT11 pour mesurer la température, le module d’horloge en temps réel (RTC) pour prendre les horodatages et le module de carte SD pour enregistrer les données sur la carte SD.
Pièces requises
Voici une liste complète des pièces requises pour ce projet :
- Arduino UNO
- module de carte SD
- Carte Micro SD
- Capteur de température et d’humidité DHT11
- Module RTC
- Planche à pain
- Fils de cavalier
Remarque : en alternative au module de carte SD, vous pouvez utiliser un bouclier d’enregistrement de données . Le bouclier d’enregistrement de données est livré avec un RTC intégré et une zone de prototypage pour les connexions à souder, les capteurs, etc.
Vous pouvez utiliser les liens précédents ou vous rendre directement sur ocraelec.com pour trouver toutes les pièces pour vos projets au meilleur prix !
Schémas
La figure suivante montre les schémas du circuit pour ce projet.
Remarque : assurez-vous que votre carte SD est formatée et fonctionne correctement. Lisez « Guide du module de carte SD avec Arduino ».
Installation de la bibliothèque de capteurs DHT
Pour ce projet, vous devez installer la bibliothèque DHT pour lire à partir du capteur DHT11.
- Cliquez ici pour télécharger la bibliothèque de capteurs DHT . Vous devriez avoir un dossier .zip dans votre dossier Téléchargements
- Décompressez le dossier .zip et vous devriez obtenir le dossier DHT-sensor-library-master
- Renommez votre dossier de
DHT-sensor-library-masterà DHT - Déplacez le dossier DHT vers votre dossier de bibliothèques d’installation Arduino IDE
- Enfin, rouvrez votre IDE Arduino
Code
Copiez le code suivant sur votre IDE Arduino et téléchargez-le sur votre carte Arduino.
#include <SPI.h> //for the SD card module
#include <SD.h> // for the SD card
#include <DHT.h> // for the DHT sensor
#include <RTClib.h> // for the RTC
//define DHT pin
#define DHTPIN 2 // what pin we're connected to
// uncomment whatever type you're using
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// initialize DHT sensor for normal 16mhz Arduino
DHT dht(DHTPIN, DHTTYPE);
// change this to match your SD shield or module;
// Arduino Ethernet shield and modules: pin 4
// Data loggin SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = 4;
// Create a file to store the data
File myFile;
// RTC
RTC_DS1307 rtc;
void setup() {
//initializing the DHT sensor
dht.begin();
//initializing Serial monitor
Serial.begin(9600);
// setup for the RTC
while(!Serial); // for Leonardo/Micro/Zero
if(! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
else {
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
if(! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
}
// setup for the SD card
Serial.print("Initializing SD card...");
if(!SD.begin(chipSelect)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
//open file
myFile=SD.open("DATA.txt", FILE_WRITE);
// if the file opened ok, write to it:
if (myFile) {
Serial.println("File opened ok");
// print the headings for our data
myFile.println("Date,Time,Temperature ºC");
}
myFile.close();
}
void loggingTime() {
DateTime now = rtc.now();
myFile = SD.open("DATA.txt", FILE_WRITE);
if (myFile) {
myFile.print(now.year(), DEC);
myFile.print('/');
myFile.print(now.month(), DEC);
myFile.print('/');
myFile.print(now.day(), DEC);
myFile.print(',');
myFile.print(now.hour(), DEC);
myFile.print(':');
myFile.print(now.minute(), DEC);
myFile.print(':');
myFile.print(now.second(), DEC);
myFile.print(",");
}
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.println(now.day(), DEC);
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.println(now.second(), DEC);
myFile.close();
delay(1000);
}
void loggingTemperature() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
// Read temperature as Celsius
float t = dht.readTemperature();
// Read temperature as Fahrenheit
//float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(t) /*|| isnan(f)*/) {
Serial.println("Failed to read from DHT sensor!");
return;
}
//debugging purposes
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
//Serial.print(f);
//Serial.println(" *F\t");
myFile = SD.open("DATA.txt", FILE_WRITE);
if (myFile) {
Serial.println("open with success");
myFile.print(t);
myFile.println(",");
}
myFile.close();
}
void loop() {
loggingTime();
loggingTemperature();
delay(5000);
}
Dans ce code, nous créons une fonction loggingTime() et une fonction loggingTemperature() que nous appelons dans la boucle() pour enregistrer l’heure et la température dans le fichier DATA.txt de la carte SD.
Ouvrez le moniteur série à un débit de 9600 bauds et vérifiez si tout fonctionne correctement.
Récupérer les données de la carte SD
Laissez ce projet s’exécuter pendant quelques heures pour collecter une quantité décente de données, et lorsque vous êtes satisfait de la période d’enregistrement des données, éteignez l’Arduino et retirez la carte SD du module de carte SD.
Insérez la carte SD sur votre ordinateur, ouvrez-la et vous devriez avoir un fichier DATA.txt avec les données collectées.
Vous pouvez ouvrir les données avec un éditeur de texte ou utiliser une feuille de calcul pour analyser et traiter vos données.
Fin
C’est un excellent projet pour apprendre à utiliser le module de carte SD avec Arduino pour construire un enregistreur de données. Vous pouvez appliquer ce concept dans à peu près n’importe quel projet que vous souhaitez.
Nous espérons que vous avez trouvé ce projet utile.
Merci d’avoir lu.