Sujet : detecteur de flamme

bonjour
j'ai assemblé un module "grove" sur un arduino uno et j'ai branché le tout un detecteur de flamme (avec un connecteur GROVE). jusqu'a la tout va lol (meme ma fille saurait le faire).
Le tout pour pouvoir compter le nombre de fois que démarre ma chaudiere chaque jour, sauf que je ne sais pas faire un compteur correcte.

en utilisant un "a=a+1" ou a++ dans une boucle if (ou while) a l'interieur du LOOP, le programme m'incremente a chaque boucle du loop.

je souhaiterai avoir votre aide car étant plus que novice en programmation et meme en cherchant sur me web, je ne m'en sors pas.

un très grand merci d'avance


voici le programme de base :

#define FLAME_SENSOR 5  // port digital 5 du grove
#define LED 13
const int relayPin = 3;     // un relais qui se déclanche a chaque detection d'une flamme
int a=0; // mise a zero du compteur


void setup() {
 
Serial.begin(9600);
pinsInit();
pinMode(relayPin, OUTPUT);
   
}

void loop() {
 

while(isFlameDetected() == true){
      turnOnLED();
  digitalWrite(relayPin, HIGH);
a=a+1; 
Serial.println("nbr d'allumage : ");
Serial.println(a, DEC);

}

turnOffLED();

 
 
digitalWrite(relayPin, LOW);
 

}



/********************************/
void pinsInit()
{
    pinMode(FLAME_SENSOR, INPUT);
    pinMode(LED,OUTPUT);
    digitalWrite(LED,LOW);
}
void turnOnLED()
{
    digitalWrite(LED,HIGH);
}
void turnOffLED()
{
    digitalWrite(LED,LOW);
}
boolean isFlameDetected()
{
    if(digitalRead(FLAME_SENSOR))
        return false;
    else return true;
}

Re : detecteur de flamme

bonjour,

ton code à l'air correct, et répond correctement aux différentes conditions interrogées...
si ta variable n'arrête pas de s'incrémenter, c'est que digitalRead(FLAME_SENSOR) retourne toujours VRAI.

il faudrait que tu regardes de ce coté là en faisant des tests sur ton capteur et voir les valeurs retournées à l'aide d'un multimètre par exemple.

Re : detecteur de flamme

le probleme pour moi est ta boucle "while" ( qui veut dire "pendant que")
"pendant que" la flamme est presente on execute la boucle .... donc si ta flamme dure 10 minutes...ta boucle va s executer pendant 10 minute et a chaque fois quelle s executera elle incrementera...
il te faudrais faire une boucle qui s execute quand ta flamme s allume... puis sauter sur  une autre bloucle qui s execute pendant que ta flamme est allummée et qui ne sorte de cette condition que quand ta flamme s eteint...pour ensuite repartir sur ta premiere boucle smile....
je sais pas si je suis clair smile

Re : detecteur de flamme

c'est très clair. merci a vous deux, je vais étudier ces pistes... je la boucle et je vous tiens au courant smile ... ok je sors ...

Re : detecteur de flamme

big_smile

Re : detecteur de flamme

grrr jsuis toujours dessus, tous mes essais sont des echecs... affaire a suivre...

Re : detecteur de flamme

tu bloques ou?

Re : detecteur de flamme

je n'ai pas le programme avec moi, mais grosso modo, j'ai essayé de faire une boucle qui dit :

lorsque la flamme est allumé, incrémente de 1 dans les 30 premières milli secondes sinon ne compte pas...
sauf que d'une ca ne marche pas, il ne m'incremente jamais et de deux, je ne savais pas qu'on ne pouvait pas faire de remise a zero la fonction millis(); en cours de programme...

Re : detecteur de flamme

c'est dans des cas concret comme ca (et relativement simple) que je manque de cours, en tant qu'autodidacte, je manque de bases en programmation... le web ne fait pas tout ... je l'aurais un jour... je l'aurais...

pour info, il y a un mooc (cours en ligne) sur la fabrication numérique (imprimante 3D, arduino.. etc) qui commence le 27 mars ... voici l'adresse pour s'inscrire pour ceux que ca interresse :

https://www.france-universite-numerique … 2014/about

10

Re : detecteur de flamme

j'ai essayé ca a l'instant, c'est mieux mais c'est pas encore ca... dans le moniteur série, il m'incremente de 1 tous les secondes environs (alors que j'usqu'a présent, les chiffres défilaient a toute allure dans le moniteur dans le meilleur des cas) :

#define FLAME_SENSOR 5
#define LED 13
const int relayPin = 3;
int a = 0;
int b = 0;



//*****************************************************************************
void setup() {
 
Serial.begin(9600);
pinsInit();
pinMode(relayPin, OUTPUT);
   
}

//**************************************************************************


void loop() {

a=a+1; // incremente a chaque boucle du loop

if (isFlameDetected() == true){

turnOnLED();
digitalWrite(relayPin, HIGH); 
     

if (a == 1) {                       // condition increment au premier passage
 
  b=b+1;                           // normalement m'incremente de 1 a l'allumage de la flamme
  Serial.println(b, DEC);
  delay(30);                       // le temps du traitement (est ce bien nécessaire dans mon cas ??)
 
}

  }


else {
  turnOffLED();
digitalWrite(relayPin, LOW);
delay(30); 
}
   




}



/********************************/
void pinsInit()
{
    pinMode(FLAME_SENSOR, INPUT);
    pinMode(LED,OUTPUT);
    digitalWrite(LED,LOW);
}
void turnOnLED()
{
    digitalWrite(LED,HIGH);
}
void turnOffLED()
{
    digitalWrite(LED,LOW);
}
boolean isFlameDetected()
{
    if(digitalRead(FLAME_SENSOR))
        return false;
    else return true;

}

11

Re : detecteur de flamme

autre variante qui reagit a l'identique :

#define FLAME_SENSOR 5
#define LED 13
const int relayPin = 3;
int a;
int b;



//*****************************************************************************
void setup() {
 
Serial.begin(9600);
pinsInit();
pinMode(relayPin, OUTPUT);
a = 0;
b = 0;   
}

//**************************************************************************


void loop() {

a=a+1; // incremente a chaque boucle du loop

if (isFlameDetected() == true){

turnOnLED();
digitalWrite(relayPin, HIGH); 
     

if (a == 1) {
 
  b=b+1;
  Serial.println(b, DEC);

 
}

  }


else {
  turnOffLED();
digitalWrite(relayPin, LOW);
a=0;
 
}
   




}



/********************************/
void pinsInit()
{
    pinMode(FLAME_SENSOR, INPUT);
    pinMode(LED,OUTPUT);
    digitalWrite(LED,LOW);
}
void turnOnLED()
{
    digitalWrite(LED,HIGH);
}
void turnOffLED()
{
    digitalWrite(LED,LOW);
}
boolean isFlameDetected()
{
    if(digitalRead(FLAME_SENSOR))
        return false;
    else return true;

}

12

Re : detecteur de flamme

CA MARCHEEEEEEEE LOL.



//**************************************************************************


void loop() {

a=a+1; // incremente a chaque boucle du loop

if (isFlameDetected() == true){

turnOnLED();
digitalWrite(relayPin, HIGH); 
     

if (a == 1) {
 
  b=b+1;
  Serial.println(b, DEC);

 
}
delay(150);                                  // juste un rajout d'un delay();
  }


else {
  turnOffLED();
digitalWrite(relayPin, LOW);
a=0;
 
}
  }

13

Re : detecteur de flamme

En revanche, si quelqu'un a une explication, je suis preneur !!!!

Re : detecteur de flamme

bonsoir smile
tu voudrais des explications pour?

15

Re : detecteur de flamme

Je souhaiterai savoir principalement, pourquoi juste un delay() a suffit a faire en sorte que mon compteur ne s'emballe plus ??? je ne sais pas si je suis clair...