Exemple : Stockage horodaté de valeurs d'un capteur

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

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

Message non lude sthiers » Sam 3 Sep 2011 21:19

Bonjour,

J'ai un petit soucis avec l'horodatage:
Code: Tout sélectionner
RTC_DS1307 clock;
clock::begin();
clock::adjust(DateTime(__DATE__, __TIME__));
clock::now();


Il se passe que la fonction "adjust" prend beaucoup de temps (qq dizaines de secondes) mais finit par passer.
C'est pareil pour la fonction "now", qui en + me retourne toujours 0/0/2000 0:0:0
Des idées?

Mon but est d'horodater en comptant sur le fait que l'heure est sauvegardée même si l'Arduino n'est plus sous tension (auquel cas la pile bouton permet à l'horloge de continuer...)

merci
sthiers
 
Messages: 7
Inscription: Sam 3 Sep 2011 21:12
Localisation: Grenoble

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

Message non lude sthiers » Sam 3 Sep 2011 21:49

En fait je commence à me demander si mon horloge marche:
le sketch https://github.com/adafruit/RTClib/blob ... ds1307.pde
ne marche pas non plus, je récupère toujours 0/0/2000 0:0:0
sthiers
 
Messages: 7
Inscription: Sam 3 Sep 2011 21:12
Localisation: Grenoble

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

Message non lude Lionel » Dim 4 Sep 2011 02:24

Bonjour,

Il me semble pourtant que cet exemple (ds1307.pde) d'adafruit fonctionne tel quel,
vous serait il possible prendre une photo de votre shield et de la poster afin de jeter un oeil sur un éventuel souci de câblage ?
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 sthiers » Dim 4 Sep 2011 14:33

in fine, cela marche, sans que je comprenne d'où venait le problème initial. D'ailleurs, si quelqu'un a des idées de fausses manips menant à mon problème, je reste preneur...J'ai essayé de refaire planter, mais sans succès.

J'ai donc simplement débranché / rebranché, appuyé sur le DS1307 et voilà maintenant cela tourne :) Pourtant, les soudures on l'air bien (mais je ne m'y connais pas dans ce domaine)

Lors de mes essais précédents, j'avais un peu tout essayé:
- faire des adjust sur date "en dur": RTC.adjust(DateTime(2011,9,3,21,0,0));
- suivre les instructions de http://tronixstuff.wordpress.com/2011/0 ... ng-shield/
- testé ds1307.pde

Lionel : le circuit sur lequel j'ai fait le test du ds1307.pde était simplement arduino + shield; j'avais débranché le reste (un malheureux capteur de température)

merci pour le support très rapide en tous cas
Stéphane
sthiers
 
Messages: 7
Inscription: Sam 3 Sep 2011 21:12
Localisation: Grenoble

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

Message non lude effevalerio » Sam 10 Sep 2011 11:24

Bonjour.

I'm sorry but I need to write in english, I have follow the example, wired the circuit exactly as I have seen on the picture, (see mi circuit on atatched photo), then installed RTClib (suggested version), then upload the example to .
my arduino2009 , well everithing seem to be OK but Serial Monitor show the follow message :

Initialisation de la SD card...Carte fausse ou absente

I have try with one SD card 8MB and one SD card 4Gb both two formatter FAT 32bit
....anyway same error...

How I have to do ?

Thank you for reply.

xxIMGP2794.jpg
xxIMGP2794.jpg (112.89 Kio) Vu 18323 fois
effevalerio
 
Messages: 5
Inscription: Sam 10 Sep 2011 10:56

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

Message non lude sthiers » Lun 12 Sep 2011 14:02

Just a hint: did you try without additional circuit (just arduino + shield)?

S.
sthiers
 
Messages: 7
Inscription: Sam 3 Sep 2011 21:12
Localisation: Grenoble

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

Message non lude effevalerio » Mar 13 Sep 2011 14:56

As you can see on the picture,
I use additional circuit where is (on the breadboard) a Temperatur sensor LM35DZI.
have replicate exactly the example in this topic you can find it at the link :
http://forum.snootlab.com/viewtopic.php?f=30&t=72
for circuit and code.
effevalerio
 
Messages: 5
Inscription: Sam 10 Sep 2011 10:56

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

Message non lude subreptice » Mar 13 Sep 2011 23:59

Hi.

I don't know what is LM35DZI...
BUT, the LM35DZ, wich is probably very similar, have to be plugged in a different way that you done on picture "xxIMGP2794.jpg".

If I zoom, I can guess:
+ Vs is OK
I think you put Vout (sensor) on ground (arduino), not OK :-)
and GND (sensor) on Analog 0 (arduino), not cool, too.

Sketches maybe don't work because of this short-circuit; have you feel your sensor being hotest and hotest during the precedent test ?

Hope it helps, don't give up !!
subreptice
 
Messages: 58
Inscription: Mar 19 Juil 2011 18:04

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

Message non lude effevalerio » Jeu 15 Sep 2011 07:54

Circuit in the picture is really wrong as you see , but also with rigth circut, or "without sensor connected" to Arduino,
the error is still the same "Carte fousse ou absente", have you samething to suggest to test if Memorie shield is good or not ?

Thank You.

Valerio
effevalerio
 
Messages: 5
Inscription: Sam 10 Sep 2011 10:56

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

Message non lude Stéphane » Jeu 15 Sep 2011 09:37

Hi,

I first let's try something simple.
Remove the LM35DZI.

Step1 :
In your arduino connected to your memoryshield, remove the SD card, and upload the Blink sketch (Menu\Examples\Basics), after have replaced '13' by '9' in this sketch.

If the led on the memory shield blinks, then go to step 2.

Step2 :

Try to upload the example sketch SNOOTLAB for the SD card, after have removed the DS1307, with an SD card inserted in the slot.

After that 2 steps, posts your results here.
It will help me to continue investigating.

Have a good day,

Stéphane
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 alain_g » Sam 29 Oct 2011 01:13

Bonsoir, je viens de découvrir l'Arduino et toutes ses possibilités qui parraissent correspondre à ce que je recherche depuis quelques temps. Je cherche à faire un datalogger sur carte SD de température multi-sondes et votre exemple me laisse penser que c'est réalisable.

Je viens aussi de trouver des sondes numériques du type: http://www.lextronic.fr/P19987-capteur- ... ature.html qui permettent de relever la température et l'humidité. Je souhaite éventuellement mixer ces types de capteurs (numérique et analogique) et inscrire les valeurs relevées sur la carte SD. Avant d'investir dans ces systèmes, ce que j'envisage vous parait il faisable? Petite cerise sur le gâteau, est il possible d'y ajouter votre kit deuxlignes afin d'afficher les valeurs relevées?

Merci d'avance pour vos réponses.

Alain
alain_g
 
Messages: 22
Inscription: Sam 29 Oct 2011 01:03

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

Message non lude S3B » Sam 29 Oct 2011 07:53

Pas de soucis pour realiser votre projet ;)
Reste a voir si votre capteur d humidité / temp délivre des données assez précises.
Bon week
S3B
 
Messages: 13
Inscription: Jeu 13 Oct 2011 14:34

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

Message non lude alain_g » Sam 29 Oct 2011 08:25

Merci S3B.

++

Alain
alain_g
 
Messages: 22
Inscription: Sam 29 Oct 2011 01:03

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

Message non lude oopslab » Dim 22 Jan 2012 22:22

Salut,
J'ai essayé ton code, merci pour avoir un canevas de début, mais en fait il n'utilise pas le RTC de la carte mais celui du ATMega: tu peux donc t'en servir sans le shield RTC car tu le déclares par:
RTC_Millis RTC
et non :
RTC_DS1307 RTC
Du coup tu dois le ré-initialiser à chaque compilation mais si tu arrêtes l'arduino pendant un certain temps et qu'ensuite tu regardes les valeurs temporelles, tu verras qu'elles ont débuté avec l'heure de la dernière compilation et non à celles du redémarrage. En effet tu n'utilise pas le composant DS1307 alimenté par la pile mais le timer de l'ATMega avec comme initialisation la dernière compilation. Cela peut être ennuyeux si tu rends ton système autonome comme un serveur web de mesures horodatées par exemple.
Il faut faire comme dans l'exemple de la librairie RTCLib :
1) initialiser RTC par un begin
2) si le RTC ne fonctionne pas alors on l'ajuste à la date/heure de compilation
3) On récupère la date/heure courante dans la "loop"
Soit :

RTC_DS1307 RTC;

void setup () {
RTC.begin();

if (! RTC.isrunning()) {
// RTC ne fonctionne pas, donc on l'initialise avec les date/heure de la compilation
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}

void loop () {
DateTime now = RTC.now();
......
}

A+
Y
oopslab
 
Messages: 1
Inscription: Dim 22 Jan 2012 17:18

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

Message non lude Stéphane » Lun 6 Fév 2012 18:38

Bonjour,

Désolé pour la réponse tardive !

En effet, merci d'avoir levé la coquille, je corrige très bientôt.

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 telec16 » Dim 4 Nov 2012 22:09

Bonjour,

Je vient apporter ma pierre à l'édifice, en vous montrant ce code, qui permet de faire un graphique des valeurs reçues :
Code: Tout sélectionner
/*
    SNOOTLAB
    Application N°2 Shield Mémoire : Stockage en graphique des valeurs du port A0 dans un fichier texte
    avec fonction d'horodatage
    MàJ: 4 novembre 2012
    Environnement : Win7 / IDE Arduino 1.0.1 / Arduino UNO rev3
*/

#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

// Declaration des variables générales
const unsigned long F_refresh = 500;                      //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
  pinMode(9, OUTPUT);                         // Mettre la led bleue en output
  digitalWrite(9, LOW);
  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 ";
  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);
  datastring += "\n0 2 4 6 8 10  14  18  22  25";
 
  fichier = SD.open("graph_a0.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.
    {
      digitalWrite(9, HIGH);
      fichier.println(datastring);
      digitalWrite(9, LOW);
      fichier.close();
    }
   
  else                                                     //Si problème à l'ouvertre, alors signaler l'erreur
    {                                                       
        Serial.println("erreur d'ouverture du fichier durant la configuration");
    }   
   
  datastring = 0;
}

void loop()
{
  delay(F_refresh);
 
  fichier = SD.open("graph_a0.txt", FILE_WRITE);
 
  for(int i = (map(analogRead(A0), 0, 1023, 0, 25)); i!=0; i--)
  {
    datastring += " ";
  }
  datastring += "|";
 
  if (fichier)
  {
    digitalWrite(9, HIGH);
    fichier.println(datastring);
    digitalWrite(9, LOW);
    fichier.close();
  }
  else
  {
    Serial.println("erreur d'ouverture du fichier");
  }
       
  datastring = 0;
}

J'ai reçu le shield Mémoire aujourd'hui (pour mon anniversaire), ainsi que d'autres objets de la boutique. La livraison est vraiment rapide, super !

J'aurais 2/3 questions à vous poser :
- Est-ce possible d'avoir le circuit du shield (dans un but totalement instructif) ?
- Peut-on ce déplacer dans le fichier (faire revenir le curseur en haut, le déplacer à droite, ...) ? Si oui, comment ?
- J'ai remarqué que le nom du fichier est automatiquement mit en majuscule, peut-on y remédier ?
- Je croit que c'est tout. ;)

Merci
Avatar de l’utilisateur
telec16
 
Messages: 21
Inscription: Dim 4 Nov 2012 21:27

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

Message non lude Stéphane » Mar 6 Nov 2012 21:55

Bonjour,

alors, pour répondre dans l'ordre :
- Est-ce possible d'avoir le circuit du shield (dans un but totalement instructif) ?

-> Les schémas sont téléchargeables dans chaque fiche produit respective : ici :)

Peut-on ce déplacer dans le fichier (faire revenir le curseur en haut, le déplacer à droite, ...) ? Si oui, comment ?

-> Je vous conseillerait de regarder ici, mais ça va dépendre fortement de vos usages. En effet, les fonctions seek() et position() vous permettront d'acquérir une position dans le "chariot" du descripteur de fichier, mais ce n'est pas fait pour insérer des données, cela réécrira les octets si vous faites un file.write(). Si vous voulez juste lire des endroits précis, pas de soucis pour ça.

J'ai remarqué que le nom du fichier est automatiquement mit en majuscule, peut-on y remédier ?

-> Dans la librairie sdfatlib, et plus précisemment dans le fichier SdFile.cpp, on trouve :
Code: Tout sélectionner
// only upper case allowed in 8.3 names - convert lower to upper
      name[i++] = c < 'a' || c > 'z' ?  c : c + ('A' - 'a');

De plus, la définition de la normalisation des noms en 8.3 confirme cette obligation : lien

En espérant avoir répondu à toutes vos interrogations :)
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 telec16 » Mar 6 Nov 2012 22:15

Merci, c'est parfait !
je voudrait juste une confirmation : quand j'utilise seek, et que j'écris après, les caractères écrit écraseront les autres ?
En confirmant que vous avez répondu à toutes mes interrogations ;)
Avatar de l’utilisateur
telec16
 
Messages: 21
Inscription: Dim 4 Nov 2012 21:27

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

Message non lude Stéphane » Mar 6 Nov 2012 22:22

Je vous conseille de faire des essais.

position() renvoi le numéro de la "case" sur laquelle le "chariot" pointe, et seek() place le "chariot" à la "case" indiquée.
Faites des essais, pour lire, réécrire un caractère à un endroit donné, cela vous permettra de bien prendre en main ces deux fonctions.
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 tiego » Mer 8 Jan 2014 17:44

Bonjour,

Je voudrais savoir à quelles fins les pins 10/11/12/13 sont utilisées par le shield SD. Serait-ce pour l'adressage de l'horloge pour l'utilisation du bus I2C ?

En effet, je travaille sur un projet similaire à votre exemple, à ceci près que le j'utilise beaucoup plus de capteurs et j'aurais donc besoin de libérer le plus de pins digitales possibles.

Merci d'avance.
tiego
 
Messages: 1
Inscription: Mer 8 Jan 2014 17:35

PrécédenteSuivante

Retourner vers Mémoire

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités

cron