Mesurer les entrées et sorties d’un magasin avec Arduino et des capteurs ultrasons
Ce tutoriel est le résultat de plusieurs conférences auxquelles j’ai assisté et de plusieurs recherches de tutoriels sur internet. Un grand merci à l’entreprise Affluences, qui a été le point de départ de ma réflexion, et à XLII Factory, qui m’a également permis de m’orienter dans la réalisation de ce prototype. Concrètement, mon objectif est de vous montrer qu’il est simple de faire un compteur d’entrées et de sorties afin qu’un commerçant puisse indiquer le nombre de personnes présentes dans sa boutique. Il existe 1001 manières de faire remonter cette information ; j’ai cependant souhaité le faire de manière simple et à un coût assez faible. La méthode que j’ai choisie utilise deux capteurs ultrasons HC-SR04 (qui ne coûtent presque rien, à peu près 2 euros). Vous trouverez l’un des tutoriels qui m’a le plus inspiré à l’adresse suivante : https://sunphinx.wordpress.com/2013/03/12/arduino-final-project/.
UPDATE : ATTENTION, SI QUELQU’UN RESTE DEVANT L’UN DES CAPTEURS ET QU’IL EST SUFFISAMMENT FIN, LE COMPTEUR CONTINUERA DE TOURNER.
Exemple en images :
Un seul chat
13 visites en magasin
Pour être franc, j’ai dû intervenir, car le compteur annonçait plus de 60 visites quand j’ai décidé de le descendre de la table.
Objectif du calcul du nombre de visites dans un magasin avec un objet connecté
L’objectif est assez simple : l’idée est qu’une personne qui entre dans un magasin, où l’objet se situe à la porte d’entrée, va faire réagir deux capteurs, le capteur 1 et le capteur 2. Les capteurs 1 et 2 sont des capteurs ultrasons HC-SR04 ; ils permettent de mesurer la distance qui les sépare d’un obstacle, et ce jusqu’à une distance de 4 à 6 mètres. Dans ce tutoriel, je vais considérer que les portes font 1 mètre de large, c’est-à-dire que si les capteurs indiquent tous les deux une distance inférieure ou égale à 1 mètre, alors une entrée ou une sortie doit être comptabilisée. La variable visiteurs démarre à 0. Si le capteur 1 réagit avant le capteur 2 et que les deux sont franchis, ALORS il s’agit d’une entrée : on ajoute donc +1 à notre variable visiteurs. Si le capteur 2 réagit avant le capteur 1 et que les deux sont franchis, ALORS il s’agit d’une sortie : on retire donc 1 à notre variable visiteurs.
Matériel nécessaire pour calculer les visites en magasin
Pour réaliser ce tutoriel, vous allez avoir besoin de :
- une carte Arduino (coût : à peu près 25 euros)
- une breadboard (presque rien)
- un câble USB et un ordinateur (presque rien)
- 2 capteurs ultrasons HC-SR04 (2 € pièce)
- une bonne dizaine de câbles (presque rien)
Au niveau du code
Nous allons commencer par définir la présence de nos 2 capteurs ultrasons HC-SR04 :
#define trigPin1 2 //définition du 1er capteur : on branche la borne trigger sur le pin 2 de la carte Arduino #define echoPin1 3 //définition du 1er capteur : on branche la borne echo sur le pin 3 de la carte Arduino #define trigPin2 4 //définition du 2e capteur : on branche la borne trigger sur le pin 4 de la carte Arduino #define echoPin2 5 //définition du 2e capteur : on branche la borne echo sur le pin 5 de la carte Arduino
De ce que j’ai compris, la borne Trigger sert à envoyer le signal qui va permettre de mesurer la distance entre le capteur et l’obstacle rencontré. Echo, quant à lui, permet de renvoyer la valeur contenant la distance entre le capteur et l’obstacle rencontré. Bon, à ce niveau, ce qu’il faut comprendre, c’est que vous avez besoin des deux. Comme vous pouvez le constater, le capteur HC-SR04 possède 4 broches, ce qui est tout à fait normal puisque les deux autres concernent les pôles + et – de votre composant, afin que votre capteur soit alimenté en électricité :
Crédit photo : http://www.chris15.com/pages/arduino_radar.php
Passons à la suite, le setup :
void setup() { Serial.begin (9600); // on va utiliser notre ordinateur afin de lire ce que dit la carte Arduino pinMode(trigPin1, OUTPUT); // on active la borne trigger du capteur 1 pinMode(echoPin1, INPUT); // on active la borne echo du capteur 1 pinMode(trigPin2, OUTPUT); // on active la borne trigger du capteur 2 pinMode(echoPin2, INPUT); // on active la borne echo du capteur 2 Serial.print(« Demarrage du programme »); // cette ligne est inutile, c’est juste pour faire beau } En gros, on vient simplement de mettre en place le décor. Passons à la boucle loop (la plus compliquée). Avant de l’attaquer, nous allons définir une variable qui calculera le nombre de visiteurs, soit : int visitor = 0; // de base, il n’y a personne dans notre magasin void loop() { // tout le bloc qui va suivre sert a definir le capteur 1 long duration, distance; digitalWrite(trigPin1, HIGH); delayMicroseconds(2); digitalWrite(trigPin1, HIGH); delayMicroseconds(10); digitalWrite(trigPin1, LOW); delayMicroseconds(10); digitalWrite(trigPin1, LOW); duration = pulseIn(echoPin1, HIGH); distance = duration / 58; // ici exprimee en cm cf : http://www.micropik.com/PDF/HCSR04.pdf Serial.print(« Capteur 1: « ); Serial.println(distance); // si besoin pour deboguer delay(1000); // tout le bloc qui va suivre sert a definir le capteur 2 long duration2, distance2; // ici on definit deux variables qui correspondent a la distance de l’obstacle digitalWrite(trigPin2, HIGH); delayMicroseconds(2); digitalWrite(trigPin2, HIGH); delayMicroseconds(10); digitalWrite(trigPin2, LOW); delayMicroseconds(10); digitalWrite(trigPin2, LOW); duration2 = pulseIn(echoPin2, HIGH); distance2 = duration2 / 58; // ici exprimee en cm cf : http://www.micropik.com/PDF/HCSR04.pdf Serial.print(« Capteur 2: « ); Serial.println(distance2); // si besoin pour deboguer delay(1000); } À ce stade, vous devriez avoir deux capteurs de distance qui vous permettent de remonter les distances qui les séparent des obstacles rencontrés :
Maintenant que l’on sait que notre code est fonctionnel et que nos capteurs fonctionnent correctement, nous allons pouvoir avancer dans la réalisation de notre programme.
if(distance1 < 100 && distance2 > 100) { // si le capteur 1 réagit en premier
visitor = visitor + 1; // ALORS on ajoute +1 a la variable visitor
}
if(distance1 > 100 && distance2 < 100) { // si le capteur 2 réagit en premier
visitor = visitor – 1; // ALORS on enleve 1 a la variable visitor
}
Serial.print(« Nombre de personnes en magasin : « ); // on s’en sert pour deboguer
Serial.println(visitor); // on s’en sert pour deboguer
Si on enlève les lignes d’affichage qui ne servent à rien, on obtiendra au final :

Télécharger le code pour tracker les entrées et sorties en magasin
Vous trouverez ci-dessous le fichier .txt du code, si vous voulez directement le mettre en place : mesurer-trafic-magasin-arduino.
La description du montage est la suivante ; j’ai essayé de la réaliser sur Fritzing, mais quand j’ai vu qu’il n’y avait pas le HC-SR04, je me suis dit que ce serait pour un autre jour :
Conclusion
Comme vous pouvez le constater, nous avons désormais un compteur d’entrées et de sorties de magasin. Bon, il est loin d’être parfait car, vous l’imaginez bien, des réglages sont à effectuer de votre côté. En effet, il faut ici bien adapter la fréquence d’envoi de l’information à la distance entre les deux capteurs. Mais bon, c’est déjà un bon début. Il va falloir maintenant rendre cette information publique afin de la rendre utile aux consommateurs. Si j’ai suffisamment de temps devant moi, j’aimerais vous faire un tutoriel sur ce sujet.
* long signifie que la valeur de notre variable est comprise entre -2 147 483 648 et 2 147 483 647. Je ne vois pas trop l’intérêt d’utiliser ce type de variable plutôt qu’un integer, mais vu que je l’ai retrouvé dans deux tutoriels similaires, je le réutilise ici. Plus d’explications sur cette variable : https://www.arduino.cc/en/Reference/Long







