Pluviomètre récalcitrant ?

Bonjour à tous !

Je cherche à faire communiquer un pluviomètre avec notre plateforme adorée pour faire un data-logger maison. Ça a pas l'air bien compliqué, j'ai deux câbles : l'un à mettre sur une tension (je l'ai mis sur la borne 5V), l'autre sur une entrée digitale (je l'ai mis sur l'entrée digitale D2).

J'écris un bout de code pour tester que je reçois bien l'info :

volatile int compteur = 0;

void setup()
{
  Serial.begin(9600);
  attachInterrupt(0, compter, CHANGE); // J'ai essayé également avec FALLING, RISING, LOW, HIGH..
}

void loop()
{
    Serial.println(compteur);
    delay(2000);
}
  
void compter()
{
  compteur = compteur+1;
}

On télé-verse, ça se passe bien, on lance le moniteur, on fait bouger l'auget et là, c'est le drame : 0, 0, 0, 0, 0 ... :'( Il ne semble pas détecter le basculement d'auget. Et je ne comprends pas d'où cela peut-il venir ?! Pour info, il s'agit d'un pluviomètre à sortie contact ILS (un relais simple) et il me semblait pertinent d'utiliser l'ISR (http://arduino.cc/en/Reference/attachInterrupt) mais est-ce qu'il s'agit bien de la bonne façon de faire ?

En espérant que vous pourrez m'aider à y voir plus clair parce que sinon, je risque de bientôt plus avoir de cheveux :confused: Un big merci d'avance ! Lib'

Je pense que c'est pas branché sur la bonne broche. A voir selon ton modèle d'arduino.

http://arduino.cc/en/Reference/attachInterrupt

Bonjour,

C'est ce que je pensais mais sur l'arduino Uno, int.0 correspond bien à l'entrée digitale 2 (sauf erreur de ma part ?!). En tout cas, j'avais oublié de préciser la référence de ma carte, il s'agit d'une Arduino Uno Rev 3 !

bonjour, le mieux est quand même de mettre une pin normale

int pluvio = 3; // par exemple pour la pin 3

  Serial.begin(9600);
  attachInterrupt(pluvio, compter, CHANGE); // J'ai essayé également avec FALLING, RISING, LOW, HIGH..
}

Bonjour,

J'ai essayé avec la pin 3 ou pin 4 et cela me donne toujours le même résultat ... 0, 0, 0, 0, 0 ... il semble pas que le déclenchement de l'auget soit pris en compte :(

Le code mis à jour, ça donne ça :

int pluvio = 4; // par exemple pour la pin 4
volatile int compteur = 0;

void setup()
{
  Serial.begin(9600);
  attachInterrupt(pluvio, compter, CHANGE);
}

void loop()
{
    Serial.println(compteur);
    delay(2000);
}
  
void compter()
{
  compteur = compteur+1;
}

Le pluvio a été testé et il fonctionne correctement sur des centrales d'acquisition type Campbell ou autre donc cela ne devrait pas provenir du matériel .. D'autres pistes que je pourrais explorer ? :confused:

euh... si je ne dis pas de bétise, sur l'arduino Uno, il n'y a que 2 pins fonctionnant avec les interruptions. INT0 = pin 2 INT1 = pin 3

Donc seulement 2 attachInterrupt possibles : - attachInterrupt(0, compter, CHANGE); // branchement du déclancheur de l'interruption sur le pin 2 ou - attachInterrupt(1, compter, CHANGE); // branchement du déclancheur de l'interruption sur le pin 3

 Ça a pas l'air bien compliqué, j'ai deux câbles : l'un à mettre sur une tension (je l'ai mis sur la borne 5V), l'autre sur une entrée digitale (je l'ai mis sur l'entrée digitale D2)

Ok, c'est possible mais il ne faut pas oublier de mettre une résistance de tirage à la masse sinon tu ne verras pas de transition.

De manière générale, il serait préférable de connecter l'ILS entre la masse et une entrée de l'arduino. A ça 2 raisons: 1) il n'est jamais très bon de balader les alimentations car on peut facilement les polluer et/ou les court-circuiter. 2) en mettant le contact à la masse on peut utiliser le tirage interne (pullup) de l'arduino et se dispenser d'une résistance externe.

