Compteur de passages KY-008 et KY-018

Bonjour, je débute sur arduino et j'aimerais réaliser un compteur de passage avec les modules KY-008 et KY-018, mais je n'est pas du comprendre le fonctionnement des boucles .Voici mon montage

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C LCD(0x27, 20, 2);
int compteur = 0; // Nombre de personnes actuellement dans la pièce

void setup() {
  LCD.init();
  LCD.backlight();
  Serial.begin(9600);
  pinMode(A1, INPUT);
  pinMode(10, OUTPUT);
  pinMode(7, OUTPUT);
  digitalWrite(7, HIGH);
  digitalWrite(10, HIGH);
}

void loop() {
  LCD.setCursor(0, 0);
  LCD.print("Nb Personnes = ");
  LCD.setCursor(0, 1);
  LCD.print(compteur);
  

  Serial.print("Nb Personnes ");
  Serial.println(compteur);
  

  delay(100);

  if (compteur >= 1) {
    digitalWrite(10, HIGH);
  } else {
    digitalWrite(10, LOW);
  }

  int lecteur = analogRead(A1);
  
  if (lecteur < 100) {
    compteur = compteur ++ ;
    delay(2000);
  }

}


Merci d'avance

Tu n'a pas de boucle dans ton code, mis à part la fonction loop, qui elle est appelé automatiquement en boucle.
Donc difficile à dire si tu as compris ou pas les boucles.

Pouruqoi lorsque tu detecte un passage, tu arrete ta fonction pendant 2s?
Tu es sûre que rien ne passera pendant ces 2s ?

Ton probléme n'est pas clairement exposé, quel problème rencontres tu ?

Bonjour et merci pour ta réponse,
je voudrais qu' à chaque passage le compteur incréments de 1 ainsi de suite mais je n'ai pas assez de connaissances pour faire fonctionner ce compteur.
Que faire ?

Lorsque je coupe le faisceau laser rien ne se passe ? le compteur reste à 0 ?

Bonjour pepere,

Je suppose que tu a repris les infos sur le net, le KY-008, tu l'a bien alimenté en 5v, tu as bien trois fils de branché dessus ?

Pour commencer, tu pourrais faire afficher dans le moniteur série la valeur de la variable lecteur pour voir si le seuil de détection que tu as mis dans ton programme est bien adapté.

En masquant et en démasquant la photorésistance tu connaîtras les valeurs retournés lorsqu'elle est illuminée et lorsqu'elle ne l'est pas et tu pourras placer ton seuil entre les deux.

A noter quand même qu'une photorésistance n'est pas très bien adapté pour ce genre de réalisation sur le long terme. Pour faire des petites expériences c'est OK mais pour faire une vrai barrière optique il va y avoir des problèmes liées au fait que la photorésistance est sensible à la lumière ambiante et donc le système sera perturbé par les conditions d'éclairage. Une façon de limiter ce problème c'est éventuellement de placer la photorésistance dans un petit tube en carton de 3 à 5 cm de long pour réduire le champ de vue du capteur et ainsi réduire sa sensibilité à la lumière qui arrive par les cotés en revanche cela implique un bon alignement entre le capteur et la source d’éclairage de la barrière.

J'ai fait la manipe j'ai 600 lorsque le laser est coupé et 30 si il est allumé

Bonjour Treza88
je suis bien en 5 v, mais le 5 v sur la borne S et le gnd sur la borne - la borne S est sur la Pin 7 et digitalWrite(7, HIGH); donc le laser s'allume

Pour moi cette condition n'a pas de sens

Bonjour, je débute et parfois c'est compliqué
Que ferais tu ?
Merci

Ton KY-008 est bien branché comme dans le schéma ci-dessous :

laser-ldr

Sauf que toi au lieu du pin2 tu es sur pin7

Non le KY-008 est branché comme se


schéma le 5 v sur la borne S et le gnd sur la borne - la borne S est sur la Pin 7 et digitalWrite(7, HIGH); donc le laser s'allume

La broche du milieu du KY-008 doit être branché sur le 5v.

Sinon c'est bien ça que je voudrais réaliser mais à la place du buzzer mettre un LCD-I2C pour afficher le nombre de passages

C'est fait, ça ne change rien mon laser est toujours bien allumé

la variable int lecteur lit la Pin A1 sur laquelle est connecté le capteur KY-018
si la variable lecteur est< à 100 alors la variable compteur est égale à 1 ?

Remplace :

if (lecteur < 100) {
    compteur = compteur ++ ;
    delay(2000);
  }

par

if (lecteur > 100) {
    compteur = compteur + 1 ;
    delay(2000);
  }

Je viens de le tester avec ton programme sans afficheur et un Arduino UNO.

Si tu veux vraiment avancé, fait ce que t'indique @fdufnews
Ajoute par exemple le code suiavant:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C LCD(0x27, 20, 2);
int compteur = 0; // Nombre de personnes actuellement dans la pièce

void setup() {
  LCD.init();
  LCD.backlight();
  Serial.begin(9600);
  pinMode(A1, INPUT);
  pinMode(10, OUTPUT);
  pinMode(7, OUTPUT);
  digitalWrite(7, HIGH);
  digitalWrite(10, HIGH);
}

void loop() {
  LCD.setCursor(0, 0);
  LCD.print("Nb Personnes = ");
  LCD.setCursor(0, 1);
  LCD.print(compteur);
  

  Serial.print("Nb Personnes ");
  Serial.println(compteur);
  

  delay(100);

  if (compteur >= 1) {
    digitalWrite(10, HIGH);
  } else {
    digitalWrite(10, LOW);
  }

  int lecteur = analogRead(A1);
  
  Serial.print("lecteur: ");Serial.println(lecteur);
  delay(2000);
  /*if (lecteur < 100) {
    compteur = compteur ++ ;
    delay(2000);
  }*/

}

il faudrait définir ce qu'est un passage

➜ si c'est quelqu'un qui coupe le laser vous devez détecter l'interruption du faisceau puis le rétablissement du faisceau. Ce n'est que ce moment là que vous pouvez comptabiliser le +1 (en supposant qu'une seule personne soit passée et pas deux personnes si proches que le faisceau n'a pas été rétabli)

c'est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)

il faudra voir aussi si votre capteur a des rebonds ou si l'arrivée et le départ d'une personne crée une interruption franche du signal

Absolument! Ce composant n'est pas adapté pour faire une "barrière" compteur de passage de personnes, d'une façon pérenne dans le temps. Hormis le fait qu'une LDR peut-être logée au fond d'un tube pour échapper à l'influence de la lumière ambiante parasite il existe un autre souci. si utilisation h24, le composant va se dégrader : le temps de réponse va augmenter dans le temps. Déjà qu'il n'est pas extraordinaire!
Oui pour une utilisation de type détection déclin du jour puis détection début du jour. Là on n'est pas pressé pour détecter phase diurne et phase nocturne.
J'avais dans le passé réalisé un système de comptage de personnes (pas avec le concept Arduino il n'existait pas encore), mais en assembleur RISC. J'ai laisser tomber les LDR rapidement pour la vraie solution pérenne : Infra rouge. Led IR et photo transistor IR. Pour la petite histoire, j'avais en fait deux barrières IR. Comptage personne entrante, à partir de une , la lumière de la pièce de jeu de mes enfants s'allumait. Décomptage des personnes sortantes, si plus personne l'éclairage ce coupait.
Cdlt.
Philippe.