lundi 31 octobre 2016

Utilisation du "Data Logging Shield" (Arduino)


Je me souviens d'une époque (pas si lointaine) où je n'achetais pratiquement jamais de shield pour Arduino, parce que les prix me semblaient inutilement élevés.  Ainsi, lors de la réalisation d'un montage destiné à compiler des mesures de températures et de luminosité, j'avais utilisé, en plus des capteurs nécessaires,  un module RTC (horloge temps réel), un lecteur de carte SD, un convertisseur de niveau logique (requis par le lecteur de carte SD), etc.

J'avais alors fait remarquer qu'un shield tout fait était vendu par Adafruit, mais au prix de 14 USD, ça me semblait un luxe inutile.

Les temps ont bien changé.  De nos jours, vous pouvez facilement trouver sur eBay des clones du Data Logging Shield conçu par Adafruit pour aussi peu que 3 USD (frais de port inclus).

Résultat:  de nos jours, même pour un radin comme moi, il n'y a aucune raison de se priver d'un data logging shield prêt à l'utilisation.

Le shield comporte un lecteur de carte SD, une horloge temps réel et un convertisseur de niveau logique, en plus de deux LEDs que vous pouvez, au besoin, lier à la pin Arduino de votre choix.  Il ne reste donc plus qu'à brancher les capteurs.

L'horloge

Pour que l'horloge temps réel DS1307 fonctionne correctement, il faut insérer une pile CR1220 (qui n'était pas fournie avec le shield que j'ai acheté).  Cette horloge utilise le protocole i2c.

Pour utiliser l'horloge, vous devez installer la bibliothèque RTClib de Jeetlabs qui n'est généralement pas incluse avec l'IDE Arduino.  Le sketch d'exemple "ds1307" fourni avec la bibliothèque vous permettra de vérifier que votre horloge fonctionne correctement (si elle n'affiche pas l'heure et la date correcte, exécutez l'exemple "ds1307" après avoir décommenté la ligne "RTC.adjust(DateTime(__DATE__, __TIME__));"





Le lecteur de cartes SD

Le lecteur de carte SD utilise quant à lui le protocole SPI.  La bibliothèque SD est déjà installée par défaut avec l'IDE Arduino.  Pour vous assurer que le lecteur fonctionne correctement, vous pouvez exécuter le sketch "CardInfo" fourni avec la bibliothèque SD...


...mais attention:  dans ce sketch, vous devez modifier la constante "chipSelect" et lui assigner la valeur "10".


Les LEDs indicatrices

Le shield comporte également deux LEDs (L1 et L2) qui peuvent être connectées à n'importe quelle sortie de l'Arduino.  Grâce à deux petits bouts de fil conducteur, j'ai relié la LED "L1" à la sortie 5 de l'Arduino, et la LED "L2" à la sortie 4 (un fer à souder est requis ici).

Ces LEDs peuvent être utilisées pour vous permettre de savoir si votre data logger fonctionne correctement lorsqu'il n'est pas connecté à un ordinateur (une LED peut s'allumer ou clignoter pendant que les mesures sont prises, une autre peut indiquer la fin de la prise de mesure, etc.).

Un exemple de sketch

Pour cet exemple de sketch, j'ai supposé la présence de deux capteurs analogiques branchés respectivement aux entrées A0 et A1 du shield.  Il ne vous restera qu'à adapter le code pour qu'il gère les capteurs qui vous conviennent, peu importe qu'ils soient analogiques ou numériques.

Des mesures sont prises toutes les 10 secondes:  il est facile de modifier cette fréquence, stockée dans la constante "DELAI_MESURES".

Chaque fois qu'une mesure est prise, elle est affichée dans le moniteur série, si ce dernier est actif (ce qui sera surtout utile pour vérifier le fonctionnement correct du dispositif).  De plus (et surtout), elle est enregistrée dans un fichier "csv" ("comma separated values") qui pourra facilement être ouvert et traité avec un tableur comme, par exemple,  Excel.  Notez que j'utilise la convention qui permettra aux fichiers d'être correctement interprétée par la version française d'Excel:  les données sont séparées par des points virgules plutôt que par des virgules.

La LED "L1" clignote pour indiquer que le data logger est en fonctionnement (si vous oubliez d'insérer une carte SD lors du démarrage du sketch, la LED ne s'allumera pas).

La LED "L2" s'allume temporairement chaque fois que le data logger effectue des mesures et les enregistre sur la carte SD.



Voici ce qu'affiche le moniteur série pendant la prise de mesures:


Et voici le fichier "RAPPOR00.CSV" qui a été enregistré sur la carte SD, après ouverture dans Excel:


Les données peuvent ensuite être présentées sous forme de graphiques.



Yves Pelletier   (TwitterFacebook)

2 commentaires:

  1. bonjour
    le lien vers la bibliothèque RTClib renvoie une page 404
    adafruit ayant une biblio RTClib, erreur compilation
    'class DateTime' has no member named 'get'
    la biblio n'est plus compatible
    étant dans l'incapacité de remplacer une fonction que dont j'ignore le rôle par la nouvelle fonction équivalente, votre article n'est pas tres ancien, c'est pas comme s'il avait été écrit en 2009 pour une duemilanove
    dommage
    merci

    RépondreSupprimer
    Réponses
    1. Vous avez raison! Jean-Claude Wippler a déplacé sa bibliothèque, et la méthode "get" n'est pas disponible dans la version offerte par Adafruit. Je viens de mettre à jour le lien vers la bibliothèque de Jean-Claude Wippler, tout devrait maintenant fonctionner. Merci d'avoir signalé le problème.

      Supprimer