Autrement, je plussois aux propos de bigben99, le numéro de l'IT n'est pas le numéro de la broche. Voir la doc d'attachInterrupt() ici

+1

Si tu l'as branché exactement comme tu le décris pas étonnant que ça marche pas.

S'il n'y a pas de résistance de tirage, il faut peut-être ajouter dans le setup :

pinMode(pin_en_question, INPUT_PULLUP);

C'est comme ça que j'avais résolu un pb similaire...

Bonjour,

J’ai été un peu confus avec l’histoire de “pin normale”. Si j’utilise l’ISR, c’est donc bien sur les pins D2 et D3.
Un grand merci à bigben99 pour cette confirmation.

Concernant la résistance de tirage à la masse, je suis un peu perdu …
Mon montage correspond aujourd’hui à l’image en pièce-jointe.Si j’ai bien compris, il faudrait que j’incorpore une résistance de 10kOhms entre le pluvio et l’alimentation comme précisé sur le schéma avec la résistance ?

Merci pour toutes vos réponses, j’espère que ce second montage correspond à ce que vous essayez de m’expliquer ?
Lib’

PS : Concernant le pinMode(pin_en_question, INPUT_PULLUP); je vais tester ça de suite ! :slight_smile:

Le bon montage serait les sorties du pluviomètre sur GND et D2 et l'activation du pullup interne. ATTENTION, ce montage inverse le sens du signal par rapport à ton montage précédent. Lorsque l'ILS sera fermé tu verras un 0 alors qu'avec ton précédent montage tu voyais un 1. Le sens de l'interruption est aussi inversé. La fermeture de l'ILS est détecté par FALLING.

Bonjour,

J'ai relié le pluviomètre aux bornes GND et D2 en précisant l'activation du pullup interne. Ca fonctionne ! *danse de la joie * :grin:

Il me compte 2 impulsions par basculement de pluvio mais ça je dois pouvoir gérer ! Par contre, si jamais je ne souhaitais pas activer le pullup interne, si j'ai bien compris j'aurais du mettre une résistance de 10k Ohms entre le pluvio et la D2 ?

(J'essaye d'aller jusqu'au bout pour bien comprendre même si la solution proposée par Poogazhi et revalidé par fsufnews fonctionne parfaitement).

Un grand merci à vous en tout cas, je vais pouvoir passer à mon prochain défi : le dimensionnement de la batterie .. ^^'

Lib'

Librius:
Il me compte 2 impulsions par basculement de pluvio mais ça je dois pouvoir gérer !

Normal si tu as mis ton interruption sur CHANGE, il te détecte le passage de haut à bas et de bas à haut. Utilise FALLING.

Librius:
Par contre, si jamais je ne souhaitais pas activer le pullup interne, si j’ai bien compris j’aurais du mettre une résistance de 10k Ohms entre le pluvio et la D2 ?

Toujours pas …

Ton pluvio n’est rien de plus qu’un bouton, c’est exactement la même chose :

Librius:
Par contre, si jamais je ne souhaitais pas activer le pullup interne, si j’ai bien compris j’aurais du mettre une résistance de 10k Ohms entre le pluvio et la D2 ?

non non…

Une borne qui n’est reliée à rien n’est pas dans un état “formel”. Soit à la masse, soit à +quelque-chose, mais pas en circuit ouvert. La résistance ferme le circuit quoi qu’il en soit.

Le mieux est de se fader ceci une bonne fois pour toute… http://fr.wikipedia.org/wiki/Résistance_de_rappel

C’est bien de comprendre, mais pas de culpabilité à se reposer sur le dispositif interne, puisqu’il implémente la même chose (peut-être que des spécialistes en élec pourraient nuancer mais je crois pas qu’il y ait d’inconvénient).

Avec beaucoup de retard, un grand merci pour vos explications ! Avec un peu de recul (et la lecture wikipedia et autres ouvrages), je les comprends beaucoup mieux aujourd'hui, notamment le schéma de B@tto qui parle bien !

Au final, pour le projet, j'utilise le dispositif interne qui est plus simple à mettre en oeuvre que de sortir la breadbord pour mettre la résistance et relier le pluviomètre aux bornes + et - ainsi que de relier un cable entre la résistance et l'arduino pour lire la valeur de la résistance (haut/bas).

Bien cordialement, Lib'