Bonjour, dans le cadre d'un projet en terminale SSI, mon groupe et moi réalisons un système permettant de compter le nombre de litres qui passent dans un débit-mètre, pour bloquer la circulation d'eau avec une électrovanne une fois 80L passés.
Nous avons acheté le débitmètre suivant : https://www.amazon.fr/dp/B00K67YL98/ref=sxbs_sxwds-stvp_2?pf_rd_m=A1X6FK5RDHNB96&pf_rd_p=1566153327&pd_rd_wg=Buuu4&pf_rd_r=NP2K410SXDGN2XSGVAQ2&pf_rd_s=desktop-sx-bottom-slot&pf_rd_t=301&pd_rd_i=B00K67YL98&pd_rd_w=bj2hu&pf_rd_i=débit+metre+eau&pd_rd_r=bdfb1d18-15da-4257-9f36-9362a5a87ed4&ie=UTF8&qid=1518683356&sr=2
Il envoie 450 impulsions par litre qui passe dans le débitmètre. Notre professeur nous a indiqué qu'il fallait utiliser une horloge RTC couplée a un IRQ afin de compter les impulsions envoyée par le capteur pendant un temps donné, l'IRQ permettant que le comptage ne s'arrête jamais.
Nous avons le code suivant :
int impulsion;
int pinDebitMetre;
int etatPin; //etatPin sera la variable qui contiendra l'état du bouton
void setup() {
impulsion = 0;
etatPin = LOW;
pinDebitMetre = 6; // pin sur lequel est branché la sortie du débitmètre
pinMode(pinDebitMetre, INPUT); //on le définit en tant qu'entrée
digitalWrite(pinDebitMetre, LOW); // on initialise au niveau BAS
}
void loop() {
etatPin = digitalRead(pinDebitMetre); // on associe l'état du pin a une variable
if (etatPin == HIGH){
impulsion++ ;
}
L'un des problèmes est que le comptage des impulsion se fait directement après le lancement de l'Arduino, même si le débitmètre n'a pas tourné, et ne s'arrête plus.
Aussi, on a mit en place l'horloge RTC et on a réussi a afficher l'heure en temps réel sur un écran, mais on ne sait pas s'en servir pour effectuer un comptage des impulsions pendant un certain temps.
Nous avons le code suivant pour les interruptions
#include <LiquidCrystal.h> // on importe la bibliothèque
LiquidCrystal monEcran(12,11,5,4,3,6); // on crée l'objet écran
int impulsion;
int pinDebitMetre = 2;
const inter = 2;
int etatPin; //etatPin sera la variable qui contiendra l'état du bouton
void setup() {
Serial.begin(9600);
impulsion == 0;
etatPin == LOW;
pinMode(pinDebitMetre, INPUT);
initialisation_inter();
}
void loop() {
delay(1000);
void initialisation_inter()
{
attachInterrupt(digitalPinToInterrupt(pinDebitMetre), etatPin, RISING);
}
void etatPin()
{
etatPin = digitalRead(pinDebitMetre);
if (etatPin == HIGH)
{
impulsion++ ;
}
}
monEcran.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes
monEcran.clear(); // on efface l'écran
monEcran.print(impulsion);
monEcran.setCursor(0,1); //on passe à la ligne suivante
monEcran.print("Impulsions");
}
Merci de votre aide