Projet - Datalogger sur Excel // Erreur d'écriture

Bonjour à tous,

Je me permet de solliciter votre aide car je tente de réaliser une valise de mesure de température.
L'enregistrement température/Hygrtométrie se fait bien, à condition que via mon PC j'ouvre la fenêtre série.

Or je souhaite poser mon " ensemble de mesure " dans un frigo' par exemple, et y enregistrer la température & humidité pendant 24h, via une petite batterie.
Je souhaite donc enregistrer dès la mise sous tension de l'arduino - Or ce n'est pas le cas, et je sèche.

J'utilise une carte Arduino UNO R3 & un shield, le voici : Adafruit Assembled Data Logging shield for Arduino : ID 1141 : $13.95 : Adafruit Industries, Unique & fun DIY electronics and kits
Un DHT22 connecté sur la broche n°2

Voici le code :

#include <SPI.h>
#include <SD.h>
#include <DHT.h>
#define brocheDeBranchementDHT 2    // La ligne de communication du DHT22 sera donc branchée sur la pin D6 de l'Arduino
#define typeDeDHT DHT22             // Ici, le type de DHT utilisé est un DHT22 (que vous pouvez changer en DHT11, DHT21, ou autre, le cas échéant)

const int chipSelect = 10;

DHT dht(brocheDeBranchementDHT, typeDeDHT);

void setup() {
  // Ouvre le serial
  Serial.begin(9600);


    // Initialisation du DHT22;
  dht.begin();
  
  Serial.print("Initialisation SD card...");

   //Regarde si la carte SD est présente, et si oui l'initialise
  if (!SD.begin(chipSelect)) {
    Serial.println("Erreur carte SD ou absente ! ");
    // On ne fais rien d'autre
    while (1);

  }
  
    //Serial.println("Card initialisée avec succès.");
    File dataFile = SD.open("datalog.csv", FILE_WRITE); // Ouverture de la file
    dataFile.print("Date/heure;Temperature;Hygrometrie"); // Création des colonnes du excel
    dataFile.close(); // Fermeture de la file
}

void loop() {


  String data_array = "";
    data_array += String(dht.readTemperature()); // Enregistre la température
    data_array += ";";
    data_array += String(dht.readHumidity()); // Enregistre l'hygrométrie relative
  

  // Ouvre la file. - Attention, on ne peut en ouvrir qu'une seule à la foie
  // Il faut donc la refermer à chaque fois
  File dataFile = SD.open("datalog.csv", FILE_WRITE);

  // Si le fichier est OK, on écrit dessus
  if (dataFile) {
    dataFile.println(data_array);
    dataFile.close();
  }
  
  else {
  Serial.println("Erreur d'ouverture datalog.csv");
  }
  
  delay(1000);

}

ils ont un tuto (avec diverses recommandations) ici

précisez votre montage, la version du shield, si vous avez la pile pour la RTC, comment vous alimentez par la batterie etc...

Version du shield : V1
Pile RTC : Présente & neuve
Alimentation par la batterie : Bloc de 4 piles dans un boîter, sur prise type Jack

Je me suis rendu compte de la mauvaise connectique du module d'insertion SD - Parfois, la carte ne voit pas la présence du module SD - En appuyant dessus et en resettant, j'arrive à la faire lire.

Le montage inclut un DHT.22 sur l'entrée n°2 via une bread board de test.
Je récupère bien les infos sur le serial monitor lorsque je debug en lisant température et hyrométrie.

Je vais lire le tutoriel & tenté de voir si je trouve quelques informations.
Merci

est-ce 4 x 1.5 V ? ça fait 6V ce n'est pas assez pour le jack, la doc dit 7V mini

Alors oui c'étais bien 4x 1.5v - Je viens de corriger le problème avec une alimentation fournis par le starter kit qui se branche sur le 220v - avec son transformateur

Le soucis est donc bien réglé désormais au niveau de l'alimentation
Cependant, le système ne fonctionne toujours pas sans ouverture de la console.

Si vous alimentez par USB sans ouvrir le moniteur série est-ce que ça fonctionne?

Non plus

Il faudrait détailler un peu, qu'est-ce qui ne fonctionne pas?

  • le fichier est créé ou non ?
  • l'entête est inscrite dans le fichier ou non ?
  • il y a des données dans le fichier ou non ?
  • il y a des données mais elles sont illisibles ?

Bonjour,

Alors non, le fichier n'est pas créer, aucun header ni donnés.

Cependant, lorsque j'ouvre le moniteur série, le fichier se crée, l'en-tête se positionne ainsi que les donnés qui sont lisibles.

Une version de ton code avec un affichage de l'exécution.
Au départ la LED de la carte est éteinte.
Si la carte est initialisée la LED s'allume.
Si on entre dans loop elle va changer d'état lors de l'écriture, soit à chaque seconde, en principe.

#include <SPI.h>
#include <SD.h>
#include <DHT.h>
#define brocheDeBranchementDHT 2    // La ligne de communication du DHT22 sera donc branchée sur la pin D6 de l'Arduino
#define typeDeDHT DHT22             // Ici, le type de DHT utilisé est un DHT22 (que vous pouvez changer en DHT11, DHT21, ou autre, le cas échéant)

const int chipSelect = 10;

DHT dht(brocheDeBranchementDHT, typeDeDHT);

void setup() {
  // Ouvre le serial
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

    // Initialisation du DHT22;
  dht.begin();
  
  Serial.print("Initialisation SD card...");

   //Regarde si la carte SD est présente, et si oui l'initialise
  if (!SD.begin(chipSelect)) {
    Serial.println("Erreur carte SD ou absente ! ");
    // On ne fais rien d'autre
    while (1);

  }
  
    //Serial.println("Card initialisée avec succès.");
    File dataFile = SD.open("datalog.csv", FILE_WRITE); // Ouverture de la file
    dataFile.print("Date/heure;Temperature;Hygrometrie"); // Création des colonnes du excel
    dataFile.close(); // Fermeture de la file
    digitalWrite(LED_BUILTIN, HIGH);
}

void loop() {


  String data_array = "";
    data_array += String(dht.readTemperature()); // Enregistre la température
    data_array += ";";
    data_array += String(dht.readHumidity()); // Enregistre l'hygrométrie relative
  

  // Ouvre la file. - Attention, on ne peut en ouvrir qu'une seule à la foie
  // Il faut donc la refermer à chaque fois
  File dataFile = SD.open("datalog.csv", FILE_WRITE);

  // Si le fichier est OK, on écrit dessus
  if (dataFile) {
    dataFile.println(data_array);
    dataFile.close();
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
  }
  
  else {
  Serial.println("Erreur d'ouverture datalog.csv");
  }
  
  delay(1000);
}

Adafruit a des bibliothèques dédiées à ce shied en fonction de la version. Il faudrait peut être commencé par tester avec leurs exemples