Enregistrer des données

cartesdBesoin

Lorsque l’on veut récupérer des données acquises par un Arduino, il existe différentes solutions :

  • Communiquer par le câble USB et le terminal série (voir Bibliothèque Serial)
  • Utiliser un média de communication sans fil (Bluetooth, Xbee, …))
  • ou bien enregistrer les données localement de manière à pouvoir les consulter plus tard.

La dernière solution est particulièrement adaptées pour :

  • des acquisitions sur de longues périodes : pas besoin laisser un PC allumé (avec les risques de coupure !)
  • des acquisitions rapides : les média de communication série ne sont pas très rapides
  • des systèmes embarqués sur véhicules : pas de câble ni de problème de portée de signal

Problématique

La problématique est la suivante :

  1. Sauvegarder les données sur un média de stockage de masse, rapide et de grande capacité.
  2. Déclencher périodiquement l’enregistrement et/ou maitriser la variable « temps ».

Utilisation d’une carte SD

Pour utiliser une carte SD, il faut un module spécial.

Il existe de nombreux shields possédant un slot pour carte microSD. Dans ces cas là, aucun branchement particulier n’est à faire.

Les autres modules, plus universels et non réservés aux Arduino, fonctionne sur un bus SPI, et doivent être connectés sur les ports suivants :

Exemple : module MicroSD card de CATALEX :

 

 

Ils peuvent être utilisés avec la bibliothèque standard SD., ou bien avec une bibliothèque plus évoluée nommée SDfat.

Installation de SDFat

  1. Télécharger l’archive zip du dépot de SDfat,
  2. Dézipper cette archive,
  3. Placer le dossier SdFat dans le sous-dossier libraries du dossier Documents/Arduino.

Exemple de programme

#include <SdFat.h>

SdFat carteSD;  
SdFile fichier;            // fichier pour les données
const byte SD_PIN = 4;     // port de la carte SD (ne pas changer)

unsigned long t0 = 0;                 // variable pour le timer
const unsigned long periode = 1000;   // période d'enregistrement (en ms)

void setup() {
  // Initialisation de la carte SD
  carteSD.begin(SD_PIN);
 
  // Mise à zéro du timer
  t0 = millis();
}

void loop() {
  unsigned long t = millis();
 
  if (t-t0 > periode) {
    t0 = t;
    EcrireDonnees(t);
    }
 
  // Autres opérations à réaliser .......
  delay(100);
}

void EcrireDonnees(unsigned long t) {
  // Acquisition des données
  float donnee = float(analogRead(A0)) / 180;
 
  // Enregistrement des données
  if (fichier.open("donnees.csv", O_RDWR | O_CREAT | O_AT_END)) {
    fichier.print(t);
    fichier.print(",");
    fichier.println(donnee, 1);
    
    fichier.close();   // fermeture du fichier
    }
}

Exploitation des données

Le programme précédent enregistre les données au format CSV (comma-separated values), la plupart des tableurs peuvent ouvrir ce format !

 

 

 

 

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *