Partage
  • Partager sur Facebook
  • Partager sur Twitter

Stockage des données avec Arduino ( ATMega )

28 mars 2013 à 10:44:05

Bonjour, dans le cadre d'un projet dans mon lycée, je suis chargé du stockage des données.

Projet : Pico-centrale ( production < 10kW ) sur une rivière d'un particulier

=> Mise en place de capteurs ( vent, hauteur d'eau, temp°, puisances ... )

Je suis dans la partie informatique/electronique avec 3 collègues.

Il y a 4 parties : L'acquisition des données ; Le stockage des données ; l'affichage des données ; l'envoi des données.

Je code sous arduino avec une Mega ADK ( ATMega 2570 )

J'aurais aimé avoir un coup de main.

J'ai réalisé le mapping ( l'indexation des données, j'ai 4096 octets de stockage sur l'EEPROM )

( l'index du vent comme à 0, celui du débit à 600, etc .. )

J'ai réalisé ce code ( de débutant, je débute avec arduino. )

/*
 */
 
#include <EEPROM.h>    // permet d'aller chercher la librairie EEPROM

const int VentInPin = A0;     // Lis la valeur sur A0 ( Vent ) 
int ValeurVent = 2;

const int DebitInPin = A1;    // Lis la valeur sur A1 ( Debit ) 
int ValeurDebit = 3;

const int TempInPin = A2;     // Lis la valeur sur A2 ( Temperature ) 
int ValeurTemp = 4;

const int PluieInPin = A3;    // Lis la valeur sur A3 ( Pluviometrie ) 
int ValeurPluie = 5;

const int HauteurInPin = A4;  // Lis la valeur sur A4 ( Hauteur ) 
int ValeurHauteur = 6;

const int PhydrauInPin = A5;  // Lis la valeur sur A5 ( Puissance hydraulique )
int ValeurPhydrau = 7; 

int indexVent = 0;   // créer la variable correspondant a l'index vent
int indexDebit = 600;  // créer la variable correspondant a l'index Debit
int indexTemp = 1200;   // créer la variable correspondant a l'index Température
int indexPluie = 1800;  // créer la variable correspondant a l'index Pluie
int indexHauteur = 2400;// créer la variable correspondant a l'index Hauteur
int indexPhydrau = 3000;// créer la variable correspondant a l'index Puissance hydraulique

void setup() {                                                                            // Programme réglages

  Serial.begin(9600);       // Initialise les communications entre le PC et la carte

}





void loop() {                                                                            // Programme principal

                    
while (indexVent<10){              // ...tant que addrVent est inférieur à 5
ValeurVent=analogRead(VentInPin);    /'/ ValeurVent = la valeur lue dans le port A0
EEPROM.write(indexVent, ValeurVent);// Stocke l'indexation du Vent et sa valeur
Serial.print("Valeur vent : ");
Serial.print(ValeurVent, DEC);     // Affiche la ValeurVent dans le moniteur série 
delay(500);

 indexVent++;               // incrémente addrVent de 1 ( passe à la ligne et compte combien de valeur sont stockées. )

ValeurDebit=analogRead(DebitInPin);   
EEPROM.write(indexDebit, ValeurDebit);
Serial.print(" |Valeur debit : ");
Serial.print(ValeurDebit, DEC);    
delay(500);

indexDebit++;

ValeurTemp=analogRead(TempInPin);   
EEPROM.write(indexTemp, ValeurTemp);
Serial.print(" |Valeur Temperature : ");
Serial.print(ValeurTemp, DEC);    
delay(500);

indexTemp++;

ValeurPluie=analogRead(PluieInPin);   
EEPROM.write(indexPluie, ValeurPluie);
Serial.print(" |Valeur Pluie : ");
Serial.print(ValeurPluie, DEC);    
delay(500);

indexPluie++;

ValeurHauteur=analogRead(HauteurInPin);   
EEPROM.write(indexHauteur, ValeurHauteur);
Serial.print(" |Valeur Hauteur : ");
Serial.print(ValeurHauteur, DEC);    
delay(500);

indexHauteur++;

ValeurPhydrau=analogRead(PhydrauInPin);   
EEPROM.write(indexPhydrau, ValeurPhydrau);
Serial.print(" |Valeur Puissance hydraulique : ");
Serial.println(ValeurPhydrau, DEC);    
delay(500);

indexPhydrau++;
} 

                                                      // envoi d'un message car case pleine

}


Comment puis-je créer une " sauvegarde " de l'index ? C'est à dire, Supposons qu'il y ai une coupure de courant. Lors du re-lancement, mon index retourne à 0 et mon mapping est foutu car toutes les données acquises auparavant seront effacées par les données qui seront prises par la suite.

Je dois réserver dans mon EEPROM une place à la mémorisation de l'index. ( ex : si j'ai pris 24 valeurs de vent, je veux pouvoir, lors du relancement, faire que la prochaine données acquise soit stockée à l'indexVent25. Malgré la coupure de courant. )

Quelqu'un aurait il une piste ?

Merci d'avance, Intoxx.

  • Partager sur Facebook
  • Partager sur Twitter
28 mars 2013 à 10:57:27

Tu pourrais stocker les index dans l'eeprom aussi ? (genre au tout début ou tout à la fin ?)

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

29 mars 2013 à 8:03:43

C'est mon but, oui !

Début ou fin, peu importe ...

  • Partager sur Facebook
  • Partager sur Twitter
29 mars 2013 à 9:38:28

Commande le "Arduino Data Logging Shield" whez ladyada, et stocke tout ça sur une carte SD, tu auras beaucoup plus de place, et le code FAT est fourni...
  • Partager sur Facebook
  • Partager sur Twitter
29 mars 2013 à 9:42:25

Je suis contraint d'utiliser cette carte, et on a la possibilité de mettre une carte SD si nécessaire avec une carte 4d display ( port SD sous l'aficheur )

http://www.robotshop.com/content/images/4d-systems-1-44-lcd-display-shield-arduino-large.jpg

Pour ma culture personnelle ( code FAT = ? )

  • Partager sur Facebook
  • Partager sur Twitter
29 mars 2013 à 9:49:34

Je suis contraint d'utiliser cette carte, et on a la possibilité de mettre une carte SD si nécessaire avec une carte 4d display ( port SD sous l'aficheur )

http://www.robotshop.com/content/images/4d-systems-1-44-lcd-display-shield-arduino-large.jpg



Pour ma culture personnelle ( code FAT = ? )

=> On envoi les données toutes les semaines ou tout les mois ( toutes les acquisitions. ) donc je n'ai pas besoin d'une grande mémoire.

Juste 2880 octets sur les 4096 pour stocker les variables. Il me reste 1216 octets.

EDIT : de plus, ma question n'est pas " comment stocker ", mais j'ai besoin d'aide pour le code, pour la création de la variable qui me permettra de reprendre au dernier octet écris avant la  coupure de courant.

  • Partager sur Facebook
  • Partager sur Twitter
29 mars 2013 à 15:10:59

Il faut que tu puisses retrouver l'endroit de la dernière écriture.

Pour ça, stocke dans l'EEPROM, à un emplacement de ton choix mais toujours le même, le compteur. Donc:

- À la mise sous tension, récupération du compteur dans l'EEPROM, à stocker dans une variable en RAM.

- Écriture d'une donnée : écrire la donnée, incrémenter le compteur, le stocker dans l'EEPROM.

Comme ça, au reboot, ça repart.

Dans ton cas tu n'as besoin que d'un seul compteur puisque à chaque opération tu stockes N valeurs. Il suffit de les stocker à la queue leu leu, et de se souvenir dans quel ordre, pour les retrouver. Genre :

EEPROM.write( n, vent );

EEPROM.write( n+1, temperature )

...

EEPROM.write( n+N-1, temperature )

n += N

Autre option où n est le N° de l'enregistrement

EEPROM.write( n*N, vent );

EEPROM.write( n*N+1, temperature )

...

EEPROM.write( n*N + N-1, temperature )

n += 1

Dans les 2 cas, il faut reboucler correctement.
  • Partager sur Facebook
  • Partager sur Twitter
30 mars 2013 à 8:56:53

Pourrais tu m'expliquer un tout petit peu plus ce que font les 3 options que tu m'as proposer ?

J'ai du mal à voir, à vrai dire .. 

  • Partager sur Facebook
  • Partager sur Twitter
5 avril 2014 à 14:14:10

    Je suis entrain de travail dans un projet de reconnaissance vocal, j'ai choisi la carte 'arduino MEga' et le 'shield audio ISD1700' et c 'est la 1er fois de ma vie que je travail avec 
 

    Je vais savoir comment je peux stocker des données à partir d'une carte audio shield (ISD1760PY) vers l'eeprom d'arduino et récupérer  l'adresse de chaque stockage

               on attente de votre réponse que j'espère favorable je vous prie d'agréer mes salutation distinguée 

  • Partager sur Facebook
  • Partager sur Twitter
15 avril 2014 à 13:57:38

Je suis aussi dans le cadre d'un projet qui consiste à relever et afficher des consommations d'une maison (eau, électricité pour le chauffage, électricité pour le confort et électricité pour l'eau chaude sanitaire) et après avoir relever les consommations nous devons être en mesure des les stockés pendant un certain temps... Nous avons tous d'abord pensée à faire une base de donnée mais nous avons appris qu'il était possible de les stockés dans l'eeprom de notre Arduino. Cependant nous devons être en mesure de les lire par la suite mais je ne sais pas comment et où il est possible de les voir les valeur que nous avons stocker dans l'eeprom. 

Dans l'attente de votre réponse, je vous remercie d'avance.

  • Partager sur Facebook
  • Partager sur Twitter
4 février 2016 à 14:24:00

projetécocomprtement a écrit:

Nous sommes équipé d'un 

Arduino Ethernet Rev3 WITHOUT PoE

http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=197

-
Edité par projetécocomprtement le 15 avril 2014 à 14:07:46

As tu fini ce projet ? Si oui, envoi le.



  • Partager sur Facebook
  • Partager sur Twitter
12 avril 2018 à 22:09:49

salut... comment je peux stocker les données qui sont trouver dans une automate omron à l'aide d'un carte arduino s'il vous plait.. et merci d'avance
  • Partager sur Facebook
  • Partager sur Twitter
6 octobre 2019 à 10:46:59

Bonjour... Svp je souhaiterais savoir comment faire du stockage de données sur une carte arduino
  • Partager sur Facebook
  • Partager sur Twitter
6 octobre 2019 à 12:50:03

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter