Bonjour à tous,
Je me présente en deux mots, je m'appelle Florian et je suis étudiant dans le domaine des énergies. Je viens solliciter votre aide pour un projet que je mène. Je vais réaliser un démonstrateur sur l'évolution de la température dans deux ballons d'eau chaude. Pour ce faire, je compte donc disposer 3 sondes par ballon (haut, milieu et bas). Je désire ensuite effectuer des enregistrements de ces températures avec horodatage. J'ai découvert récemment les cartes arduino qui sont très évolutives et permettent de faire énormement de choses. J'envisage donc d'effectuer mes enregistrement via carte arduino + shield SD, d'un point de vue matériel le projet reste basique. Mais d'un point de vue programmation, étant débutant en la matière j'avoue etre quelque peu dépassé pour le moment. Je souhaite donc obtenir un fichier texte, ou .csv de la forme suivante :
Sonde A Sonde B Sonde C Sonde D Sonde E Sonde F
Jour/Mois/Année hh:mm:ss Temp1 Temp2 Temp3 Temp4 Temp5 Temp6
Jour/Mois/Année hh:mm:ss Temp1 Temp2 Temp3 Temp4 Temp5 Temp6
Jour/Mois/Année hh:mm:ss Temp1 Temp2 Temp3 Temp4 Temp5 Temp6
....
Tout d'abord, pensez-vous que cela soit possible ?
J'ose imaginer que la réponse à la question ci-dessus sera positive. De ce fait, nous en arrivons au programme à fournir à la carte arduino pour que le système travaille correctement. J'ai pu trouver sur internet un exemple de programme pour un capteur, il faut donc que je l'adapte pour 6 capteurs. Voici mon résultat :
#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_capteurH1 = 0; //Numéro de la pin où est relié le capteur haut du ballon 1
const char pin_capteurM1 = 1; //Numéro de la pin où est relié le capteur milieu du ballon 1
const char pin_capteurB1 = 2; //Numéro de la pin où est relié le capteur bas du ballon 1
const char pin_capteurH2 = 3; //Numéro de la pin où est relié le capteur haut du ballon 2
const char pin_capteurM2 = 4; //Numéro de la pin où est relié le capteur milieu du ballon 2
const char pin_capteurB2 = 5; //Numéro de la pin où est relié le capteur bas du ballon 2
// Declaration des variables générales
const unsigned long F_refresh = 300000; //Entrez ici la fréquence de rafraichissement du capteur, en millisecondes
DateTime moment; //Création d'un objet contenant les données temporelles
String datastring; //Création d'un objet type string pour les données à écrire
RTC_Millis RTC;
File fichier;
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
RTC.begin(DateTime(__DATE__, __TIME__)); //Initialisation de l'horloge RTC avec les valeurs DATE et TEMPS de votre ordinateur
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);
moment = RTC.now(); //Init de l'objet temporel
datastring=String(moment.day(),DEC)+'/'+String(moment.month(),DEC)+'/'+String(moment.year(),DEC)
+' '+String(moment.hour(),DEC)+':'+String(moment.minute(),DEC)+':'+String(moment.second(),DEC);
int sensor = analogRead(pin_capteurH1); // lire la valeur du capteurH1 et la mettre dans la chaine de caractères
int sensor = analogRead(pin_capteurM1); // lire la valeur du capteurM1 et la mettre dans la chaine de caractères
int sensor = analogRead(pin_capteurB1); // lire la valeur du capteurB1 et la mettre dans la chaine de caractères
int sensor = analogRead(pin_capteurH2); // lire la valeur du capteurH2 et la mettre dans la chaine de caractères
int sensor = analogRead(pin_capteurM2); // lire la valeur du capteurM2 et la mettre dans la chaine de caractères
int sensor = analogRead(pin_capteurB2); // lire la valeur du capteurB2 et la mettre dans la chaine de caractères
datastring += String("\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;
}
J'imagine qu'il y a des erreurs, le code de base comprenait un seul capteur et des led pour indiquer l'état de l'enregistrement. J'ai donc supprimé les lignes de code concernant les led et dupliquer celle du capteur puisque dans mon cas j'en ai 6.
En espérant ne pas être trop trop loin de la vérité avec ce programme et vous remerciant par avance pour votre aide.
Cordialement,
Florian LE GAL.