capteur infrarouge lm393 pour un anémomètre

Besoin d aide pour comprendre

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour à tous ,

Comme beaucoup je découvre arduino et ces capteurs, et je bute obstinément sur le fonctionnement du lm393 compteur infrarouge.

http://thumbs2.picclick.com/d/w1600/pict/191890742181_/LM393-Capteur-de-Vitesse-Infrarouge-Photo%C3%A9lectrique-Comptage-Module.jpg

Le but est simple pourtant j'ai fait un disque avec une fente j'aimerai compter le nombre de fois où le signal arrive à passer pour en déduire le nombre de tours et donc la vitesse du vent.

Problème j'ai pris mon capteur, lu les tutoriel qui se rapproché le plus de mon projet et aussi ceux d eskimon ( d'ailleurs merci et chapeau) mais souci.

J'ai donc branche mon capteur tel quel:

Le + au 5v arduino le - au Gnd et le out a l entre Analogique.

Résultat bien quand je lis mon entrer il se passe rien il ne change pas d état

Édité par 64fauchenicolas

+0 -0
Auteur du sujet

Bonjour,

Mon code à d'autre souci que je n'est pas eu le temps de solutionner, notament sur les compteurs qui ne fonctionne pas correctement mais je ne pense pas que cela soit lier; le voici :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
const int ENTREANEMO =A0;
int etatAnemo;// 
int etatPrecAnemo = 0;// etat precedent
int compteurAnemo;
unsigned long departComptage;
unsigned long finComptage;

void setup(){
  pinMode(ENTREANEMO,INPUT);
  Serial.begin(9600);
  Serial.println("comunication etablie");
}

void loop (){
  compteurAnemo=0;
  etatAnemo=0;

   {
    long tempsAnalyse = chrono(); 
      Serial.print("analyse vent pendant 15s : ");
      Serial.print(tempsAnalyse);
      etatAnemo= digitalRead(ENTREANEMO);

         if(etatAnemo!= etatPrecAnemo){
            Serial.println("detection...");
            departComptage=millis();
            finComptage=departComptage; 
            compteurAnemo++;
            delay(1);
            ;
        }while(departComptage-finComptage>=15000);
    }
    Serial.print("resultat de la mesure : " );
    Serial.print(compteurAnemo);//valeur a etait remplacer par ENTREANEMO mais je n'observe pas de changement d'etat.
    Serial.println(" tours");

}
long chrono(){
  unsigned long depart = millis();
  unsigned long fin;
  fin=depart;
  long tempsEcoule = depart - fin;
  tempsEcoule = tempsEcoule /1000;
  return tempsEcoule;
}

Qu'entendez vous par prendre la tension dans le "datasheed" du capteur ? ( comme je le disais il ne faut surtout pas hesité à usé de mots simple ;) )

Merci

+0 -0
Staff

La datasheet, c'est la documentation technique qui est (toujours) fournie avec un composant. On y trouve plein d'explications (comment brancher le composant, sous quelle tension l'alimenter, etc.)

AmarOk te proposait de vérifier si tu as alimenté ton capteur infrafouge sous la tension préconisée par le fabriquant.

Llama ◦ FAQ PHPTuto WAMP

+2 -0

Avant de te lancer dans une realisation complete / compelxe, as tu essayé de voir si ton capteur marchait bien dans ton montage ?

Par exemple fais un code simple qui se contente de lire l'entrée analogique et de renvoyer la valeur sur une voie série, puis fais tourner ton disque. Si les données changent correctement alors passe à la suite, sinon ca ne sert à rien d'aller plus loin.

ZdS, le best du Zeste ! Tuto Arduino, blog, etc

+1 -0
Auteur du sujet

La datasheet, c'est la documentation technique qui est (toujours) fournie avec un composant. On y trouve plein d'explications (comment brancher le composant, sous quelle tension l'alimenter, etc.)

AmarOk te proposait de vérifier si tu as alimenté ton capteur infrafouge sous la tension préconisée par le fabriquant.

elyppire

Je suis chat noir ! je ne l'avais pas . je vais regarder si je peu la telecharge autre par et je vais refaire un code simple ( je l'avais deja fait mais ma variable ne recuperer pas de nouvelle valeur ) Je vous tiens au courant

+0 -0
Auteur du sujet

Bonjour ( plutôt bonsoir )

J'ai solutioné mon problème en lisant depuis trois jours tout ce qui touché de prés ou de loin à la notice de mon capteur et effectivement vous aviez raison il me la fallait.

merci à vous trois!

Docn pour ce fichu capteur de vitesse lm393 j'ai pris la plus grosse résistance que j'avais (1Mohm) que j'ai mis sur la fiche de sortie .

Taper ce code pour testé:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const int ENTREANEMO = A0;
int anemoEtat;
int ledPin = 13; 
int etatPrec=0;

void setup (){
  Serial.begin (9600);
  pinMode(13,OUTPUT);
  pinMode(ENTREANEMO,INPUT);
  Serial.println("depart");

}


void loop (){
  anemoEtat=digitalRead(ENTREANEMO);
    if ( anemoEtat!= etatPrec ){
      digitalWrite ( ledPin , HIGH);
      Serial.print("fonctionne : "); 
      Serial.println(anemoEtat); 
    }
    else{
      digitalWrite(ledPin, LOW);
      Serial.print("ne fonctione pas : ");
      Serial.println(anemoEtat);
    }

 }

Et Alléluia ( j'etait comme un gosse a qui on avais enlever les petites roues )

Des 0 et des 1 tout ce qu'il em fallait ( enfin presque ).

Parce que j'aimerais utilisé une FIFO plutôt que ma boucle while pour calculer tout ça sur 15s et ne pas utilisé trop de mémoire, mais faut que je rebuche les tableaux avant d'aprendre à en ecrire une.

Si vous connaisser de bonne adresse pour aprendre à érire une fifo sur arduino je suis preneur!!!

Mais je savoure ma (petite) victoire Merci encore

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte