Enregistrer des Données en .csv

Lors d'un Appui sur un BP les mesures doivent s'enregistrer . . .

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour a tous, Ici c'est la partie programme qui m’intéresse et j'aimerai recevoir quelques aides si possible.

Je vous explique, je suis actuellement en projet, au lycée en terminale technologique.

Ce projet consiste à créer un odomètre électronique et ou je devrais afficher sur un LCD les mesures faites en temps réel (distance et dénivelé), et enregistrer celles-ci en format ".csv"(format tableur) via une arduino Ethernet sur une carte SD car elles devront aussi être retranscrites sur une page web.

Pour ma part, je dois élaborer le programme qui me permet d'enregistrer ces données en .csv sur la SD lorsque je décide d'arrêter les mesures avec un Bouton Poussoir pour pouvoir les consulter sur l'ordinateur et les mettre sur une page Web.(Utilisation Ultérieure)

Voila c'est à peu près tout je pense.. Merci A vous

PS: Excusez moi si je me répète et je suis débutant.

Édité par Kâan

+0 -0

Bonjour,

Je suppose que tu dispose du shield ethernet avec un lecteur de carte SD intégré. Tu as donc des exemples tout fait pour faire exactement ce que tu veux.

PS: Excusez moi si je me répète et je ne trouve pas les retours a la ligne, je suis débutant.

Kâan

Il y a un retour à la ligne automatique en fin de paragraphe. Pour faire un paragraphe il suffit de laisser une ligne vide. Une retour à la ligne en dehors d’un paragraphe n’a pas beaucoup de sens, c’est toutefois possible en laissant entrant deux espaces avant de passer à la ligne suivante
comme ceci.

La répétition est la base de l’enseignement. — ☮ ♡

+2 -0

Un fichier .csv est un fichier texte où les données sont mises en clair. Un tableau va simplement mettre en forme les données de manière automatique car on utilise des caractères spécifiques pour séparer les données.

Le principe consiste à écrire dans un fichier tes données à la suite:

1
2
3
4
5
6
Index;distance;denivele;
1;100;2;
2;50;6;
3;46;7;
...
101;89;2;

La première ligne consiste à mettre à titre à chaque "colonne", ce n'est pas obligatoire mais c'est mieux pour s'y retrouver. Dans cet exemple j'ai utilisé le point-virgule pour délimiter les données mais on peut utiliser d'autres caractères, néanmoins je trouve que c'est le plus pratique pour des données numériques.

Le principe consiste à définir un intervalle de temps, par exemple toutes les 500 ms ou toutes les secondes, où tu va récupérer les données et les écrire dans le fichier et reviens à la ligne à chaque fois pour séparer les données.

Pour bien faire les choses il faut "fermer" le fichier après chaque écriture, donc lorsque tu appuie sur ton bouton poussoir, normalement il n'y a pas grand chose à faire si ce n'est arrêter la partie du programme qui va écrire dans le fichier. (Un simple if qui vérifie la valeur d'une variable activée par le bouton poussoir fait le boulot)

+2 -0
Auteur du sujet

Merci SimBilou mais j'ai bien entendu déjà fait des recherches et ce n'était pas ça qu'il me fallait car j'ai fait une partie de mon programme avec le site arduino…

Maintenant la réponse de zeqL m'aide un peu, le fait est que je ne comprends pas ce que cela donne une fois enregistré et et je voudrai savoir si je pourrai avoir les fonctions qui permettent de faire a peu près ce que tu as dit…(Dans mon cas je voudrais avoir sur mon écran et ma carte SD les valeurs en temps réel)

Cela me serait d'une grande aide.

Merci simbilou et zeqL.

+0 -0

Ca ne veut rien dire "en temps réel".

L'oeil humain rafraichit la vision à environ 30 Hz (environ toutes les 3 ms). Donc lorsque tu affiche quelque chose, cela ne sert à rien d'afficher à une fréquence de rafraichissement (des données par exemple) de plus de 30 Hz mais tu peux quand même enregistrer dans un fichier à un fréquence plus élevée sans problème.

Ensuite il faut réfléchir à son système : tu réalise un odomètre, et sans parler de la fréquence d'acquisition des capteur (j'en parle après), est-ce utile de faire une mesure toutes les 100 ns (par exemple) ? Que se passe-t-il en 100 ns ? Combien de mm parcours-t-on ? Est-ce que la précision demandée par le système final demande une fréquence aussi élevée ? Le fait d'écrire en mémoire prend un certain temps incompressible et tu ne pourras pas aller plus vite que la musique. Donc il est inutile de surcharger la mémoire pour avoir une précision extrême qui sera ruinée par autre chose.

Autant se fixer à quelque chose de réaliste dans un premier temps : on rafraichit les données toutes les 1 ms. Et tu peux même envisager quelque chose de paramétrable (via un timer qui provoque une interruption qui lance l'acquisition des données, le stockage dans le fichier et enfin l'affichage) au niveau fréquence.

Dernier point, les composants : ils ne renvoient pas une valeur en temps réel, ils ont eux aussi une fréquence de rafraichissement. Donc il faut voir ce dont tes capteurs sont capables. Inutile de rafraichir toutes les 100 ns si tes composants ne se rafraichissent que toutes les 10 µs. Tu peux le faire mais tu va stocker la même valeur tout le temps, donc c'est utiliser de la mémoire pour rien.

+1 -0

Merci SimBilou mais j'ai bien entendu déjà fait des recherches et ce n'était pas ça qu'il me fallait car j'ai fait une partie de mon programme avec le site arduino…

Kâan

Je ne comprend pas ce que tu veux dire. L’exemple que je t’ai montré montre explicitement comment se servir de la bibliothèque SD pour écrire un fichier csv avec des données récupérées sur les entrées analogiques. Il suffit de l’adapter à ta situation.

Je crois que tu ne sais pas par quel bout attaquer le projet alors décortiquons les choses. Pour le moment on va ignorer la partie serveur Web. Il y trois choses à peu près indépendante que ton programme fait :

  • Lire les données de ton odomètre jusqu’à l’appui sur un bouton.
  • Afficher une chaine le LCD.
  • Écrire un fichier sur la carte SD.

Si tout faire d’un coup te parait trop complexe, tu peux tout à fait écrire trois programmes séparés qui testent chacune de ces fonctionnalités. Une fois que tu as ces trois programmes, les regrouper en un seul de façon à ce que la chaîne affiché et le fichier écrit reflètent les valeurs lues ne devrait pas être insurmontable.

Édité par simbilou

La répétition est la base de l’enseignement. — ☮ ♡

+0 -0
Auteur du sujet

ZeqL je me suis embrouillé bien entendu je sais que nous ne voyons pas tout en "temps réel". Je suis d'accord en ce qui concerne la mémoire il ne faut pas la surcharger. D'ailleurs 1 ms me paraît bien mais le problème étant le côté materiel, ce n'est pas moi qui m'en charge et mon collègue n'avance pas sur son choix de capteur, ça sera sans doute un capteur a aimant ou effet hall avec une précision dites Lambda, nous n'avons pas de précisions en ce qui concerne le capteur et les fréquences dans le cahier des charges… Merci à toi.

Maintenant, Simbilou, je me suis mal exprimé alors, ce que je veux dire c'est que je me suis déjà inspiré de cet exemple mais je ne comprends pas une partie du programme et j'aimerai quelques explications s'il te plait sur ce qui est compris dans le " void loop". Merci à toi aussi

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte