Comment ajouter un enregistreur de données sur carte SD à un projet Arduino

Les projets Arduino peuvent varier considérablement, allant des gérants de brassage à la maison aux stations météo en passant par la domotique avancée. Souvent, vous voudrez enregistrer les données de ces projets. Dans ce tutoriel, je vais vous montrer comment intégrer une carte SD et un module d'horloge en temps réel dans un projet pour permettre l'enregistrement de données horodatées..

Rassembler les composants, les outils et les bibliothèques

Composants

  • Planche à pain standard
  • Arduino ce tutoriel utilise Nano, mais la plupart des modèles devraient fonctionner
  • Tableau de bord de carte MicroSD
  • Carte Micro SD
  • Horloge temps réel
  • Capteur d'humidité de la température
  • Fil de raccordement de calibre 22 (couleurs multiples)
  • Clip de batterie 9V avec fils

Outils

  • Fer à souder
  • Souder
  • Troisième outil à main
  • Ordinateur avec Arduino IDE pour la programmation
  • Câble USB approprié pour votre Arduino-Mini B pour le Nano

Bibliothèques

Téléchargez les bibliothèques Arduino suivantes à partir de leurs référentiels. Pour chaque bibliothèque, décompressez le dossier dans le répertoire. Arduino / bibliothèques dossier. Renommez chacun des dossiers pour être Dakota du Sud, RTCLib, et DHT respectivement. L'IDE Arduino ne peut pas gérer les tirets dans les noms de fichiers.

  • Adafruit SD library (wrapper for sdfat library) pour travailler avec la carte SD
  • Adafruit RTCLib fork pour lire et régler l'heure dans l'horloge temps réel
  • Bibliothèque de capteurs Adafruit DHT pour lire la température et l'humidité

Un mot sur le choix d'un enregistreur de données

Les enregistreurs de données sont disponibles en tant qu'éléments discrets et leur coût peut varier de 35 USD à plusieurs centaines. Choisir le bon enregistreur est une décision importante dans le projet. Il serait extrêmement décevant de récupérer un projet d'observateur en eau profonde et de découvrir que les données de l'année dernière ont été corrompues.. 

Comme pour tous les projets, vous devez tenir compte de la consommation d'énergie, mais vous devez connaître plusieurs autres fonctionnalités lors de la sélection d'un enregistreur de données pour un projet particulier..

Conditions environnementales

Peut-être que le projet va être dans des conditions difficiles. Les secousses physiques, les températures élevées, l'humidité et d'autres conditions affecteront le choix. Il existe des enregistreurs disponibles qui peuvent résister à différentes conditions. Assurez-vous de savoir où vivront votre projet et votre enregistreur et choisissez la bonne technologie..

Type d'interface

Il existe des enregistreurs série qui parlent de n'importe quel protocole, I2C, RS232, CAN, SPI, etc. Le protocole d'interface affectera la rapidité avec laquelle les données du journal peuvent être écrites. Assurez-vous de sélectionner l'enregistreur qui convient à la technologie du projet et aux exigences de vitesse d'écriture.  

Récupération du journal

Ce n'est pas bon si les données enregistrées ne peuvent pas être récupérées. C'est l'arbre proverbial qui tombe sans que personne ne l'entende. Assurez-vous de bien comprendre comment les données doivent être extraites de l'enregistreur que vous sélectionnez. Dans certains cas de puces IC de logger discrètes, vous devrez créer une interface externe que vous pourrez utiliser pour extraire les données de la puce..

Temps

Certains enregistreurs ne font que vider les données, tandis que d'autres ont des horodatages incroyablement précis pour les enregistrements de données. Comme vous vous en doutez, plus l'horodatage est précis, plus le prix est élevé. Si votre projet nécessite une journalisation très rapide dont l'horodatage est à la nanoseconde, il en exécutera un peu plus qu'un enregistreur qui n'a aucune idée de l'heure qu'il est..  

Persistance

C'est ce que vous voulez faire lorsque vous dépassez la fin du stockage. Les schémas varient de l'arrêt de la journalisation à l'écrasement des données les plus anciennes.

Type de support / Durabilité

Assurez-vous d'évaluer combien de fois la mémoire de l'appareil peut être écrasée et quel est le plan quand il commence à tomber en panne. Si vous devez remplacer l'intégralité de l'enregistreur après 10 000 écrasements, la valeur dépendra du nombre d'écritures que vous prévoyez de faire par seconde..

Enregistreur de carte SD

Les avantages d'utiliser une carte SD pour la journalisation sont nombreux. C'est relativement peu coûteux. Vous pouvez choisir votre propre format de journalisation et indiquer si vous voulez ou non un horodatage. Le support est facilement remplaçable lorsqu'il est usé et peut être retiré rapidement et lu par n'importe quel ordinateur standard.  

La journalisation sur carte SD présente également des inconvénients. 

Ce n'est pas le meilleur environnement accidenté où l'humidité pourrait affecter les contacts. Il consomme également beaucoup de broches précieuses sur un micro-contrôleur. Entre l’horloge temps réel (RTC) et la carte SD, il utilise six broches de différents types..  

J'ai choisi l'enregistreur de carte SD pour ce tutoriel en raison de la facilité et de la souplesse de travail avec la carte SD pour l'écriture et la lecture des journaux. Plus important encore, les compétences d'utilisation de la carte SD et d'un RTC seront utiles pour une variété d'autres projets..

Construire le projet

Suivez les étapes ci-dessous pour assembler la planche à pain. Ce didacticiel utilise un simple capteur de température et d’humidité pour collecter des données d’enregistrement. Après avoir suivi les étapes, vous devriez avoir une maquette qui ressemble au schéma ci-dessous..

Enregistreur de données de carte SD terminé

Assemblez le plateau de discussion SD

La carte opto-isolée SD Card est livrée avec des en-têtes conviviaux, mais ils ne sont pas attachés. Une brève session de soudure résoudra le problème et vous permettra de placer la carte comme indiqué sur le schéma..

Formater et insérer la carte SD

Placez la carte SD sur un ordinateur et vérifiez qu’elle est formatée avec un système de fichiers FAT32. Vous aurez peut-être besoin d'un adaptateur MicroSD vers carte SD standard. La carte SD dans la liste des composants est fournie avec un adaptateur. Insérez la carte SD avec précaution dans la carte de discussion.

Assemblez l'horloge en temps réel

La carte temps réel, ou RTC, est livrée en kit et nécessite un peu plus de soudure pour être assemblée. Tous les composants sont inclus dans le kit. Suivez les instructions étape par étape pour assembler la carte, y compris les en-têtes de trous traversants.. 

Assurez-vous d'insérer la batterie fournie dans le clip après l'assemblage. Il ne fonctionnera pas correctement sans la batterie en place. Le RTC ne tire de la batterie que lorsqu'il n'y a pas de tension principale, la batterie devrait donc durer des années.

Fixation du clip de batterie 9V

De nombreux boîtiers de batterie, comme celui de la liste de pièces ci-dessus, sont livrés avec des fils conducteurs qui ne sont pas adaptés à la fabrication de cartes. Pour rendre la planche de connexion conviviale pour les fils, soudez un fil ou une broche de tête à la fin de chaque fil.

Un mot sur les lecteurs de cartes SD

Les lecteurs de carte SD peuvent être achetés beaucoup moins chers que celui recommandé dans ce tutoriel. Le problème, cependant, est que les lecteurs de cartes SD utilisent une technologie de 3 volts, tandis que l’Arduino utilise un micro-contrôleur de 5 volts.. 

Cela signifie que pour utiliser en toute sécurité un lecteur de carte SD avec un Arduino, un convertisseur de niveau logique est nécessaire pour convertir les tensions entre les deux. Cela ajoute des coûts et de la complexité. Le lecteur spécifié dans la liste des pièces est peut-être un peu plus cher, mais il a plusieurs choses à faire..

  • Il possède un convertisseur de niveau logique intégré, de sorte qu'aucun composant ou câblage supplémentaire n'est nécessaire. Il n’utilise pas de résistances pour réduire la tension, ce qui peut ralentir les lectures et les écritures sur la carte. Par conséquent, il peut être connecté directement à l'Arduino en toute sécurité
  • Il utilise des cartes Micro SD pour une empreinte très compacte
  • Il y a beaucoup de code disponible et des exemples pour cela

Le lecteur utilise le protocole SPI pour communiquer. Les cartes Arduino sont fournies avec certaines broches conçues pour ce protocole. Bien qu'il soit possible d'utiliser des broches alternatives dans un pincement, vous obtiendrez les performances les plus rapides et les plus fiables en utilisant les broches dédiées au matériel..

Les broches indiquées dans l’image schématique sont précises pour un Arduino Uno ou Arduino Nano.

Programmer l'Arduino

Une fois le matériel du projet assemblé, l'étape suivante consiste à le programmer. Téléchargez le zip fourni avec ce tutoriel ou depuis le référentiel github pour ce projet de journalisation de données.

  • Ouvrir datalogger.ino dans l'IDE Arduino
  • Connectez l’Arduino Nano à l’ordinateur à l’aide du mini câble USB à USB
  • Assurez-vous que le port série est défini sur le port détecté par l'ordinateur lorsque vous avez connecté l'Arduino à l'aide du Outils> Port série menu
  • Assurez-vous que la carte est réglée sur Arduino Nano avec ATmega328 à l’aide du bouton Outils> Tableau menu
  • Vérifiez que les bibliothèques sont correctement installées en cliquant sur le bouton Vérifier bouton et assurez-vous qu'il n'y a pas d'erreurs
  • Connectez la batterie au projet. Cela semble étrange ici, mais les lecteurs Arduino, RTC, capteur et carte SD tirent tous assez de tension pour que je trouve que mon port USB ne fournit pas une alimentation suffisante et que le projet est réinitialisé en permanence. Prenez le temps de connecter la batterie 9V. Quand j’ai fait cela, j’ai remarqué que l’indicateur d’état s’allumait sensiblement sur l’Arduino.
  • Utilisez le Télécharger bouton pour transmettre le code à l'Arduino
  • Editez le code pour commenter la ligne: rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); En mettant un // au début de la ligne. La première fois que vous avez téléchargé le code, la date et l'heure du RTC sont définies en fonction de l'heure de la compilation. Mais vous ne voulez pas continuer à réinitialiser l'horloge pour compiler l'heure à chaque réinitialisation du conseil. Télécharger le code sans cela rtc.adjust dans il laissera le temps d'horloge seul sur le prochain démarrage
  • Téléchargez à nouveau le code avec la ligne de temps définie en commentaire
  • Ouvrez le Moniteur série fenêtre en appuyant sur Ctrl + Maj + M et assurez-vous qu'il est réglé sur 19200 bauds. Vous devriez voir l'initialisation Arduino avec une sortie comme dans l'exemple ci-dessous
Initialisation de l’enregistreur de données avec RTC version 1.0 Démarrage du capteur de température et d’humidité Démarrage du lecteur SDCard et de la carte Ouverture du fichier journal pour écriture. Début de l'horloge en temps réel Unixtime: 1405787147 1405787148,2014 / 7/19 16: 25: 48,69.80,40.00 1405787151,2014 / 7/19 16: 25: 51,69.80,40,00 1405787155,2014 / 7/19 16:25: 55,69,80,40,00 1405787158,2014 / 7/19 16: 25: 58,69,80,40,00 1405787162,2014 / 7/19 16: 26: 02,69,80,40,00 1405787165,2014 / 7/19 16:26:05, 69.80,40.00

Notes sur le programme

Le programme enregistreur de données combine les fonctions de la bibliothèque RTC, de la bibliothèque DHT et de la bibliothèque SD. En haut du programme, vous pouvez régler quelques options, telles que le nom du fichier de données et le type de DHT dont vous disposez.. 

Cependant, tous les paramètres par défaut devraient fonctionner correctement si vous avez utilisé les composants suggérés ci-dessus.

Boucle principale

La boucle principale du programme simple fait trois choses.

  • Lisez la température et l'humidité du capteur. J'ai emprunté du code pour cela dans un autre tutoriel que j'ai écrit: Construire un réseau de capteurs sans fil dans votre maison 
  • Formatez les données récupérées dans une liste séparée par des virgules à envoyer à la fonction de journalisation
  • Envoyer les données au logThis () fonction pour écrire sur la carte
  • Dormir pendant trois secondes

Il répète le processus tant qu'il y a du courant et de la place sur la carte SD.

Enregistrement

le logThis () function prend une chaîne de caractères de données en tant qu'argument, obtient l'heure du RTC, la formate avec les données et l'écrit dans le fichier journal. Le nom du fichier journal est spécifié dans le #définir section du programme. L'esquisse ouvre le fichier journal au démarrage de l'installation, de sorte que le consignateur de fichiers n'a pas à le rouvrir pour chaque entrée du journal. Le cryptique sprintf La commande ci-dessous formate les données. 

