Calculs sur des valeurs

Bonjour à tous,

mon but est de réaliser des mesures sur un capteur de température Dallas toutes les minutes et chaque jour de résumer ces valeurs en calculant la valeur moyenne et l'écart type.

Récupérer l'heure NTP, faire une condition sur le changement de jour, récupérer les valeurs du Dallas ça devrait le faire. Ensuite avec un peu de persévérance je devrais pouvoir envoyer les valeurs instantanées sur une Google Sheet. Ce pour quoi j'ai un doute c'est le calcul journalier. Est ce qu'il est possible de stocker les 1440 valeurs mesurées par capteur, d'en calculer la moyenne et l'écart type dans l'ESP pour l'envoyer à une Google Sheet ? Je partirais bien sur un stockage des valeurs dans une variable tableau (je ne suis pas pro alors mon langage est sans doute un peu brut, je vous prie de m'en excuser!). mais est ce qu'il est possible après de l'exploiter simplement en calculant moyenne et écart type.

Un truc un peu genre


déclarer le tableau Probe1{};
déclarer le capteur P1();
relever la valeur de P1;
ajouter la valeur P1 au tableau Probe1
vérifier si le jour a changé
-->oui
faire la moyenne de Probe1
faire l'écart type de Probe1
effacer Probe1
envoyer moyenne et stdev.

Merci de votre aide, si je n'ai pas été clair sur certains points n'hésitez pas à me demander des précisions.

À priori, tout cela semble possible.

ça dépend de votre arduino.

Si vous stockez la température sous forme d'un nombre de type float ce sera 4 octets. pour en stocker 1440 il faut donc 4x1440 = 5760 octets de RAM. Sur un UNO or MEGA c'est beaucoup, mais sur un ESP32 ça passe sans souci surtout en variable globale (la pile ayant une taille limitée).

mais je vous suggère de regarder l'algorithme de Welford :slight_smile:

Merci pour le lien...

pour @lucbob et pour compléter les réponses, sur un ESP32 je fais actuellement des tests pour enregistrer, stocker et traiter des mesures de températures mais... toutes les secondes et pendant une heure. Donc 3600 valeurs sans problème.

Enfin sans problème... si mais sur la manière d'optimiser le traitement, l'affichage et éventuellement les problèmes liés au "plus ou moins temps-réel" tu peux regarder les échanges récents :

Sur le volume de données, ça va le faire. Sur la vitesse de traitement... en une heure tu es laaaarge ! :wink:

Merci @J-M-L pour l'algorithme, j'ai survolé, il faut que j'atterrisse!
le calcul des moyennes/stdev se fera une fois par jour avant d'être envoyé et ça doit être fait au sein de l'ESP. L'envoi se fera sur un script html google avec une condition sur la chaîne envoyée pour déterminer si c'est des données instantanées ou un résumé journalier. Je ne sais pas vraiment comment procéder, j'imagine que je peux stocker mes valeurs dans l'ESP dans une variable de type array. J'aurais alors une collection de valeurs. Avec une boucle je peux avoir la somme que je diviserai pas le nombre de valeurs. Bon en réfléchissant je me dis que si j'arrive à stocker chaque valeur mesurée dans une variable de type Array je dois pouvoir en déduire la moyenne et l'écart type. Vous en pensez quoi?

Au cas où...
j'utilise cette déclaration pour le moment :

struct SDATA {
  float temp;
  long  tmillis;
//  bool err;   // pas encore utilisé mais prévu pour les situations à problème (je sais même pas lesquelles)
};

SDATA last_temp;              // dernière mesure
SDATA TabMesures[3600];       // toutes les mesures
SDATA CopieTabMesures[3600];  // copie de toutes les mesures le temps du traitement

L’avantage de l'algorithme de Welford c’est que vous pouvez calculer la moyenne et la variance au fil de l’eau sans mémoriser tout le tableau. Vous n’avez donc plus de souci de place mémoire ou de gérer le remplissage d’un tableau

Mais sinon oui vous pouvez tout conserver dans un tableau et le moment venu faire le calcul et l’exporter


Dans son cas ce ne sera sans doute pas nécessaire de faire une copie même si on garde tout le tableau car on a toute une minute pour faire le calcul et l’exporter et ce n’est pas fait par une requête web asynchrone donc on n’a pas le souci d’accès conjoint aux données

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.