Mesurer les entrées et sorties d’un magasin avec Arduino avec 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 permis aussi 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 dans sa boutique. Il existe 1001 manières de pouvoir faire remonter cette information, j’ai cependant souhaité la faire remonter de manière simple et à un coût assez faible. La méthode que j’ai choisi est celle qui utilise deux capteurs ultrasons HC-SR04(qui ne coûte 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 du 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 de l’objet connecté et description de ce que doit faire celui-ci
L’objectif est assez simple, l’idée est qu’une personne qui rentre dans un magasin où l’objet se situe à la porte d’entrée de celui-ci va réagir en fonction de deux capteurs : capteur 1 et capteur 2. 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 allant jusqu’à une distance de 4 à 6 mètres. Dans mon tutoriel je vais considérer que les portes font 1 mètre de large, c’est à dire que si les capteurs indiquent tous les 2 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 capteur 1 réagit avant capteur 2 et que les deux sont franchis ALORS il s’agit d’une entrée donc on va faire un +1 sur notre variable visiteurs. Si capteur 2 réagit avant capteur 1 et que les deux sont franchis ALORS il s’agit d’une sortie donc on va faire un -1 sur notre variable visiteurs.
Matériel nécessaire pour calculer les visites en magasin
Pour réaliser ce tutoriel vous allez avoir besoin de :
- carte Arduino (coût à peu près 25 euros)
- breadboard (presque rien)
- cable usb et ordinateur (presque rien)
- 2 capteurs ultrasons : HC-SR04 (2€ pièce)
- une bonne dizaine de cables (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 2ème capteur on branche la borne trigger sur le pin 4 de la carte Arduino #define echoPin2 5 //définition du 2ème 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 quand à 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 paysage. 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 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 défini 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); } A 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 sera 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 ici il faut bien adapter la fréquence de l’envoi de l’information avec la distance des deux capteurs. Mais bon c’est déjà un bon début. Il va falloir maintenant rendre cette information public 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 que integer mais vu que je l’ai retrouvé dans deux tutoriels similaires je la réutilise ici, plus d’explications sur cette variable : https://www.arduino.cc/en/Reference/Long