Pluviomètre arduino

Bonjour à tous,

Je suis dans un projet de Sciences de l’ingénieur en terminale, où je m’occupe notamment d’un pluviomètre . Je suis grand débutant, et n’ai que quelques bases en programmation. Avec la fermeture des lycées, je n’ai de plus aucune aide extérieure… Bref, j’ai trouvé ce programme sur un blog et lui ai fait subir de très légères modifications :

volatile int Impulsion=0;
float Precipitation=0;
int interval = 1000;      //temps (1000 ms pour 1 sec)
unsigned long previousMillis = 0;
unsigned long currentMillis = 0;

void setup()   
{
Serial.begin(19200);
attachInterrupt(0, gestionINT0, RISING);
previousMillis = millis();
}

void loop()
{
currentMillis = millis();

if(previousMillis + interval < currentMillis )
{
 previousMillis = currentMillis;        //va déduire le temps écoulé au temps défini (24h) si inférieur à 86400000 ça attend avant envoie, si supérieur à 86400000 il envoie)
 Precipitation=0,2794*Impulsion; 
 Serial.print("Precipitation (mm)= ");
 Serial.println(Precipitation);           
}
}

void gestionINT0()
{
++Impulsion;  //on incrémente de 1


}

Néanmoins, lorsque je lance le programme, la seule valeure affichée toutes les secondes est 0mm (même lorsque je fais basculer le godet de mon pluviomètre). Le programme ne semble pas reconnaitre l’existence du capteur, que j’ai pourtant relié au gnd, au 5 V et au pin 3.

Je suis désespéré, toute aide me serait utile !

Merci beaucoup,

Rohan02
[code][code][/code][/code]

  attachInterrupt(0, gestionINT0, RISING);
  // Pin 3 : interrupt 1, pas 0
  // utilise digitalPinToInterrupt()
  attachInterrupt(digitalPinToInterrupt(3), gestionINT0, RISING);

J'ai réessayé en mettant attachInterrupt(digitalPinToInterrupt(3), gestionINT0, RISING); du coup, mais pas de changement, la valeur reste bloquée à 0mm. D'ailleurs, je n'ai pas bien compris, le numéro du pin ça change quoi au niveau du attachInterrupt ? Merci de ta réponse !

Pin 2 : interrupt 0
Pin 3 : interrupt 1

En fait il y a plusieurs problèmes :

  // à ajouter dans setup()
  pinMode(3, INPUT_PULLUP);
  // à corriger : la virgule dans un nombre flottant
    Precipitation = 0.2794 * Impulsion;

Ensuite il faudra voir si le godet produit des rebonds.

Il serait bien d'avoir une idée du câblage.

Ca marche ! Merci beaucoup. Pas de rebonds du côté du godet. Seul bémol : la première valeur affichée n'est plus 0, mais 0,28. Comment est-ce que je pourrais changer ça ? De plus, la valeur devrait augmenter de 0,28mm à chaque balancement, ce qui n'est pas le cas. Je ne comprends pas...

Il y a une interruption au démarrage. Ceci devrait résoudre :

  attachInterrupt(digitalPinToInterrupt(3), gestionINT0, FALLING);

J'aimerais savoir comment c'est câblé. S'il y a une résistance de pull-up ou pull-down.

Je ne sais pas s'il s'agit du même capteur : https://www.lextronic.fr/capteur-pluviometre-27641.html

Leur schéma comporte des résistances de pull-up.

Soit tu gardes cette résistance soit tu la supprimes.

pinMode(3, INPUT_PULLUP); // avec résistance pull-up interne au processeur
pinMode(3, INPUT); // avec résistance pull-up ou pull-down externe

Soit l'un soit l'autre.

Ca commence bien à 0mm, merci. Niveau câblage, je vous envoie une photo ( la résistance vaut 10000 Ohm ).

Dans ce cas, comme la résistance est soudée on peut se permettre pinMode(3, INPUT);
Pas la peine de faire deux fois la même chose.

Et oui, il s'agit bel et bien de ce capteur. Du coup, j'ai essayé avec juste pinMode(3, INPUT) et les valeurs affichées augmentent sans que je ne touche au capteur, sans aucune rationnalité. De plus, la première valeur n'est plus 0

Étonnant c'est bien ce qui est fait ici : Platine pour capteur météo et système Grove

Tant pis laisse INPUT_PULLUP.

Quand j’utilise pinMode(INPUT_PULLUP), on n’augmente pas de 0.28mm par balancement comme cela devrait se faire.

Quand j’utilise pinMODE(INPUT), les valeurs augmentent sans toucher le capteur.

Quand j'utilise pinMode(INPUT_PULLUP), on n'augmente pas de 0.28mm par balancement comme cela devrait se faire.

Il y a donc des rebonds ? Les valeurs augmentent de combien ?

Non non pas de rebonds pourtant. Elles augmentent de 0.84 presque à chaque fois, un peu moins quelques fois (c'est pas hyper précis).

0.84 cela fait trois fois 0.2794

Donc il y a des rebonds.

Un rebond, c'est quand le godet rebondit un peu quand il retombe c'est ça ?

Maintenant, il a décidé d'augmenter de 0.56 par balancement... Peut-etre qu'il ne fonctionne juste pas, non ?

Un rebond arrive sur n'importe quel contact, un bouton, un relais, etc.
0.56 = 2 * 0.2794