Programme arduino compteur de goutte d'eau avec capteurs piézo

Bonjour,

Voilà j'aurai besoin d'aide pour un projet avec Arduino. Le concept est simple, j'ai branché des capteurs piézo à l'entrée de l'arduino, mon but est compter le nombre de goutte d'eau qui tombe (à priori à coté du capteur) mais je fait face à plusieur problèmes.Tout d'abord, comment je peut faire la différence entre une goutte d'eau qui tombe et ma main qui tape sur le piézo, ensuite quand l'intervalle de temps entre deux gouttes d'eau est très proche, comment faire pour qu'il ne se mêle pas les pinceaux. (Je débute l'arduino il y a pas très longtemps)

Mes idées pour répondre à ces deux problèmes sont les suivants:
-'ai pensé à mesurer deux fois consécutivement la tension à la borne du piézo et ensuite calculer la valeur de la pente et ensuite imposer une pente minimale pour que la variable compte s'incrémente de 1. Pas top comme idée je sais
-Question faire la différence entre goutte d'eau et la main qui tape, je me suis dit que je pourrai faire un filtre pour filtrer le signal, problème trop compliqué pour moi

Si vous auriez des idées pour résoudre ces deux problèmes, des idées, voir un programme je suis prenneur

Merci beaucoup

Personne ne peut te répondre si tu ne donnes pas les caractéristiques (dynamiques) du signal de tes capteurs.

Et ton code accessoirement !

Faudrait enregistrer des séquences et ensuite regarder si avec des maths vous pouvez extraire des impacts de gouttes

Quand il pleut il tombe de nombreuses gouttes, un peu aléatoirement. faudra aussi voir la distribution spatiale des capteurs. Un seul ne suffit pas s’il ne pleut pas beaucoup. De grosses gouttes s’écrasent et envoient des projections qui retombent, ça peut faire comme un rebond sur un bouton au niveau du capteur selon sa sensibilité

Ça ne me parait pas un problème simple à résoudre avec cette approche (du machine learning serait peut être adapté )

Généralement un capteur de pluie se fait avec un entonnoir qui capture toutes les gouttes dans une surface donnée (le diamètre d’entrée de l’entonnoir) et l’eau ruisselle dans un godet monté sur un mécanisme qui bascule quand le godet est plein, ce qui vide le godet et une impulsion est envoyée pour dire qu’un godet a été compté. Le volume du godet sera la granularité de la mesure.

BrUnO14200:
Et ton code accessoirement !

C'est bien trop tôt pour commencer le code !
Faut commencer par savoir ce qu'envoient les capteurs.

Au passage un titre plus explicite à ce fil de discussion comme l'exige les règles du forum.
Parce que ce titre pourrait s'appliquer à 75% des fils de discussion du forum.

Pour ça, il faut rouvrir le premier message en édition et corriger son titre.

biggil:
C'est bien trop tôt pour commencer le code !
Faut commencer par savoir ce qu'envoient les capteurs.

L'un ne va pas sans l'autre :grin: !

Euuh, non,
on commence par réfléchir à ce dont on a besoin (par ex. discerner une goutte d'un doigt),
ensuite on choisit son capteur,
et enfin on commence le code.

On voit sur ce forum tellement de gens qui vont exactement dans l'ordre inverse !
Mais chacun fera comme il voudra :grin:

Il a visiblement déja les capteurs ... son choix n'est peut être pas le meilleur mais on peut regarder comment son code les exploite ..

Mais sinon d'accord avec ta logique :wink:

En plus du titre complètement idiot, il y a là-dedans quelques trucs qui me questionnent.

mon but est compter le nombre de goutte d'eau qui tombe (à priori à coté du capteur) mais je fait face à plusieur problèmes.Tout d'abord, comment je peut faire la différence entre une goutte d'eau qui tombe et ma main qui tape sur le piézo,

Qu'est-ce que c'est que cette histoire de goutte qui tomberaient à coté du capteur???
Ensuite pourquoi vouloir distinguer l'impact d'un doigt de celui d'une goutte???
La demande est encore moins claire que le titre du fil de discussion.

Bonjour et désolé pour la réponse tardive,

Tout d'abord, voilà mon code ( je débute en C)

int a=0;
int a2=0;
int p=0;
int c =0;
boolean etatgoutte = 0;

void setup() {
//pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
}

void loop() {
//a1 = analogRead(A0);
//delay(10);
a = analogRead(A5);
//p=(a2-a1);
//if (p> 8) {
// c=c+1;

// delay(200);
// }
//Serial.println("pente ");
//Serial.println(p);
// Serial.print(" goutte ");
Serial.println(a);
delay(10);

}

Sur le traceur d'arduino, j'ai remarqué que lorsque je tapotte le capteur on peut apercevoir un pic de tension. J'ai eu l'idée mesurer consécutivement la tension aux bornes du capteurs puis calculer la pente et si cette valeur est supérieur à une valeur fixer ( une sorte de signature de la goutte d'eau), on incrémente le compteur d'un.

j'aimerai d'abord programmer un code qui incrémente un compteur lorsqu'une goutte tombe sur la plaque de plexi ( où sont fixer les capteurs) en faisant la différence entre une goutte et tout autre chose comme une main qui tape dessus. Puis l'idée est de l'optimiser pour compter le nombre de gouttes lorsque plusieurs gouttes tombes en même temps. Enfin calculer le volume d'eau de pluie tomber en fonction du nombre de goutte d'eau mesurer.

Je n'ai pas les caractéristiques dynamiques du capteurs mais seulement une fiche technique que le vendeur m'a donné

Merci beaucoup

q094.pdf (58.6 KB)

Est-ce que tu pourrais sortir le graph de "a" en fonction du temps quand une goutte tombe ? Il suffit d'afficher la sortie série sur le traceur série. Ça serait beaucoup plus parlant pour toi comme pour nous.
J'ai peur qu'il y ait des rebonds quand une goutte tombe ou un signal bruité. Auquel cas ta pente risque d'être fortement faussée. Un graph aiderait à visualiser le résultat du capteur.

Tu veux exploiter les résultats sur l'Arduino uniquement ou tu peux utiliser un ordi (ou raspberry) ? En traitement du signal la corrélation te permettrait de différencier le signal d'une goutte d'un autre signal (voir Wikipedia )

Au passage, mets ton code entre balises, avant que quelqu'un d'autre te fasse des remarques. Et les commentaires c'est bien utile aussi

Augmentez aussi très significativement le débit en bauds (au moins 112500 - mais essayez à 2000000) pour que l’affichage ne ralentisse pas les acquisitions

Et oui - les balises de code svp, vous avez un smiley qui traîne dans votre programme sinon...

int a=0;
int a2=0;
int p=0;
int c =0;
boolean etatgoutte = 0;


void setup() {
  //pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  //a1 = analogRead(A0);
  //delay(10);
  a = analogRead(A1);
  //p=(a2-a1);
  //if (p> 8) {
  //  c=c+1;

  //  delay(200);
 // }
  //Serial.println("pente ");
  //Serial.println(p);
 // Serial.print(" goutte ");
   Serial.println(a);
   delay(10);
                 
}

Alors voilà deux screens, le premier ou je fait rien et le deuxième ou je tape plusieurs fois dessus.

Ensuite je vois pas c'est quoi la corrélation en traitement du signal, tu pourrais m'expliquer stp.

Merci

J-M-L:
Augmentez aussi très significativement le débit en bauds (au moins 112500 - mais essayez à 2000000) pour que l’affichage ne ralentisse pas les acquisitions

Et oui - les balises de code svp, vous avez un smiley qui traîne dans votre programme sinon...

Escusez moi, je vois pas comment augmenter le débit en bauds

Vous réglez le débit de la carte arduino par la commande
Serial.begin(9600);9600 bauds c’est la préhistoire....

Pourquoi nous envoies-tu du code farci d'instructions en commentaire ?
Crois-tu que ça facilite sa lecture ?
Un peu de ménage avant de se présenter ne fait pas de mal...

Je pense que c'est de corrélation croisée que tu as besoin. La corrélation croisée de deux signaux s'écrit comme ceci

Et elle est bien décrite par la petite animation sur le site Wikipedia.

Pour ton problème, tu peux enregistrer la signature du contact du doigt, c'est à dire le signal de ton capteur lorsque tu le touches avec le doigt, et quelques signatures d'impacts de gouttes d'eau.

Ensuite lorsque ton capteur enregistre un signal, tu calcules les corrélations avec toutes ces signatures. Celle qui donne le plus fort coefficient correspond à l'événement le plus ressemblant.

Pour le coefficient, tu peux prendre la moyenne du résultat sur la durée de ta mesure, ou la valeur maximale, ou un autre critère.

A tester...

Bonjour,

Avant de vouloir écrire un programme qui fait la différence entre un signal engendrer par une goutte d'eau et celui d'une main. Il n'est pas préférable de d'abord écrire le programme qui permet de compter le nombre de gouttes?
Mon plan est le suivant:
-Tout d'abord, compter goutte par goutte les gouttes qui tombe sur la plaque de plexiglass
-Ensuite optimiser le programme pour permettre de faire la différence entre une goutte et les autres perturbations
-Puis optimiser avec plusieurs capteurs piezo et plusieurs gouttes qui tombent en même temps (pluie en situation réelle)
-Enfin convertir le nombre de goutte d'eau en volume ( unité de mesure en pluviométrie )

Dans l'étape 1, en utilisant la méthode de calcul de la pente entre deux mesure assez proche, il arrive qu'il compte deux gouttes à la place d'une ou 0 à la place d'une. Cette méthode n'est pas très efficace. J'aimerai programmer un code qui quand une goutte tombe sur la plaque de plexiglass, une variable goutte s'incrémente d'un, qu'importe la taille de la goutte
Dans l'étape 2, je suis actuellement en train de faire des recherches sur la solution que vous m'avez proposé, cad la corrélation croisée

Merci beaucoup

à mon avis il serait bon de se poser la question de savoir si votre capteur est adapté à votre besoin.

Pourrez vous réussir à faire ces 3 étapes

-Ensuite optimiser le programme pour permettre de faire la différence entre une goutte et les autres perturbations
-Puis optimiser avec plusieurs capteurs piezo et plusieurs gouttes qui tombent en même temps (pluie en situation réelle)
-Enfin convertir le nombre de goutte d'eau en volume ( unité de mesure en pluviométrie )

comment déterminer une goutte qui frappe un capteur, se scindent en goutellettes qui retombent sur des capteurs adjacents par exemple ?
Quand il pleut fort vous aurez plusieurs gouttes au même endroit en même temps. Comment allez vous mesurer le volume ?
L'eau stagnante sur les capteurs va-t-elle créer une perturbation dans le temps ?

A mon avis prendre le temps de la reflexion sur le choix du capteur plutôt que de foncer tête baissée avec un piezo n'est pas du temps perdu...