Exemple : Stockage horodaté de valeurs d'un capteur

Un log shield sur carte SD avec horloge RTC et zone de prototypage à pastilles carrées

Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude Stéphane » Jeu 26 Mai 2011 16:07

Bonjour,

Cet exemple simple, va vous permettre d'enregistrer sur une SDcard les valeurs relevés aux bornes d'un capteur, en incluant un horodatage.
Pour cela, nous avons besoin de :
- Un Arduino
- Un shield Mémoire
- Une breadboard
- Un capteur (ici LM35DZ, capteur de température)
- Trois fils

Comme indiqué dans la doc du LM35DZ, nous savons qu'il faut mettre la patte 1 au VCC (+5V pour nous), la patte 3 au GND, et que la patte du milieu délivrera une tension qui sera l'image de la température relevée. La résolution de ce capteur est de 10mV/°C.

Voici une photo du montage :

Memoire_log_Temperature.JPG
Memoire_log_Temperature.JPG (49.48 Kio) Vu 10012 fois


Comme vu sur la photo, la tension délivrée par le capteur est injectée sur la pin analogique 0.

Maintenant, un peu de programmation.
Ce que le logiciel va faire, c'es créer un fichier -dont vous choisirez le nom- et y insérer dans un intervalle de temps -que vous aurez choisi- les valeurs délivrées par le capteur, ainsi qu'en préfixe, un horodatage à la seconde près.

Détaillons maintenant ce code :
Code: Tout sélectionner
/*
            SNOOTLAB
            Application N°1 Shield Mémoire : Stockage des valeurs de temperature dans un fichier texte
            avec fonction d'horodatage
            MàJ: 2 juillet 2012
            Environnement : linux debian based / IDE Arduino 1.0.1 / Arduino UNO rev3 et Duemilanove
        */

        #include <Wire.h>
        #include <SD.h>
        #include <RTClib.h>

        // Declaration des pin utilisées
        const char pin_chipSelect = 10;                            //10 est la pin utilisée par le shield mémoire pour le signal ChipSelect
        const char pin_capteur = 0;                                //Numéro de la pin où est relié le capteur en question

        // Declaration des variables générales
        const unsigned long F_refresh = 5000;                      //Entrez ici la fréquence de rafraichissement du capteur, en millisecondes
        RTC_DS1307 RTC;
        File fichier;
        String datastring;

        void setup()
        {
         
          Serial.begin(57600);                                     //Initialisation de la liaison série
          Serial.print("Initialisation de la SD card...");
         
          pinMode(pin_chipSelect, OUTPUT);                         // Mettre la pin en output
         Wire.begin();
           RTC.begin();                           
           if (! RTC.isrunning())
       {
         // Si la RTC n'est pas configurée, le faire avec les valeurs de l'ordinateur au moment de la compilation
         RTC.adjust(DateTime(__DATE__, __TIME__));
       }
         
          if (!SD.begin(pin_chipSelect))                           // Vérification de la présence de la SD card
            {                         
              Serial.println("Carte fausse ou absente");
              return;                                              // Si problème, sortir et bloquer l'exécution
            }
         
          Serial.println("Carte OK.");
         
          datastring = "\nReleve et horodatage des valeurs du capteur, selon horloge RTC\n---------\n ";
         
          fichier = SD.open("log1.txt", FILE_WRITE);               // Ouverture du fichier en mode Ecriture.

          if (fichier)                                             // Si le fichier existe déja, on écrira à la suite des données présentes.
            {

              fichier.println(datastring);

              fichier.close();

              Serial.println(datastring);              // dupliquer la donnée sur port série
            }
           
          else                                                     //Si problème à l'ouvertre, alors signaler l'erreur
            {                                                       
                Serial.println("erreur d'ouverture du fichier durant la configuration");
            }
         
        }

        void loop()
        {
          delay(F_refresh);
         
          DateTime moment = RTC.now();         //Init de l'objet temporel
          datastring=String(moment.day(),DEC);
          datastring+='/';
          datastring+=String(moment.month(),DEC);
          datastring+='/';
          datastring+=String(moment.year(),DEC);
          datastring+=' ';
          datastring+=String(moment.hour(),DEC);
          datastring+=':';
          datastring+=String(moment.minute(),DEC);
          datastring+=':';
          datastring+=String(moment.second(),DEC);
         
          int sensor = analogRead(pin_capteur);                    // lire la valeur du capteur et la mettre dans la chaine de caractères
         
          datastring += ("\t Valeur capteur = ");            // préalablement remplie avec les données temporelles
          datastring += String(sensor);
         
          fichier = SD.open("log1.txt", FILE_WRITE);
         
          if (fichier)
            {
             
              fichier.println(datastring);
             
              fichier.close();
             
              Serial.println(datastring);                 // dupliquer la donnée sur port série
            }
          else {
                Serial.println("erreur d'ouverture du fichier");
                }
         
          datastring =0;
        }





La première partie (le setup) se charge de configurer la SD card et d'écrire l'en-tête dedans, la deuxième partie relève la valeur retournée par le capteur, et l'inscrit, avec l'horodatage, dans le fichier souhaité.

Cet exemple vous permet dans un premier temps d'appréhender la chaine de traitement de l'information, d'un capteur jusqu'à un fichier texte sur votre ordinateur, via une SD card.
Cet exemple se veut juste une base pour votre imagination, alors n'hésitez pas, soyez créatifs !
Avatar de l’utilisateur
Stéphane
 
Messages: 179
Inscription: Lun 2 Mai 2011 09:40

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude Priato » Jeu 26 Mai 2011 16:58

Il ne manquerait pas un transistor dans la liste des composants? (photo)
Priato
 
Messages: 7
Inscription: Mer 25 Mai 2011 18:56

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude Lionel » Jeu 26 Mai 2011 17:13

:) c'est le capteur LM35DZ dont parle Stéphane dans sa liste.
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude Priato » Ven 27 Mai 2011 23:31

Autant pour moi... Je pensai pas que ce composant avait cette tête... (ça m'apprendra à avoir lu en diagonale aussi...)

Je viens de faire le test, je parviens bien à capturer la température et à écrire dans le fichier. Donc on peut dire que je suis content :D mais après avoir fait plus de test, j'ai quelques questions qui me viennent:

- Tout d'abord j'ai essayé avec une carte SD de 32MB qui marche très bien, et je tombais directement sur le cas "Carte fausse ou absente". J'ai par la suite essayé avec une carte de 2GB et là pas de problème. J'ai essayé plusieurs fois la première carte mais sans succès. Sauriez-vous d'où ça peut provenir? (les 2 sont formatées en FAT). Quelque part ça m'arrange un peu ce cas, car je peux tester les cas d'erreur avec ma carte 32MB, mais j'aurai quand même aimer la recycler pour en faire une carte pour stocker des logs(sans ça elle me sert pas à grand chose...).

- La LED bleue sert à quoi? Je ne l'ai vu fonctionner que rarement, genre pendant l'upload.

- le fait que l'on mette "pin_chipSelect = 10;" veut dire que ce PIN(physique) ne peut pas être utilisé? Si c'est le cas, pourquoi ne pas le condamner?

Par contre j'ai essayé de corser un peu plus en ajoutant une LED verte pour quand l'écriture réussie, qui s'allume pendant 1 seconde, et une LED rouge quand l'écriture n'est pas possible. La LED verte est connecté sur le PIN 13 (comme dans le "Hello World") et la rouge sur le PIN 12. La verte s'exécute parfaitement mais la rouge non, et lorsque j'essaie de changer les PINs (en mettant sur 11 et 12), ça ne marche plus(les 2 LEDs restent tout le temps allumées), j'ai l'impression que les LEDs ne fonctionnent que sur le PIN 13(comme le PIN d'origine). Ais-je manqué un épisode?

Voici mon code utilisé:
Code: Tout sélectionner
/*
    SNOOTLAB
    Application N°1 Shield Mémoire : Stockage des valeurs de temperature dans un fichier texte
    avec fonction d'horodatage
*/

#include <Wire.h>
#include <SD.h>
#include <RTClib.h>

// Declaration des pin utilisées
const char pin_chipSelect = 10;                            //10 est la pin utilisée par le shield mémoire pour le signal ChipSelect
const char pin_capteur = 0;                                //Numéro de la pin où est relié le capteur en question
const char pin_led_verte = 13;                             //Numéro de la pin où est relié la LED verte
const char pin_led_rouge = 12;                             //Numéro de la pin où est relié la LED rouge

// Declaration des variables générales
const unsigned long F_refresh = 5000;                      //Entrez ici la fréquence de rafraichissement du capteur, en millisecondes
DateTime moment;                                           //Création d'un objet contenant les données temporelles
String datastring;                                         //Création d'un objet type string pour les données à écrire
RTC_Millis RTC;
File fichier;


void setup()
{
 
  Serial.begin(57600);                                     //Initialisation de la liaison série

  Serial.print("Initialisation des LEDs..."); 
  pinMode(pin_led_rouge, OUTPUT);
  pinMode(pin_led_verte, OUTPUT);
 
  Serial.print("Initialisation de la SD card...");
  pinMode(pin_chipSelect, OUTPUT);                         // Mettre la pin en output
 
   RTC.begin(DateTime(__DATE__, __TIME__));                //Initialisation de l'horloge RTC avec les valeurs DATE et TEMPS de votre ordinateur
   

  if (!SD.begin(pin_chipSelect))                           // Vérification de la présence de la SD card
    {                         
      Serial.println("Carte fausse ou absente");
      return;                                              // Si problème, sortir et bloquer l'exécution
    }
 
  Serial.println("Carte OK.");
 
  datastring = "\nReleve et horodatage des valeurs du capteur, selon horloge RTC\n---------\n ";
 
  fichier = SD.open("log1.txt", FILE_WRITE);               // Ouverture du fichier en mode Ecriture.
 
  if (fichier)                                             // Si le fichier existe déja, on écrira à la suite des données présentes.
    {
      fichier.println(datastring);
      fichier.close();
      Serial.println(datastring);                          // dupliquer la donnée sur port série
    }
   
  else                                                     //Si problème à l'ouvertre, alors signaler l'erreur
    {                                                       
        Serial.println("erreur d'ouverture du fichier durant la configuration");
    }
 
}

void loop()
{
   
  delay(F_refresh);
 
 
  moment = RTC.now();                                      //Init de l'objet temporel
 
  datastring=String(moment.day(),DEC)+'/'+String(moment.month(),DEC)+'/'+String(moment.year(),DEC)
  +' '+String(moment.hour(),DEC)+':'+String(moment.minute(),DEC)+':'+String(moment.second(),DEC);

  int sensor = analogRead(pin_capteur);                    // lire la valeur du capteur et la mettre dans la chaine de caractères
  datastring += String("\t Valeur capteur = ");            // préalablement remplie avec les données temporelles
  datastring += String(sensor);
   
  fichier = SD.open("log1.txt", FILE_WRITE);

  if (fichier)
    {

      digitalWrite(pin_led_verte, HIGH);
      delay(1000);
      digitalWrite(pin_led_verte, LOW);

      fichier.println(datastring);
      fichier.close();
      Serial.println(datastring);                           // dupliquer la donnée sur port série
    }
  else {
      Serial.println("erreur d'ouverture du fichier");

      digitalWrite(pin_led_rouge, HIGH);
      delay(1000);
      digitalWrite(pin_led_rouge, LOW);

  }
 
  datastring =0;
 
  // Pour être sur qu'elles s'éteignent bien pendant les 5 secondes
  digitalWrite(pin_led_rouge, LOW);
  digitalWrite(pin_led_verte, LOW);
}
Priato
 
Messages: 7
Inscription: Mer 25 Mai 2011 18:56

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude Lionel » Mar 31 Mai 2011 10:41

Priato a écrit:(...)
- Tout d'abord j'ai essayé avec une carte SD de 32MB qui marche très bien, et je tombais directement sur le cas "Carte fausse ou absente". J'ai par la suite essayé avec une carte de 2GB et là pas de problème. J'ai essayé plusieurs fois la première carte mais sans succès. Sauriez-vous d'où ça peut provenir? (les 2 sont formatées en FAT). Quelque part ça m'arrange un peu ce cas, car je peux tester les cas d'erreur avec ma carte 32MB, mais j'aurai quand même aimer la recycler pour en faire une carte pour stocker des logs(sans ça elle me sert pas à grand chose...).

Là j'avoue que, je ne sais pas trop quoi dire, as tu essayé en FAT16 et en FAT32 ?


Priato a écrit:- La LED bleue sert à quoi? Je ne l'ai vu fonctionner que rarement, genre pendant l'upload.

La led bleue n'a pas de fonction dédiée, elle est disponible pour servir d'indicateur et elle est connectée sur la PIN9

Priato a écrit:- le fait que l'on mette "pin_chipSelect = 10;" veut dire que ce PIN(physique) ne peut pas être utilisé? Si c'est le cas, pourquoi ne pas le condamner?

Oui, çe veux dire que cette pin est utilisée par le shield,
et condamner c'est à dire ?

Priato a écrit:Par contre j'ai essayé de corser un peu plus en ajoutant une LED verte pour quand l'écriture réussie, qui s'allume pendant 1 seconde, et une LED rouge quand l'écriture n'est pas possible. La LED verte est connecté sur le PIN 13 (comme dans le "Hello World") et la rouge sur le PIN 12. La verte s'exécute parfaitement mais la rouge non, et lorsque j'essaie de changer les PINs (en mettant sur 11 et 12), ça ne marche plus(les 2 LEDs restent tout le temps allumées), j'ai l'impression que les LEDs ne fonctionnent que sur le PIN 13(comme le PIN d'origine). Ais-je manqué un épisode?

Les pins utilisées par le shield sont les pin 9 (pour la led) puis les pins 10/11/12 & 13 pour la carte SD et enfin les pins analog 4 & 5 pour l'horloge RTC.
Il vaux mieux utiliser les autres pins pour brancher des leds de visu (sachant qu'il y en a une faite exprès pour ça sur la pin 9 et donc déjà dispo)

Bon courage

Lionel
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude Priato » Mar 31 Mai 2011 12:45

Merci pour toutes ces précisions !

- J'ai re-formaté la carte SD, et depuis plus de problème. J'étais en FAT...

- Quand je parlais de "condamner" c'était le fait de placer les connecteurs empilables. Si le pin est utilisé, l'utilisateur ne peut pas s'en servir, du coup je trouverai normal de ne pas mettre de connecteurs empilables à cet endroit ou alors des rouges(ou toute autre signalisation, par exemple sur le circuit imprimé), pour que l'utilisateur se questionne sur l'utilité/disponibilité de ces PINs. Enfin une petite explication dans le guide d'utilisation de la mémoire, sur quels sont les PIN rendus indisponible serait grandement utile (à mon avis). Attention ce ne sont pas des reproches mais plutôt des suggestions pour les gens comme moi (les noobs :) ) à qui ça pourrait grandement aider!
Priato
 
Messages: 7
Inscription: Mer 25 Mai 2011 18:56

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude Lionel » Mar 31 Mai 2011 13:14

Re-bonjour,

Bonne nouvelle que cela fonctionne sur la SD 32 Mo !

Par rapport à la "condamnation", j'ai placé deux points ":" sur la sérigraphie à coté du numéro des pins utilisées, mais je n'ai pas du prévoir assez d'espace car le moindre décalage de sérigraphie les rends difficilement visibles.

