Le shield d'horadatage Snootlab comporte une horloge temps réel (DS1307), un lecteur de carte SD, un bouton Reset et une zone de prototypage. Ce shield permet d'enregistrer sur une carte SD les données présentes sur les broches numériques et/ou analogiques d'une carte Arduino. Le fichier créé sur la carte SD est au format txt et les données peuvent être traitées à l'aide d'Excel.
Deux bibliothèques gèrent le fonctionnement de ce shield, la bibliothèque SD intégrée d'office dans l'IDE Arduino et la bibliothèque RTC_Library que nous avons utilisé pour le module horloge temps réel DS1307 ou la bibliothèque RTClib téléchargeable ici.
LE SHIELD MEMOIRE 2.0 SNOOTLAB
Programme :
/* Snootlab est un programme qui enregistre sur une carte SD la date, l'heure et la valeur de la température */
#include <Wire.h> // appel des bibliothèques
#include <SD.h>
#include <RTClib.h>
#define chipSelect 10 // affectation des broches
#define capteur A0
// Declaration des variables générales
const unsigned long freq_rafraichissement = 5000; // entrez ici la fréquence de rafraichissement du capteur, en millisecondes
RTC_DS1307 RTC; // création de l'objet RTC
File fichier;
String datastring;
void setup()
{
Serial.begin(57600); // initialisation de la liaison série
Serial.print("Initialisation de la SD card...");
pinMode(chipSelect, OUTPUT); // la broche chipSelect est en sortie
Wire.begin();
RTC.begin(); // initialisation de l'objet RTC
if (! RTC.isrunning()) // si la RTC n'est pas configurée, le faire avec les valeurs de l'ordinateur au moment de la compilation
{
RTC.adjust(DateTime(__DATE__, __TIME__));
}
if (!SD.begin(chipSelect)) // vérification de la présence de la carte SD
{
Serial.println("Carte fausse ou absente");
return; // si problème, sortir et bloquer l'exécution
}
Serial.println("Carte OK.");
datastring = "\nReleve et horodatage des valeurs du capteur, selon horloge RTC\n---------\n ";
fichier = SD.open("data.txt", FILE_WRITE); // ouverture du fichier en mode Ecriture.
if (fichier) // si le fichier existe déja, on écrira à la suite des données présentes.
{
fichier.println(datastring);
fichier.close();
Serial.println(datastring); // dupliquer la donnée sur port série
}
else // si problème à l'ouverture, alors signaler l'erreur
{
Serial.println("erreur d'ouverture du fichier durant la configuration");
}
}
void loop()
{
delay(freq_rafraichissement);
DateTime moment = RTC.now(); // acquisition des données de l'horloge
datastring=String(moment.day(),DEC);
datastring+='/';
datastring+=String(moment.month(),DEC);
datastring+='/';
datastring+=String(moment.year(),DEC);
datastring+=' ';
datastring+=String(moment.hour(),DEC);
datastring+=':';
datastring+=String(moment.minute(),DEC);
datastring+=':';
datastring+=String(moment.second(),DEC);
float sensor = analogRead(capteur); // lire la valeur du capteur et la mettre dans la chaine de caractères
float temp = sensor*500/1024; // conversion de la valeur du capteur en degré celcius
datastring += ("\t Valeur capteur = "); // préalablement remplie avec les données temporelles
datastring += String(sensor);
datastring += ("\t Valeur temperature = "); // préalablement remplie avec les données temporelles
datastring += String(temp);
fichier = SD.open("data.txt", FILE_WRITE);
if (fichier)
{
fichier.println(datastring);
fichier.close();
Serial.println(datastring); // dupliquer la donnée sur port série
}
else
{
Serial.println("erreur d'ouverture du fichier");
}
datastring ="0";
}
Exemple :
Nous nous baserons sur l'exemple donné sur le site Snootlab et que nous modifierons. Nous enregistrons toutes les 5 secondes, la température captée par un LM35.
Liste du matériel :
-
1 Arduino Uno
-
1 plaquette d'essai
-
1 module mémoire Snootlab
-
1 carte SD
-
1 capteur de température LM35
Câblage :
Le lecteur SD utilise la liaison SPI de la carte Arduino el les principales fonctions de la bibliothèque SD sont :
-
SD.begin() permet d'initialiser l'objet SD.
-
SD.open(mon_fichier) ouvre le fichier intitulé mon_fichier. mon_fichier doit être déclaré au format file.
-
SD.remove(mon_fichier) déplace le fichier intitulé mon_fichier.
-
SD.mkdir(mon_répertoire) crée un répertoire intitulé mon_répertoire.
-
SD.rmdir(mon_répertoire) déplace le répertoire intitulé mon_répertoire.
-
mon_fichier.print(donnée) écrit la donnée sous forme d'une suite de caractères dans le fichier intitulé mon_fichier.
-
mon_fichier.println(donnée) écrit la donnée sous forme d'une suite de caractères dans le fichier intitulé mon_fichier puis retourne à la ligne.
-
mon_fichier.close() ferme le fichier intitulé mon_fichier.
Dans l'univers Arduino, le shield Mémoire est essentiellement utilisé pour réaliser un horodatage (enregistrement de données avec date et heure).
Fichier :