Cet exemple simple, va vous permettre d'enregistrer sur une SDcard les valeurs relevés aux bornes d'un capteur, en incluant un horodatage.
Pour cela, nous avons besoin de :
- Un Arduino
- Un shield Mémoire
- Une breadboard
- Un capteur (ici LM35DZ, capteur de température)
- Trois fils
Comme indiqué dans la doc du LM35DZ, nous savons qu'il faut mettre la patte 1 au VCC (+5V pour nous), la patte 3 au GND, et que la patte du milieu délivrera une tension qui sera l'image de la température relevée. La résolution de ce capteur est de 10mV/°C.
Voici une photo du montage :
Comme vu sur la photo, la tension délivrée par le capteur est injectée sur la pin analogique 0.
Maintenant, un peu de programmation.
Ce que le logiciel va faire, c'es créer un fichier -dont vous choisirez le nom- et y insérer dans un intervalle de temps -que vous aurez choisi- les valeurs délivrées par le capteur, ainsi qu'en préfixe, un horodatage à la seconde près.
Détaillons maintenant ce code :
- Code: Tout sélectionner
/*
SNOOTLAB
Application N°1 Shield Mémoire : Stockage des valeurs de temperature dans un fichier texte
avec fonction d'horodatage
MàJ: 2 juillet 2012
Environnement : linux debian based / IDE Arduino 1.0.1 / Arduino UNO rev3 et Duemilanove
*/
#include <Wire.h>
#include <SD.h>
#include <RTClib.h>
// Declaration des pin utilisées
const char pin_chipSelect = 10; //10 est la pin utilisée par le shield mémoire pour le signal ChipSelect
const char pin_capteur = 0; //Numéro de la pin où est relié le capteur en question
// Declaration des variables générales
const unsigned long F_refresh = 5000; //Entrez ici la fréquence de rafraichissement du capteur, en millisecondes
RTC_DS1307 RTC;
File fichier;
String datastring;
void setup()
{
Serial.begin(57600); //Initialisation de la liaison série
Serial.print("Initialisation de la SD card...");
pinMode(pin_chipSelect, OUTPUT); // Mettre la pin en output
Wire.begin();
RTC.begin();
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(pin_chipSelect)) // Vérification de la présence de la SD card
{
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("log1.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'ouvertre, alors signaler l'erreur
{
Serial.println("erreur d'ouverture du fichier durant la configuration");
}
}
void loop()
{
delay(F_refresh);
DateTime moment = RTC.now(); //Init de l'objet temporel
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);
int sensor = analogRead(pin_capteur); // lire la valeur du capteur et la mettre dans la chaine de caractères
datastring += ("\t Valeur capteur = "); // préalablement remplie avec les données temporelles
datastring += String(sensor);
fichier = SD.open("log1.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;
}
La première partie (le setup) se charge de configurer la SD card et d'écrire l'en-tête dedans, la deuxième partie relève la valeur retournée par le capteur, et l'inscrit, avec l'horodatage, dans le fichier souhaité.
Cet exemple vous permet dans un premier temps d'appréhender la chaine de traitement de l'information, d'un capteur jusqu'à un fichier texte sur votre ordinateur, via une SD card.
Cet exemple se veut juste une base pour votre imagination, alors n'hésitez pas, soyez créatifs !