Si vous souhaitez modifier la manière dont les données sont enregistrées, assurez-vous de bien connaître la fonction sprintf et de pouvoir déplacer les éléments de formatage et de données. Si vous avez juste besoin de réorganiser les champs de date, vous pouvez simplement changer leur ordre entre les virgules et tout devrait bien fonctionner..

sprintf (message, "% ld,% d /% d /% d% 02d:% 02d:% 02d,% s", époque, Année, Mois, Jour, Heure, Minute, Seconde, logmessage);

Finalement, le dataFile.println (message) La commande écrit la chaîne formatée dans le fichier. La fonction se comporte comme le Serial.println commander.

Le système de fichiers FAT32 qui se trouve sur la carte SD présente certaines limitations qu'il est intéressant de connaître. Le nom du fichier doit également être au format 8.3. Le fichier le plus volumineux qu'il puisse contenir est un fichier de 2 Go. Il ne peut contenir que 268 173 300 fichiers. Espérons que vous pourrez vivre avec ces contraintes un peu.

Temps

Les fonctions maintenant.année () et les amis effectuent le travail nécessaire pour lire les éléments de temps actuels (époque unix, année, mois, jour, heure, minute, seconde) à partir du tableau RTC et renvoient la valeur.

La bonne chose à propos des horloges en temps réel est qu'elles gardent l'heure bien sûr. Bien que le code et le projet puissent faire d’autres choses importantes, comme s’assurer que votre bière est en train de fermenter à la bonne température, il ne fait que garder le temps. Même si votre projet perd de la puissance, il continue à fonctionner avec une batterie indépendante. 

Tout ce que vous avez à faire est de le demander et il vous indiquera l'heure qu'il est. Ceci est bien sûr parfait pour enregistrer des données. Le composant spécifié dans la liste de pièces est un chronomètre acceptable, mais les spécifications indiquent qu'il peut gagner jusqu'à deux secondes par jour.. 

Si cela vous empêche de rester éveillé toute la nuit, consultez alors le ChronoDot sophistiqué pour une précision accrue avec le même protocole. Il est totalement interchangeable avec le RTC dans ce projet pour quelques dollars de plus et il est livré entièrement assemblé.

Essai 

Vous avez construit le projet, l'avez programmé (deux fois) et avez tout lu sur la théorie de fonctionnement ci-dessus. Il est temps d'essayer.

  1. Placez la carte quelque part où la température et l'humidité seront intéressantes et branchez la batterie
  2. Laisser l’enregistreur fonctionner pendant un moment en collectant des données
  3. Après un peu, mettez le projet hors tension, puis retirez la carte SD.
  4. Mettez la carte dans l'adaptateur complet et insérez la carte SD dans votre ordinateur..
  5. Ouvrir le fichier datalog.txt

Vous devriez voir quelque chose comme ce qui suit.

1405787012,2014 / 7/19 16: 23: 32,69.80,40.00 1405787015,2014 / 7/19 16: 23: 35,69.80,40.00 1405787019,2014 / 7/19 16: 23: 39,69,80,40,00 1405787022, 2014/7/19 16: 23: 42,69.80,40.00 1405787026,2014 / 7/19 16: 23: 46,69,80,40,00 1405787029,2014 / 7/19 16: 23: 49,69,80,40,00 1405787053,2014 / 7/19 16: 24: 13,69.80,40.00

Conclusion

Dans ce tutoriel, je vous ai montré comment intégrer une carte SD et un module d'horloge en temps réel dans votre projet. Avec l'exemple de code, vous pouvez enregistrer des données pendant une période prolongée, qui peuvent être copiées rapidement et facilement sur un ordinateur.. 

Une fois ce projet terminé, vous pouvez essayer d’y apporter quelques modifications ou mises à niveau. Essayez de mettre à niveau la puce de temps pour des horodatages plus précis. Le programme inclus écrit simplement dans le même fichier encore et encore jusqu'à ce qu'il soit plein. Vous pouvez essayer de créer un schéma de rotation de fichier basé sur la date pour faire pivoter les fichiers une fois par semaine.. 

Je n'ai même pas mentionné le câble de détection de carte du lecteur qui vous permettra de modifier le schéma et la carte pour tester la présence d'une carte avant toute opération de lecture ou d'écriture. Bonne chance et amusez-vous à expérimenter.