Je ne peux pas les condamner physiquement car nous devons assurer l'empilage d'autres shields au dessus des nôtres, mais effectivement, nous allons prendre en compte ces remarque et mettre en place la suggestion qui nous a déjà été faite par "semtou" d'afficher plus clairement les pins utilisées par nos shields.

Et pas d'inquiétude pour les critiques/remarques/suggestions, nous sommes disposés à les entendre et faire en sorte d'améliorer nos produits et documentations.

Merci des retours et a bientôt.
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude JM29 » Mer 1 Juin 2011 00:09

Bonjour,
J'ai découvert votre site aujourd'hui et me suis empressé de commander ce shield mémoire ayant pour projet de faire un capteur et enregistreur autonome de température. Je précise de suite que je suis un vrai débutant avec l'arduino mais je souhaite via ce petit projet me faire la main et aller plus loin ensuite. Je possède déjà un Arduino ainsi que le capteur de température.
Je voulais savoir (excusez d'emblée mon ignorance) s'il était envisageable, une fois ce shield et l'arduino associé, ajouter d'autres fonctions ? ex : je voudrai automatiser la gestion d'aquarium avec les fonctions suivantes : enregistrement de température (là à priori c'est fait pour ;) ), allumage et extinction de la lumière en passant par un relais et en utilisant la fonction horloge, déclencher une pompe de brassage à des intervalles déterminée, gérer un osmolateur .... le tout avec une seule carte arduino.
Pour le moment j'en suis pas encore là .... mais c'est dans un premier temps à titre d'information
A bientôt
Jean-Marc
JM29
 
Messages: 10
Inscription: Mar 31 Mai 2011 23:59

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude Lionel » Mer 1 Juin 2011 09:55

Bonjour,

effectivement, on dirait que le code proposé par Stéphane correspond a vos premiers besoins 8-)

Pour la suite, il est tout à fait envisageable d'étendre les possibilités offertes par ce shield en exploitant la zone de prototypage ou en câblant sur une plaque ou une breadboard externe les éléments désirés.

La partie lumière et pompe de brassage ne devraient pas poser de problème en utilisant des relais (cf. ici ou ),
en prenant grand soin d'assurer sa propre sécurité !!!,
ATTENTION : L'utilisation du 220V est dangereuse et nécessite impérativement de respecter des règles de sécurité précises.

Ensuite, je ne connaissait pas le principe d'un osmolateur (je viens de regarder sur wikipedia ;) ) et je ne connais pas les entrées sorties disponibles sur ce matériel (avez-vous un lien vers un site qui décrirait votre modèle), mais a priori, il reste assez d'entrées sorties sur le shield "Mémoire" pour étendre encore vers d'autres périphériques.

Je vous invite à créer un sujet sur la partie du forum dédiée aux projets de nos utilisateurs afin de suivre le développement de votre projet dans la bonne partie de notre forum.

A bientôt,

Lionel
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude semtou » Mer 1 Juin 2011 12:39

Lionel a écrit:Par rapport à la "condamnation", j'ai placé deux points ":" sur la sérigraphie à coté du numéro des pins utilisées, mais je n'ai pas du prévoir assez d'espace car le moindre décalage de sérigraphie les rends difficilement visibles.

Je ne peux pas les condamner physiquement car nous devons assurer l'empilage d'autres shields au dessus des nôtres, mais effectivement, nous allons prendre en compte ces remarque et mettre en place la suggestion qui nous a déjà été faite par "semtou" d'afficher plus clairement les pins utilisées par nos shields.


Voici ce que je propose pour indiquer les PINs de la carte carte arduino qui sont utilisées par la shield MEMOIRE :

Image

Voila A +
semtou
Avatar de l’utilisateur
semtou
 
Messages: 35
Inscription: Jeu 23 Déc 2010 08:31
Localisation: Toulouse

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude semtou » Mar 7 Juin 2011 08:23

Salut j'ai soudé ma carte MEMOIRE et voici les premiers essais.

Avec le programme de SNOOTLAB : Application N°1 Shield Mémoire : Stockage des valeurs de température
dans un fichier texte avec fonction d'horodatage donner ci-dessus on obtient dans la carte SD un fichier texte
LOG1.TXT :
Image
et on trouve dedans :
Image
C'est géant :D on a le datalogger (enregistreur de données) et en prime l'horloge RTC
Real Time Clock (en français horloge temps réel ou HTR) pour plein d'autres applications.

J'ai mis un potentiomètre à la place du capteur de température, ce qui explique les écarts entre les valeurs.

Si on arrête la carte arduino, qu'on enlevé la carte et qu'on la remet plus tard les données suivantes viennent se coller à la suite dans le fichier. c'est énorme :o
Avatar de l’utilisateur
semtou
 
Messages: 35
Inscription: Jeu 23 Déc 2010 08:31
Localisation: Toulouse

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude JM29 » Mar 7 Juin 2011 10:18

Hello,
J'ai bien reçu le petit colis ;) merci au passage pour la rapidité de l'envoi ! J'ai donc soudé le tout avec attention. Maintenant se pose le soucis du fonctionnement (débutant inside je le rapelle :oops: ) : comment dois-je m'y prendre ? sachant que je ne comprend pas trop ces lignes :

#include <Wire.h>
#include <SD.h>
#include <RTClib.h>

ça serait trop simple de copier coller le programme donné par Stéphane dans l'interface Arduino :?: j'ai du oublier des éléments essentiels ?
Quelqu'un peut éclairer ma lanterne ?
Jean-Marc
JM29
 
Messages: 10
Inscription: Mar 31 Mai 2011 23:59

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude Stéphane » Mar 7 Juin 2011 10:56

Bonjour,

Les lignes suivantes :
#include <Wire.h>
#include <SD.h>
#include <RTClib.h>

signifient que l'on dit au préprocesseur de compilation, d'INCLURE les fichiers suivants. En gros, de considérer que les fichiers suivants soient traités comme si ils étaient parties prenantes du programme principal. C'est utilisé lorsque l'on veut mettre en oeuvre des fonctions, des librairies ou des blocs de programme qui ont déjà été écrits ailleurs. Cela évite de les réécrire. Dans notre cas, si l'on veut utiliser les fonctions qui permettent de dialoguer avec la SDcard, soit on les écrits, soit on les copie/colle de l'existant vers notre programme principal, soit on fait un "#include" du fichier qui les contient, ici, "SD.h".

Ces librairies sont disponibles sur le site Arduino. Tu les télécharges, suis la procédure d'installation (un simple copier/coller dans le répertoire "librairies"), et tu peux ensuite copier/coller mon programme directement, pour avoir les mêmes résultats que semtou !

En espérant avoir répondu à tes questions,

Bonne journée.
Avatar de l’utilisateur
Stéphane
 
Messages: 179
Inscription: Lun 2 Mai 2011 09:40

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude Lionel » Mar 7 Juin 2011 11:09

Bonjour, petit complément,

Si tu utilises le logiciel arduino dans sa version 0022, il te manque juste la librarie RTClib, la librairie SD est déjà installée

Tu as les liens pour la télécharger dans le guide "Mémoire"
viewtopic.php?f=30&t=51
ainsi qu'une explication sommaire sur l'installations des librairies.
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude JM29 » Lun 20 Juin 2011 18:08

Hello,
J'ai un peu de temps libre donc je continue l'expérimentation ;)
J'ai réalisé le montage et j'ai bien réussi à enregistrer les valeurs du capteur en utilisant un LM35DZ. Maintenant je bloque sur l'intégration de la formule qui permet de transformer la valeur enregistré par la capteur par une valeur en °C. A quel endroit dois t on l'intégrer ?
Merci pour votre aide
JM
JM29
 
Messages: 10
Inscription: Mar 31 Mai 2011 23:59

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude SesechXP » Mar 21 Juin 2011 08:32

Salut,

Il faut effectuer le calcul juste après la lecture de la valeur du capteur sur l'entrée analogique, c'est à dire après cette ligne dans l'exemple de Stéphane :
Code: Tout sélectionner
int sensor = analogRead(pin_capteur);
// Calcul à effectuer ici...

++
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude Stéphane » Mar 21 Juin 2011 08:51

Bonjour,

Effectivement, comme le dit SesechXP, dans ce cas ci le plus judicieux est de traiter la donnée juste après sa capture.
La formule :
Soit résolution du convertisseur = 1024,
Soit pleine échelle du convertisseur = 5V,
Soit résolution du capteur = 10mv/°C
Si et seulement si 'pleine échelle du capteur = pleine échelle du convertisseur analogique-numérique' ,
Grandeur mesurée(°C)=( ((5V/résolution du convertisseur)*valeur relevée)/résolution du capteur)

En espérant avoir répondu à tes questions,

Bonne journée.
Avatar de l’utilisateur
Stéphane
 
Messages: 179
Inscription: Lun 2 Mai 2011 09:40

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude JM29 » Mer 22 Juin 2011 21:58

Salut,
ça marche nikel, merci pour l'aide apportée ;)
Par contre, dans l'idée d'un petit enregistreur autonome, alimenté par une pile 9v, selon vous, quel serait l'autonomie de l'ensemble en imaginant faire une mesure toute les heures par exemple ?
Autre interrogation : en ajoutant un second second capteur sur la pin 1 par exemple, y a-t-il une limite physique de câblage entre le boitier et le capteur. L'idée serait de mettre un capteur à l'intérieur et un autre à l'extérieur. Le soucis suivant serait de dissocier sur le fichier texte des résultats du capteur 1 et 2.
En tout cas, ce premier proto / projet me permet de me lancer dans la compréhension de l'Arduino et me laisse entrevoir une multitude de possibilités !!! :D
JM29
 
Messages: 10
Inscription: Mar 31 Mai 2011 23:59

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude Stéphane » Jeu 23 Juin 2011 12:10

Bonjour,

Si tu veux mettre un second capteur et le déporter, pas de problèmes. Cependant, il faut être vigilant sur certains point :
- De combien de mètres veux-tu déporter ton capteur ?
- Comment est transmise l'information ? Variation de tension ? Décalage fréquentiel ? Train de bits ?
- Quels sont les ordres de grandeurs de l'information transmise ?
- Quelle est la perturbation relative au milieu ?

Ensuite, pour les différencier, tu auras deux valeurs, une variable correspondant à un relevé sur la pin A0, et une variable correspondant à un relevé sur la pin A1. A toi d'organiser cela dans le texte du fichier, en rajoutant des points virgules ou de nouvelles lignes, selon ta convenance.

Bonne journée.
Avatar de l’utilisateur
Stéphane
 
Messages: 179
Inscription: Lun 2 Mai 2011 09:40

Re: Exemple : Stockage horodaté de valeurs d'un capteur

Message non lude semtou » Ven 24 Juin 2011 07:46

Salut JM29

Autre interrogation : en ajoutant un second second capteur sur la pin 1 par exemple, y a-t-il une limite physique de câblage entre le boitier et le capteur.


Tout dépend du câble que tu utilises et de sa longueur, pour un projet j'ai déjà utilisé 5 mètres de fil blindé avec une ferrite à
chaque bout et j'ai enlevé avec ce procédé tous les parasites. Le mieux c'est de faire des essais...
Image

Sinon ya l'option ampli-opérationnel, pour améliorer le signal.

A +
PHilippe
Avatar de l’utilisateur
semtou
 
Messages: 35
Inscription: Jeu 23 Déc 2010 08:31
Localisation: Toulouse

Suivante

Retourner vers Mémoire

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité